DE19914617C2 - Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten - Google Patents

Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten

Info

Publication number
DE19914617C2
DE19914617C2 DE19914617A DE19914617A DE19914617C2 DE 19914617 C2 DE19914617 C2 DE 19914617C2 DE 19914617 A DE19914617 A DE 19914617A DE 19914617 A DE19914617 A DE 19914617A DE 19914617 C2 DE19914617 C2 DE 19914617C2
Authority
DE
Germany
Prior art keywords
data
packed
data elements
packed data
register
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
DE19914617A
Other languages
English (en)
Other versions
DE19914617A1 (de
Inventor
Patrice Roussel
Ticky Thakkar
Mohammad A Abdallah
Vladimir Pentkovski
James Coke
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE19914617A1 publication Critical patent/DE19914617A1/de
Application granted granted Critical
Publication of DE19914617C2 publication Critical patent/DE19914617C2/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
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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

Description

Die Erfindung bezieht sich auf einen Prozessor mit einer Mehrzahl von Registern und einer Registerumbenennungs­ einheit, die mit der Mehrzahl von Registern gekoppelt ist, um eine Architekturregisterdatei zum Speichern gepackter Datenoperanden zur Verfügung zu stellen, wobei jeder der gepackten Datenoperanden eine Mehrzahl von Datenelementen aufweist. Ferner bezieht sich die Erfindung auf ein Verfah­ ren zum Ausführen eines Makrobefehls in einem solchen Pro­ zessor. Dabei verwendet der Prozessor beispielsweise die SIMD-Technologie.
Multimedia-Anwendungen, wie beispielsweise 2D/3D-Gra­ fikanwendungen, Bildverarbeitung, Videokompression/Dekom­ pression, Spracherkennungsalgorithmen und Audioverarbeitun­ gen erfordern oftmals, daß die gleiche Operation an einer großen Anzahl von Datenelementen ausgeführt werden soll (was als "Datenparallelität") bezeichnet wird. Jede Art von Multimediaanwendungen implementiert typischerweise einen oder mehrere Algorithmen, die eine Anzahl von Gleitkomma- oder Ganzzahloperationen, wie beispielsweise Addieren (ADD) oder Multiplizieren (MUL) erfordern. Indem Makrobefehle zur Verfügung gestellt werden, deren Ausführung einen Prozessor veranlaßt, die gleiche Operation an mehreren Datenelementen parallel auszuführen (Einzelbefehl-Mehrfachdaten(SIMD)-Tech­ nologie, wie sie beispielsweise von der Pentium®-Prozessor- Architektur und dem MMX-Befehlssatz verwendet wird), wurde eine signifikante Verbesserung bei der Leistung von Multime­ dia-Anwendungen ermöglicht (Pentium® und MMXTM sind eingetra­ gene Marken beziehungsweise Handelsbezeichnungen der Intel Corporation in Santa Clara, Kalifornien).
Die SIMD-Technologie ist insbesondere für solche Syste­ me geeignet, die gepackte Datenformate vorsehen. Ein gepacktes Datenformat ist ein solches, bei dem die Bits in einem Register logisch in eine Anzahl von Datenelementen fester Größe unterteilt sind, wobei jedes Datenelement einen sepa­ raten Wert repräsentiert. Beispielsweise kann ein 64-Bit-Re­ gister in vier 16-Bit-Elemente aufgeteilt werden, von denen jedes einen separaten 16-Bit-Wert repräsentiert. Gepackte- Daten-Befehle können dann separat jedes Element in diesen gepackten Daten parallel verarbeiten.
Operationen an gepackten Daten sowie ein Prozessor zur Ausführung derartiger Operationen sind beispielsweise in WO 97/08608 beschrieben.
Es wird auf Fig. 1 Bezug genommen, in der ein Beispiel eines Gepackte-Daten-Befehls veranschaulicht ist. Bei diesem Beispiel addiert ein gepackter ADD-Befehl (beispielsweise ein SIMD-ADD-Befehl) zugehörige Datenelemente eines ersten gepackten Datenoperanden X und eines zweiten gepackten Da­ tenoperanden Y, um ein Ergebnis Z gepackter Daten zu er­ zeugen, d. h. X0 + Y0 = Z0 X1 + Y1 = Z1 X2 + Y2 = Z2 und X3 + Y3 = Z3. Das Packen vieler Datenelemente in ein Register bzw. einen Speicher­ platz und das Benutzen einer parallelen Hardware-Ausführung gestattet es der SIMD-Architektur, mehrere Operationen gleichzeitig durchzuführen, was zu einer signifikanten Lei­ stungsverbesserung führt. Beispielsweise können bei diesem Beispiel vier einzelne Ergebnisse in derselben Zeit erlangt werden, die zuvor erforderlich war, um ein einziges Ergebnis zu gewinnen.
Bei dem in WO 97/08608 beschriebenen Prozessor werden die Operationen stets an allen Datenelementen parallel durchgeführt. Ein großer Teil der vorhandenen Software ist für skalare Befehle geschrieben, d. h. für Befehle, die an Daten operieren, die nur ein Datenelement in einem Register für gepackte Daten umfassen, welches eine geringere Breite als das Register hat. Betrachtet man den Umfang der Soft­ ware, die für skalare Architekturen (z. B. Einzelbefehl-Ein­ zeldaten(SISD)-Architekturen), die skalare Operationen an Gleitkommadaten einfacher Genauigkeit, Gleitkommadaten dop­ pelter Genauigkeit und Ganzzahldaten benutzen, geschrieben worden ist, so ist es eine Aufgabe der Erfindung, Ent­ wicklern die Option zur Verfügung zu stellen, ihre Software auf Architekturen zu portieren, die Befehle an gepackten Daten unterstützt, wie beispielsweise SIMD-Architekturen, ohne daß deren Software umgeschrieben werden muß und/oder neue Befehle gelernt werden müssen.
Diese Aufgabe wird erfindungsgemäß durch einen Prozes­ sor mit den Merkmalen des Patentanspruchs 1 bzw. ein Verfah­ ren mit den Merkmalen des Patentanspruchs 6 gelöst.
Es werden ein Verfahren und eine Vorrichtung (Prozessor) zum Ausführen von Gepackte-Daten-Befehlen für eine partielle Breite angegeben. Gemäß einem Aspekt der Erfindung enthält ein Prozessor eine Mehrzahl von Registern, eine mit der Mehrzahl von Registern gekoppelte Registerumbenennungseinheit, einen mit der Registerumbenennungseinheit gekoppelten Decodierer und eine mit dem Decodierer gekop­ pelte Ausführungseinheit partieller Breite. Die Registerum­ benennungseinheit stellt eine Architekturregisterdatei zur Verfügung, um gepackte Datenoperanden zu speichern, von denen jeder eine Mehrzahl von Datenelementen enthält. Der Decodierer ist so konfiguriert, daß er einen ersten und einen zweiten Befehlssatz decodieren kann, wobei jeder Befehl wenigstens ein Register in der Architekturregisterda­ tei angibt. Jeder der Befehle des ersten Befehlssatzes spe­ zifiziert Operationen, die an sämtlichen der in dem wenig­ stens einen spezifizierten Register gespeicherten Datenele­ mente ausgeführt werden sollen. Im Unterschied dazu spezifi­ ziert jeder der Befehle des zweiten Befehlssatzes Operatio­ nen, die nur an einer Untermenge der in dem wenigstens einen spezifizierten Register gespeicherten Datenelemente ausge­ führt werden sollen. Die Ausführungseinheit partieller Brei­ te ist so konfiguriert, daß sie von sowohl dem ersten als auch von dem zweiten Satz von Befehlen spezifizierte Opera­ tionen ausführen kann.
Vorteilhafte Weiterbildungen der Erfindung sind in den Unteransprüchen gekennzeichnet.
Im folgenden wird die Erfindung anhand von in der Zeichnung beschriebenen Ausführungsbeispielen näher erläu­ tert. In der Zeichnung zeigen:
Fig. 1 einen gepackten ADD-Befehl, der zugehörige Datenelemente aus einem ersten gepackten Datenoperanden und einem zweiten gepackten Datenoperanden addiert.
Fig. 2A ist eine vereinfachte Blockdarstellung, die ein beispielhaftes Computersystem nach einem Ausführungsbei­ spiel der Erfindung veranschaulicht.
Fig. 2B ist eine vereinfachte Blockdarstellung, die einen Beispielsatz logischer Register gemäß einem Ausfüh­ rungsbeispiel der Erfindung veranschaulicht.
Fig. 2C ist eine vereinfachte Blockdarstellung, die Beispielsätze logischer Register gemäß einem weiteren Aus­ führungsbeispiel der Erfindung veranschaulicht.
Fig. 3 ist ein Ablaufdiagramm, das die Befehlsausfüh­ rung nach einem Ausführungsbeispiel der Erfindung veran­ schaulicht.
Fig. 4 veranschaulicht das Ergebnis der Ausführung eines Befehls für eine partielle Breite gepackter Daten gemäß den verschiedenen Ausführungsbeispielen der Erfindung.
Fig. 5A veranschaulicht eine Schaltungsanordnung zum Ausführen eines Befehls für gepackte Daten voller Breite und für gepackte Daten partieller Breite gemäß einem Ausfüh­ rungsbeispiel der Erfindung.
Fig. 5B veranschaulicht eine Schaltungsanordnung zum Ausführen von Befehlen an gepackten Daten voller Breite und partieller Breite gemäß einem weiteren Ausführungsbeispiel der Erfindung.
Fig. 5C veranschaulicht eine Schaltungsanordnung zum Ausführen von Befehlen an gepackten Daten voller Breite und partieller Breite gemäß einem weiteren Ausführungsbeispiel der Erfindung.
Fig. 6 veranschaulicht eine ADD-Ausführungseinheit und eine MUL-Ausführungseinheit, die in der Lage sind, als vier separate ADD-Ausführungseinheiten bzw. vier separate MUL- Ausführungseinheiten zu arbeiten, gemäß einer beispielhaften Prozessorimplementierung von SIMD.
Fig. 7A-7B veranschaulichen eine Operation an gepackten Daten voller Breite und eine Operation an gepack­ ten Daten partieller Breite, die in einer "gestaffelten" Weise ausgeführt werden.
Fig. 8A veranschaulicht eine Schaltungsanordnung innerhalb eines Prozessors, die auf Operanden voller Breite aus logischen Registern zugreift, während sie jeweils Opera­ tionen an der halben Breite der Operanden ausführt.
Fig. 8B ist ein Zeitdiagramm, das die Schaltungsanord­ nung gemäß Fig. 8A weiter veranschaulicht.
Fig. 9 veranschaulicht ein Ausführungsbeispiel einer Außer-der-Reihe-Pipeline zum Ausführen von Operationen an Operanden in einer "gestaffelten" Weise, indem ein Makrobe­ fehl in eine Mehrzahl von Mikrobefehlen konvertiert wird, die jeweils einen Abschnitt des Operanden voller Breite bearbeiten.
Fig. 10 ist ein Zeitschaubild, das das in Fig. 9 beschriebene Ausführungsbeispiel weiter veranschaulicht.
Fig. 11 ist ein Blockschaltbild, das die Dekodierlogik veranschaulicht, die benutzt werden kann, um die decodie­ rende Verarbeitung gemäß einem Ausführungsbeispiel der Erfindung durchzuführen.
Es werden ein Verfahren und eine Vorrichtung zum Aus­ führen von Befehlen an gepackten Daten partieller Breite beschrieben. Hierbei wird die Bezeichnung "Befehl an gepack­ ten Daten voller Breite" verwendet, um einen Befehl an gepackten Daten (z. B. einen SIMD-Befehl) zu bezeichnen, der an sämtlichen Datenelementen wenigstens eines gepackten Datenoperanden ausgeführt wird. Im Unterschied dazu bezeich­ net der Begriff "Befehl an gepackten Daten partieller Brei­ te" ganz allgemein einen Befehl an gepackten Daten, der nur eine Untermenge der Datenelemente des wenigstens einen gepackten Datenoperanden verarbeiten soll und der ein gepacktes Datenergebnis (beispielsweise an eine Registerda­ tei gepackter Daten) zurückgibt. Beispielsweise kann ein skalarer SIMD-Befehl nur ein Ergebnis einer Operation zwi­ schen dem am geringsten bewerteten Paar von Datenelementen der gepackten Datenoperanden erfordern. Bei diesem Beispiel können die verbleibenden Datenelemente des gepackten Daten­ ergebnisses unberücksichtigt bleiben, da sie keinen Einfluß auf den skalaren SIMD-Befehl haben (beispielsweise können die verbleibenden Datenelemente beliebigen Inhalts sein). Gemäß den verschiedenen Ausführungsbeispielen der Erfindung können Ausführungseinheiten so konfiguriert werden, daß sie effizient sowohl Befehle an gepackten Daten voller Breite (z. B. SIMD-Befehle) als auch einen Satz von Befehlen an gepackten Daten partieller Breite (z. B. skalare SIMD-Befeh­ le) unterbringen können.
In der folgenden detaillierten Beschreibung werden aus Gründen der Erläuterung zahlreiche spezielle Details angege­ ben, um ein besseres Verständnis der Erfindung zu erreichen. Für einen Fachmann ist es jedoch klar, daß diese speziellen Details nicht verwendet werden müssen, um die Erfindung aus­ zuführen. An anderen Stellen werden gut bekannte Einrichtun­ gen, Strukturen, Schnittstellen und Prozesse nicht oder nur in Blockdarstellung gezeigt.
Berechtigung von Befehlen an gepackten Daten partieller Breite
Betrachtet man den Umfang der Software, die für skalare Architekturen (z. B. Einzelbefehl-Einzeldaten(SISD)-Architek­ turen), die skalare Operationen an Gleitkommadaten einfacher Genauigkeit, Gleitkommadaten doppelter Genauigkeit und Ganz­ zahldaten benutzen, geschrieben worden ist, so ist es wün­ schenswert, Entwicklern die Option zur Verfügung zu stellen, ihre Software auf Architekturen zu portieren, die Befehle an gepackten Daten unterstützt, wie beispielsweise SIMD-Archi­ tekturen, ohne daß deren Software umgeschrieben werden muß und/oder neue Befehle gelernt werden müssen. Durch die Schaffung von Befehlen an gepackten Daten partieller Breite kann eine einfache Übersetzung alten skalaren Code in skala­ ren gepackten Datencode transformieren. Beispielsweise wäre es sehr leicht für einen Compiler, skalare SIMD-Befehle aus skalarem Code zu erzeugen. Wenn dann die Entwickler erken­ nen, daß Abschnitte ihrer Software unter Verwendung von SIMD-Befehlen optimiert werden können, können sie schritt­ weise Vorteil aus den Befehlen für gepackte Daten ziehen. Selbstverständlich ist es wahrscheinlich, daß die SIMD-Tech­ nologie benutzende Computersysteme außerdem abwärtskompatibel bleiben, indem sie SISD-Befehle ebenso unterstützen. Jedoch machen es viele jüngere Architekturverbesserungen und andere hier erörterte Faktoren vorteilhaft für Entwickler, zur SIMD-Technologie überzugehen und sie auszunutzen, selbst wenn zunächst nur skalare SIMD-Befehle verwendet werden.
Eine weitere Rechtfertigung für das Vorsehen von Befeh­ len für gepackte Daten partieller Breite besteht in den vie­ len Vorteilen, die erreicht werden können, indem nur eine Untermenge des Operanden voller Breite bearbeitet wird, ein­ schließlich des reduzierten Stromverbrauchs, der erhöhten Geschwindigkeit, eines sauberen Ausnahmemodells und einer erhöhten Speicherung. Wie unten erläutert wird, können auf der Grundlage eines mit dem Befehl für gepackte Daten parti­ eller Breite zur Verfügung gestellten Hinweises Stromeinspa­ rungen erreicht werden, indem selektiv diejenigen Hardware­ einheiten abgeschaltet werden, die zum Ausführen der gegen­ wärtigen Operation nicht erforderlich sind.
Eine weitere Situation, in welcher es nicht erwünscht ist, einen Befehl für gepackte Daten zu zwingen, einzelne Ergebnisse für jedes Paar von Datenelementen zurückzugeben, umfaßt arithmetische Operationen in einer Umgebung, die eine Hardware partieller Breite zur Verfügung stellt. Infolge der Kosten- und/oder Chip-Einschränkungen ist es üblich, für bestimmte arithmetische Operationen, wie beispielsweise das Dividieren, nicht die vollständige Unterstützung zur Verfü­ gung zu stellen. Ihrer Natur nach ist die Divisionsoperation sehr lang, selbst wenn Hardware voller Breite (beispielsweise eine Eins-zu-eins-Korrespondenz zwischen Ausführungseinheiten und Datenelementen) implementiert ist. Folglich wird in einer Umgebung, die nur Operationen an gepackten Daten voller Breite unterstützt, während Hardware partieller Breite zur Verfügung gestellt wird, die Verzöge­ rung noch länger. Wie unten näher veranschaulicht wird, kann eine Operation für gepackte Daten partieller Breite, wie beispielsweise eine Divisionsoperation für gepackte Daten partieller Breite, es selektiv bestimmten Abschnitten ihrer Operanden gestatten, die Divisionshardware zu umgehen. Auf diese Weise wird kein Leistungsnachteil dadurch verursacht, daß nur eine Untermenge der Datenelemente in den gepackten Datenoperanden bearbeitet wird.
Zusätzlich können Ausnahmen, die in Verbindung mit unwesentlichen Datenelementen entstehen, eine Konfusion für den Entwickler und/oder eine Inkompatibilität zwischen SISD- und SIMD-Maschinen verursachen. Folglich ist es vorteilhaft, Ausnahmen nur für diejenigen Datenelemente zu berichten, für die der Befehl gedacht ist. Eine Unterstützung von Befehlen für gepackte Daten partieller Breite gestattet, daß ein vor­ hersagbares Ausnahmemodell erreicht wird, indem das Auslösen von Ausnahmebedingungen auf diejenigen begrenzt wird, die in Verbindung mit solchen Datenelementen auftreten, die bear­ beitet werden, oder bei welchen durch unwesentliche Daten­ elemente erzeugte Ausnahmen wahrscheinlich eine Konfusion oder Inkompatibilität zwischen SISD- und SIMD-Maschinen ver­ ursachen würde.
Schließlich stellen bei Ausführungsbeispielen, bei denen Abschnitte des gepackten Zieldatenoperanden nicht im Ergebnis der Ausführung einer Operation für gepackte Daten partieller Breite verfälscht werden, Befehle für gepackte Daten partieller Breite effektiv einen zusätzlichen Regi­ sterraum zum Speichern von Daten zur Verfügung. Wenn bei­ spielsweise an dem unteren Abschnitt des gepackten Datenope­ randen eine Operation ausgeführt wird, können Daten im obe­ ren Abschnitt gespeichert werden und umgekehrt.
Ein Beispielcomputersystem
Fig. 2A ist ein vereinfachtes Blockschaltbild, das ein Beispielcomputersystem gemäß einem Ausführungsbeispiel der Erfindung veranschaulicht. Bei dem dargestellten Ausfüh­ rungsbeispiel enthält ein Computersystem 200 einen Prozessor 205, eine Speichereinrichtung 210 und einen Bus 215. Der Prozessor 205 ist mit der Speichereinrichtung 210 durch den Bus 215 gekoppelt. Zusätzlich sind eine Reihe von Benutzereingabe/Ausgabeeinrichtungen, wie beispielsweise eine Tasta­ tur 220 und eine Anzeige 225, ebenfalls mit dem Bus 215 ge­ koppelt. Das Computersystem 200 kann darüber hinaus mit einem Netzwerk 230 über den Bus 215 gekoppelt sein. Der Pro­ zessor 205 repräsentiert eine zentrale Verarbeitungseinheit einer beliebigen Architektur, wie beispielsweise einer CISC-, RISC-, VLIW- oder Hybrid-Architektur. Darüber hinaus kann der Prozessor 205 auf einem oder mehreren Chips implementiert sein. Die Speichereinrichtung 210 repräsen­ tiert einen oder mehrere Mechanismen zum Speichern von Daten. Beispielsweise kann die Speichereinrichtung 210 einen Nur-Lese-Speicher (ROM), einen Speicher mit wahlfreiem Zugriff (RAM), ein magnetisches Plattenspeichermedium, ein optisches Speichermedium, Flash-Speicherbauelemente und/oder andere maschinenlesbare Medien umfassen. Der Bus 215 reprä­ sentiert einen oder mehrere Busse (z. B. AGP, PCI, ISA, X- Bus, EISA, VESA usw.) und Brücken (die auch als Bussteuer­ einrichtungen bezeichnet werden). Während dieses Ausfüh­ rungsbeispiel in Bezug auf ein Einzelprozessor-Compuzersy­ stem beschrieben wird, ist es klar, daß die Erfindung auch in einem Multi-Prozessor-Computersystem implementiert werden kann. Außerdem ist, obwohl das vorliegende Ausführungsbei­ spiel in Bezug auf ein 32-Bit- und ein 64-Bit-Computersystem beschrieben wird, die Erfindung nicht auf ein derartiges Computersystem begrenzt.
Fig. 2A veranschaulicht zusätzlich, daß der Prozessor 205 eine Befehlssatzeinheit 260 enthält. Selbstverständlich enthält der Prozessor 205 zusätzliche Schaltungen; jedoch sind derartige zusätzliche Schaltungen nicht für das Ver­ ständnis der Erfindung erforderlich. Auf jeden Fall enthält die Befehlssatzeinheit 260 die Hardware und/oder Firmware zum Decodieren und Ausführen eines oder mehrerer Befehls­ sätze. Bei dem dargestellten Ausführungsbeispiel enthält die Befehlssatzeinheit 260 eine Dekodier/Ausführungs-Einheit 275. Die Dekodiereinheit dekodiert Befehle, die von dem Pro­ zessor 205 empfangen worden sind, in einen oder mehrere Mikrobefehle. Die Ausführungseinheit führt in Erwiderung der von der Dekodiereinheit empfangenen Mikrobefehle geeignete Operationen durch. Die Dekodiereinheit kann unter Verwendung einer Reihe unterschiedlicher Mechanismen (beispielsweise einer Nachschlagetabelle, einer Hardware-Implementierung, einer PLA etc.) implementiert werden.
Bei dem vorliegenden Beispiel ist eine Deko­ dier/Ausführungs-Einheit 275 gezeigt, die einen Befehlssatz 280 enthält, der sowohl Befehle für gepackte Daten voller Breite als auch Befehle für gepackte Daten partieller Breite enthält. Diese Befehle für gepackte Daten können, wenn sie ausgeführt werden, den Prozessor 205 veranlassen, gepackte Gleitkommaoperationen voller/partieller Breite und/oder gepackte Ganzzahloperationen voller/partieller Breite durch­ zuführen. Zusätzlich zu den Befehlen für gepackte Daten kann der Befehlssatz 280 weitere in vorhandenen Mikroprozessoren zu findende Befehle enthalten. Beispielsweise unterstützt der Prozessor 205 bei einem Ausführungsbeispiel einen Befehlssatz, der mit der Intel-32-Bit-Architektur (IA-32) und/oder der Intel-64-Bit-Architektur (IA-64) kompatibel ist.
Außerdem ist in der Befehlssatzeinheit 260 eine Spei­ chereinheit 285 enthalten. Die Speichereinheit 285 kann einen oder mehrere Sätze von Architekturregistern (auch als logische Register bezeichnet), enthalten, die von dem Pro­ zessor 205 zum Speichern von Informationen, einschließlich Gleitkommadaten und gepackten Gleitkommadaten, benutzt wer­ den. Zusätzlich können weitere logische Register zum Spei­ chern von Ganzzahldaten, gepackten Ganzzahldaten und ver­ schiedenen Steuerdaten, wie beispielsweise einer Anzeige für die Spitze des Stapelspeichers und dergleichen, enthalten sein. Die Begriffe Architekturregister und logische Register werden im folgenden verwendet, um auf das Konzept der Art und Weise Bezug zu nehmen, auf welche Befehle einen Spei­ cherbereich angeben, der einen einzelnen Operanden enthält. So kann ein logisches Register in Hardware unter Verwendung einer beliebigen Anzahl gut bekannter Techniken implementiert sein, einschließlich eines speziellen physika­ lischen Registers, eines oder mehrerer dynamisch unter Ver­ wendung eines Registerumbenennungsmechanismus (detaillierter unten beschrieben) zugewiesener physikalischer Register, etc. In jedem Fall repräsentiert ein logisches Register die kleinste Einheit eines durch einen Befehl für gepackte Daten adressierbaren Speichers.
Bei dem dargestellten Ausführungsbeispiel ist in der Speichereinrichtung 210 ein Betriebssystem (OS) 235 und eine Routine für gepackte Daten 240 zur Ausführung durch das Com­ putersystem 200 gespeichert. Die Routine 240 für gepackte Daten ist eine Sequenz von Befehlen, die einen oder mehrere Befehle für gepackte Daten, wie beispielsweise skalara SIMD- Befehle oder SIMD-Befehle enthalten kann. Wie unten näher erörtert wird, gibt es Situationen, einschließlich Geschwin­ digkeits-, Stromverbrauchs- und Ausnahmebehandlung, in denen es erwünscht ist, eine Operation nur an einer Untermenge von Datenelementen in einem gepackten Datenoperanden oder einem Paar gepackter Datenoperanden durchzuführen (oder nur für diese Untermenge einzelne Ergebnisse zurückzugeben). Folg­ lich ist es für den Prozessor 205 vorteilhaft, in der Lage zu sein, zwischen Befehlen für gepackte Daten voller Breite und Befehlen für gepackte Daten partieller Breite unter­ scheiden zu können und diese entsprechend ausführen zu kön­ nen.
Fig. 2B ist eine vereinfachte Blockdarstellung, die Beispielsätze von logischen Registern gemäß einem Ausfüh­ rungsbeispiel der Erfindung veranschaulicht. Bei diesem Bei­ spiel enthält die Speichereinheit 285 eine Mehrzahl skalarer Gleitkommaregister 291 (eine skalare Registerdatei) und eine Mehrzahl gepackter Gleitkommaregister 292 (eine Registerda­ tei für gepackte Daten). Die skalaren Gleitkommaregister 291 (z. B. die Register R0-R7) können als eine als Stapel refe­ renzierte Registerdatei implementiert sein, wenn Gleitkomma­ befehle so ausgeführt werden, daß sie kompatibel mit der vorhandenen, für die Intel-Architektur geschriebenen Soft­ ware sein sollen. Bei alternativen Ausführungsbeispielen je­ doch können die Register 291 als eine flache Registerdatei behandelt werden. Bei dem dargestellten Ausführungsbeispiel ist jedes der gepackten Gleitkommaregister (z. B. XMM0-XMM7) als ein einzelnes logisches 128-Bit-Register implementiert. Es ist jedoch klar, daß breitere oder schmalere Register benutzt werden können, um an eine Implementierung angepaßt zu sein, die mehr oder weniger Datenelemente oder größere oder kleinere Datenelemente verwendet. Zusätzlich können mehr oder weniger packte Gleitkommaregister 292 vorgesehen sein. Ähnlich wie die skalaren Gleitkommaregister 291 können die gepackten Gleitkommaregister 292 entweder als stapel­ referenzierte Registerdatei oder als flache Registerdatei implementiert werden, wenn die gepackten Gleitkommabefehle ausgeführt werden
Fig. 2C ist eine vereinfachte Blockdarstellung, die beispielhafte Sätze logischer Register nach einem weiteren Ausführungsbeispiel der Erfindung veranschaulicht. Bei die­ sem Beispiel enthält die Speichereinheit 285 wiederum eine Mehrzahl skalarer Gleitkommaregister 291 (eine skalare Regi­ sterdatei) und eine Mehrzahl gepackter Gleitkommaregister 292 (eine Registerdatei gepackter Daten). Jedoch werden bei dem dargestellten Ausführungsbeispiel sämtliche gepackten Gleitkommaregister (z. B. XMM0-XMM7) als einander entspre­ chende Paare hoher 293 und niedriger Register 294 implementiert. Wie unten näher erörtert werden wird, ist es für die Zwecke der Befehlsdekodierung vorteilhaft, den logi­ schen Registeradreßraum für die gepackten Gleitkommaregister 292 so zu organisieren, daß sich die Paare hoher und niedri­ ger Register durch ein einzelnes Bit unterscheiden. Bei­ spielsweise können die hohen und niedrigen Abschnitte von XMM0-XMM7 durch das MSB (most significant bit) differenziert werden. Vorzugsweise ist jedes der gepackten Gleitkommaregi­ ster 291 breit genug, um vier 32-Bit-Gleitkommadaten-Elemen­ te einfacher Genauigkeit aufzunehmen. Wie oben jedoch können breitere oder schmalere Register benutzt werden, um an Implementierungen angepaßt zu werden, die mehr oder weniger Datenelemente bzw. größere oder kleinere Datenelemente ver­ wenden. Zusätzlich können, während die logischen gepackten Gleitkommaregister 292 bei diesem Beispiel jeweils einander entsprechende Paare von 64-Bit-Registern aufweisen, bei alternativen Ausführungsbeispielen sämtliche gepackten Gleitkommaregister eine beliebige Anzahl von Registern umfassen.
Übersicht über die Befehlsausführung
Nachdem ein Beispielcomputersystem beschrieben worden ist, in welchem ein Ausführungsbeispiel der Erfindung implementiert werden kann, wird jetzt die Befehlsausführung beschrieben.
Fig. 3 ist ein Ablaufdiagramm, das die Befehlsausfüh­ rung gemäß einem Ausführungsbeispiel der Erfindung veran­ schaulicht. Im Schritt 310 wird ein Befehl durch den Prozes­ sor 205 empfangen. Im Schritt 320 wird die Verarbeitung auf der Grundlage der Art des Befehls (ob es ein Befehl für gepackte Daten partieller Breite (zum Beispiel ein skalarer SIMD-Befehl) oder ein Befehl für gepackte Daten voller Breite (zum Beispiel ein SIMD-Befehl) ist) entweder mit dem Schritt 330 oder dem Schritt 340 fortgesetzt. Üblicherweise wird in der Dekodiereinheit die Art des Befehls auf der Grundlage der in dem Befehl enthaltenen Informationen bestimmt. Beispielsweise können die Informationen einen Prä­ fix oder Suffix enthalten, der an den Befehlscode angehängt oder über einen Direktdatenwert zur Verfügung gestellt wird, um anzuzeigen, ob die zugehörige Operation an sämtlichen oder einer Untermenge der Datenelemente des gepackten Daten­ operanden bzw. der gepackten Datenoperanden ausgeführt wer­ den soll. Auf diese Weise kann der gleiche Befehlscode sowohl für Operationen an gepackten Daten voller Breite als auch für Operationen an gepackten Daten partieller Breite verwendet werden. Alternativ kann ein Satz von Befehlscodes für Operationen an gepackten Daten partieller Breite und ein anderer Befehlscodesatz für Operationen an gepackten Daten voller Breite verwendet werden.
In jedem Fall wird dann, wenn der Befehl ein herkömmli­ cher Befehl für gepackte Daten voller Breite ist, im Schritt 330 ein gepacktes Datenergebnis bestimmt, indem die von dem Befehl spezifizierte Operation an jedem der Datenelemente in dem bzw. den Operanden ausgeführt wird. Wenn jedoch der Befehl ein Befehl für gepackte Daten partieller Breite ist, dann wird im Schritt 340 ein erster Abschnitt des Ergebnis­ ses bestimmt, indem die von dem Befehl spezifizierte Opera­ tion an einer Untermenge der Datenelemente durchgeführt wird und indem der Rest des Ergebnisses auf einen oder mehrere vorgegebene Werte gesetzt wird. Bei einem Ausführungsbei­ spiel ist der vorgegebene Wert der Wert der jeweils einander entsprechenden Datenelemente in einem der Operanden. Das heißt, es können Datenelemente von den Datenelementen eines der Operanden zu den jeweils entsprechenden Datenelementen in dem gepackten Datenergebnis "durchgeleitet" werden. Bei einem anderen Ausführungsbeispiel können die Datenelemente in dem verbleibenden Abschnitt des Ergebnisses sämtlich gelöscht (auf Null gesetzt) werden. Eine Beispiellogik zum Durchführen des Durchleitens der Datenelemente von einem der Operanden zu dem Ergebnis und eine Beispiellogik zum Löschen der Datenelemente in dem Ergebnis werden unten beschrieben.
Fig. 4 veranschaulicht das Ergebnis der Ausführung eines Befehls für gepackte Daten partieller Breite gemäß den verschiedenen Ausführungsbeispielen der Erfindung. Bei die­ sem Beispiel wird eine Operation an Datenelementen von zwei logischen Quellenregistern 410 und 420 durch eine Ausfüh­ rungseinheit 440 ausgeführt. Die Ausführungseinheit 440 ent­ hält eine Schaltungsanordnung und Logik zum Durchführen der von dem Befehl spezifizierten Operationen. Zusätzlich kann die Ausführungseinheit 440 eine Auswahlschaltung enthalten, die es der Ausführungseinheit 440 gestattet, entweder in einem Modus für gepackte Daten partieller Breite oder in einem Modus für gepackte Daten voller Breite zu arbeiten. Beispielsweise kann die Ausführungseinheit 440 eine Durchleitschaltung zum Durchleiten von Datenelementen von einem der logischen Quellregister 410, 420 zu dem logischen Zielregister 430 enthalten, oder sie kann eine Löschschal­ tung zum Löschen eines oder mehrerer Datenelemente des logi­ schen Zielregisters 430 enthalten. Zahlreiche andere Techni­ ken können ebenfalls benutzt werden, um das Ergebnis der Operation zu beeinflussen, wobei diese Techniken einschlie­ ßen, daß eines der Eingangssignale für die Operation auf einen vorgegebenen Wert gezwungen wird, wie beispielsweise einen Wert, der die Operation zwingen würde, ihre Identi­ tätsfunktion durchzuführen, oder einen Wert, der durch die arithmetischen Operationen laufen kann, ohne eine Ausnahme (z. B. eine quiet not-a-number (QNaN)) zu signalisieren.
Bei dem veranschaulichten Beispiel wird nur das Ergeb­ nis (Z0) der Operation an dem ersten Paar von Datenelementen (X0 und Y0) in dem logischen Zielregister 430 gespeichert. Nimmt man an, daß die Ausführungseinheit 440 eine Durchleit­ logik enthält, so werden die verbleibenden Datenelemente des logischen Zielregisters 430 auf die Werte aus den zugehöri­ gen Datenelementen des logischen Quellregisters 410 (d. h. X3, X2 und X1) gesetzt. Während das logische Zielregisters 430 als ein separates logisches Register gezeigt ist, ist es wichtig anzumerken, daß es gleichzeitig als eines der logi­ schen Quellregister 410, 420 dienen kann. Folglich sollte es klar sein, daß das Setzen der Datenelemente des logischen Zielregisters 430 auf Werte aus einem der logischen Quellre­ gister 410, 420 in diesem Kontext bedeuten kann, daß in die­ sen Datenelementen überhaupt nichts passiert. Beispielsweise können in dem Fall, daß das logische Quellregister 410 so­ wohl ein logisches Quell- als auch ein Zielregister ist, verschiedene Ausführungsbeispiele Vorteile daraus ziehen, und einfach eines oder mehrere der Datenelemente, die durch­ geleitet werden sollen, nicht berühren.
Alternativ kann die Ausführungseinheit 440 eine Lösch­ logik enthalten. So werden anstelle des Durchleitens von Werten von einem der logischen Quellregister zu dem logi­ schen Zielregister 430 diejenigen Datenelemente in dem Er­ gebnis, die nicht erforderlich sind, gelöscht. Wiederum wird bei diesem Beispiel nur das Ergebnis (Z0) der Operation an dem ersten Paar von Datenelementen (X0 und Y0) in dem logi­ schen Zielregister 430 gespeichert. Die verbleibenden Daten­ elemente des logischen Zielregisters 430 werden "gelöscht" (d. h. auf Null oder auf einen anderen für diesen Fall vorge­ gebenen Wert gesetzt).
Hardware voller Breite
Die Fig. 5A-5C veranschaulichen Ausführungseinheiten 540, 560 bzw. 580, welche sowohl Befehle für gepackte Daten voller Breite als auch für gepackte Daten partieller Breite ausführen können. Die in den Ausführungseinheiten gemäß Fig. 5A und 5C enthaltene Auswahllogik stellt eine bei­ spielhafte Durchleitlogik dar, während die Auswahllogik gemäß Fig. 5B für eine Löschlogik, die benutzt werden kann, repräsentativ ist. Bei den dargestellten Ausführungsbeispie­ len enthalten die Ausführungseinheiten 540, 560 und 580 jeweils eine geeignete Logik, Schaltungsanordnung und/oder Firmware zum gleichzeitigen Ausführen einer Operation 570, 571 und 572 an den Operanden voller Breite (X und Y).
Es wird jetzt auf Fig. 5A Bezug genommen, bei der die Ausführungseinheit 540 eine Auswahllogik (zum Beispiel Mul­ tiplexer (MUX) 555-557) enthält, um zwischen einem durch die Operation 570 erzeugten Wert und einem aus einem entspre­ chenden Datenelement eines der Operanden herrührenden Wert auszuwählen. Die MUX 555-557 können beispielsweise durch ein Signal gesteuert werden, das anzeigt, ob die gerade ausge­ führte Operation eine Operation an gepackten Daten voller Breite oder eine Operation an gepackten Daten partieller Breite ist. Bei alternativen Ausführungsbeispielen kann eine zusätzliche Flexibilität dadurch erreicht werden, daß eine zusätzliche MUX für das Datenelement 0 eingeschlossen wird und/oder jede MUX unabhängig gesteuert wird. Verschiedene Einrichtungen zum Schaffen einer MUX-Steuerung sind möglich. Gemäß einem Ausführungsbeispiel kann eine solche Steuerung aus dem Befehl selbst herrühren, oder aus ihm abgeleitet werden oder sie kann durch einen Direktwert zur Verfügung gestellt werden. Beispielsweise kann ein 4-Bit-Direktwert, der dem Befehl zugeordnet ist, verwendet werden, um eine direkte Steuerung der MUX 555-557 durch Software zu gestat­ ten. Diejenigen Multiplexer, die zu einer Eins in dem Direktwert gehören, können angewiesen werden, das Ergebnis der Operation auszuwählen, während diejenigen Multiplexer, die zu einer Null gehören, veranlaßt werden können, das Durchleiten von Daten auszuwählen. Selbstverständlich kann eine größere oder geringere Auflösung bei verschiedenen Implementierungen erreicht werden, indem mehr oder weniger Bits zum Darstellen des Direktwerts benutzt werden.
Es wird jetzt auf Fig. 5B Bezug genommen, bei der die Ausführungseinheit 540 eine Auswahllogik (z. B. Multiplexer 565-567) zum Auswählen zwischen einem durch eine Operation 571 erzeugten Wert und einem vorgegebenen Wert (z. B. Null) enthält. Wie oben, können die Multiplexer 565-567 sich unter einer gemeinsamen Steuerung befinden oder unabhängig gesteu­ ert werden.
Die Durchleitlogik gemäß Fig. 5C (z. B. Multiplexer 575-576) wählt zwischen einem Datenelement eines der Operan­ den und einem Identitätsfunktionswert 590 aus. Der Identi­ tätsfunktionswert 590 wird grundsätzlich so ausgewählt, daß das Ergebnis der Durchführung der Operation 572 zwischen dem Identitätsfunktionswert 590 und dem Datenelement identisch dem Wert des Datenelements ist. Wenn beispielsweise die Ope­ ration 572 eine Multiplikationsoperation wäre, dann wäre der Identitätsfunktionswert 590 eine Eins. In ähnlicher Weise wäre dann, wenn die Operation 572 eine Additionsoperation wäre, der Identitätsfunktionswert 590 eine Null. Auf diese Weise kann der Wert eines Datenelements selektiv zu dem logischen Zielregister 430 hindurchgeleitet werden, indem die entsprechenden Multiplexer 575-577 veranlaßt werden, den Identitätsfunktionswert 590 auszugeben.
Bei den oben beschriebenen Ausführungsbeispielen war die Schaltung fest verdrahtet, so daß die Operationen parti­ eller Breite an dem am geringsten bewerteten Datenelementab­ schnitt durchgeführt wurden. Es ist klar, daß die Operation an anderen Datenelementabschnitten als die dargestellten durchgeführt werden kann. Darüber hinaus können, wie oben beschrieben wurde, die zu bearbeitenden Datenelemente durch Software konfigurierbar gemacht werden, indem sämtliche der Operationen mit einem Multiplexer oder dergleichen und nicht nur eine Untermenge der Operationen, wie es in den Fig. 5A-5C dargestellt ist, gekoppelt werden. Während eine Durchleit- und eine Löschlogik als zwei Optionen zum Behan­ deln der sich ergebenden Datenelemente, die Operationen ent­ sprechen, die nicht berücksichtigt werden sollen, beschrie­ ben werden, können darüber hinaus alternative Ausführungs­ beispiele andere Techniken benutzen. Beispielsweise kann ein QNaN als einer der Operanden einer Operation eingegeben wer­ den, deren Ergebnis vernachlässigt werden soll. Auf diese Weise leiten Operationen, die mit dem IEEE 754-Standard, IEEE std. 754-1985, veröffentlicht am 21. März 1985, über­ einstimmen, ein NaN zu dem Ergebnis weiter, ohne eine arith­ metische Ausnahme auszulösen.
Während keine deutliche Geschwindigkeitserhöhung bei den oben beschriebenen Ausführungsbeispielen erreicht wird, da die volle Breite der Operanden parallel verarbeitet wer­ den kann, ist es klar, daß der Stromverbrauch reduziert wer­ den kann, indem diejenigen der Operationen abgeschaltet wer­ den, deren Ergebnisse vernachlässigt werden. So können beträchtliche Energieeinsparungen erreicht werden. Darüber hinaus kann bei Verwendung von QNaNs und/oder von Identi­ tätsfunktionswerten ein vorhersagbares Ausnahmemode 11 auf­ rechterhalten werden, indem vermieden wird, daß Ausnahmen durch Datenelemente ausgelöst werden, die nicht Teil der Operation an gepackten Daten partieller Breite sind. Folg­ lich sind die berichteten Ausnahmen auf diejenigen begrenzt, die in Verbindung mit denjenigen Datenelementen entstehen, an welchen die Operation für gepackte Daten partieller Breite vorgibt zu arbeiten.
Fig. 6 veranschaulicht eine aktuelle Prozessorimple­ mentierung einer arithmetisch-logischen Einheit (ALU), die zum Ausführen von Befehlen für gepackte Daten voller Breite verwendet werden kann. Die ALU gemäß Fig. 6 enthält die Schaltung, die zum Ausführen von Operationen an der vollen Breite der Operanden (d. h. an sämtlichen Datenelementen) erforderlich ist. Fig. 6 zeigt darüber hinaus, daß die ALU mehrere unterschiedliche Arten von Ausführungseinheiten ent­ halten kann. Bei diesem Beispiel enthält die ALU zwei unter­ schiedliche Arten von Ausführungseinheiten zum Ausführen unterschiedlicher Arten von Operationen (z. B. verwenden bestimmte ALUs separate Einheiten zum Durchführen von ADD- und MUL-Operationen). Die ADD-Ausführungseinheit und die MUL-Ausführungseinheit sind jeweils in der Lage, als vier separate ADD-Ausführungseinheiten bzw. vier separate MUL- Ausführungseinheiten betrieben zu werden. Alternativ kann die ALU eine oder mehrere Multipliziere-Akkumuliere(MAC)- Einheiten enthalten, die jeweils in der Lage sind, mehr als nur eine Art einer Operation durchzuführen. Während die fol­ genden Beispiele die Verwendung von ADD- und MUL-Ausfüh­ rungseinheiten und Gleitkommaoperationen unterstellen, ist es klar, daß andere Ausführungseinheiten, wie beispielsweise MAC und/oder Ganzzahloperationen ebensogut verwendet werden können. Ferner kann es vorzuziehen sein, eine Implementie­ rung partieller Breite zu benutzen (z. B. eine Implementie­ rung mit weniger als einer Eins-zu-eins-Korrespondenz zwi­ schen den Ausführungseinheiten und den Datenelementen) sowie eine zusätzliche Logik, zum Koordinieren der erneuten Ver­ wendung der Ausführungseinheiten, wie es unten beschrieben wird.
Hardware partieller Breite und "gestaffelte Ausführung"
Die Fig. 7A-7B veranschaulichen eine Operation für gepackte Daten voller Breite bzw. eine in einer "gestaffelten" Weise durchgeführte Operation für gepackte Daten partieller Breite. Im Kontext dieses Ausführungsbei­ spiels bezieht sich die "gestaffelte Ausführung" auf den Prozeß des Unterteilens jedes der Operanden eines Befehls in separate Segmente und die sequentielle Verarbeitung jedes Segments unter Verwendung derselben Hardware. Die Segmente werden sequentiell verarbeitet, indem eine Verzögerung in die Verarbeitung aufeinanderfolgender Segmente eingeführt wird. Wie es in den Fig. 7A-7B veranschaulicht ist, wer­ den in beiden Fällen die gepackten Datenoperanden in ein "hoch bewertetes Segment" (Datenelemente 3 und 2) und ein "niedrig bewertetes Segment" (Datenelemente 1 und 0) unter­ teilt. Bei dem Beispiel gemäß Fig. 7A wird das niedrig bewertete Segment verarbeitet, während das hoch bewertete Segment verzögert wird. Nachfolgend wird das hoch bewertete Segment verarbeitet, und es wird ein Ergebnis voller Breite erzielt. Bei dem Beispiel gemäß Fig. 7B wird das niedrig bewertete Segment verarbeitet, während die Tatsache, ob das hoch bewertete Datensegment verarbeitet wird, von der Imple­ mentierung abhängig ist. Beispielsweise braucht das hoch bewertete Datensegment nicht verarbeitet zu werden, sofern das zugehörige Ergebnis auf Null gesetzt werden soll. Zusätzlich ist es klar, daß dann, wenn das hoch bewertete Datensegment nicht verarbeitet wird, sowohl das hoch als auch das niedrig bewertete Datensegment zur gleichen Zeit bearbeitet werden können. In ähnlicher Weise können bei einer Implementierung voller Breite (z. B. einer Implementie­ rung mit einer Eins-zu-Eins-Korrespondenz zwischen Ausfüh­ rungseinheiten und Datenelementen) die hoch und niedrig bewerteten Datensegmente gleichzeitig verarbeitet werden oder alternativ so, wie es in Fig. 7A gezeigt ist.
Obwohl im folgenden nur Ausführungsbeispiele beschrie­ ben werden, die nur ADD- und MUL-Ausführungseinheiten aufweisen, können darüber hinaus auch andere Arten von Ausfüh­ rungseinheiten, wie beispielsweise MAC-Einheiten, verwendet werden.
Während es eine Reihe unterschiedlicher Wege gibt, auf welchen die gestaffelte Ausführung von Befehlen erreicht werden kann, beschreiben die folgenden Abschnitte zwei exem­ plarische Ausführungsbeispiele, um diesen Aspekt der Erfin­ dung zu veranschaulichen. Insbesondere empfangen beide der beschriebenen Ausführungsbeispiele jeweils denselben Makro­ befehl, der 128-Bit-Operanden enthaltende logische Register spezifiziert.
Bei dem ersten Ausführungsbeispiel bewirkt jeder Makro­ befehl, der 128-Bit-Operanden enthaltende logische Register spezifiziert, daß auf die volle Breite der Operanden aus den physikalischen Registern zugegriffen wird. Nach dem Zugriff auf die Operanden voller Breite aus den Registern werden die Operanden in die niedrig und hoch bewertete Segmente unter­ teilt (z. B. unter Verwendung von Latch-Speichern und Multi­ plexern) und sequentiell unter Verwendung derselben Hardware ausgeführt. Die resultierenden Ergebnisse halber Breite wer­ den gesammelt und dann gleichzeitig in ein einziges logi­ sches Register geschrieben.
Im Unterschied dazu wird bei dem zweiten Ausführungs­ beispiel jeder 128-Bit-Operanden enthaltende logische Regi­ ster spezifizierende Makrobefehl in zumindest zwei Mikrobe­ fehle unterteilt, die jeweils an nur der Hälfte der Operan­ den operieren. Somit werden die Operanden in ein hoch und ein niedrig bewertetes Segment unterteilt und jeder Mikrobe­ fehl bewirkt separat, daß nur auf die Hälfte der Operanden aus den Registern zugegriffen wird. Diese Art einer Unter­ teilung ist bei einer SIMD-Architektur möglich, weil jeder der Operanden unabhängig von dem anderen ist. Während Imple­ mentierungen des zweiten Ausführungsbeispiels die Mikrobe­ fehle in einer beliebigen Reihenfolge (entweder in einem In- der-Reihenfolge oder einem Außer-der-Reihe-Ausführungsmo­ dell) ausführen können, bewirken die jeweiligen Mikrobefehle, daß die von dem Makrobefehl spezifizierte Operation unabhängig oder separat an dem niedrig und hoch bewerteten Segment der Operanden durchgeführt wird. Darüber hinaus bewirkt jeder Mikrobefehl, daß die Hälfte der sich ergeben­ den Operanden in ein einziges logisches Zielregister, das durch den Makrobefehl spezifiziert ist, geschrieben wird.
Während Ausführungsbeispiele beschrieben werden, bei welchen 128-Bit-Operanden in zwei Segmente unterteilt wer­ den, könnten alternative Ausführungsbeispiele größere oder kleinere Operanden verwenden und/oder diese Operanden in mehr als zwei Segmente unterteilen. Zusätzlich könnten, obwohl zwei Ausführungsbeispiel zum Durchführen einer gestaffelten Ausführung beschrieben wurden, alternative Aus­ führungsbeispiele andere Techniken verwenden.
Erstes eine "gestaffelte Ausführung" benutzendes Ausfüh­ rungsbeispiel
Fig. 8A veranschaulicht eine Schaltungsanordnung in­ nerhalb eines Prozessors gemäß einem ersten Ausführungsbei­ spiel, die auf Operanden voller Breite aus den logischen Registern zugreift, aber die die Operationen jeweils an der Hälfte der Breite der Operanden durchführt. Dieses Ausfüh­ rungsbeispiel unterstellt, daß die Prozessorausführungsma­ schine in der Lage ist, einen Befehl pro Taktzyklus zu ver­ arbeiten. Als Beispiel sei angenommen, daß die folgende Sequenz von Befehlen ausgeführt wird: ADD X, Y; MUL A, B. Zum Zeitpunkt T werden jeweils 128 Bits von X und 128 Bits von Y aus den jeweiligen physikalischen Registern über die Ports 1 und 2 gewonnen bzw. gelesen. Die niedriger bewerteten Daten­ segmente, nämlich die unteren 64 Bits, von sowohl X als auch Y werden an die Multiplexer 802 und 804 weitergeleitet und dann weiter zu den Ausführungseinheiten für die Verarbei­ tung. Die höher bewerteten Datensegmente, nämlich die höhe­ ren 64 Bits von X und Y werden in den Verzögerungselementen M1 und M2 gehalten. Zum Zeitpunkt T + 1 werden die höher bewerteten Datensegmente von X und Y aus den Verzögerungselementen M1 und M2 gelesen und an die Multiplexer 802 und 804 weitergeleitet und dann weiter zu den Ausführungseinhei­ ten zur Verarbeitung. Grundsätzlich gestattet der Verzöge­ rungsmechanismus des Speicherns der höher bewerteten Daten­ segmente in den Verzögerungselementen M1 und M2 einer N-Bit- Hardware (N = 64 in diesem Beispiel), 2N-Bits von Daten zu verarbeiten. Die niedrig bewerteten Ergebnisse aus der Aus­ führungseinheit werden in dem Verzögerungselement M3 gehal­ ten, bis die höher bewerteten Ergebnisse bereit sind. Die Ergebnisse beider Verarbeitungsschritte werden dann in die Registerdatei 800 über den Port 3 zurückgeschrieben. Man er­ innere sich, daß im Falle einer Operation für gepackte Daten partieller Breite ein oder mehrere Datenelemente des niedrig oder hoch bewerteten Ergebnisses auf einen vorgegebenen Wert (z. B. Null oder den Wert eines entsprechenden Datenelements in entweder X oder Y) anstelle der Ausgabe der ADD- oder MUL-Operation gezwungen werden können.
Zum Zeitpunkt T + 1 kann darüber hinaus der MUL-Befehl gestartet worden sein. Somit können zum Zeitpunkt T + 1 128 Bits von A und B jeweils von ihren zugehörigen Registern über die Ports 1 und 2 gelesen worden sein. Die niedriger bewerteten Datensegmente, nämlich die unteren 64 Bits, von sowohl A als auch B, können in die Multiplexer 806 und 808 geleitet werden. Nachdem die höher bewerteten Bits von X und Y aus den Verzögerungselementen M1 und M2 entfernt und in die Multiplexer 806 und 808 geleitet worden sind, können die höher bewerteten Bits von A und B im Speicher der Verzöge­ rungselemente M1 und M2 gehalten werden. Die Ergebnisse bei­ der Verarbeitungsschritte werden dann in die Registerdatei 800 über den Port 3 zurückgeschrieben.
Somit werden gemäß einem Ausführungsbeispiel der Erfin­ dung Ausführungseinheiten vorgesehen, die nur die Hälfte der Hardware enthalten (z. B. zwei ADD-Ausführungseinheiten ein­ facher Genauigkeit und zwei MUL-Ausführungseinheiten einfa­ cher Genauigkeit) anstelle der Ausführungseinheiten, die zur parallelen Verarbeitung der vollen Breite der Operanden erforderlich sind, wie sie in einem gegenwärtigen Prozessor zu finden sind. Diese Ausführungsform zieht Vorteil aus einer statistischen Analyse, die zeigt, daß Multimedia- Anwendungen etwa 50% ADD-Befehle und 50% MUL-Befehle ver­ wenden. Auf der Grundlage dieser Statistik unterstellt die­ ses Ausführungsbeispiel, daß Multimedia-Befehle grundsätz­ lich dem folgenden Muster folgen: ADD, MUL, ADD, MUL, etc. Durch Verwenden der ADD und MUL-Ausführungseinheiten in der oben beschriebenen Weise sorgt die vorliegende Erfindung für eine optimale Verwendung der Ausführungseinheiten, wobei sie eine mit gegenwärtigen Prozessoren vergleichbare Leistung zu niedrigeren Kosten ermöglicht.
Fig. 8B ist ein Zeitdiagramm, das die Schaltung gemäß Fig. 8A näher veranschaulicht. Wie es in Fig. 8B veran­ schaulicht ist, führen die beiden ADD-Ausführungseinheiten dann, wenn der Befehl "ADD X, Y" zum Zeitpunkt T ausgegeben wird, zunächst eine Addition der niedriger bewerteten Daten­ segmente oder der niedriger bewerteten beiden gepackten Datenelement gemäß Fig. 1, nämlich X0Y0 und X1Y1 aus. Zum Zeitpunkt T + 1 wird die ADD-Operation an den verbleibenden zwei Datenelementen der Operanden durch dieselben Ausfüh­ rungseinheiten durchgeführt, und die nachfolgenden zwei Datenelemente des höher bewerteten Datensegments werden addiert, nämlich X2Y2 und X3Y3. Während das obige Ausfüh­ rungsbeispiel unter Bezugnahme auf ADD- und MUL-Operationen unter Verwendung von zwei Ausführungseinheiten beschrieben wurde, können alternative Ausführungsbeispiele eine belie­ bige Anzahl von Ausführungseinheiten verwenden und/oder eine beliebige Anzahl unterschiedlicher Operationen in einer gestaffelten Weise ausführen.
Gemäß diesem Ausführungsbeispiel kann eine 64-Bit-Hard­ ware verwendet werden, um 128-Bit-Daten zu verarbeiten. Ein 128-Bit-Register kann in vier 32-Bit-Elemente unterteilt werden, von denen jedes einen separaten 32-Bit-Wert reprä­ sentiert. Zum Zeitpunkt T führen die beiden ADD-Ausführungs­ einheiten zunächst Additionen an den zwei niedrigen 32-Bit- Werten durch, gefolgt von einer Addition an den höheren 32- Bit-Werten zum Zeitpunkt T + 1. Im Falle einer MUL-Operation verhalten sich die MUL-Ausführungseinheiten in der gleichen Weise. Diese Fähigkeit zu einer Verwendung gegenwärtig ver­ fügbarer 64-Bit-Hardware, um 128-Bit-Daten zu verarbeiten, stellt einen signifikanten Kostenvorteil für Hardware-Her­ steller dar.
Wie oben beschrieben, werden die ADD- und MUL-Ausfüh­ rungseinheiten gemäß dem vorliegenden Ausführungsbeispiel erneut verwendet, um eine zweite ADD- oder MUL-Operation bei einem nachfolgenden Taktzyklus erneut auszuführen. Selbst­ verständlich werden im Fall eines Befehls für gepackte Daten partieller Breite die Ausführungseinheiten erneut verwendet, aber die Operation wird nicht notwendigerweise erneut ausge­ führt, da die Stromversorgung zur Ausführungseinheit selek­ tiv abgeschaltet werden kann. In jedem Fall zieht, wie oben beschrieben wurde, dieses Ausführungsbeispiel für diese Neu- Verwendung bzw. "gestaffelte Ausführung" Vorteil aus dem statistischen Verhalten von Multimedia-Anwendungen.
Wenn ein zweiter ADD-Befehl einem ersten ADD-Befehl folgt, kann der zweite ADD-Befehl durch eine Einplanungsein­ heit (scheduling unit) verzögert werden, um den ADD-Ausfüh­ rungseinheiten zu gestatten, den ersten ADD-Befehl abzu­ schließen, bzw. genauer, den ADD-Befehl für das höher bewer­ tete Datensegment abzuschließen. Der zweite ADD-Befehl kann dann mit der Ausführung beginnen. Alternativ kann bei einem Außer-der-Reihe-Prozessor die Einplanungseinheit bestimmen, daß ein MUL-Befehl, der sich weiter hinten im Befehlsstrom befindet, außer der Reihe ausgeführt werden kann. Wenn dies der Fall ist, kann die Einplanungseinheit die MUL-Ausfüh­ rungseinheiten informieren, mit der Verarbeitung des MUL- Befehls zu beginnen. Wenn keine MUL-Befehle zur Verarbeitung zum Zeitpunkt T + 1 verfügbar sind, gibt der Einplaner keinen dem ersten ADD-Befehl folgenden Befehl aus, womit den ADD- Ausführungseinheiten Zeit gegeben wird, den ersten ADD- Befehl abzuschließen, bevor der zweite ADD-Befehl begonnen wird.
Noch ein weiteres Ausführungsbeispiel der Erfindung gestattet, daß "back-to-back"-ADD- oder -MUL-Befehle ausge­ geben werden, indem die Befehle auf den gleichen Ausfüh­ rungseinheiten in halben Taktzyklen anstelle von vollen Taktzyklen ausgeführt werden. Die Ausführung eines Befehls in einem halben Taktzyklus "verdoppelt" effektiv die Hard­ ware, d. h. macht die Hardware zweimal so schnell. Auf diese Weise können die ADD- oder MUL-Ausführungseinheiten während jedes Taktzyklus verfügbar sein, um einen neuen Befehl zu verarbeiten. Eine verdoppelte Hardware gestattet, daß die Hardwareeinheiten zweimal so effektiv ausführen, wie eine einfache Hardware, die nur bei vollständigen Taktzyklen ausführt. Eine derart verdoppelte Hardware erfordert signifikant mehr Hardware, kann jedoch effektiv den Befehl im halben Taktzyklus verarbeiten.
Es ist klar, daß Modifikationen und Variationen der Erfindung von der obigen Lehre abgedeckt werden und inner­ halb des Umfangs der anhängigen Ansprüche liegen können, ohne vom Geist und Umfang der Erfindung abzuweichen. Bei­ spielsweise können, obwohl nur zwei Ausführungseinheiten oben beschrieben wurden, beliebig viele logische Einheiten zur Verfügung gestellt werden.
Zweites eine "gestaffelte Ausführung" verwendendes Ausfüh­ rungsbeispiel
Gemäß einem alternativen Ausführungsbeispiel der Erfin­ dung wird die gestaffelte Ausführung eines Operanden voller Breite erreicht, indem ein Makrobefehl für eine volle Breite in zumindest zwei Mikrobefehle konvertiert wird, die jeweils an nur der Hälfte der Operanden operieren. Wie unten näher beschrieben wird, kann dann, wenn die Makrobefehle eine Ope­ ration für gepackte Daten partieller Breite spezifizieren, eine bessere Leistung erreicht werden, indem Mikrobefehle eliminiert werden, die zum Bestimmen des Ergebnisses partieller Breite nicht erforderlich sind. Auf diese Weise werden die Einschränkungen der Prozessorressourcen reduziert, und der Prozessor wird nicht unnötigerweise mit wirkungslosen Mikrobefehlen okkupiert. Obwohl die folgende Beschreibung unter Berücksichtigung eines speziellen Registerumbenen­ nungsverfahrens beschrieben ist, ist es klar, daß andere Registerumbenennungsmechanismen ebenfalls im Rahmen der Erfindung benutzt werden können. Das unten beschriebene Registerumbenennungsverfahren unterstellt die Verwendung einer Register-Alias-Tabelle (RAT), eines Umordnungspuffers (ROB) und eines Retirement-Puffers, wie sie im Detail in dem US-Patent Nr. 5,446,912 beschrieben sind. Alternative Regi­ sterumbenennungsverfahren, wie sie beispielsweise im US- Patent Nr. 5,197,132 beschrieben sind, können ebenfalls implementiert werden.
Fig. 9 veranschaulicht ein Ausführungsbeispiel einer Pipeline zum Durchführen von Operationen an Operanden in einer "gestaffelten" Weise, indem ein Makrobefehl in eine Mehrzahl von Mikrobefehlen konvertiert wird, die jeweils einen Abschnitt der Operanden voller Breite bearbeiten. Es sei angemerkt, daß verschiedene andere Stufen der Pipeline, zum Beispiel eine "Vorab-Heranhol-Stufe", nicht im Detail gezeigt sind, um die Erfindung nicht unnötigerweise zu ver­ dunkeln. Wie veranschaulicht, wird an der Dekodierstufe der Pipeline ein Makrobefehl für eine volle Breite empfangen, der logische Quellregister spezifiziert, die jeweils einen Operanden voller Breite (z. B. 128 Bits) speichern. Bei­ spielsweise sind die beschriebenen Operanden gepackte 128- Bit-Gleitkomma-Datenoperanden. Bei diesem Beispiel unter­ stützt der Prozessor Y logische Register zum Speichern gepackter Gleitkomma-Daten. Der Makrobefehl wird in Mikrobe­ fehle konvertiert, nämlich eine "hoch bewertete Operation" und eine "niedrig bewertete Operation", die jeweils bewir­ ken, daß die Operation des Makrobefehls an der halben Breite der Operanden (z. B. 64 Bits) durchgeführt wird.
Die zwei Mikrobefehle für die halbe Breite bewegen sich dann in eine Registerumbenennungsstufe der Pipeline. Die Re­ gisterumbenennungsstufe enthält eine Anzahl von Registerab­ bildungs- und Umordnungspuffern. Die logischen Quellregister jedes Mikrobefehls sind Zeiger auf spezielle Registereinträ­ ge in einer Registerabbildungstabelle (z. B. einer RAT). Die Einträge in der Registerabbildungstabelle wiederum zeigen auf den Ort des physikalischen Quellspeicherplatzes in einem ROB oder in einem Retirement-Register. Gemäß einem Ausfüh­ rungsbeispiel wird, um die oben beschriebenen hoch und nied­ rig bewerteten Operationen halber Breite unterzubringen, eine RAT für gepackte Gleitkomma-Daten mit Y*2 Einträgen vorgesehen. Somit wird beispielsweise anstelle einer RAT mit den Einträgen für 8 logische Register eine RAT mit 15 Ein­ trägen erzeugt, wobei jeder Eintrag entweder als "hoch" oder als "niedrig" adressiert wird. Jeder Eintrag identifiziert eine 64-Bit-Quelle, die entweder einem hohen oder einem niedrigen Teil des logischen 128-Bit-Registers entspricht.
Jeder der hoch und niedrig bewerteten Mikrobefehle weist somit zugehörige Einträge in der Registerabbildungsta­ belle auf, die den jeweiligen Operanden entsprechen. Die Mikrobefehle werden dann in eine Einplanungsstufe (bei einem Außer-der-Reihe-Prozessor) oder an eine Ausführungsstufe (bei einem In-der-Reihenfolge-Prozessor) bewegt. Jeder Mikrobefehl liest und verarbeitet separat ein 64-Bit-Segment der 128-Bit-Operanden. Eine der Operationen (z. B. die nied­ riger bewertete Operation) wird zunächst von den 64-Bit- Hardware-Einheiten ausgeführt. Dann führt dieselbe 64-Bit- Hardware-Einheit die höher bewertete Operation aus. Es ist klar, daß kein Befehl oder auch mehrere Befehle zwischen der niedriger und der höher bewerteten Operation ausgeführt wer­ den können.
Obwohl das obige Ausführungsbeispiel beschreibt, daß der Makrobefehl in zwei Mikrobefehle unterteilt wird, können alternative Ausführungsbeispiele den Makrobefehl in mehr als zwei Mikrobefehle unterteilen. Während Fig. 9 zeigt, daß die gepackten Gleitkomma-Daten an eine Retirement-Register­ datei mit Y*2 64-Bit-Registern, die jeweils als hoch oder niedrig bezeichnet sind, zurückgibt, können alternative Aus­ führungsbeispiele eine Retirement-Registerdatei mit Y 128- Bit-Registern verwenden. Zusätzlich können, während ein Aus­ führungsbeispiel beschrieben ist, das einen Registerumbenen­ nungsmechanismus mit einem Umordnungspuffer und einer Reti­ rement-Registerdatei aufweist, alternative Ausführungsbei­ spiele einen beliebigen Registerumbenennungsmechanismus ver­ wenden. Beispielsweise verwendet der Registerumbenennungsme­ chanismus gemäß dem US-Patent Nr. 5,197,132 eine Vorge­ schichte-Warteschlange und eine Back-up-Abbildung.
Fig. 10 ist ein Zeitdiagramm, das das in Fig. 9 beschriebene Ausführungsbeispiel näher veranschaulicht. Zum Zeitpunkt T tritt ein Makrobefehl "ADD X, Y" in die Dekodier­ stufe der Pipeline gemäß Fig. 9 ein. Beispielsweise ist der Makrobefehl hier ein 128-Bit-Befehl. Der 128-Bit-Makrobefehl wird in zwei 64-Bit-Mikrobefehle konvertiert, nämlich die hoch bewertete Operation "ADD XH, YH" und die niedrig bewer­ tete Operation "ADD XL, YL". Jeder Mikrobefehl bearbeitet dann ein Datensegment, das zwei Datenelemente enthält. Bei­ spielsweise kann zum Zeitpunkt T die niedrig bewertete Ope­ ration durch eine 64-Bit-Ausführungseinheit ausgeführt wer­ den. Dann wird zu einem anderen Zeitpunkt (z. B. zum Zeit­ punkt T + N) die höher bewertete Operation durch dieselbe 64- Bit-Ausführungseinheit ausgeführt. Dieses Ausführungsbeisp­ iel der Erfindung ist somit insbesondere für die Verarbei­ tung von 128-Bit-Befehlen unter Verwendung vorhandener 64- Bit-Hardwaresysteme ohne signifikante Veränderungen der Hardware geeignet. Die vorhandenen Systeme können leicht er­ weitert werden, so daß sie eine neue Abbildung zum Behandeln gepackter Gleitkomma-Daten zusätzlich zu den vorhandenen logischen Registerabbildungen enthalten.
Es wird jetzt auf Fig. 11 Bezug genommen, anhand der die Dekodierlogik beschrieben wird, die gemäß einem Ausfüh­ rungsbeispiel der Erfindung verwendet werden kann. Kurz gesagt empfangen bei dem dargestellten Ausführungsbeispiel eine Mehrzahl von Decodierern 1110, 1120 und 1130 jeweils einen Makrobefehl und konvertieren ihn in einen Mikrobefehl. Dann wird die Mikrooperation hinab zum Rest der Pipeline gesendet. Selbstverständlich sind nicht N Mikrobefehle für die Ausführung jedes Makrobefehls erforderlich. Folglich ist es üblicherweise der Fall, daß nur eine Untermenge von Mikrobefehlen zur Verarbeitung durch den Rest der Pipeline eingereiht wird.
Wie oben beschrieben, können gepackte Datenoperationen als zwei Mikrobefehle halber Breite implementiert werden (z. B. eine hoch bewertete Operation und eine niedrig bewer­ tete Operation). Anstelle des unabhängigen Decodierens des Makrobefehls durch zwei Decodierer, um die hoch und die niedrig bewertete Operation zu erzeugen, wie es typischer­ weise bei bekannten Prozessorimplementierungen erforderlich sein würde, können als Merkmal der vorliegenden Ausführungs­ form beide Mikrobefehle durch den gleichen Decodierer erzeugt werden. Bei diesem Beispiel wird dies durch die Replikationslogik 1150 ausgeführt, welche entweder die hoch bewertete oder die niedrig bewertete Operation repliziert und nachfolgend die sich ergebende replizierte Operation geeignet modifiziert, um die verbleibende Operation zu erzeugen. Wie oben beschrieben wurde, ist es wichtig, daß durch sorgfältiges Codieren des Registeradreßraums die von den Mikrobefehlen adressierten Register (z. B. die logischen Quell- und Zielregister) so gebildet werden können, daß sie sich durch einziges Bit unterscheiden. Im Ergebnis kann die Modifikationslogik 1160 in ihrer einfachsten Form einen oder mehrere Inverter aufweisen, um die richtigen Bits zu inver­ tieren, um eine hoch bewertete Operation aus einer niedrig bewerteten Operation und umgekehrt zu erzeugen. In jedem Fall wird dann der replizierte Mikrobefehl zum Multiplexer 1170 weitergeleitet. Der Multiplexer 1170 empfängt darüber hinaus einen von dem Decodierer 1120 erzeugten Mikrobefehl. Bei diesem Beispiel gibt der Multiplexer unter der Steuerung eines Gültigkeitsdecodierers 1180 den replizierten Mikrobe­ fehl für gepackte Datenoperationen (die Operationen für gepackte Daten partieller Breite umfassen) aus und gibt den Mikrobefehl aus, der vom Decodierer 1120 empfangen wurde, für von gepackten Datenoperationen abweichende Operationen. Folglich ist es vorteilhaft, die Befehlscodeabbildung zu optimieren, um die Erfassung gepackter Datenoperationen durch die Replikationslogik 1150 zu vereinfachen. Wenn bei­ spielsweise nur ein geringer Abschnitt des Makrobefehls überprüft werden muß, um gepackte Datenoperationen von ande­ ren Operationen zu unterscheiden, so könnte eine geringere Schaltungsmenge durch den Gültigkeitsdecodierer 1180 benutzt werden.
Bei einer Implementierung, die Quelldatenelemente zu dem logischen Zielregister zum Zwecke der Ausführung von Operationen für gepackte Daten partieller Daten durchleitet, kann zusätzlich zur Auswahllogik, ähnlich der die unter Bezugnahme auf die Fig. 5A und 5C beschrieben worden ist, Logik enthalten sein, um entweder die hoch oder die niedrig bewertete Operation zu eliminieren (zu "vernichten"). Vor­ zugsweise wird aus Leistungsgründen der unwesentliche Mikro­ befehl früh in der Pipeline eliminiert. Diese Eliminierung kann gemäß dem dargestellten Ausführungsbeispiel ausgeführt werden, indem ein Mikrobefehlauswahlsignal verwendet wird, das von der Mikrobefehlslängenbestimmungsschaltung 1190 aus­ gegeben wird. Die Mikrobefehlslängenbestimmungsschaltung 1190 überprüft einen Abschnitt des Makrobefehls und erzeugt das Mikrobefehlsauswahlsignal, welches eine spezielle Kombi­ nation einer oder mehrerer Mikrobefehle anzeigt, die weiter unten in der Pipeline ausgeführt werden sollen. Im Falle eines skalaren SIMD-Befehls wird nur einer der sich ergeben­ den hoch und niedrig bewerteten Operationen gestattet, fort­ zufahren. Beispielsweise kann das Mikrobefehlsauswahlsignal durch eine Bitmaske repräsentiert sein, die diejenigen der Mikrobefehle identifiziert, die beibehalten werden sollen, und diejenigen, die eliminiert werden sollen. Alternativ kann das Mikrobefehlsauswahlsignal einfach die Nummer der Mikrobefehle von einem vorgegebenen Standpunkt aus anzeigen, die eliminiert bzw. zurückgehalten werden sollen. Die zum Ausführen der oben beschriebenen Beseitigung erforderliche Logik variiert in Abhängigkeit vom Steuerungsmechanismus, der die Mikrobefehle durch den Rest der Pipeline leitet. Wenn beispielsweise die Mikrobefehle in eine Warteschlange eingereiht werden, würde Logik hinzugefügt werden, um den Kopf- und den Ende-Zeiger der Mikrobefehlswarteschlange zu bearbeiten, um zu bewirken, daß ungültige Mikrobefehle durch nachfolgend erzeugte gültige Mikrobefehle überschrieben wer­ den. Zahlreiche weitere Eliminierungstechniken sind Fachleu­ ten auf diesem Gebiet klar.
Obwohl aus Gründen der Vereinfachung nur ein einzelner Makrobefehl gezeigt ist, der zu einem vorgegebenen Zeitpunkt bei dem dargestellten Ausführungsbeispiel decodiert wird, können bei alternativen Ausführungsbeispielen mehrere Makro­ befehle gleichzeitig decodiert werden. Darüber hinaus ist es klar, daß die Mikrobefehlsreplikation eine breitere Anwen­ dung findet, als die bei dem obigen Ausführungsbeispiel dar­ gestellte. Beispielsweise könne auf eine Weise, die ähnlich der oben beschriebenen ist, Makrobefehle für gepackte Daten voller Breite und partieller Breite durch denselben Decodie­ rer decodiert werden. Sofern ein Präfix verwendet wird, um Makrobefehle für gepackte Daten voller Breite und partieller Breite zu unterscheiden, kann der Decodierer einfach den Präfix ignorieren und beide Arten von Befehlen auf die glei­ che Weise decodieren. Dann werden die geeigneten Bits in den sich ergebenden Mikrooperationen modifiziert, um selektiv die Verarbeitung für entweder sämtliche oder eine Untermenge der Datenelemente zu ermöglichen. Auf diese Weise können Mi­ krobefehle für gepackte Daten voller Breite aus Mikrobefeh­ len für gepackte Daten partieller Breite erzeugt werden oder umgekehrt, wodurch sich die Komplexität des Decodierers ver­ ringert.

Claims (13)

1. Prozessor mit einer Mehrzahl von Registern (850) und einer Registerumbenennungseinheit, die mit der Mehrzahl von Registern gekoppelt ist, um eine Architekturregister­ datei zum Speichern gepackter Datenoperanden zur Verfügung zu stellen, wobei jeder der gepackten Datenoperanden eine Mehrzahl von Datenelementen aufweist,
wobei ein Decodierer mit der Registerumbenennungsein­ heit gekoppelt ist und Befehle decodiert, die jeweils wenig­ stens ein Register in der Architekturregisterdatei spezifi­ zieren, wobei eine Ausführungseinheit mit dem Decodierer und den Registern gekoppelt ist,
dadurch gekennzeichnet,
daß die Befehle Gepackte-Daten-Befehle eines ersten Satzes (Fig. 7A) und Gepackte-Daten-Befehle eines zweiten Satzes (Fig. 7B) umfassen, wobei jeder Gepackte-Daten-Befehl in dem ersten Satz Operationen an sämtlichen in jedem der wenigstens einen spezifizierten Register gespeicherten Da­ tenelementen (X0-X3; Y0-Y3) Spezifiziert, wobei jeder Ge­ packte-Daten-Befehl des zweiten Satzes eine Operation an nur einer ersten Untermenge (X0; Y0) der in jedem der wenigstens einen spezifizierten Register gespeicherten Datenelemente spezifiziert, und
daß die Ausführungseinheit (ADD, MUL) eine Ausführungs­ einheit partieller Breite zum Ausführen von sowohl von dem ersten als auch von dem zweiten Satz von Gepackte-Daten-Be­ fehlen spezifizierten Operationen ist, wobei die partielle Breite der Ausführungseinheit der Breite einer zweiten Un­ termenge (X0, X1; Y0, Y1) der Datenelemente entspricht, wo­ bei die zweite Untermenge die erste Untermenge umfaßt, wobei die Operationen des ersten Satzes an sämtlichen Datenelemen­ ten des wenigstens einen spezifizierten Registers in einer gestaffelten Weise ausgeführt werden.
2. Prozessor nach Anspruch 1, dadurch gekennzeichnet, daß die erste Untermenge der in dem wenigstens einen spezifizierten Register gespeicherten Datenelemente einander entsprechende am geringsten bewertete Datenelemente umfaßt.
3. Prozessor nach Anspruch 1 oder 2, dadurch gekenn­ zeichnet, daß die zweite Untermenge der Datenelemente der Hälfte der Datenelemente jedes Datenoperanden entspricht.
4. Prozessor nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, daß der Decodierer jeden Gepackte-Daten-Be­ fehl des ersten Satzes und des zweiten Satzes als Makrobe­ fehl in wenigstens zwei Mikrobefehle konvertiert, wobei je­ der Mikrobefehl die Verarbeitung der Daten einer zugehörigen zweiten Untermenge der Datenelemente der gepackten Datenope­ randen bewirkt.
5. Prozessor nach Anspruch 4, dadurch gekennzeichnet, daß die zweite Untermenge der Hälfte der Datenelemente ent­ spricht und jeder Gepackte-Daten-Befehl des ersten und des zweiten Satzes in zwei Mikrobefehle konvertiert wird, wobei jeder der beiden Mikrobefehle die Verarbeitung der Daten an der Hälfte der einander entsprechenden Datenelemente der ge­ packten Datenoperanden bewirkt.
6. Prozessor nach Anspruch 4 oder 5, dadurch gekenn­ zeichnet, daß dann, wenn der Makrobefehl dem zweiten Satz von Gepackte-Daten-Befehlen angehört und wenigstens einer der Mikrobefehle die Verarbeitung von lediglich solchen Da­ tenelementen bewirkt, die nicht der ersten Untermenge von Datenelementen angehören, so daß diese Mikrobefehle keine in dem Makrobefehl spezifizierte Operation ausführen, der Pro­ zessor ein Beseitigen dieser Mikrobefehle derart ausführt, daß diese nicht die Ausführungseinheit partieller Breite er­ reichen.
7. Verfahren zum Ausführen eines Makrobefehls in einem Prozessor, wobei
ein einzelner Makrobefehl empfangen wird, der zumindest zwei logische Register in einem Registersatz gepackter Daten spezifiziert, wobei die beiden logischen Register einen er­ sten gepackten Datenoperanden bzw. einen zweiten gepackten Datenoperanden speichern, die einander entsprechende Daten­ elemente aufweisen, und
die Datenoperanden in wenigstens ein erstes Segment mit einer ersten Mehrzahl (X0, X1; Y0, Y1) und ein zweites Seg­ ment mit einer zweiten Mehrzahl (X2, X3; Y2, Y3) der einan­ der entsprechenden Datenelemente unterteilt werden und die erste Mehrzahl und die zweite Mehrzahl unabhängig zu ver­ schiedenen Zeiten unter Verwendung der gleichen Schaltungen verarbeitet werden, um unabhängig eine erste (Z0, Z1) und eine zweite Mehrzahl (Z2, Z3) von Ergebnisdatenelementen zu erzeugen, indem
eine von dem einzelnen Makrobefehl spezifizierte Ope­ ration an zumindest einem Paar (X0; Y0) einander entspre­ chender Datenelemente in der ersten (X0, X1; Y0, Y1) und der zweiten (X2, X3; Y2, Y3) Mehrzahl entsprechender Datenele­ mente durchgeführt wird, um zumindest ein Ergebnisdatenele­ ment (Z0) der ersten und zweiten Mehrzahl von Ergebnisdaten­ elementen zu erzeugen, und
die verbleibenden Ergebnisdatenelemente (Z1, Z2, Z3) der ersten und zweiten Mehrzahl von Ergebnisdatenelementen auf wenigstens einen vorgegebenen Wert gesetzt werden, und
die erste und zweite Mehrzahl von Ergebnisdatenelemen­ ten in einem einzigen logischen Register als dritter gepack­ ter Datenoperand gespeichert werden.
8. Verfahren nach Anspruch 7, dadurch gekennzeichnet, daß der wenigstens eine vorgegebene Wert Werte der Datenele­ mente von entweder dem ersten gepackten Datenoperanden oder dem zweiten gepackten Datenoperanden umfaßt wird.
9. Verfahren nach Anspruch 7, dadurch gekennzeichnet, daß der wenigstens eine vorgegebene Wert Null ist.
10. Verfahren nach Anspruch 7, dadurch gekennzeichnet, daß der wenigstens eine vorgegebene Wert eine Keine- Zahl(NaN)-Anzeige ist.
11. Verfahren nach einem der Ansprüche 7 bis 10, da­ durch gekennzeichnet, daß der Makrobefehl von einem Decodie­ rer empfangen und in wenigstens zwei Mikrobefehle konver­ tiert wird, wobei jeder der wenigstens zwei Mikrobefehle die Verarbeitung der Mehrzahl von Datenelementen eines zugehöri­ gen Segments bewirkt.
12. Verfahren nach Anspruch 11, dadurch gekennzeichnet, daß die von dem Makrobefehl spezifizierte Operation nur an einem Teil der einander entsprechenden Datenelemente durch­ geführt wird, wobei wenigstens einer der Mikrobefehle aus­ schließlich Datenelementen zugeordnet ist, an denen die von dem Makrobefehl spezifizierte Operation nicht durchgeführt wird, und dieser wenigstens eine Mikrobefehl vor seiner Aus­ führung eliminiert wird.
13. Verfahren nach Anspruch 12, dadurch gekennzeichnet, daß die dem wenigstens einen eliminierten Mikrobefehl zuge­ ordneten Ergebnisdatenelemente auf den vorgegebenen Wert ge­ setzt werden.
DE19914617A 1998-03-31 1999-03-31 Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten Expired - Lifetime DE19914617C2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/053,127 US6230253B1 (en) 1998-03-31 1998-03-31 Executing partial-width packed data instructions

Publications (2)

Publication Number Publication Date
DE19914617A1 DE19914617A1 (de) 1999-10-14
DE19914617C2 true DE19914617C2 (de) 2002-10-31

Family

ID=21982113

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19914617A Expired - Lifetime DE19914617C2 (de) 1998-03-31 1999-03-31 Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten

Country Status (7)

Country Link
US (3) US6230253B1 (de)
CN (3) CN1286002C (de)
DE (1) DE19914617C2 (de)
GB (1) GB2339040C (de)
HK (1) HK1027402A1 (de)
SG (1) SG85630A1 (de)
TW (1) TW470914B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185571B2 (en) 1995-08-31 2012-05-22 Intel Corporation Processor for performing multiply-add operations on packed data

Families Citing this family (63)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6233671B1 (en) 1998-03-31 2001-05-15 Intel Corporation Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions
US7395302B2 (en) * 1998-03-31 2008-07-01 Intel Corporation Method and apparatus for performing horizontal addition and subtraction
US6230253B1 (en) 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US7392275B2 (en) * 1998-03-31 2008-06-24 Intel Corporation Method and apparatus for performing efficient transformations with horizontal addition and subtraction
US6418529B1 (en) 1998-03-31 2002-07-09 Intel Corporation Apparatus and method for performing intra-add operation
US6687806B1 (en) * 2000-06-15 2004-02-03 Advanced Micro Devices, Inc. Apparatus and method for generating 64 bit displacement and immediate values
CN1299198C (zh) * 2001-06-27 2007-02-07 凌阳科技股份有限公司 由可改变的指令格式而提高程序码密集度的微控制器结构
US7430578B2 (en) * 2001-10-29 2008-09-30 Intel Corporation Method and apparatus for performing multiply-add operations on packed byte data
US7200738B2 (en) 2002-04-18 2007-04-03 Micron Technology, Inc. Reducing data hazards in pipelined processors to provide high processor utilization
DE10225230B4 (de) * 2002-06-06 2004-10-21 Infineon Technologies Ag Prozessor und Verfahren zum gleichzeitigen Ausführen einer Berechnung und eines Kopiervorgangs
US7426529B2 (en) * 2002-06-06 2008-09-16 Infineon Technologies Ag Processor and method for a simultaneous execution of a calculation and a copying process
US7249350B2 (en) * 2002-09-30 2007-07-24 Intel Corporation Optimized translation of scalar type SIMD instructions into non-scalar SIMD instructions
US7061485B2 (en) 2002-10-31 2006-06-13 Hewlett-Packard Development Company, Lp. Method and system for producing a model from optical images
US7668897B2 (en) * 2003-06-16 2010-02-23 Arm Limited Result partitioning within SIMD data processing systems
US7237096B1 (en) * 2004-04-05 2007-06-26 Sun Microsystems, Inc. Storing results of producer instructions to facilitate consumer instruction dependency tracking
US7383427B2 (en) * 2004-04-22 2008-06-03 Sony Computer Entertainment Inc. Multi-scalar extension for SIMD instruction set processors
US20050251649A1 (en) * 2004-04-23 2005-11-10 Sony Computer Entertainment Inc. Methods and apparatus for address map optimization on a multi-scalar extension
US7389406B2 (en) * 2004-09-28 2008-06-17 Intel Corporation Apparatus and methods for utilization of splittable execution units of a processor
WO2006039711A1 (en) 2004-10-01 2006-04-13 Lockheed Martin Corporation Service layer architecture for memory access system and method
US7257695B2 (en) * 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
CN100452090C (zh) * 2006-03-14 2009-01-14 腾讯科技(深圳)有限公司 一种实现高动态光照范围的方法及系统
US7761694B2 (en) * 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
US7783862B2 (en) * 2006-08-07 2010-08-24 International Characters, Inc. Method and apparatus for an inductive doubling architecture
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8631224B2 (en) * 2007-09-13 2014-01-14 Freescale Semiconductor, Inc. SIMD dot product operations with overlapped operands
US8103858B2 (en) * 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor
US8755515B1 (en) 2008-09-29 2014-06-17 Wai Wu Parallel signal processing system and method
US8458444B2 (en) * 2009-04-22 2013-06-04 Oracle America, Inc. Apparatus and method for handling dependency conditions between floating-point instructions
US20100274961A1 (en) * 2009-04-22 2010-10-28 Golla Robert T Physically-indexed logical map table
US8335912B2 (en) * 2009-04-22 2012-12-18 Oracle America, Inc. Logical map table for detecting dependency conditions between instructions having varying width operand values
US8504805B2 (en) * 2009-04-22 2013-08-06 Oracle America, Inc. Processor operating mode for mitigating dependency conditions between instructions having different operand sizes
US8495125B2 (en) * 2009-05-27 2013-07-23 Microchip Technology Incorporated DSP engine with implicit mixed sign operands
US8495341B2 (en) * 2010-02-17 2013-07-23 International Business Machines Corporation Instruction length based cracking for instruction of variable length storage operands
US9052890B2 (en) * 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
US8914615B2 (en) 2011-12-02 2014-12-16 Arm Limited Mapping same logical register specifier for different instruction sets with divergent association to architectural register file using common address format
WO2013095580A1 (en) 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
US10223112B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN104011646B (zh) 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
WO2013095564A1 (en) 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US9336000B2 (en) 2011-12-23 2016-05-10 Intel Corporation Instruction execution unit that broadcasts data values at different levels of granularity
CN116414459A (zh) 2011-12-23 2023-07-11 英特尔公司 在不同的粒度水平下对数据值进行广播和掩码的指令执行
US9513912B2 (en) 2012-07-27 2016-12-06 Micron Technology, Inc. Memory controllers
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9424034B2 (en) * 2013-06-28 2016-08-23 Intel Corporation Multiple register memory access instructions, processors, methods, and systems
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US9513907B2 (en) 2013-08-06 2016-12-06 Intel Corporation Methods, apparatus, instructions and logic to provide vector population count functionality
US9495155B2 (en) 2013-08-06 2016-11-15 Intel Corporation Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment
US9355061B2 (en) * 2014-01-28 2016-05-31 Arm Limited Data processing apparatus and method for performing scan operations
US10108454B2 (en) * 2014-03-21 2018-10-23 Intel Corporation Managing dynamic capacitance using code scheduling
JP6307975B2 (ja) * 2014-03-28 2018-04-11 富士通株式会社 演算処理装置及び演算処理装置の制御方法
FR3021428B1 (fr) 2014-05-23 2017-10-13 Kalray Multiplication de matrices de bits utilisant des registres explicites
TWI681300B (zh) * 2014-11-14 2020-01-01 美商凱為有限責任公司 在64位元資料路徑上實行128位元simd操作之方法、系統及電腦可讀取媒體
US10001995B2 (en) * 2015-06-02 2018-06-19 Intel Corporation Packed data alignment plus compute instructions, processors, methods, and systems
US10459731B2 (en) * 2015-07-20 2019-10-29 Qualcomm Incorporated Sliding window operation
US20170192789A1 (en) * 2015-12-30 2017-07-06 Rama Kishnan V. Malladi Systems, Methods, and Apparatuses for Improving Vector Throughput
US10901940B2 (en) * 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
US10838720B2 (en) * 2016-09-23 2020-11-17 Intel Corporation Methods and processors having instructions to determine middle, lowest, or highest values of corresponding elements of three vectors
CN111010883B (zh) 2018-08-06 2022-07-12 华为技术有限公司 矩阵的处理方法、装置及逻辑电路
CN111459546B (zh) * 2020-03-30 2023-04-18 芯来智融半导体科技(上海)有限公司 一种实现操作数位宽可变的装置及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4677582A (en) * 1982-04-19 1987-06-30 Hitachi, Ltd. Operation processing apparatus
WO1997008608A1 (en) * 1995-08-31 1997-03-06 Intel Corporation A set of instructions for operating on packed data

Family Cites Families (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3675001A (en) 1970-12-10 1972-07-04 Ibm Fast adder for multi-number additions
US3723715A (en) 1971-08-25 1973-03-27 Ibm Fast modulo threshold operator binary adder for multi-number additions
FR2212952A5 (de) * 1972-12-29 1974-07-26 Cit Alcatel
US3900724A (en) * 1974-02-11 1975-08-19 Trw Inc Asynchronous binary multiplier using non-threshold logic
JPS5824941A (ja) * 1981-08-07 1983-02-15 Hitachi Ltd 演算装置
JPS60134974A (ja) * 1983-12-23 1985-07-18 Hitachi Ltd ベクトル処理装置
US4945479A (en) * 1985-07-31 1990-07-31 Unisys Corporation Tightly coupled scientific processing system
JPS6284335A (ja) * 1985-10-09 1987-04-17 Hitachi Ltd 乗算回路
JPS6297060A (ja) 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US5021945A (en) 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
US4890218A (en) 1986-07-02 1989-12-26 Raytheon Company Variable length instruction decoding apparatus having cross coupled first and second microengines
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US5189636A (en) * 1987-11-16 1993-02-23 Intel Corporation Dual mode combining circuitry
US5047975A (en) * 1987-11-16 1991-09-10 Intel Corporation Dual mode adder circuitry with overflow detection and substitution enabled for a particular mode
US5126964A (en) * 1988-04-01 1992-06-30 Digital Equipment Corporation High performance bit-sliced multiplier circuit
US4972362A (en) * 1988-06-17 1990-11-20 Bipolar Integrated Technology, Inc. Method and apparatus for implementing binary multiplication using booth type multiplication
CA1311063C (en) * 1988-12-16 1992-12-01 Tokumichi Murakami Digital signal processor
US5134693A (en) 1989-01-18 1992-07-28 Intel Corporation System for handling occurrence of exceptions during execution of microinstructions while running floating point and non-floating point instructions in parallel
US5081698A (en) * 1989-02-14 1992-01-14 Intel Corporation Method and apparatus for graphics display data manipulation
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
US5590365A (en) * 1990-03-30 1996-12-31 Kabushiki Kaisha Toshiba Pipeline information processing circuit for floating point operations
JP2651267B2 (ja) * 1990-07-26 1997-09-10 富士通株式会社 演算処理装置及び演算処理方法
EP0809185B1 (de) * 1990-09-18 1999-12-08 Fujitsu Limited Verfahren zur Vervielfältigung eines geteilten Speichers
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
US5303355A (en) 1991-03-27 1994-04-12 Motorola, Inc. Pipelined data processor which conditionally executes a predetermined looping instruction in hardware
US5241493A (en) 1991-12-16 1993-08-31 International Business Machines Corporation Floating point arithmetic unit with size efficient pipelined multiply-add architecture
US5311508A (en) 1991-12-23 1994-05-10 Square D Company Apparatus for receiving and decoding a serial data packet containing the status of a network of single point I/O devices
US5210711A (en) 1992-02-26 1993-05-11 Sony Corporation Of America Very fast variable input multi-bit adder
US5606677A (en) 1992-11-30 1997-02-25 Texas Instruments Incorporated Packed word pair multiply operation forming output including most significant bits of product and other bits of one input
JPH06242928A (ja) 1993-02-22 1994-09-02 Nec Corp 加算器およびこれを用いた乗算回路
US5327369A (en) * 1993-03-31 1994-07-05 Intel Corporation Digital adder and method for adding 64-bit, 16-bit and 8-bit words
US5806049A (en) 1993-04-21 1998-09-08 Petruzzi; Christopher R. Data processing system for global assessment of investment opportunity and cost
US5390135A (en) * 1993-11-29 1995-02-14 Hewlett-Packard Parallel shift and add circuit and method
US5883824A (en) * 1993-11-29 1999-03-16 Hewlett-Packard Company Parallel adding and averaging circuit and method
US5673427A (en) 1994-03-01 1997-09-30 Intel Corporation Packing valid micro operations received from a parallel decoder into adjacent locations of an output queue
US5642306A (en) * 1994-07-27 1997-06-24 Intel Corporation Method and apparatus for a single instruction multiple data early-out zero-skip multiplier
US5579253A (en) * 1994-09-02 1996-11-26 Lee; Ruby B. Computer multiply instruction with a subresult selection option
WO1996017291A1 (en) * 1994-12-02 1996-06-06 Intel Corporation Microprocessor with packing operation of composite operands
US5819101A (en) * 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US6295599B1 (en) * 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US6006318A (en) * 1995-08-16 1999-12-21 Microunity Systems Engineering, Inc. General purpose, dynamic partitioning, programmable media processor
US5953241A (en) * 1995-08-16 1999-09-14 Microunity Engeering Systems, Inc. Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5721892A (en) 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
US5936872A (en) 1995-09-05 1999-08-10 Intel Corporation Method and apparatus for storing complex numbers to allow for efficient complex multiplication operations and performing such complex multiplication operations
US6470370B2 (en) * 1995-09-05 2002-10-22 Intel Corporation Method and apparatus for multiplying and accumulating complex numbers in a digital filter
US5701508A (en) 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
WO1997024681A1 (en) 1995-12-19 1997-07-10 Intel Corporation A computer system performing a two-dimensional rotation of packed data representing multimedia information
US5852726A (en) 1995-12-19 1998-12-22 Intel Corporation Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner
US5835748A (en) 1995-12-19 1998-11-10 Intel Corporation Method for executing different sets of instructions that cause a processor to perform different data type operations on different physical registers files that logically appear to software as a single aliased register file
US5793661A (en) 1995-12-26 1998-08-11 Intel Corporation Method and apparatus for performing multiply and accumulate operations on packed data
US5983257A (en) * 1995-12-26 1999-11-09 Intel Corporation System for signal processing using multiply-add operations
US5835392A (en) 1995-12-28 1998-11-10 Intel Corporation Method for performing complex fast fourier transforms (FFT's)
US5880983A (en) 1996-03-25 1999-03-09 International Business Machines Corporation Floating point split multiply/add system which has infinite precision
US6041403A (en) 1996-09-27 2000-03-21 Intel Corporation Method and apparatus for generating a microinstruction responsive to the specification of an operand, in addition to a microinstruction based on the opcode, of a macroinstruction
US6061521A (en) * 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
US5884071A (en) * 1997-03-31 1999-03-16 Intel Corporation Method and apparatus for decoding enhancement instructions using alias encodings
FR2766353B1 (fr) 1997-07-28 1999-11-26 Dimso Sa Implant, notamment plaque anterieure cervicale
US6260137B1 (en) * 1997-09-12 2001-07-10 Siemens Aktiengesellschaft Data processing unit with digital signal processing capabilities
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US7197625B1 (en) * 1997-10-09 2007-03-27 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US6178482B1 (en) 1997-11-03 2001-01-23 Brecis Communications Virtual register sets
US6233671B1 (en) 1998-03-31 2001-05-15 Intel Corporation Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6230253B1 (en) 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6230257B1 (en) 1998-03-31 2001-05-08 Intel Corporation Method and apparatus for staggering execution of a single packed data instruction using the same circuit
US6378060B1 (en) * 1998-08-24 2002-04-23 Microunity Systems Engineering, Inc. System to implement a cross-bar switch of a broadband processor
US6272512B1 (en) 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US7313788B2 (en) * 2003-10-29 2007-12-25 International Business Machines Corporation Vectorization in a SIMdD DSP architecture

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4677582A (en) * 1982-04-19 1987-06-30 Hitachi, Ltd. Operation processing apparatus
WO1997008608A1 (en) * 1995-08-31 1997-03-06 Intel Corporation A set of instructions for operating on packed data

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185571B2 (en) 1995-08-31 2012-05-22 Intel Corporation Processor for performing multiply-add operations on packed data
US8396915B2 (en) 1995-08-31 2013-03-12 Intel Corporation Processor for performing multiply-add operations on packed data
US8495123B2 (en) 1995-08-31 2013-07-23 Intel Corporation Processor for performing multiply-add operations on packed data
US8626814B2 (en) 1995-08-31 2014-01-07 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US8725787B2 (en) 1995-08-31 2014-05-13 Intel Corporation Processor for performing multiply-add operations on packed data
US8745119B2 (en) 1995-08-31 2014-06-03 Intel Corporation Processor for performing multiply-add operations on packed data
US8793299B2 (en) 1995-08-31 2014-07-29 Intel Corporation Processor for performing multiply-add operations on packed data

Also Published As

Publication number Publication date
CN100385432C (zh) 2008-04-30
US6230253B1 (en) 2001-05-08
GB2339040C (en) 2008-06-16
US20020010847A1 (en) 2002-01-24
GB2339040A (en) 2000-01-12
CN1595390A (zh) 2005-03-16
CN1244675A (zh) 2000-02-16
HK1027402A1 (en) 2001-01-12
DE19914617A1 (de) 1999-10-14
US20050216706A1 (en) 2005-09-29
CN1595389A (zh) 2005-03-16
GB9907221D0 (en) 1999-05-26
GB2339040B (en) 2000-07-12
CN100367269C (zh) 2008-02-06
US6970994B2 (en) 2005-11-29
TW470914B (en) 2002-01-01
US7467286B2 (en) 2008-12-16
SG85630A1 (en) 2002-01-15
CN1286002C (zh) 2006-11-22

Similar Documents

Publication Publication Date Title
DE19914617C2 (de) Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten
DE19914210B4 (de) Verfahren und Prozessor für eine gestaffelte Ausführung einer Anweisung
DE4301417C2 (de) Computersystem mit Einrichtung zur parallelen Befehlsausführung
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE4010119C2 (de) Anordnung und Verfahren zur Umordnung eines Speicherformats in einem Mikroprozessor
DE102007045496B4 (de) Anweisung und Logik zum Bearbeiten von Textstrings
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE102018005169A1 (de) Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102020126212A1 (de) Vorrichtungen, Verfahren und Systeme für Anweisungen eines Matrixoperationsbeschleunigers
DE102015002383A1 (de) Verfahren und Vorrichtung zum Implementieren einer dynamischen Out-of-order-Prozessorpipeline
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
US6233671B1 (en) Staggering execution of an instruction by dividing a full-width macro instruction into at least two partial-width micro instructions
DE112004001648T5 (de) Verfahren, Vorrichtung und Befehle für parallele Datenumwandlung
DE19506990A1 (de) Einrichtung zur Datenumleitung in einem Prozessor mit mehreren Ausführungseinheiten
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
EP0825540B1 (de) Prozessor mit Pipelining-Aufbau
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE69732793T2 (de) Acht-bit-mikrokontroller mit risc-architektur
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE112004001040B4 (de) Verfahren und Datenprozessor mit reduzierter Operationsunterbrechung auf Grund von Operanden-Abhängigkeiten
DE102014003659A1 (de) Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters
DE112016004359T5 (de) Systeme, Verfahren und Vorrichtungen für eine Dekompression unter Verwendung von Hardware und Software
DE10303053B4 (de) Prozessorarchitektur mit einem Array von Pipelines und einer Registerdatei zum Vermeiden von Datenrisiken und Verfahren zur Datenweiterleitung in einer derartigen Prozessorarchitektur
DE112020004266T5 (de) Kompressionsunterstützungsanweisungen

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8181 Inventor (new situation)

Free format text: ROUSSEL, PATRICE, PORTLAND, OREG., US THAKKAR, TICKY, PORTLAND, OREG., US ABDALLAH, MOHAMMAD A., FOLSOM, CALIF., US COKE, JAMES, SHINGLE SPRINGS, CALIF., US

8181 Inventor (new situation)

Free format text: ROUSSEL, PATRICE, PORTLAND, OREG., US THAKKAR, TICKY, PORTLAND, OREG., US ABDALLAH, MOHAMMAD A., FOLSOM, CALIF., US PENTKOVSKI, VLADIMIR, FOLSOM, CALIF., US COKE, JAMES, SHINGLE SPRINGS, CALIF., US

D2 Grant after examination
8364 No opposition during term of opposition
R071 Expiry of right