DE69837791T2 - VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN - Google Patents

VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN Download PDF

Info

Publication number
DE69837791T2
DE69837791T2 DE69837791T DE69837791T DE69837791T2 DE 69837791 T2 DE69837791 T2 DE 69837791T2 DE 69837791 T DE69837791 T DE 69837791T DE 69837791 T DE69837791 T DE 69837791T DE 69837791 T2 DE69837791 T2 DE 69837791T2
Authority
DE
Germany
Prior art keywords
instruction
vim
pes
register
vliw
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69837791T
Other languages
English (en)
Other versions
DE69837791D1 (de
Inventor
Gerald G. Cary PECHANEK
Thomas L. Raleigh DRABENSTOTT
Juan Guillermo Austin REVILLA
David Carl Raleigh STRUBE
Grayson Durham MORRIS
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Altera Corp
Original Assignee
Altera Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Altera Corp filed Critical Altera Corp
Application granted granted Critical
Publication of DE69837791D1 publication Critical patent/DE69837791D1/de
Publication of DE69837791T2 publication Critical patent/DE69837791T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Description

  • Für jegliche Einzelanweisungs-Mehrfachdatenstrom-(SIMD)-Maschine mit einer vorgegebenen Zahl von parallelen Verarbeitungselementen wird es Algorithmen geben, die keinen effizienten Gebrauch von den verfügbaren parallelen Verarbeitungselementen, oder, mit anderen Worten, von den verfügbaren Computerressourcen, machen können. Maschinen von der Mehrfachanweisungs-Mehrfachdatenstrom-(MIMD)-Klasse führen einige dieser Algorithmen mit mehr Effizienz aus, erfordern aber zusätzliche Hardware, um einen separaten Anweisungsstrom auf jedem Prozessor zu unterstützen und verlieren ein Leistungsvermögen aufgrund einer Kommunikationsverzögerung mit eng gekoppelten Programmimplementationen. Die vorliegende Erfindung ist auf eine bessere Maschinenorganisation zur Ausführung dieser Algorithmen gerichtet, die Hardwarekosten und komplexität reduziert, während die besten Merkmale von sowohl den SIMD- als auch den MIMD-Maschinen aufrecht erhalten werden und eine Kommunikationsverzögerung minimiert wird. Eine erfindungsgemäße Ausführungsform stellt für SIMD-Verarbeitungselemente für indirekte sehr lange Anweisungswörter (iVLIW, indirect Very Long Instruction Word) einen Grad an MIMD-Verarbeitungs-Auotonomie bereit, während der einzelne Steuerungs-Thread, der in der SIMD-Maschinenorganisatione verwendet wird, aufrecht erhalten wird. Daher wird der Ausdruck Synchron-MIMD (SMIMD) verwendet, um die erfindungsgemäßen Ausführungsformen zu beschreiben.
  • Hintergrund der Erfindung
  • Es gibt zwei hauptsächliche parallele Programmiermodelle, das SIMD- und das MIMD-Modell. Im SIMD-Modell gibt es einen einzelnen Programm-Thread, der mehrere Verarbeitungselemente (PEs) in einem synchronen Sperr-Schritt-Modus steuert. Jedes PE führt dieselbe Anweisung aus, allerdings an verschiedenen Daten. Dies steht im Gegensatz zum MIMD-Modell, wo mehrere Steuerungs-Programm-Threads vorliegen und jegliche Inter-Prozessor-Operationen mit der Verzögerung zu kämpfen haben, die auftritt, wenn sie zwischen den mehreren Prozessoren kommunizieren, weil es Anforderungen gibt, die unabhängigen Programm-Threads vor der Kommunikation zu synchronisieren. Das Problem bei SIMD ist, dass nicht alle Algorithmen einen effizienten Gebrauch von dem Grad an Parallelität, der im Prozessor vorliegt, machen können. Das Ausmaß an Parallelität, das in verschiedenen Algorithmen inhärent vorliegt, variiert, was zu Schwierigkeiten führt, eine breite Vielfalt von Algorithmen auf SIMD-Maschinen effizient zu implementieren. Das Problem bei MIMD-Maschinen ist, dass die Verzögerung von Kommunikationen zwischen mehreren Prozessoren zu Schwierigkeiten führt, Prozessoren zum Zusammenarbeiten bei der Verarbeitung eines Algorithmus' effizient zu synchronisieren. Typischerweise ziehen MIMD-Maschinen im Vergleich zu SIMD-Maschinen auch größere Implementationskosten nach sich, weil jedes MIMD-PE seinen eigenen Anweisungs-Abfolge-Mechanismus haben muss, was zu einem bedeutsamen Aufwand an Hardware führen kann. MIMD-Maschinen weisen auch eine inhärent größere Komplexität an Programmsteuerung auf, die erforderlich ist, um die unabhängigen parallelen Verarbeitungselemente zu verwalten. Daher treten Grade von Programmierkomplexität und Kommunikationsverzögerung in einer Vielzahl von Kontexten auf, wenn parallele Verarbeitungselemente verwendet werden. Es wird von großem Vorteil sein, solche Probleme effizient anzugehen, wie unten ausführlicher erläutert wird.
  • Von Pechanek, G. G. et. al: "MFAST: A Single Chip Highly Parallel Image Processing Architecture", Proceedings of the International Conference on Image Processing (ICIP), Washington, October 23-26 1995, Los Alamitos, IEEE Comp. Soc. Press, US. Vol. 3, 23 October 1995, pages 69-72, XP010196926 ISBN: 0-7803-3122-2 ist es für einen Prozessor bekannt, einen Anweisungssatz zu verwenden, der gekapselte sehr lange Anweisungswörter (eVLIW, encapsulated Very Long Instruction Words) in jedem Verarbeitungselement in einem skalierbaren Array verwendet, wobei jedes Verarbeitungselement ein eVLIW in einem VLIW-Speicher speichert, der aus mehreren 32-Bit-Anweisungsslots gebildet ist, die mit Ausführungseinheiten und Speicherzugriffsfunktionen verbunden sind.
  • Minigawa et. al: "Pre-Decoding Mechanism for Superscalar Architecture", IEEE, May 1991, pages 21-24, XP002917704, offenbart einen Predekodierungsmechanismus zum Predekodieren von Anweisungen während eines Ausführungspfades, in welchem ein Predekoder entscheidet, welche funktionelle Einheit Anweisungen ausführen sollte. Ein Predekodier-Tag, das durch Dekodieren der Anweisungen erzeugt wurde, wird in einem Anweisungs-Cache-Speicher gesichert.
  • US-A-5,649,135 offenbart ein paralleles Verarbeitungssystem, das ein sehr langes Anweisungswort (VLIW, Very Long Instruction Word) für eine parallele Steuerung einer Mehrzahl von primitiven Ausführungselementen verwendet.
  • Erfindungsgemäße Aspekte sind in den begleitenden Ansprüchen dargelegt.
  • Ein ManArray-Prozessor, der dazu geeignet ist, in Übereinstimmung mit den Ausführungsformen in Zusammenhang mit indirekten sehr langen ManArray-Anweisungswörtern (iVLIW) verwendet zu werden, kann als ein Arrayprozessor implementiert sein, der einen Ablaufprozessor (SP, Sequence Processor) aufweist, der als eine Arraysteuerung für ein skalierbares Array von Verarbeitungselementen (PEs) arbeitet, um eine Architektur bereitzustellen, die auf indirekte sehr lange Anweisungswörter bezogen ist. Indirekte sehr lange Anweisungswörter (iVLIWs) in Übereinstimmung mit den Ausführungsformen können durch den SIMD-Arraysteuerungs-Ablaufprozessor oder SP in einem iVLIW-Anweisungsspeicher (VIM) zusammengesetzt werden. Vorzugsweise existiert ein VIM in jedem Verarbeitungselement oder PE und enthält eine Mehrzahl von iVLIWs. Nachdem ein iVLIW im VIM zusammengesetzt ist, führt eine andere SP-Anweisung, in der bevorzugten Ausführungsform als XV für "führe iVLIW aus" ("execute iVLIW") bezeichnet, das iVLIW an einer identischen VIM-Adresse in allen PEs gleichzeitig aus. Wenn alle PE-VIMs dieselbe Anweisung enthalten, tritt eine SIMD-Operation auf. Es gibt eine Eins-zu-Eins-Zuordnung zwischen der XV-Anweisung und dem einzelnen identischen iVLIW, das in jedem PE vorliegt.
  • Um die Effizienz bestimmter Algorithmen, die auf dem ManArray laufen, zu verbessern, ist es möglich, mit der indirekten Ausführung, die durch eine Ausführungs-VLIW-(XV)-Anweisung initiiert wurde, und mit verschiedenen VLIW-Anweisungen, die in den mehreren PEs an derselben VLIW-Speicheradresse gespeichert sind, indirekt auf VLIW-Anweisungen, die in einem VLIW-Speicher gespeichert sind, zu arbeiten. Wenn die SP-Anweisung bewirkt, dass dieser Satz von iVLIWS gleichzeitig über alle PEs ausgeführt wird, tritt eine synchrone MIMD- oder SMIMD-Operation auf. Zwischen der XV-Anweisung und den mehreren verschiedenen iVLIWS, die in jedem PE existieren, gibt es eine Eins-zu-Viele-Zuordnung. Es ist kein spezialisierter Synchronisierungsmechanismus erforderlich, weil die mehreren verschiedenen iVLIW-Ausführungsoperationen mit dem Aussenden der XV-Anweisung durch den einzelnen Steuerungspunkt SP syn chron initiiert sind. Durch die Verwendung eines Empfangs-Modells, um die Kommunikation zwischen PEs und einem ManArray-Netz zu verwalten, ist das Merkmal der Kommunikationsverzögerung, das den MIMD-Operationen gemeinsam ist, vermieden, wie weiter unten erläutert wird. Da es nur einen synchronen Ausführungsort gibt, ist außerdem eine zusätzliche MIMD-Hardware für einen separaten Programmablauf in jedem PE nicht erforderlich. Auf diese Weise ist die Maschine dazu organisiert, SMIMD-Operationen bei reduzierten Hardwarekosten zu unterstützen, während eine Kommunikationsverzögerung minimiert wird.
  • Ein indirektes ManArray-VLIW oder -iVLIW wird vorzugsweise unter einer Programmsteuerung geladen, obwohl die Alternativen eines Ladens der iVLIWs über direkten Speicherzugriff (DMA) und Implementierens eines Abschnitts von VIM-Adressraum mittels eines ROM, das festgelegte iVLIWs enthält, nicht ausgeschlossen sind. Um einen gewissen Grad an dynamischer Programmflexibilität aufrecht zu erhalten, wird ein Bereich des VIM, wenn nicht der gesamte VIM, typischerweise vom Random-Access-Speichertyp sein. Um den VIM-Random-Access-Typ zu laden, spezifiziert eine Trennsymbol-Anweisung, LV für Lade-iVLIW, dass eine bestimmte Zahl von Anweisungen, die auf das Trennsymbol folgen, in den VIM zu laden sind, anstatt ausgeführt zu werden. Für eine SIMD-Operation erhält jedes PE dieselben Anweisungen für jede VIM-Adresse. Um eine SMIMD-Operation einzurichten ist es notwendig, verschiedene Anweisungen an derselben VIM-Adresse in jedem PE zu laden.
  • In der gegenwärtig bevorzugten Ausführungsform wird dies durch einen Maskierungsmechanismus erreicht, der so funktioniert, dass das Laden des VIM nur auf PEs auftritt, die auf ON maskiert sind. PEs, die auf OFF maskiert sind, führen die Trennsymbol-Anweisung nicht aus und laden daher den spezifizierten Satz von Anweisungen, der dem Trennsymbol folgt, nicht in den VIM. Alternativ könnten verschiedene Anweisungen parallel vom lokalen PE-Speicher geladen werden oder der VIM könnte das Ziel einer DMA-Übertragung sein. Eine andere Alternative zum Laden verschiedener Anweisungen in dieselbe VIM-Adresse ist durch die Verwendung einer zweiten LV-Anweisung, LV2, gegeben, welche ein zweites 32-Bit-Steuerungswort aufweist, das der LV-Anweisung folgt. Die ersten und zweiten Steuerungswörter ordnen die Bits zwischen sich neu an, so dass ein PE-Label hinzugefügt werden kann. Dieses zweite LV2-Herangehen erfordert nicht, dass die PEs maskiert werden und kann einige Vorteile in verschiedenen Systemimplementationen bereitstellen. Indem verschiedene Anweisungen wahlweise in dieselbe VIM-Adresse auf verschiedenen PEs geladen werden, ist der ManArray für eine SMIMD-Operation eingerichtet.
  • Ein Problem, das beim Implementieren einer SMIMD-Operation angetroffen wird, ist der Umgang mit der Kommunikation zwischen den Verarbeitungselementen. Im SIMD-Modus führen alle PEs im Array dieselbe Anweisung aus. Typischerweise denkt man, dass diese SIMD-PE-zu-PE-Kommunikationen unter Verwendung eines Sende-Modells stattfinden. Das heißt, dass die SIMD-Sende-Modell-Anweisungen anzeigen, in welche Richtung oder zu welchem Ziel-PE jedes PE seine Daten senden sollte. Wenn eine Kommunikationsanweisung, wie zum Beispiel SEND-WEST angetroffen wird, sendet jedes PE Daten an das PE, das topologisch als sein westlicher Nachbar definiert wurde. Das Sende-Modell spezifiziert sowohl die Sender- als auch Empfänger-PEs. Im SEND-WEST-Beispiel sendet jedes PE seine Daten an sein West-PE und empfängt Daten von seinem Ost-PE. Im SIMD-Modus ist dies kein Problem.
  • Im SMIMD-Operations-Modus ist es, unter Verwendung eines Sende-Modells, mehreren Verarbeitungselementen möglich, ganz zu versuchen, Daten zum selben Nachbarn zu senden. Dieser Versuch stellt eine riskante Situation dar, weil Verarbeitungselemente wie die im ManArray so definiert sein können, dass sie nur einen Empfangsanschluss haben, der nur in der Lage ist, von einem anderen Verarbeitungselement zur Zeit zu empfangen. Wenn jedes Verarbeitungselement so definiert ist, dass es einen Empfangsanschluss hat, kann solch eine versuchte Operation nicht erfolgreich abgeschlossen werden und führt zu einem Kommunikationsrisiko.
  • Um das oben beschriebene Kommunikationsrisiko zu vermeiden, wird ein Empfangs-Modell für die Kommunikation zwischen PEs verwendet. Unter Verwendung des Empfangs-Modells steuert jedes Verarbeitungselement einen Schalter, der auswählt, von welchem Verarbeitungselement er empfängt. Es ist unmöglich, dass Kommunikationsrisiken auftreten, weil für beliebige zwei Verarbeitungselemente unmöglich ist, denselben Empfangsanschluss zu beanspruchen. Per Definition steuert jede PE seinen eigenen Empfangsanschluss und macht Daten ohne Ziel-PE-Spezifikation verfügbar. Für jegliche bedeutsame Kommunikation, die zwischen Verarbeitungselementen unter Verwendung des Empfangs-Modells stattfinden soll, müssen die PEs programmiert sein, um beim Empfang der Daten, die verfügbar gemacht wurden, zusammenzuarbeiten. Unter Verwendung von synchroner MIMD (SMIMD) ist garantiert, dass dies geschieht, wenn die zusammenarbeitenden Anweisungen alle am selben iVLIW-Ort existieren. Ohne SMIMD wäre ein komplexer Mechanismus nötig, um Kommunikationen zu synchronisieren und das Empfangs-Modell zu verwenden.
  • Ein vollständigeres Verständnis der vorliegenden Erfindung sowie weitere erfindungsgemäße Leistungsmerkmale und Vorteile werden von der folgenden ausführlichen Beschreibung und den begleitenden Figuren offensichtlich.
  • Kurze Beschreibung der Figuren
  • 1 zeigt verschiedene Aspekte eines ManArray-Speichers für indirekte VLIW-Anweisungen in Übereinstimmung mit einer Ausführungsform;
  • 2 zeigt einen grundlegenden iVLIW-Datenpfad;
  • 3 zeigt einen iVLIW mit fünf Slots mit einer erweiterten Ansicht des ALU-Slots;
  • 4A zeigt eine LV-Laden/Modifizieren-VLIW-Anweisung;
  • 4B zeigt eine XV-Ausführungs-VLIW-Anweisung;
  • 4C zeigt Anweisungs-Feld-Definitionen;
  • 4D zeigt weitere Anweisungs-Feld-Definitionen;
  • 4E zeigt eine ADD (Hinzufügen)-Anweisung;
  • 4F zeigt eine Slot-Speicherung für drei synchrone MIMD-iVLIWs in einer 2 × 2 ManArray-Konfiguration;
  • 5 zeigt eine iVLIW-Laden-und-Holen-Pipeline in Übereinstimmung mit einer Ausführungsform;
  • 6 zeigt Aspekte von SIMD-iVLIW-Array-Verarbeitung;
  • 7 zeigt eine iVLIW-Übersetzungserweiterung;
  • 8A zeigt eine iVLIW-Übersetzungserweiterungs-Laden-und-Holen-Pipeline;
  • 8B zeigt ein alternatives Format für eine VIM-iVLIW-Speicherung;
  • 9 zeigt eine Sende-Modell-Cluster-Schalter-Steuerung und ein beispielhaftes Risiko für SMIMD-Kommunikationen, die das Sende-Modell verwenden;
  • 10 zeigt ein Sende-Modell mit einer zentralisierten Cluster-Schalter-Steuerung; und
  • 11 zeigt eine Empfangs-Modell-Cluster-Schalter-Steuerung, die verwendet wird, um Kommunikationsrisiken im SMIMD-Operations-Modus zu vermeiden.
  • Ausführliche Beschreibung
  • Ein Satz von gegenwärtig bevorzugten Steuerungsanweisungen in Bezug auf indirekte sehr lange Anweisungswörter (iVLIW) (indirect Very Long Instruction Word (iVLIW) control instructions) zur Verwendung in Verbindung mit einer Ausführungsform ist unten ausführlich beschrieben. 1 zeigt ein System zur Ausführung der iVLIWS an der Adresse "i", wo das iVLIW durch den vertikalen Satz von Kästchen SLAMD 105 in jedem VIM angezeigt ist, welche einen S=Speichern-, L=Laden-, A=Arithmetisch-Logische-Einheit- (ALU)-, M=Multiplizieren-Akkumulieren-Einheit- (MAU)-, und D=Daten-Auswahl-Einheit(DSU)-Satz von Anweisungen in einem 2 × 2-ManArray 100 von PEs 104, PE0-PE3, darstellen. In 1 beinhaltet das 2 × 2-ManArray 100 ferner eine Ablaufprozessor-(SP)-Steuerung 102, die 32-Bit-Anweisungen an die Array-PEs über einen einzelnen 32-Bit-Bus weitersendet. Ein Typ von 32-Bit-Instruktionen ist eine Ausführungs-iVLIW-(XV)-Anweisung, die einen VIM-Adressenoffset-Wert enthält, der in Verbindung mit einer VIM-Basis-Adresse verwendet wird, um einen Pointer zu dem iVLIW zu erzeugen, von dem gewünscht wird, dass es ausgeführt wird. Die PEs 104 sind durch einen Cluster-Schalter miteinander verbunden.
  • Der SP 102 und jedes PE 104 in der ManArray-Architektur, die zur Verwendung in Übereinstimmung mit der Ausführungsform ausgebildet sind, enthalten einen Bereich vom iVLIW-Speicher (VIM) 106, wie in 1 gezeigt ist. Jeder VIM 106 enthält Speicherplatz, um mehrere VLIW-Anweisungsadressen 103 zu halten und jede Adresse ist in der Lage, bis zu acht Simplex-Anweisungen zu speichern. Gegenwärtig bevorzugte Implementationen gestatten es jeder iVLIW-Anweisung, bis zu fünf Simplex-Anweisungen zu enthalten: eine, die mit jedem von der Speichereinheit 108, Ladeinheit 110, Arithmetisch-Logischen-Einheit 112 (ALU), Multiplizieren-Akkumulieren-Einheit 114 (MAU) und Daten-Auswahl-Einheit 116 (DSU) 116 verbunden ist. Beispielsweise enthält eine iVLIW-Anweisung an der VIM-Adresse "i" 105 die fünf Anweisungen SLAMD.
  • 2 zeigt eine grundlegende iVLIW-Datenpfad-Anordnung 200, durch welche eine geholte Anweisung in einem Anweisungsregister 20 gespeichert wird, das mit der VIM-Laden-und-Speichern-Steuerungsfunktion 22 verbunden ist. Die VIM-Laden-und-Speichern-Steuerungsfunktion stellt die Schnittstellensignale zum VIM 24 bereit. Der VIM 24 entspricht dem VIM 106, wobei jeder VIM 106 von 1 zugeordnete Register und Steuerungen aufweist, wie die, die in 2 gezeigt sind. Der Ausgang des VIM 24 wird dem iVLIW-Register 26 über eine Pipeline zugeführt. 3 zeigt einen Fünf-Slot-iVLIW-VIM 300 mit N Einträgen 0, 1, ... N – 1. Jeder durch den VIM 300 adressierte Ort beinhaltet Speicherplatz für Speichern-, Laden-, ALU-, MAU- und DSU-Anweisungen 301-305. Eine erweiterte ALU-Slot-Ansicht 303' zeigt einen 32-Bit Speicherraum, bei dem das Bit-31 mit "d" markiert wurde. Die Verwendung der Anweisungsbits im VIM-Speicher wird unten ausführlicher erläutert.
  • iVLIW-Anweisungen können gemeinsam in ein Array von PE-VIMs geladen werden, oder jeder PE-VIM kann unter Verwendung spezieller Anweisungen zum Maskieren eines PE oder PEs individuell geladen werden. Auf die iVLIW-Anweisungen im VIM wird durch die Ausführungs-VLIW-(XV)-Anweisung zur Ausführung zugegriffen, wobei die Ausführungs-VLIW-XV)-Anweisung, wenn sie als eine einzelne Ausführung ausgeführt wird, die simultane Ausführung der Simplex-Anweisungen, die an der VIM-Speicheradresse angeordnet sind, bewirkt. Eine XV-Anweisung kann die simultane Ausführung von
    • 1. allen der Simplex-Anweisungen, die an einer individuellen VIM-Adresse eines SP's oder PE's angeordnet sind, oder
    • 2. allen Anweisungen, die in allen PEs an derselben relativen VIM-Adresse angeordnet sind, oder
    • 3. allen Anweisungen, die an einer Untermenge oder Gruppe von allen PEs bei derselben relativen VIM-Adresse angeordnet sind
    bewirken.
  • Nur zwei Steuerungsanweisungen sind erforderlich, um iVLIW-Speicher zu laden/modifizieren und, um iVLIW-Anweisungen auszuführen. Diese sind:
    • 1. Laden/Modifizieren-VLIW-Speicher-Adresse (LV), die in 4A gezeigt ist und
    • 2. VLIW-Ausführen (XV), die in 4B gezeigt ist.
  • Die in 4A gezeigte LV-Anweisung 400 dient dem 32-Bit-Kodieren, wie im Kodierblock 410 gezeigt, und weist die gegenwärtig bevorzugte Syntax/Operation auf, die im Syntax/Operation-Block 420 gezeigt ist, wie weiter unten beschrieben ist. Die LV-Anweisung 400 wird dazu verwendet, in dividuelle Anweisungslots des spezifizierten SP oder PE-VLIW-Speicher (VIM) zu laden und/oder zu deaktivieren. Die VIM-Adresse wird als die Summe eines Basis-VIM-Adress-Registers Vb (V0 oder V1) plus einem vorzeichenlosen 8-Bit-Offset VIMOFFS, der in den Bits 0-7, dem Block von Bits 411, vom Kodierblock 410 in 4A, gezeigt ist. Die VIM-Adresse muss im gültigen Bereich für die Hardwarekonfiguration sein, ansonsten ist die Operation dieser Anweisung undefiniert.
  • Jegliche Kombination von individuellen Anweisungslots kann über den Slot-Deaktivierungsparameter 'd={SLAMD}' deaktiviert werden, wobei S=Speicher-Einheit (SU), L=Lade-Einheit (LU), A=Arithmetisch-Logische-Einheit (ALU), M=Multiplizieren-Akkumulieren-Einheit (MAU) und D=Daten-Auswahl-Einheit (DSU). Ein leerer 'd='-Parameter deaktiviert keinen Slot. Spezifizierte Slots sind deaktiviert, bevor irgendeine Anweisung geladen wird.
  • Die Anzahl zu ladender Anweisungen ist unter Verwendung eines InstrCnt-Parameters spezifiziert. Für die vorliegende Implementation sind Werte von 0-5 gültig. Die nächsten InstrCnt-Anweisungen, die der LV folgen, werden in den spezifizierten VIM geladen. Der Unit-Affecting-Flags-(UAF) (eine Einheit betreffendes Markierungszeichen)-Parameter 'F=[AMD]' wählt aus, welchem Slot für arithmetische Anweisungen (A=ALU, M=MAU, D=DSU) es gestattet ist, Bedingungs-Flags für den spezifizierten VIM zu setzen, wenn er ausgeführt wird. Ein leeres 'F=' wählt den ALU-Anweisungslot aus. Während der Verarbeitung der LV-Anweisung sind keine arithmetischen Flags betroffen und die Anzahl an Zyklen ist eins plus der Anzahl geladener Instruktionen.
  • Die in 4B gezeigte XV=Anweisung 425 ist auch für das 32-Bit-Kodieren vorgesehen, wie im Kodierblock 430 gezeigt ist und weist die gegenwärtig bevorzugte im Syntax/Operation-B1ock 435 gezeigte Syntax/Operation auf, wie weiter unten beschrieben ist. Die XV-Anweisung 425 wird verwendet, um individuelle Anweisungsslots des spezifizierten SP oder PE-VLIW-Speicher (VIM) auszuführen. Die VIM-Adresse wird als die Summe eines Basis-VIM-Adress-Registers Vb (V0 oder V1) plus einem vorzeichenlosen 8-Bit-Offset VIMOFFS, gezeigt in den Bits 0-7, dem Block von Bits 431, des Kodierblocks 430 von 4B, berechnet. Die VIM-Adresse muss im gültigen Bereich für die Hardwarekonfiguration sein, ansonsten ist die Operation dieser Anweisung undefiniert.
  • Jegliche Kombination individueller Anweisungsslots kann durch den Anweisungsslot-Parameter 'E={SLAMD}' ausgeführt werden, wobei S=Speicher-Einheit (SU), L=Lade-Einheit (LU), A=Arithmetisch-Logische-Einheit (ALU), M=Multiplizieren-Akkumulieren-Einheit (MAU), D=Daten-Auswahl-Einheit (DSU). Ein leerer 'E='-Parameter führt keinen Slot aus. Der Unit-Affecting-Flags-(UAF)-Parameter 'F=[AMDN]' überschreibt den für das VLIW spezifizierten UAF, wenn es durch die LV-Anweisung geladen wurde. Das Überschreiben wählt aus, welchem arithmetischen Anweisungsslot (A=ALU, M=MAU, D=DSU) oder keinem (N=NONE) es gestattet ist, Bedingungsflags für die Ausführung des VLIW zu setzen. Das Überschreiben betrifft nicht die UAF-Einstellung, die durch die LV-Anweisung spezifiziert ist. Ein leeres 'F=' wählt das UAF aus, das spezifiziert war, als das VLIW geladen wurde.
  • Bedingungsflags werden durch die individuelle Simplex-Anweisung in dem Slot gesetzt, welcher durch das Einstellen des 'F='-Parameters von der ursprünglichen LV-Anweisung oder nach Überschreiben durch einen 'F=[AMD]'-Parameter in der XV-Anweisung spezifiziert ist. Bedingungs-Flags sind nicht betroffen, wenn 'F=N'. Eine Operation läuft in einem Zyklus ab. Pipeline-Betrachtungen müssen auf der Grundlage der individuellen Simplex-Anweisungen in jedem der ausgeführten Slots berücksichtigt werden. Beschreibungen individueller Felder in diesen iVLIW-Anweisungen sind in den 4C und 4D gezeigt. Die 4C und 4D zeigen Anweisungsfelddefinitionen 440, die nach Name 442, Anzahl an Bits 444 und Beschreibungswerten 446 tabelliert sind. 4E und 4F zeigen eine gegenwärtig bevorzugte ADD-Anweisung bzw. Slot-Speicherung für drei synchrone MIMD-iVLIWs in einer 2 × 2-ManArray-Konfiguration.
  • Die in 4E gezeigte ADD-Anweisung ist wieder für eine 32-Bit-Kodierung, wie im Kodierblock 455 gezeigt, vorgesehen und weist die gegenwärtig bevorzugte im Syntax/Operation-Block 460 gezeigte Syntax/Operation auf, wie weiter unten beschrieben ist. Die ADD-Anweisung 450 wird verwendet, um die Summe von Quellregistern Rx und Ry im Zielregister Rt zu speichern. Arithmetische skalare Flags sind bei am wenigsten signifikanter Operation (least significant operation) betroffen, wo N = MSB der sich ergebenden Summe ist, Z = 1, falls das Ergebnis Null ist und andernfalls 0, V = 1, falls ein Überlauf auftritt und andernfalls 0, C = 1, falls ein Übertrag auftritt und andernfalls 0. Das v-Bit ist für vorzeichenbehaftete Operationen von Bedeutung, und das C-Bit ist für vorzeichenlose Operationen von Bedeutung. Die Anzahl von Zyklen ist eins.
  • Individuelle, Gruppen- und "Synchrone MIMD"-PE-iVLIW-Operationen
  • Die LV- und XV-Operationen können verwendet werden, um iVLIW-Anweisungen in individuellen PEs oder PE-Gruppen, die durch den Programmierer definiert sind, zu laden, modifizieren, de aktivieren oder auszuführen. Um dies durchzuführen, werden individuelle PEs durch eine Anweisung aktiviert oder deaktiviert, welche ein in jedem PE angeordnetes Steuerungsregister modifiziert, welches, unter anderem, jedes PE aktiviert oder deaktiviert. Um ein individuelles PE oder eine Gruppe von PEs zu laden und betreiben, werden die Steuerungsregister modifiziert, um individuelle PE(s) zu aktivieren und alle anderen zu deaktivieren. Normale iVLIW-Anweisungen werden dann nur auf den PEs arbeiten, die aktiviert sind.
  • Bezugnehmend auf 5 werden Aspekte der iVLIW-Laden- und -Holen-Pipeline in Verbindung mit einem iVLIW-System 500 beschrieben. Neben ihren anderen Aspekten zeigt 5 einen Auswahlmechanismus, um eine Auswahl von Anweisungen vom VIM-Speicher heraus zu ermöglichen. Eine geholte Anweisung wird in ein erstes Anweisungsregister (IR1) 510 geladen. Das Register 510 entspricht allgemein dem Anweisungsregister 20 von 2. Der Ausgang vom IR1 wird früh im Pipelinezyklus im Predekoder oder in der Predekodierfunktion 512 predekodiert, bevor das zweite Anweisungsregister (IR2) 514 geladen wird. Wenn die Anweisung im IR1 eine Laden-iVLIW-Anweisung (LV) mit einem Nicht-Null-Anweisungs-Zähler ist, erzeugt der Predekoder 512 ein LVc1 Steuerungssignal 515, welches dazu verwendet wird, den LV-Operationszyklus einzurichten, und die VIM-Adresse 511 wird unter Verwendung des spezifizierten Vb-Registers 502, dem ein Addierer 504 zu einem in der LV-Anweisung beinhalteten Offsetwert über den Pfad 503 addiert wurde. Die sich ergebende VIM-Adresse 511 wird im Register 506 gespeichert und durch den Multiplexer 508 zum Adressieren des VIM 516 übergeben. Der VIM 516 entspricht allgemein dem VIM 106 von 1. Das Register 506 ist erforderlich, um die VIM-Adresse 507 während der LV-Operationen zu halten. Die VIM-Adresse 511 und der LV-Steuerungsszustand gestatten das Laden der Anweisungen, die nach der LV-Anweisung empfangen wurden, in den VIM 516. Am Ende des Zyklus', in welchem die LV empfangen wurde, werden die in 4A gezeigten Deaktivierungsbits 10-17 in das d-Bits-Register 518 für den Gebrauch geladen, wenn Anweisungen in den VIM 516 geladen werden. Auf den Empfang der nächsten Anweisung im IR1 510, die ins VIM 516 zu laden ist, wird das geeignete Steuerungssignal in Abhängigkeit vom Anweisungstyp Storec1 519, Loadc1 521, ALUc1 523, MAUc1 525 oder DSUc1 527 erzeugt. Die Predekodierfunktion 512 ist vorzugsweise auf der Grundlage eines einfachen Dekodierens der Gruppenbits (Bits 30 und 31), welche den in 4A, B und E gezeigten Anweisungstyp definieren, und der in 4D und 4E gezeigten Einheitsfeld-Bits (Bits 27 und 28, die den Ausführungseinheitstyp spezifizieren) bereitgestellt. Unter Verwendung dieses Predekodierschritts kann die Anweisung im IR1 510 in den VIM 516 in der richtigen funktionalen Einheitsposition geladen werden. Beispielsweise kann für die ADD-Anweisung von 4E, die in der LV-Anweisungsliste enthalten ist, wenn diese Anweisung im IR1 510 empfangen wird, durch die Predekodierfunktion 512 bestimmt werden, dass diese Anweisung in den ALU-Anweisungslot 520 im VIM 516 geladen werden sollte. Zusätzlich wird das geeignete d-Bit 531 für diese funktionelle Slotposition in das Bit 31 dieses Slots geladen. Das geladene d-Bit belegt eine der Gruppen-Code-Bit-Positionen von der ursprünglichen Anweisung.
  • Auf den Empfang einer XV-Anweisung im IR1 510 wird die VIM-Adresse 511 durch Verwendung des spezifizierten Vb-Registers 502, dem ein Addierer 504 zu dem in der XV-Anweisung beinhalteten Offsetwert über den Pfad 503 addiert wurde, berechnet. Die sich ergebende VIM-Adresse 507 wird durch den Multiplexer 508 zum Adressieren des VIM übergeben. Das iVLIW an der spe zifizierten Adresse wird aus dem VIM 516 ausgelesen und durch die Multiplexer 530, 532, 534, 536 und 538 zu den IR2-Registern 514 übergeben. Als eine Alternative, den kritischen Zeitpfad des Lesezugriffs auf den VIM zu minimieren, kann der Ausgang des VIM 516 gemäß dem Latch-Prinzip in ein Register übergeben werden, dessen Ausgang durch einen Multiplexer vor der Dekodier-Status-Logik übergeben wird.
  • Für die Ausführung der XV-Anweisung bewirkt das IR2MUX1-Steuerungssignal 533 zusammen mit dem Predekodier-XVc1-Steuerungssignal 517, dass alle die IR2-Multiplexer 530, 532, 534, 536 und 538 die VIM-Ausgangspfade 541, 543, 545, 547 und 549 auswählen. An diesem Punkt sind die fünf individuellen Dekodier- und Ausführungsstufen der Pipeline, 540, 542, 544, 546 und 548 synchron vervollständigt, wobei sie die parallele iVLIW-Ausführungs-Leistung bereitstellen, Um es einer einzelnen 32-Bit-Anweisung zu gestatten, dass sie im PE oder SP direkt selbst (execute by itself) ausgeführt wird, ist der VIM-Bypass-Pfad 535 gezeigt. Wenn beispielsweise eine Simplex-ADD-Anweisung im IR1 510 für eine parallele Array-Ausführung empfangen wird, erzeugt die Predekodierfunktion 512 das IR2MUX1-Steuerungssignal 533, welches in Verbindung mit dem Predekodiersignal vom Anweisungstyp, 523 im Falle eines ADD und Nichtvorliegen eines aktiven Steuerungssignals XV 517 oder LV 515, bewirkt, dass der ALU-Multiplexer 534 den Bypasspfad 535 auswählt.
  • Da ein ManArray mit einer variierenden Anzahl von PEs konfiguriert werden kann, zeigt 6 eine beispielhafte SIMD-iVLIW-Verwendung eines iVLIW-Systems, wie beispielsweise des in 5 gezeigten Systems 500. In 6 gibt es J + 1 PEs, wie durch die PE-Nummerierung PE0 bis PEJ angezeigt ist. Ein Abschnitt von LV-Code ist in 6 gezeigt und zeigt an, dass drei Anweisungen an der VIM-Adresse 27 geladen werden sollen, wobei der Lade-Einheits- und MAU-Anweisungs-Slot deaktiviert sind. Diese Ladeoperation wird auf der Grundlage der in 4A gezeigten Syntax von der LV-Anweisung 601 bestimmt. Unter der Annahme, dass all PEs on maskiert sind, werden dann die angezeigten drei Anweisungen 603, 605 und 607 an der VIM-Adresse 27 in jedem der J + 1 PEs im Array geladen. Das Ergebnis dieses Ladens ist in 6 gezeigt, indem gezeigt ist, dass die Anweisungen in ihren geeigneten Ausführungsslots in den VIMs gespeichert sind, Anweisung 603 im ALU-Slot, Anweisung 605 im DSU-Slot und Anweisung 607 im Speichern-Einheit-Slot.
  • Es wird angemerkt, dass in der vorangegangenen Erläuterung, gestützt durch die 3, 5 und 6, die Prekodierfunktion es den mehreren Bit-31-Positionen der VIM-Slot-Felder gestattet, mit den gespeicherten in 5 gezeigten d-Bits 518 geschrieben zu werden, die von der LV-Anweisung erzeugt wurden, die die VIM-Lade-Abfolge initiierte. Es wird ferner angemerkt, dass es für das Einheits-Feld, Bits 27 und 28, in den arithmetischen Anweisungen, siehe beispielsweise 4E, erforderlich ist, zu bestimmen, in welchen VIM-Slot eine arithmetische Anweisung zu laden ist. Da die Anweisung im IR1 durch Verwendung der Predekodierfunktion spezifisch dem Ausführungseinheitsslot im VIM zugeordnet werden kann, ist es nicht nötig, die Gruppenbits und die Einheitsfeldbits im VIM zu speichern und sie können für andere Zwecke verwendet werden, wie durch die Verwendung des einzelnen d-Bits in der vorangehenden Erläuterung gezeigt wurde. Die spezifischen Bitpositionen in den VIM-Slots sind im VIM 700 in 7 gezeigt, worin eines der Anweisungsgruppenbits, Bit 30 von 4E, und die Anweisungseinheitsfeldbits, Bits 27 und 28, im VIM 700 durch die Übersetzungserweiterungsoptionsbits "o" für Opcodeerwei terungs-Bit 30, bezeichnet mit 721, von 7, "r" für Registerdateierweiterungs-Bit 28, bezeichnet mit 723, und "c" für Erweiterungs-Bit für bedingte Ausführung 27, bezeichnet mit 725, ersetzt sind. Diese zusätzlichen Bits sind separat in einem in 8A gezeigten Register für Verschiedenes 850 gespeichert, in das der Programmierer laden kann oder von welchem er speichern kann. Diese Bits stellen erweiterte Leistungsmerkmale bereit, die aufgrund eines Mangels an Anweisungskodierbits in einem 32-Bit Anweisungsformats nicht bereitgestellt werden konnten. Für das Opcodeerweiterungs-Bit "o" ist es möglich, einen Satz von Anweisungen auf einen neuen Satz von Anweisungen abzubilden. Für das Registererweiterungs-Bit "r" ist es möglich, den Registerdateiraum zu verdoppeln und zwei Registerbänke zu haben, die entweder zusätzlichen Registerraum bereitstellen oder als ein Mechanismus für ein schnelles Kontextumschalten wirken, so dass es zwei Registerbänken ermöglicht ist, zwischen zwei Kontexten aufgeteilt zu sein. Für das Erweiterungs-Bit für bedingte Ausführung "c" ist es möglich, unter der Kontrolle eines Programmierers zwei verschiedene Sätze von Bedingungen zu spezifizieren oder eine unterschiedliche bedingte Ausführungsfunktionalität zu spezifizieren.
  • 8A zeigt ein iVLIW-System 800, das Aspekte der iVLIW-Übersetzungserweiterungs-Laden-und-Holen-Pipeline zeigt, wobei die Hinzufügung des o-, r- und c-Bits-Registers 850 und des Satzes von Predekodier-Steuerungssignalen 815, 817, 819, 821, 823, 825, 827 und 833 gezeigt ist. Es wird angemerkt, dass andere Verwendungen dieser freigestellten Bits möglich sind. Beispielsweise könnten alle drei Bits für Registerdateierweiterungen verwendet werden, die den Drei-Operandenanweisungen entweder eine individuelle Steuerung be reitstellt oder bis zu acht Bänke von 32 × 32 Registern bereitstellt.
  • Um es einer einzelnen 32-Bit-Anweisung zu gestatten, im iVLIW-PE oder iVLIW-SP direkt selbst (execute by itself) ausgeführt zu werden, ist der Bypass-VIM-Pfad 835 in 8A gezeigt. Wenn beispielsweise eine Simplex-ADD-Anweisung zur parallelen Array-Ausführung im IR1 810 empfangen wird, erzeugt die Predekodierfunktion 812 das IR2MUX2-833-Steuerungssignal, welches in Verbindung mit dem Predekodiersignal vom Anweisungstyp, 823 im Falle eines ADD, und Nichtvorliegen eines aktiven XV- 817 oder LV- 815 Steuerungssignals, bewirkt, dass der ALU-Multiplexer 834 den Bypasspfad 835 auswählt. Da, wie hier beschrieben, die Bypassoperation während einer vollständigen Stufe der Pipeline auftreten soll, ist es möglich, die Gruppenbits und die Einheitsfeldbits in den durch Bypass umgangenen Anweisungen zu ersetzen, sobald sie die IR2-Latch-Stufe erreichen. Dies ist in der 8A durch den "o-, r- und c-" Bitssignalpfad 851 dargestellt, der verwendet wird, die geeigneten Bitpositionen am Eingang der Multiplexer 830, 832, 834, 836 und 838 zu ersetzen.
  • Es wird angemerkt, dass alternative Formate für die VIMiVLIW-Speicherung möglich sind und in Abhängigkeit von Technologie- und Entwurfs-Erwägungen vorteilhaft sein können. Beispielsweise zeigt 8B eine von der in 7 und 8A gezeigten alternative Form VIM 800'. Die d-Bits pro Ausführungsslot sind zusammen mit den zusätzlichen Bits "o-, r-, c- und uaf-"-Bits gruppiert. Diese zehn Bits sind separat von den in den Bits 0-26, 29 pro jedem Slot definierten Ausführungseinheitsfunktionsbits gruppiert. Es ist nötig, dass die Unit-Affecting-Field-(uaf)-Bits 22 und 23 von 4A von der LV-Anweisung an einer einzelnen iVLIW-VIM-Adresse gespeichert werden, weil die "uaf"-Bits es betreffen, welche arithmetische Einheit die Flags zum Ausführungszeitpunkt betrifft. Es sind andere Speicherformate möglich, beispielsweise die d-Bits mit den Funktionsbits zu speichern und die Bits, die mit dem ganzen iVLIW verbunden sind, wie beispielsweise die "uaf"-Bits, sind separat gespeichert. Es wird auch angemerkt, dass es für einen k-Slot-iVLIW nicht unbedingt erforderlich ist, dass k·32 Bits im VIM gespeichert werden. Aufgrund der Dekodierfunktion ist es nicht nur möglich, zusätzliche Bits in dem k·32-Bit-Raum zu speichern, von dem angenommen wird, dass er erforderlich ist, die k 32-Bit-Anweisungen zu speichern, sondern es ist auch möglich, den k·32-Bit-Raum zu reduzieren, wenn eine volle Verwendung der Bits nicht erfordert ist. Dies ist in 8B gezeigt, wo die Gesamtzahl an Speicherbits pro VIM-Adresse gegeben ist durch fünf mal der pro Ausführungseinheitsslotposition (0-26 und 29) erforderten 28 Bits plus fünf d-Bits, plus drei "o-, r- und c-"-Bits plus "uaf"-Bits für einen Gesamtwert von 150 Bits pro iVLIW-Adresse, was um zehn weniger ist als die 5·32 = 160 Bits, von denen man annehmen könnte, dass sie erforderlich wären. Eine erweiterte Funktionalität ergibt sich, während der VIM-Speicherraum reduziert wird. Im allgemeinen können zusätzliche Informationen im VIM individuell pro Ausführungseinheit oder als separate individuelle Bits, die die Steuerung über das an der VIM-Adresse gespeicherte iVLIW betreffen, gespeichert werden. Beispielsweise können sechzehn zusätzliche Bits für unmittelbares Laden in einem separaten "konstanten" Register gespeichert und in eine VIM-Adresse geladen werden, um die Leistung der Ladeeinheit zum Laden von 32 Bits unmittelbarer Daten zu erweitern. Um diese Erweiterung zu erreichen, muss die VIM-Datenbreite geeignet erweitert werden. Auch die Größe der gespeicherten iVLIW ist davon entkoppelt, ein Vielfaches der Anweisungsgröße zu sein, so dass es auf der Grund lage von Anforderungen dem gespeicherten iVLIW gestattet ist, größer als oder kleiner als die k·32 Bits für ein k-Anweisungs-iVLIW zu sein.
  • In einem Prozessor, der aus einer SP-Steuerung 102 wie in 1, aber aus Gründen der Klarheit nicht in 9 oder 10 gezeigt, und einem Array von PEs, wie beispielsweise Prozessor 900 von 9 oder Prozessor 1000 von 10, besteht, kann ein Problem angetroffen werden, wenn SMIMD-Operationen implementiert werden, wenn man es mit Inter-PE-Kommunikationen (Kommunikationen zwischen PEs) zu tun hat.
  • Der typische SIMD-Kommunikationsmodus spezifiziert, dass alle PEs dieselbe Inter-PE-Kommunikationsanweisung ausführen. Diese SIMD-Inter-PE-Anweisung, die in jedem PE dieselbe ist, erfordert einen gemeinsamen Steuerungsmechanismus, um eine Übereinstimmung mit der zwischen den PEs definierten gemeinsamen Operation sicherzustellen. Typischerweise wird ein Sende-Modell verwendet, wo eine einzelne Anweisung, wie beispielsweise SEND-WEST, an alle PEs im Array gesendet wird. Die SIMD-Inter-PE-Kommunikationsanweisung bewirkt eine koordinierte Steuerung der Netzschnittstelle zwischen den PEs, um es jedem PE zu gestatten, Daten an das durch die Inter-PE-Anweisung topologisch definierte PE zu senden. Wie in 9 gezeigt, kann durch ein einzelnes PE diese einzelne SIMD-Anweisung interpretiert werden und die Netzschnittselle 911 gesteuert werden, da alle PEs dieselbe Anweisung empfangen. Es wird angemerkt, dass der in 9 gezeigte ManArray-2 × 2-Cluster-Schalter aus vier 4-zu-1 Multiplexern 920, 922, 924 und 926 für die Schnittstellen-Eingangs-Ausgangs-(I/O)-Busse zwischen den DSU zusammengesetzt ist. Diese Busse können ohne Einschränkung 8-, 9-, 16-, 32-, 64-, oder eine andere Bitzahl, -Bitbusse sein. Die Steuerung eines einzelnen 4-zu-1-Multiplexers erfordert nur zwei Steuerungsbits, um einen der vier möglichen Pfade auszuwählen. Wenn es erforderlich ist, kann dies für größere PE-Cluster mit größeren Multiplexern erweitert werden. Es ist auch in einem SIMD-System möglich, eine zentralisierte Steuerung für das Schnittstellennetz zwischen den PEs vorzusehen, wie in 10 gezeigt. In 10 empfängt eine zentralisierte Steuerung 1010 dieselbe gesendete Inter-PE-Kommunikationsanweisung 1011 von der SP-Steuerung wie die anderen PEs im Netz. Dieser Mechanismus gestattet es den Netzverbindungen auf einer zyklusbezogenen Basis gewechselt zu werden. Zwei Attribute des SIMD-Sende-Modells sind eine gemeinsame Anweisung an alle PEs und die Spezifikation von sowohl dem Sender als auch dem Empfänger. Im SIMD-Modus ist diese Vorgehensweise kein Problem.
  • Beim Versuch, das Sende-Modell zum SMIMD-Modus zu erweitern, können andere Probleme auftreten. Ein solches Problem ist, dass es im SMIMD-Modus mehreren Verarbeitungselementen möglich ist, dass alle versuchen, Daten an ein einzelnes PE zu senden, weil jedes PE eine unterschiedliche Inter-PE-Kommunikationsanweisung empfangen kann. Die zwei Attribute des SIMD-Sende-Modells brechen unmittelbar zusammen, nämlich eine gemeinsame Inter-PE-Anweisung zu haben und sowohl Quelle als auch Ziel, oder, mit anderen Worten, sowohl Sender als auch Empfänger, zu spezifizieren. Es ist ein Kommunikationsrisiko, in einem SIMD-Modell bei Einzel-Zyklus-Kommunikationen mehr als ein PE zu haben, das dasselbe PE als Ziel hat. Dieses Kommunikationsrisiko ist in 9 gezeigt, worin die DSUs für PEs 1, 2 und 3 Daten an PE0 senden sollen, während PE0 Daten an PE3 senden soll. Diese drei Dateneingaben an PE0 können nicht empfangen werden. In anderen Systemen bewirkt die Lösung dieses Problemtyps vielfach, dass das Einfügen von Schnittstellenpuffern und Prioritätssteuerungslogik einen oder mehrere der Konfliktpfade verzögert. Dies verletzt inhärent die synchrone Natur der SMIMD-Verarbeitung, da die Planung der Einzel-Zyklus-Kommunikationsoperationen während der Programmierung der in den PEs auszuführenden iVLIW-Anweisungen erfolgen muss. Um die Kommunikationsrisiken zu vermeiden, ohne die Anforderungen an synchrone MIMD zu verletzen, wird vorteilhaft ein Empfangs-Modell verwendet. Der einzelne Punkt von Netzsteuerung, ob er in einem einzelnen PE oder in einem zentralisierten Steuerungsmechanismus angeordnet ist, der durch das Sende-Modell ermöglicht ist, wird im Empfangs-Modell durch verteilte Netzschnittstellensteuerung ersetzt. Jedes PE steuert seinen eigenen Empfangsanschluss. Das Empfangs-Modell spezifiziert den Empfangspfad durch die Netzschnittstelle. Im Falle des ManArray-Netzes steuert jedes PE seinen eigenen Multiplexer-Eingangs-Pfad vom Cluster-Schalter.
  • Diese Anordnung ist für einen 2 × 2-Array-Prozessor 1100 in 11 gezeigt, wo jedes PE seine eigene Steuerung seiner Eingangsmultiplexer 1120, 1122, 1124, bzw. 1126 aufweist. Beispielsweise hat PE0 Steuerungssignale 1111 zur Steuerung seines Eingangsmultiplexers 1120. Das Empfangsmodell erfordert auch, dass Daten an den Ausgangsanschluss der PEs dem Schnittstellen-Netz ohne eine Ziel-PE-Spezifikation verfügbar gemacht werden. Für jegliche bedeutsame Kommunikation, die zwischen PEs, die das Empfangs-Modell verwenden, stattfinden soll, müssen die PEs daher dazu programmiert sein, beim Empfang von verfügbar gemachten Daten zusammenzuarbeiten. Bei Verwendung von synchronem MIMD ist garantiert, dass diese Zusammenarbeit eintritt, wenn die Zusammenarbeitsanweisungen am selben iVLIW-Ort liegen. Mit diesem Anweisungsort führen die zusammenarbeitenden PEs, wenn eine XV-Anweisung ausgeführt wird, die geeigneten Inter-PE-Kommunikationsanweisungen aus, um eine Datenbewegung zwischen beliebigen zwei oder mehr PEs zu bewirken. Im allgemeinen können in einem Array von PEs mehrere Gruppen von PEs sein. In jeder solch einen Gruppe können ein oder mehr PEs Daten von einem anderen PE empfangen, während in einer anderen Gruppe ein oder mehr PEs Daten von einem verschiedenen PE empfangen kann. Eine Gruppe kann in ihrer Größe von zwei PEs bis zum gesamten Array von PEs variieren. Während 11 zur Erleichterung und Klarheit der Darstellung keinen SP zeigt, wie beispielsweise die SP-Steuerung 102 von 1, wird solch eine Steuerung vorzugsweise aufgenommen sein, obwohl es zu erkennen ist, dass die SP-Funktionalität mit einem PE, wie beispielsweise PE0, gemischt werden kann, wie es in der U.S. Provisional Application Nr. 60/077,457 gelehrt wird, die zuvor durch Bezugnahme aufgenommen wurde, oder die SP-Funktionalität könnte allen den PEs hinzugefügt werden, obwohl solch eine erweiterte Funktionalität relativ teuer sein würde.
  • 4F zeigt die Definition 470 von drei Synchron-MIMD-iVLIWs in einer 2 × 2-ManArray-Konfiguration. Der obere Abschnitt 480 gibt eine erläuternde Ansicht der Operationen. Der untere Abschnitt 490 gibt die entsprechenden Anweisungsmnemonics, die in der LU, MAU, ALU, DSU bzw. SU geladen werden. Jedes iVLIW enthält vier Reihen zwischen dicken schwarzen Linien, eine für jedes PE. Die am weitesten linksstehende Spalte der Figur zeigt die Adresse, wo das iVLIW im PE-iVLIW-Speicher (VIM) geladen wird. Die nächste Spalte zeigt die PE-Nummer. Jedes iVLIW enthält eine Reihe für jedes PE und zeigt die Anweisungen, die in den VIM-Eintrag dieses PE's geladen werden. Die verbleibenden Spalten listen die Anweisung für jede der fünf Ausführungseinheiten auf: Lade-Einheit (LU), Multiplizieren-Akkumulieren-Einheit (MAU), Arithmetisch-Logische-Einheit (ALU), Daten-Auswahl-Einheit (DSU) und Speicher-Einheit (SU).
  • Beispielsweise wird die VIM-Eintragsnummer 29 im PE2 495 mit den vier Anweisungen li.p.w R3, A1+, A7, fmpy.pm.1fw R5, R2, R31, fadd.pa.1fw R9, R7, R5 und pexchg.pd.w R8, R0, 2 × 2 PE3 geladen. Diese Anweisungen sind diejenigen, welche in der nächsten bis letzten Reihe von 4F gefunden werden. Derselbe VIM-Eintrag (29) enthält verschiedene Anweisungen in den PEs 0, 1 und 3, wie an den Reihen zu sehen ist, die diesen PEs am VIM-Eintrag 29 für PE0 491, PE2 493 und PE3 497 entsprechen.
  • Das folgende Beispiel 1-1 zeigt die Abfolge von Anweisungen, die die PE-VIM-Speicher laden, wie in 4F definiert. Beachte, dass PE-Maskierung verwendet wird, um verschiedene Anweisungen in verschiedene PE-VIMs an derselben Adresse zu laden.
  • Beispiel 1-1 Laden synchroner MIMD-iVLIWs in PE-VIMs
    Figure 00270001
  • Figure 00280001
  • Figure 00290001
  • Das folgende Beispiel 1-2 zeigt die Abfolge von Anweisungen, die die PE-VIM-Einträge ausführen, die durch den Code vom Beispiel 1-1 in 4F geladen sind. Es wird angemerkt, dass keine PE-Maskierung erforderlich ist. Der spezifizierte VIM-Eintrag wird in jedem der PEs, PE0, PE1, PE2 und PE3 ausgeführt.
  • Beispiel 1-2 Ausführen synchroner MIMD-iVLIWs von PE-VIMs
    Figure 00290002
  • Figure 00300001
  • Beschreibung des ausgeführten beispielhaften Algorithmus'
  • Die in 4F definierten iVLIWs werden verwendet, um das Punktprodukt eines konstanten 3 × 1-Vektors mit einem Strom von variablen 3 × 1-Vektoren, die in lokalen PE-Datenspeichern gespeichert sind, zu berechnen. Jedes PE speichert ein Element des Vektors. PE1 speichert die x-Komponente, PE2 speichert die y-Komponente und PE3 speichert die z-Komponente. PE0 speichert keine Komponente. Der konstante Vektor wird auf die gleiche Weise in einem PE-Register gehalten, in diesem Falle im Rechenregister R31.
  • Um redundante Berechnungen oder leerlaufende PEs zu vermeiden, arbeiten die iVLIWS an drei variablen Vektoren zu einer Zeit. Aufgrund der Verteilung der Vektorkomponenten über die PEs ist es nicht durchführbar, PE0 zu verwenden, um ein 4tes Vektor-Punktprodukt zu berechnen. PE0 wird stattdessen vorteilhaft verwendet, um sich um das Einrichten für eine zukünftige Algorithmenstufe zu kümmern. Dies kann an den iVLIW-Ladeslots gesehen werden, wenn Vektor 1 im iVLIW 27 (komponentenweise über die PEs, wie oben beschrieben) geladen wurde, wird Vektor 2 im iVLIW 28 geladen und Vektor 3 im iVLIW 29 geladen (li.p.w R*, A1+, A7). PE1 berechnet die x-Komponente des Punktprodukts für jeden der drei Vektoren. PE2 berechnet die y-Komponente und PE3 berechnet die z-Komponente (fmpy.pm.1fw R*, R*, R31). An diesem Punkt muss eine Kommunikation zwischen den PEs eintreten, um die y- und z-Komponenten des Punktprodukts vom Vektor 1 nach PE1 zu, die x- und z-Komponenten des Punktprodukts vom Vektor 2 nach PE2 und die x- und y-Komponenten des Punktprodukts vom Vektor 3 nach PE3 bekommen. Diese Kommunikation tritt im DSU über die pexchg-Anweisung auf. Auf diese Weise summiert jedes PE (fadd.pa.1fw R9, R7, R* und fadd.pa.1fw R10, R9, R8) simultan die Komponenten eines einzelnen Punktproduktergebnisses. Diese Ergebnisse werden dann in PE-Speichern gespeichert (si.p.w R10, +A2, A6). Beachte, dass jedes PE jedes dritte Ergebnis berechnen und speichern wird. Auf den letzten Satz von Ergebnissen wird dann von den PEs 1, 2 und 3 gemäß einem Round-Robin-Verfahren zugegriffen.
  • Zusätzlich führt jedes PE einen Vergleich (fcmpLE.pa.1fw R10, R0) seines Punktproduktergebnisses mit null (im PE-Register R0 vorgehalten) durch und speichert bedingt eine null (t.sii.p.w R0, A2+, 0) anstelle des berechneten Punktprodukts, wenn das Punktprodukt negativ war. Mit anderen Worten wird ermittelt, ob der Vergleich ist R10 kleiner als R0? wahr ist. Diese Implementation eines Punktprodukts unter Entfernung negativer Werte wird beispielsweise bei Beleuchtungsberechnungen für 3D-Graphik-Anwendungen verwendet.
  • Während die vorliegende Erfindung im Umfeld gegenwärtig bevorzugter Verfahren und Geräte zum Ausüben der Erfindung offenbart wurde, werden dem Fachmann verschiedene alternative Implementationen und Abwandlungen leicht offensichtlich sein. Beispielsweise schließt die vorliegende Erfindung nicht die Fähigkeit aus, eine Anweisung in den VIM zu laden und die Anweisung auch auszuführen. Diese Fähigkeit wurde als unnötige Komplikation für das gegenwärtig bevorzugte Programmiermodell angesehen, neben anderen Erwägungen wie beispielsweise Anwei sungsformat und Hardwarekomplexität. Daher wurde die Herangehensweise mit dem Laden-iVLIW-Trennsymbol gewählt.

Claims (33)

  1. Verarbeitungssystem (100, 500), umfassend: ein erstes Verarbeitungselement PE (104) mit einem Anweisungsspeicher, VIM (106, 516) für sehr lange Anweisungswörter, VLIW, zum Speichern von Anweisungen in Slots in einer VIM-Speicheradresse, gekennzeichnet durch: ein erstes Register (20, 510) zum Speichern einer Funktionsanweisung (450) mit einer Mehrzahl von Gruppenbits, die eine Gruppe von Anweisungstypen definieren, einer Mehrzahl von Einheitsfeldbits, die einen Ausführungseinheitstyp definieren und einem Opcode (721), der einen Anweisungstyp definiert; einen Predekoder (512; 812) zum Dekodieren der Mehrzahl von Gruppenbits und Dekodieren der Mehrzahl von Einheitsfeldbits auf der Grundlage der dekodierten Gruppenbits; und einen Lademechanismus (512, 519, 521, 523, 525, 527), um die Funktionsanweisung, die den Opcode beinhaltet, in einem geeigneten der Slots im VIM gemäß der dekodierten Einheitsfeldbits zu laden.
  2. System nach Anspruch 1, ferner umfassend Mittel zum Empfangen einer Steuerungsanweisung, welche eine Ausführungs-VLIW-Anweisung, XV, ist, die zum Zwecke des indirekten Ausführens von VLIWs einen Adressenoffset und einen Basispointer zu einem Basisadressenregister enthält.
  3. System nach Anspruch 1, ferner umfassend Mittel zum Empfangen einer Steuerungsanweisung, die eine Laden-/Modifizieren-VLIW-Anweisung, LV, ist, die zum Zwecke des indirekten Ausführens von VLIWs einen Adressenoffset und einen Basispointer zu einem Basisadressenregister enthält.
  4. System nach Anspruch 1, umfassend Mittel zum Strippen der Gruppen- und Einheitsfeldbits von der Funktionsanweisung, bevor sie im VIM gespeichert wird, so dass sich eine kompaktere Speicherung ergibt.
  5. System nach Anspruch 2, umfassend Mittel zum Strippen der Gruppen- und Einheitsfeldbits von der Funktionsanweisung und Hinzufügen wenigstens eines Auswechslungsbits zu entweder den Gruppen- oder Einheitsfeldbitpositionen, bevor die Steuerungsanweisung im VIM gespeichert wird.
  6. System nach Anspruch 5, worin das Auswechslungsbit ein Aktivierungs-/Deaktivierungsbit ist.
  7. System nach Anspruch 5, worin das Auswechslungsbit ein Operationscodeerweiterungsbit ist.
  8. System nach Anspruch 5, worin das Auswechslungsbit ein Registerdateierweiterungsbit ist.
  9. System nach Anspruch 5, worin das Auswechslungsbit ein Erweiterungsbit für eine bedingte Ausführung ist.
  10. System nach Anspruch 8, ferner umfassend eine Mehrzahl von Ausführungseinheiten und erste und zweite Registerbänke, und das Registerdateierweiterungsbit wird durch die Mehrzahl von Ausführungseinheiten, die von der ersten Registerbank oder der zweiten Registerbank lesen oder zur ersten Registerbank oder zur zweiten Registerbank schreiben, verwendet.
  11. System nach Anspruch 1, ferner umfassend ein zweites Register (514) zum Speichern der Funktionsanweisung; einen Bypass-Pfad (535) zum Verbinden eines Ausgangs des ersten Registers zu einem Eingang des zweiten Registers; und einen Auswahlmechanismus (534) zum Auswählen einer Bypass-Operation, in welcher die Funktionsanweisung vom ersten Register zum zweiten Register übergeben wird, ohne in den VIM geladen zu werden.
  12. System nach Anspruch 11, umfassend Mittel zum Auswechseln von einem oder mehr der Gruppenbits und Einheitsfeldbits vor der Abspeicherung der Steuerungsanweisung im zweiten Register.
  13. System nach Anspruch 1, ferner umfassend wenigstens ein zusätzliches PE (104), das durch eine Netzschnittstellenverbindung zum ersten PE verbunden ist, und wobei jedes PE einen zugeordneten Clusterswitch (107) aufweist, der mit einem Empfangsanschluss verbunden ist, welcher dadurch gesteuert wird.
  14. System nach Anspruch 13, worin der zugeordnete Clusterswitch einen Multiplexer (920, 922, 924, 926) umfasst, der verbunden ist, um unabhängige Pfade zwischen den PEs in einem Cluster von PEs bereitzustellen.
  15. System nach Anspruch 1, ferner umfassend einen Sequenzprozessor, SP, (9106), der mit dem ersten PE verbunden ist, um dem ersten PE sowohl eine Steuerungsanweisung als auch die Funktionsanweisung bereitzustellen, wobei die Steuerungsanweisung entweder eine Ausführungs-VLIW-Anweisung, XV, oder eine Laden-/Modifizieren-VLIW-Anweisung, LV, ist, wobei zum Zwecke des indirekten Ausführens von VLIWs sowohl die XV- als auch die LV-Anweisungen einen Adressenoffset und Basispointer enthalten.
  16. System nach Anspruch 15, ferner umfassend wenigstens ein zusätzliches PE (104), das mit dem SP verbunden ist, sowie Mittel zum synchronen Bereitstellen der Steuerungsanweisungen zu sowohl dem ersten PE als auch dem wenigstens einen zusätzlichen PE verbunden ist, um zu bewirken, dass die PEs als eine Synchron-Mehrfachanweisungs-Mehrfachdatenstrom, SMIMD, -Maschine arbeiten, wenn verschiedene VLIWs bei derselben VIM-Adresse ausgeführt werden, und andernfalls, um zu bewirken, dass die PEs als SMID-Maschine arbeiten.
  17. System nach Anspruch 16, worin eine Mehrzahl von PEs mit dem SP verbunden ist und die Mehrzahl von PEs in erste und zweite Gruppen von ein oder mehr PEs organisiert ist.
  18. System nach Anspruch 17, worin die erste Gruppe von PEs dazu ausgebildet ist, während eines Operationszyklus' bei einer ersten VIM-Adresse indirekt auf einer VLIW-Anweisung zu arbeiten und die zweite Gruppe von PEs dazu ausgebildet ist, während des Operationszyklus' bei derselben ersten VIM-Adresse indirekt auf einer verschiedenen VLIW-Anweisung zu arbeiten.
  19. System nach Anspruch 17, worin die Mehrzahl von PEs dazu ausgebildet ist, einem Empfangsmodell einer Kommunikationssteuerung folgend zu arbeiten, worin jedes PE einen Empfangsanschluss aufweist und steuert, ob Daten am Empfangsanschluss empfangen werden.
  20. System nach Anspruch 19, wobei jedes PE einen Eingangsmultiplexer aufweist, der mit dem Empfangsanschluss verbunden ist, um eine Kommunikation durch Steuern des Eingangsmultiplexers zu steuern.
  21. System nach Anspruch 19, wobei die Mehrzahl von PEs programmiert ist, zusammenzuarbeiten, indem eine Zusammenarbeitanweisung gespeichert wird, so dass ein PE eine Empfangsanweisung hat, die den Pfad spezifiziert, dem das andere PE Daten an derselben Adresse im VIM für jedes der Mehrzahl von PEs verfügbar macht.
  22. System nach Anspruch 17, ferner umfassend einen Maskierungsmechanismus, um einzelne PEs ON oder OFF zu maskieren.
  23. System nach Anspruch 22, in welchem während einer Lade-VLIW-Operation VIMs für ON-maskierte PEs geladen werden und VIMs für OFF-maskierte PEs nicht geladen werden.
  24. System nach Anspruch 17, worin verschiedene PEs verschiedene VLIWs während desselben Zyklus' ausführen.
  25. System nach Anspruch 1, worin der VIM Slots zum Speichern von Funktionsanweisungen umfasst, die ein oder mehr vom folgenden Typ umfassen: Speichereinheitsanweisungen; Ladeeinheitsanweisungen; Anweisungen hinsichtlich einer arithmetisch-logischen Einheit; Anweisungen hinsichtlich einer Multiplizieren-Akkumulieren-Einheit; und Anweisungen hinsichtlich der Datenauswahleinheit.
  26. System nach Anspruch 25, worin eine Mehrzahl PEs verwendet wird und ein VLIW-Slot oder -Slots verschiedenen Aufgaben zugeordnet sind, die es einem PE gestatten, simultan im selben Zyklus mehrere Operationen auf verschiedenen Aufgaben auszuführen.
  27. Verfahren zum Betreiben eines Verarbeitungssystems (100), umfassend: Holen einer Funktionsanweisung hinsichtlich eines ersten sehr langen Anweisungswortes, VLIW, die in einem VLIW-Anweisungsspeicher, VIM (106) zu speichern ist, in ein erstes Verarbeitungselement, PE, (104), wobei das Verfahren dadurch gekennzeichnet ist, dass die VLIW-Funktionsanweisung eine Mehrzahl von Gruppenbits, die eine Gruppe von Anweisungstypen definiert sowie eine Mehrzahl von Einheitsfeldbits, die einen Ausführungsein heitstyp definieren, aufweist, sowie einen Opcode, der einen Anweisungstyp definiert; Speichern der ersten VLIW-Funktionsanweisung in einem ersten Register (20, 510); Dekodieren der Mehrzahl von Gruppenbits unter Verwendung eines Predekoders (512; 812); Dekodieren der Mehrzahl von Einheitsfeldbits auf der Grundlage der dekodierten Gruppenbits; und Laden der ersten VLIW-Funktionsanweisung, die den Opcode im VIM beinhaltet, für den VIM entsprechend den dekodierten Einheitsfeldbits mit einem Lademechanismus (512, 519, 521, 523, 525, 527) an einer geeigneten Adresse.
  28. Verfahren nach Anspruch 27, ferner umfassend den Schritt eines Empfangens einer Steuerungsanweisung, die eine Ausführungs-VLIW-Anweisung, XV, ist, die zum Zwecke des indirekten Ausführens von VLIWs einen Adressenoffset und einen Basispointer auf ein Basisadressenregister enthält.
  29. Verfahren nach Anspruch 27, ferner umfassend den Schritt eines Empfangens einer Steuerungsanweisung, die eine Laden-/Modifizieren-VLIW-Anweisung, LV, ist, die zum Zwecke des indirekten Ausführens von VLIWs einen Adressenoffset und einen Basispointer auf ein Basisadressregister enthält.
  30. Verfahren nach Anspruch 27, ferner umfassend den Schritt eines Strippens der Gruppen- und Einheitsfeldbits von der Funktionsanweisung, bevor sie im VIM gespeichert wird, so dass sich eine kompaktere Speicherung ergibt.
  31. Verfahren nach Anspruch 27, ferner umfassend die Schritte eines Strippens der Gruppen- und Einheitsfeldbits von der Funktionsanweisung und Hinzufügens wenigstens eines Auswechslungsbits zu entweder den Gruppen- oder Einheitsfeldbit-Positionen, bevor die Steuerungsanweisung im VIM gespeichert wird.
  32. Verfahren nach Anspruch 27, ferner umfassend die Schritte eines Empfangens einer Bypass-Anweisung und Speicherns der ersten VLIW-Funktionsanweisung in einem zweiten Register, ohne sie in den VIM zu laden.
  33. Verfahren nach Anspruch 27, ferner umfassend die Schritte eines Empfangens von sowohl einer Steuerungsanweisung als auch der Funktionsanweisung an den ersten PE, wobei die Steuerungsanweisung entweder eine Ausführungs-VLIW-Anweisung, XV, oder eine Laden-/Modifizieren-VLIW-Anweisung, LV, ist, wobei zum Zwecke des indirekten Ausführens von VLIWs sowohl die XV- als auch die LV-Anweisungen einen Adressenoffset und Basispointer zum Zwecke enthalten.
DE69837791T 1997-11-07 1998-11-06 VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN Expired - Lifetime DE69837791T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US6461997P 1997-11-07 1997-11-07
US64619P 1997-11-07
PCT/US1998/023650 WO1999024903A1 (en) 1997-11-07 1998-11-06 METHODS AND APPARATUS FOR EFFICIENT SYNCHRONOUS MIMD OPERATIONS WITH iVLIW PE-to-PE COMMUNICATION

Publications (2)

Publication Number Publication Date
DE69837791D1 DE69837791D1 (de) 2007-06-28
DE69837791T2 true DE69837791T2 (de) 2007-10-18

Family

ID=22057176

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69837791T Expired - Lifetime DE69837791T2 (de) 1997-11-07 1998-11-06 VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN

Country Status (10)

Country Link
US (3) US6151668A (de)
EP (1) EP1029266B1 (de)
JP (1) JP4156794B2 (de)
KR (1) KR20010031884A (de)
CN (1) CN100380313C (de)
AT (1) ATE362623T1 (de)
CA (1) CA2310584A1 (de)
DE (1) DE69837791T2 (de)
IL (1) IL135953A0 (de)
WO (1) WO1999024903A1 (de)

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6798834B1 (en) 1996-08-15 2004-09-28 Mitsubishi Denki Kabushiki Kaisha Image coding apparatus with segment classification and segmentation-type motion prediction circuit
US6366999B1 (en) * 1998-01-28 2002-04-02 Bops, Inc. Methods and apparatus to support conditional execution in a VLIW-based array processor with subword execution
US6219776B1 (en) * 1998-03-10 2001-04-17 Billions Of Operations Per Second Merged array controller and processing element
US6356994B1 (en) * 1998-07-09 2002-03-12 Bops, Incorporated Methods and apparatus for instruction addressing in indirect VLIW processors
US6839728B2 (en) * 1998-10-09 2005-01-04 Pts Corporation Efficient complex multiplication and fast fourier transform (FFT) implementation on the manarray architecture
US6826522B1 (en) * 1999-06-21 2004-11-30 Pts Corporation Methods and apparatus for improved efficiency in pipeline simulation and emulation
US6748517B1 (en) * 1999-06-22 2004-06-08 Pts Corporation Constructing database representing manifold array architecture instruction set for use in support tool code creation
US7546444B1 (en) 1999-09-01 2009-06-09 Intel Corporation Register set used in multithreaded parallel processor architecture
JP3971535B2 (ja) * 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
JP3730455B2 (ja) * 1999-10-01 2006-01-05 富士通株式会社 情報処理装置及び情報処理方法
US20020010810A1 (en) 2000-03-01 2002-01-24 Ming-Kang Liu xDSL function ASIC processor & method of operation
RU2158319C1 (ru) * 2000-04-25 2000-10-27 Институт металлургии и материаловедения им. А.А. Байкова РАН Высокопрочная коррозионно- и износостойкая аустенитная сталь
US7681018B2 (en) * 2000-08-31 2010-03-16 Intel Corporation Method and apparatus for providing large register address space while maximizing cycletime performance for a multi-threaded register file set
JP4502532B2 (ja) * 2001-02-23 2010-07-14 株式会社ルネサステクノロジ データ処理装置
WO2003084865A2 (en) 2001-06-14 2003-10-16 Hyperion Catalysis International, Inc. Field emission devices using modified carbon nanotubes
GB2382886B (en) * 2001-10-31 2006-03-15 Alphamosaic Ltd Vector processing system
US7398374B2 (en) * 2002-02-27 2008-07-08 Hewlett-Packard Development Company, L.P. Multi-cluster processor for processing instructions of one or more instruction threads
JPWO2003084243A1 (ja) 2002-03-28 2005-08-11 ソニー株式会社 画像圧縮符号化装置及び方法、プログラム
JP3856737B2 (ja) * 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
CN1732457A (zh) * 2002-12-30 2006-02-08 皇家飞利浦电子股份有限公司 处理系统
JP2006522399A (ja) * 2003-04-07 2006-09-28 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ クラスタ化されたilpプロセッサを有するデータ処理システム
US7725681B2 (en) * 2003-08-15 2010-05-25 Nxp B.V. Parallel processing array
US20050216700A1 (en) * 2004-03-26 2005-09-29 Hooman Honary Reconfigurable parallelism architecture
US7299339B2 (en) * 2004-08-30 2007-11-20 The Boeing Company Super-reconfigurable fabric architecture (SURFA): a multi-FPGA parallel processing architecture for COTS hybrid computing framework
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
WO2006049331A1 (ja) * 2004-11-05 2006-05-11 Nec Corporation Simd型並列演算装置、プロセッシング・エレメント、simd型並列演算装置の制御方式
US7493474B1 (en) * 2004-11-10 2009-02-17 Altera Corporation Methods and apparatus for transforming, loading, and executing super-set instructions
KR100636596B1 (ko) * 2004-11-25 2006-10-23 한국전자통신연구원 고에너지 효율 병렬 처리 데이터 패스 구조
US7912311B2 (en) * 2005-03-21 2011-03-22 Intel Corporation Techniques to filter media signals
WO2006123822A1 (ja) * 2005-05-20 2006-11-23 Sony Corporation 信号処理装置
US8077174B2 (en) 2005-12-16 2011-12-13 Nvidia Corporation Hierarchical processor array
US7634637B1 (en) * 2005-12-16 2009-12-15 Nvidia Corporation Execution of parallel groups of threads with per-instruction serialization
US20080046684A1 (en) * 2006-08-17 2008-02-21 International Business Machines Corporation Multithreaded multicore uniprocessor and a heterogeneous multiprocessor incorporating the same
US8099583B2 (en) * 2006-08-23 2012-01-17 Axis Semiconductor, Inc. Method of and apparatus and architecture for real time signal processing by switch-controlled programmable processor configuring and flexible pipeline and parallel processing
US7797514B2 (en) * 2006-11-16 2010-09-14 Texas Instruments Incorporated Scalable multi-threaded sequencing/synchronizing processor architecture
US9354890B1 (en) 2007-10-23 2016-05-31 Marvell International Ltd. Call stack structure for enabling execution of code outside of a subroutine and between call stack frames
US8261025B2 (en) * 2007-11-12 2012-09-04 International Business Machines Corporation Software pipelining on a network on chip
US8095775B1 (en) * 2007-11-21 2012-01-10 Marvell International Ltd. Instruction pointers in very long instruction words
US8526422B2 (en) 2007-11-27 2013-09-03 International Business Machines Corporation Network on chip with partitions
US7917703B2 (en) * 2007-12-13 2011-03-29 International Business Machines Corporation Network on chip that maintains cache coherency with invalidate commands
US8473667B2 (en) 2008-01-11 2013-06-25 International Business Machines Corporation Network on chip that maintains cache coherency with invalidation messages
US8010750B2 (en) * 2008-01-17 2011-08-30 International Business Machines Corporation Network on chip that maintains cache coherency with invalidate commands
US9442758B1 (en) 2008-01-21 2016-09-13 Marvell International Ltd. Dynamic processor core switching
US8018466B2 (en) * 2008-02-12 2011-09-13 International Business Machines Corporation Graphics rendering on a network on chip
US7913010B2 (en) * 2008-02-15 2011-03-22 International Business Machines Corporation Network on chip with a low latency, high bandwidth application messaging interconnect
US8490110B2 (en) 2008-02-15 2013-07-16 International Business Machines Corporation Network on chip with a low latency, high bandwidth application messaging interconnect
US8103853B2 (en) * 2008-03-05 2012-01-24 The Boeing Company Intelligent fabric system on a chip
US20090245257A1 (en) * 2008-04-01 2009-10-01 International Business Machines Corporation Network On Chip
US8078850B2 (en) * 2008-04-24 2011-12-13 International Business Machines Corporation Branch prediction technique using instruction for resetting result table pointer
US20090271172A1 (en) * 2008-04-24 2009-10-29 International Business Machines Corporation Emulating A Computer Run Time Environment
US8423715B2 (en) 2008-05-01 2013-04-16 International Business Machines Corporation Memory management among levels of cache in a memory hierarchy
KR100960148B1 (ko) * 2008-05-07 2010-05-27 한국전자통신연구원 데이터 프로세싱 회로
US8392664B2 (en) 2008-05-09 2013-03-05 International Business Machines Corporation Network on chip
US7958340B2 (en) * 2008-05-09 2011-06-07 International Business Machines Corporation Monitoring software pipeline performance on a network on chip
US8020168B2 (en) * 2008-05-09 2011-09-13 International Business Machines Corporation Dynamic virtual software pipelining on a network on chip
US8214845B2 (en) 2008-05-09 2012-07-03 International Business Machines Corporation Context switching in a network on chip by thread saving and restoring pointers to memory arrays containing valid message data
US8494833B2 (en) 2008-05-09 2013-07-23 International Business Machines Corporation Emulating a computer run time environment
US7991978B2 (en) * 2008-05-09 2011-08-02 International Business Machines Corporation Network on chip with low latency, high bandwidth application messaging interconnects that abstract hardware inter-thread data communications into an architected state of a processor
US7861065B2 (en) * 2008-05-09 2010-12-28 International Business Machines Corporation Preferential dispatching of computer program instructions
US8040799B2 (en) * 2008-05-15 2011-10-18 International Business Machines Corporation Network on chip with minimum guaranteed bandwidth for virtual communications channels
US8230179B2 (en) 2008-05-15 2012-07-24 International Business Machines Corporation Administering non-cacheable memory load instructions
US8078833B2 (en) * 2008-05-29 2011-12-13 Axis Semiconductor, Inc. Microprocessor with highly configurable pipeline and executional unit internal hierarchal structures, optimizable for different types of computational functions
US8181003B2 (en) * 2008-05-29 2012-05-15 Axis Semiconductor, Inc. Instruction set design, control and communication in programmable microprocessor cores and the like
US8438578B2 (en) 2008-06-09 2013-05-07 International Business Machines Corporation Network on chip with an I/O accelerator
JP2010039625A (ja) * 2008-08-01 2010-02-18 Renesas Technology Corp 並列演算装置
US8195884B2 (en) * 2008-09-18 2012-06-05 International Business Machines Corporation Network on chip with caching restrictions for pages of computer memory
WO2011094346A1 (en) * 2010-01-26 2011-08-04 Hobbs Barry L Integrated concurrent multi-standard encoder, decoder and transcoder
US9582443B1 (en) 2010-02-12 2017-02-28 Marvell International Ltd. Serial control channel processor for executing time-based instructions
GB2486485B (en) 2010-12-16 2012-12-19 Imagination Tech Ltd Method and apparatus for scheduling the issue of instructions in a microprocessor using multiple phases of execution
US8884920B1 (en) 2011-05-25 2014-11-11 Marvell International Ltd. Programmatic sensing of capacitive sensors
US9098694B1 (en) 2011-07-06 2015-08-04 Marvell International Ltd. Clone-resistant logic
US9069553B2 (en) 2011-09-06 2015-06-30 Marvell World Trade Ltd. Switching tasks between heterogeneous cores
US10565036B1 (en) 2019-02-14 2020-02-18 Axis Semiconductor, Inc. Method of synchronizing host and coprocessor operations via FIFO communication

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0740252B2 (ja) * 1986-03-08 1995-05-01 株式会社日立製作所 マルチプロセツサシステム
DE4129614C2 (de) * 1990-09-07 2002-03-21 Hitachi Ltd System und Verfahren zur Datenverarbeitung
US5765011A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams
US5963745A (en) * 1990-11-13 1999-10-05 International Business Machines Corporation APAP I/O programmable router
US6002880A (en) * 1992-12-29 1999-12-14 Philips Electronics North America Corporation VLIW processor with less instruction issue slots than functional units
US5682491A (en) * 1994-12-29 1997-10-28 International Business Machines Corporation Selective processing and routing of results among processors controlled by decoding instructions using mask value derived from instruction tag and processor identifier
US5649135A (en) * 1995-01-17 1997-07-15 International Business Machines Corporation Parallel processing system and method using surrogate instructions
US5680597A (en) * 1995-01-26 1997-10-21 International Business Machines Corporation System with flexible local control for modifying same instruction partially in different processor of a SIMD computer system to execute dissimilar sequences of instructions
US5659785A (en) * 1995-02-10 1997-08-19 International Business Machines Corporation Array processor communication architecture with broadcast processor instructions
US5669001A (en) * 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5870576A (en) * 1996-12-16 1999-02-09 Hewlett-Packard Company Method and apparatus for storing and expanding variable-length program instructions upon detection of a miss condition within an instruction cache containing pointers to compressed instructions for wide instruction word processor architectures
US6026478A (en) * 1997-08-01 2000-02-15 Micron Technology, Inc. Split embedded DRAM processor
US6076154A (en) * 1998-01-16 2000-06-13 U.S. Philips Corporation VLIW processor has different functional units operating on commands of different widths

Also Published As

Publication number Publication date
CA2310584A1 (en) 1999-05-20
CN100380313C (zh) 2008-04-09
JP2001523023A (ja) 2001-11-20
USRE41703E1 (en) 2010-09-14
US6151668A (en) 2000-11-21
WO1999024903A1 (en) 1999-05-20
EP1029266A4 (de) 2005-08-17
ATE362623T1 (de) 2007-06-15
EP1029266B1 (de) 2007-05-16
JP4156794B2 (ja) 2008-09-24
CN1278342A (zh) 2000-12-27
EP1029266A1 (de) 2000-08-23
US6446191B1 (en) 2002-09-03
IL135953A0 (en) 2001-05-20
DE69837791D1 (de) 2007-06-28
KR20010031884A (ko) 2001-04-16

Similar Documents

Publication Publication Date Title
DE69837791T2 (de) VERFAHREN UND GERÄT FÜR EFFIZIENTE, SYNCHRONE MIMD-OPERATIONEN MIT iVLIW PE-ZU-PE KOMMUNIKATIONEN
DE69933088T2 (de) Vliw-verarbeiter verarbeitet befehle von verschiedenen breiten
DE19735348B4 (de) Vektorprozessor zur Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern und zugehöriges Verfahren zum Betreiben desselben
DE19914210B4 (de) Verfahren und Prozessor für eine gestaffelte Ausführung einer Anweisung
DE19735350B4 (de) Vektorprozessor zum Ausführen paralleler Operationen und Verfahren hierfür
DE112005000706B4 (de) Verfahren und System zum Bereitstellen von Multi-Threading auf Nutzerebene
DE60011797T2 (de) Ausführung von mehreren fäden in einem parallelprozessor
DE60010907T2 (de) Sram-steuerungvorrichtung für parallele prozessorarchitektur mit adressen- und befehlswarteschlange und arbiter
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE60006270T2 (de) Parallele prozessorarchitektur
DE60018078T2 (de) Einstellung von bedingungswerten in einem rechner
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE60316774T2 (de) Verkettung von mehrfadenprozessorkernen zur bearbeitung von datenpaketen
DE102020122528A1 (de) Softwareunterstütztes Leistungsmanagement
DE102018126001A1 (de) Synchronisation in einem Multi-Kachel-Verarbeitungsarray
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE2944419C2 (de)
DE102012212639A1 (de) Temporäre SIMT-Ausführungs-Optimierung
EP1669885A2 (de) Verfahren zur Selbstsynchronisation von konfigurierbaren Elementen eines programmierbaren Bausteines
DE3248215A1 (de) Vektorprozessor
DE102008005515A1 (de) Virtuelle Architektur und virtueller Befehlssatz für die Berechnung paralleler Befehlsfolgen
DE69826404T2 (de) Datenverarbeitungssystem mit mehreren Prozessoren, die eine Registerbank gemeinsam benutzen
DE19926538A1 (de) Hardware und Betriebsverfahren
DE112012007088T5 (de) Befehl zum Reduzieren von Elementen in einem Vektorregister mit einem schrittweisen Zugriffsmuster
DE3114921C2 (de) Mikroprogramm-Speicheranordnung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition