-
Technisches Gebiet
-
Die vorliegende Offenbarung betrifft das Gebiet der Verarbeitungslogik, Mikroprozessoren und zugeordneten Anweisungssatzarchitektur, wodurch bei Ausführung durch den Prozessor oder andere Verarbeitungslogik logische, mathematische oder andere Funktionsoperationen ausgeführt werden.
-
Stand der Technik
-
Ein Anweisungssatz oder eine Anweisungssatzarchitektur (ISA) ist der Teil der Computerarchitektur in Bezug auf Programmierung und kann die nativen Datentypen, Anweisungen, Registerarchitektur, Adressierungsmodi, Speicherarchitektur, Interrupt- und Programmfehlerabwicklung und externe Eingabe und Ausgabe (E/A) umfassen. Der Ausdruck Anweisung bezieht sich hier im Allgemeinen auf Makro-Anweisungen, das heißt, Anweisungen, die zur Ausführung dem Prozessor zugeführt werden (oder dem Anweisungsumsetzer, der (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischem Kompilieren) eine Anweisung in eine oder mehrere andere Anweisungen, die durch den Prozessor zu verarbeiten sind, übersetzt, umformt, emuliert oder anderweitig umsetzt), im Gegensatz zu Mikro-Anweisungen oder Mikro-Operationen (Mikro-Ops), die sich daraus ergeben, dass der Decoder eines Prozessors Makro-Anweisungen decodiert.
-
Die ISA unterscheidet sich von der Mikro-Architektur, die der interne Entwurf des Prozessors ist, der den Anweisungssatz implementiert. Prozessoren mit verschiedenen Mikro-Architekturen können sich einen gemeinsamen Anweisungssatz teilen. Zum Beispiel implementieren Intel® CoreTM-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. in Sunnyvale, CA, nahezu identische Versionen des x86-Anweisungssatzes (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen aber verschiedene interne Entwürfe auf. Zum Beispiel kann dieselbe Registerarchitektur der ISA in verschiedenen Mikro-Architekturen unter Verwendung wohlbekannter Techniken, darunter dedizierte physische Register, ein oder mehrere dynamisch zugeteilte physische Register unter Verwendung eines Registerumbenennungsmechanismus usw., auf verschiedene Weisen implementiert werden.
-
Viele moderne ISA unterstützen Vektoroperationen, die auch als gepackte Datenoperationen oder SIMD-Operationen (Single Instruction, Multiple Data) bezeichnet werden. Statt dass eine skalare Anweisung nur an einem Datenelement oder Paar von Datenelementen operiert, kann eine Vektoranweisung (die manchmal auch als gepackte Datenanweisung oder SIMD-Anweisung bezeichnet wird) an mehreren Datenelementen oder mehreren Paaren von Datenelementen gleichzeitig oder parallel operieren. Der Prozessor kann Parallel-Ausführungshardware aufweisen, die auf die Vektoranweisung reagiert, um die mehreren Operationen gleichzeitig oder parallel auszuführen.
-
Eine Vektoroperation operiert an mehreren Datenelementen, die in ein Register oder eine Speicherstelle gepackt sind, in einer Operation. Diese Datenelemente werden als Vektordatenelement oder gepackte Datenelemente bezeichnet. Jedes der Vektordatenelemente kann ein getrenntes individuelles Stück Daten (z. B. eine Farbe eines Pixels usw.) repräsentieren, woran getrennt oder unabhängig von den anderen operiert werden kann.
-
Kurze Beschreibung der Zeichnungen
-
Ausführungsformen werden in den Figuren der beigefügten Zeichnungen als Beispiel und nicht als Beschränkung dargestellt.
-
1 ist ein Blockschaltbild einer Anweisungsverarbeitungsvorrichtung mit Vektorregistern und Maskenregistern gemäß einer Ausführungsform.
-
2A–2C zeigen Beispiele für Maskenerzeugungsanweisungen gemäß einer Ausführungsform.
-
3A und 3B zeigen Beispiele für Arraydatenausrichtungen gemäß einer Ausführungsform.
-
3C zeigt ein Beispiel für eine maskierte Vektoranweisung, die eine Maske verwendet, gemäß einer Ausführungsform.
-
4 zeigt die Anzahl der Maskenbit für eine gegebene Vektorregisterbreite und Datenelementbreite gemäß einer Ausführungsform.
-
5 ist ein Flussdiagramm von als Reaktion auf eine Maskenerzeugungsanweisung auszuführenden Operationen gemäß einer Ausführungsform.
-
6 ist ein Blockschaltbild, das die Verwendung eines Softwareanweisungsumsetzers darstellt, um binäre Anweisungen in einem Quellenanweisungssatz in binäre Anweisungen in einem Zielanweisungssatz umzusetzen, gemäß einer Ausführungsform.
-
7A ist ein Blockschaltbild einer In-Reihenfolge- und Außer-Reihenfolge-Pipeline gemäß einer Ausführungsform.
-
7B ist ein Blockschaltbild eines In-Reihenfolge- und Außer-Reihenfolge-Kerns gemäß einer Ausführungsform.
-
8A–B sind Blockschaltbilder einer spezifischeren beispielhaften In-Reihenfolge-Kernarchitektur gemäß einer Ausführungsform.
-
9 ist ein Blockschaltbild eines Prozessors gemäß einer Ausführungsform.
-
10 ist ein Blockschaltbild eines Systems gemäß einer Ausführungsform.
-
11 ist ein Blockschaltbild eines zweiten Systems gemäß einer Ausführungsform.
-
12 ist ein Blockschaltbild eines dritten Systems gemäß einer Ausführungsform der Erfindung.
-
13 ist ein Blockschaltbild eines SoC (System-on-a-Chip) gemäß einer Ausführungsform.
-
Beschreibung der Ausführungsformen
-
In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung ohne diese spezifischen Einzelheiten ausgeübt werden können. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis der vorliegenden Beschreibung nicht zu verschleiern.
-
Hier beschriebene Ausführungsformen stellen Maskenerzeugungsanweisungen bereit, die mit der Wirkung oder dem Ergebnis betreibbar sind, dass ein Prozessor eine von maskierten Vektoranweisungen zu verwendende Maske erzeugt. Die maskierten Vektoranweisungen können auf ein Szenario angewandt werden, bei dem der Durchgangszählwert (d. h. die Anzahl der Iterationen) einer rechnerischen Schleife nicht durch die Anzahl der Elemente teilbar ist, die in ein Vektorregister passen. Somit müssen die Restiterationen getrennt abgewickelt werden. Um die Elemente in den Restiterationen zu verarbeiten, erzeugt eine Maskenerzeugungsanweisung eine geeignete Prädikatmaske, die einen Teil eines Vektorregisters (z. B. die höchstwertigen Elemente) aus Berechnungen weglässt oder herausmaskiert, so dass keine Programmfehler produziert werden würden (z. B. Programmfehler, die durch Zugriff hinter zugeteiltem Speicher und/oder undefinierte Ergebnisse verursacht werden).
-
Die Maskenerzeugungsanweisung kann auch in anderen Szenarien verwendet werden. Zum Beispiel kann bei spärlichen Vektorberechnungen die Anweisung zum Aktualisieren einer Steuermaske bei der Datenakkumulation verwendet werden. Die Datenakkumulation kann über mehrere Iterationen durchgeführt werden. Bei bestimmten der Iterationen können bestimmte Datenelemente die Berechnung verlassen, und bestimmte neue Datenelemente können sich der Berechnung anschließen. Die Steuermaske wird aktualisiert, um die Elemente zu verfolgen, die weitere Berechnung erfordern. Die Steuermaske kann bei Maskenvektoranweisungen zur Verbesserung der Effizienz der Vektorberechnung benutzt werden.
-
Ähnlich wie bei Vektoranweisungen ist eine maskierte Vektoranweisung betreibbar mit der Wirkung oder dem Ergebnis, dass ein Prozessor eine Vektoroperation an Datenelementen eines oder mehrerer Vektoroperanden ausführt. Zusätzlich verwendet jede maskierte Vektoranweisung eine Maske, um die Vektoroperation zu maskieren, zu prädikatisieren oder konditional zu steuern. Die Masken sind betreibbar, um die Vektorverarbeitung auf datenelementweiser Granularität zu maskieren oder konditional zu steuern. Zum Beispiel können die Masken betreibbar sein, um zu maskieren, ob ein Ergebnis einer Vektoroperation, die an einzelnen Datenelementen aus einem einzigen Quellenvektoroperanden oder einzelnen Paaren entsprechender Datenelemente aus zwei Quellenvektoroperanden ausgeführt wird, in einem Ziel zu speichern ist oder nicht. Die maskierten Vektoranweisungen erlauben eine prädikatisierte oder konditional gesteuerte Vektorverarbeitung jedes Datenelements oder Paars entsprechender Datenelemente getrennt und unabhängig von den Datenelementen. Die maskierten Vektoranweisungen, Operationen und Masken können bestimmte Vorteile bieten, wie zum Beispiel erhöhte Codedichte und/oder höheren Anweisungsdurchsatz.
-
1 ist ein Blockschaltbild einer Ausführungsform einer Anweisungsverarbeitungsvorrichtung 115 mit einer Ausführungseinheit 140, die Schaltkreise umfasst, die betreibbar sind, um Anweisungen auszuführen, einschließlich der hier beschriebenen Maskenerzeugungsanweisungen. Bei bestimmten Ausführungsformen kann die Anweisungsverarbeitungsvorrichtung 115 ein Prozessor, ein Prozessorkern eines Mehrkernprozessors oder ein Verarbeitungselement in einem elektronischen System sein.
-
Ein Decoder 130 empfängt ankommende Anweisungen in Form von Maschinenanweisungen oder Makroanweisungen auf höherer Ebene und decodiert sie, um Mikro-Operationen, Mikro-Codeeintrittspunkte, Mikroanweisungen auf niedrigerer Ebene oder andere Anweisungen oder Steuersignale auf niedrigerer Ebene, die die ursprüngliche Anweisung auf höherer Ebene widerspiegeln und/oder aus ihnen abgeleitet sind, zu erzeugen. Die Anweisungen oder Steuersignale niedrigerer Ebene können die Operation der Anweisung höherer Ebene durch Operationen niedrigerer Ebene (z. B. der Schaltungsebene oder Hardwareebene) implementieren. Der Decoder 130 kann unter Verwendung verschiedener Mechanismen implementiert werden. Beispiele für geeignete Mechanismen waren, aber ohne Beschränkung darauf, Mikrocode, Nachschlagetabellen, Hardwareimplementierungen, programmierbare Logikarrays (PLA), andere Mechanismen, die zum Implementieren von Decodern verwendet werden, die in der Technik bekannt sind, usw.
-
Der Decoder 130 kann ankommende Anweisungen für einen Cache 110, einen Speicher 120 oder andere Quellen empfangen. Die decodierten Anweisungen werden zu der Ausführungseinheit 140 gesendet. Die Ausführungseinheit 140 kann von dem Decoder 130 eine oder mehrere Mikro-Operationen, Mikro-Codeeintrittspunkte, Mikroanweisungen, andere Anweisungen oder andere Steuersignale empfangen, die die empfangenen Anweisungen widerspiegeln oder aus ihnen abgeleitet sind. Die Ausführungseinheit 140 empfängt Dateneingaben von einem Registerfile 170, dem Cache 110 und/oder dem Speicher 120 und erzeugt Datenausgaben für diese.
-
Bei einer Ausführungsform umfasst das Registerfile 170 Architekturregister, die auch als Register bezeichnet werden. Sofern es nicht anderweitig angegeben oder deutlich ersichtlich ist, beziehen sich die Ausdrücke Architekturregister, Registerfile und Register hier auf Register, die der Software und/oder dem Programmierer sichtbar sind (z. B. softwaresichtbar) sind, und/oder die Register, die durch Makroanweisungen spezifiziert werden, um Operanden zu identifizieren. Diese Register stehen im Gegensatz zu anderen Nicht-Architekturregistern in einer gegebenen Mikroarchitektur (z. B. temporären Registern, Umordnungspuffern, Ausscheidungsregistern usw.)
-
Als Alternative kann die Anweisungsverarbeitungsvorrichtung 115, statt den Decoder 130 aufzuweisen, bei einer oder mehreren anderen Ausführungsformen einen Anweisungsemulator, -übersetzer, -umformer, -interpretierer oder andere Anweisungsumsetzungslogik aufweisen. In der Technik sind verschiedene unterschiedliche Arten von Anweisungsumsetzungslogik bekannt, die in Software, Hardware, Firmware oder einer Kombination davon implementiert werden können. Die Anweisungsumsetzungslogik kann eine oder mehrere der Maskenerzeugungsanweisungen empfangen, und sie durch Emulation, Übersetzung, Umformung, Interpretation oder anderweitig in eine oder mehrere entsprechende abgeleitete Anweisungen oder ein oder mehrere entsprechende Steuersignale umsetzen. Bei weiteren Ausführungsformen kann die Anweisungsverarbeitungsvorrichtung 115 sowohl einen Decoder als auch zusätzliche Anweisungsumsetzungslogik aufweisen. Zum Beispiel kann die Anweisungsverarbeitungsvorrichtung 115 Anweisungsumsetzungslogik aufweisen, um eine oder mehrere der Maskenerzeugungsanweisungen in eine oder mehrere Zwischenanweisungen umzusetzen, und einen Decoder, um die eine oder mehreren Zwischenanweisungen in eine oder mehrere Anweisungen oder Steuersignale niedrigerer Ebene zu decodieren, die durch native Hardware der Anweisungsverarbeitungsvorrichtung ausführbar sind. Die Anweisungsumsetzungslogik kann sich ganz oder teilweise im Gegensatz zum Rest der Anweisungsverarbeitungsvorrichtung außerhalb des Chips befinden, wie etwa auf einem getrennten Chip oder in einem Speicher außerhalb des Chips.
-
Gemäß einer Ausführungsform umfasst das Registerfile 170 eine Menge von Vektorregistern 175 und eine Menge von Maskenregistern 185, die beide zum Speichern der Operanden der Maskenerzeugungsanweisungen verwendet werden können. Jedes Vektorregister 175 kann 512 Bit, 256 Bit oder 128 Bit breit sein, oder es kann eine andere Vektorbreite verwendet werden. Jedes Maskenregister 185 enthält eine Anzahl von Maskenbit, wobei jedes Maskenbit einem Datenelement eines der Vektorregister 175 entspricht. Da jedes Maskenbit zum Maskieren eines Datenelements eines Vektorregisters verwendet wird, kann man ein Maskenregister von 64 Bit verwenden, um vierundsechzig 8-Bit-Datenelemente eines 512-Bit-Registers zu maskieren. Bei einem Vektorregister mit einer anderen Breite (z. B. 256 Bit oder 128 Bit) und Datenelementen einer anderen Größe (z. B. 16 Bit, 32 Bit oder 64 Bit) kann eine andere Anzahl von Maskenbit in Verbindung mit einer Vektoroperation verwendet werden.
-
Um Verschleierung der Beschreibung zu vermeiden, wurde eine relativ simple Anweisungsverarbeitungsvorrichtung 115 gezeigt und beschrieben. Es versteht sich, dass andere Ausführungsformen mehr als eine Ausführungseinheit aufweisen können. Zum Beispiel kann die Vorrichtung 115 mehrere verschiedene Arten von Ausführungseinheiten umfassen, wie zum Beispiel arithmetische Einheiten, arithmetisch-logische Einheiten (ALU), Integer-Einheiten, Gleitkommaeinheiten, usw. Weitere Ausführungsformen von Anweisungsverarbeitungsvorrichtungen oder -prozessoren können mehrere Kerne, logische Prozessoren oder Ausführungs-Engines aufweisen. Später wird mit Bezug auf 7–13 eine Anzahl von Ausführungsformen der Anweisungsverarbeitungsvorrichtung 115 gegeben.
-
Gemäß Ausführungsformen der Erfindung erzeugt die hier beschriebene Maskenerzeugungsanweisung eine Maske durch Verschieben der Bit in einem Registeroperanden der Anweisung. Der Registeroperand kann ein Maskenregister oder ein Vielzweckregister sein. 2A–2C zeigen Beispiele für Pseudocode für die Maskenerzeugungsanweisungen. In diesen Figuren repräsentieren r1, r2 Vielzweckregister unabhängiger Größen (z. B. kann r1 32 Bit betragen, während r2 64 Bit beträgt), und k1 repräsentiert ein Maskenregister. Der Wert KL repräsentiert die Anzahl der Maskenbit, die aus der am Ende der Anweisung angehängten Mnemonic B/W/D/Q bestimmt werden kann.
-
2A zeigt ein Beispiel für eine Maskenerzeugungsanweisung KSHLONES[B/W/D/Q] k1, r2. Die Mnemonic B/W/D/Q bedeutet, dass die Anweisung KSHLONES vier Formen hat: KSHLONESB, KSHLONESW, KSHLONESD und KSHLONESQ, die Masken von 8, 16, 32 bzw. 64 Bit entsprechen. In diesem Beispiel dient die k1-Maske sowohl als Quellenoperand als auch als Ziel. Der andere Quellenoperand ist ein Vielzweckregister oder ein Wert aus Speicher.
-
Die Anweisung KSHLONES verschiebt Bit der k1-Maske um die Anzahl von Malen nach links, die in dem Quellenoperanden (r2 oder Speicher) definiert ist, und zieht Einsen herein, um die Bitpositionen niedrigerer Ordnung zu füllen. Die Ausdrücke „Linksverschiebung” oder „Verschiebung nach links” bedeuten hier, dass die Bit in der Richtung vom niedrigstwertigen Bit (LSB) zum höchstwertigen Bit (MSB) verschoben werden. Das heißt, jedes Mal, wenn die k1-Maske um eine Bitposition nach links verschoben wird, wird ein Bitwert von eins hereingezogen, um die niedrigstwertige Bitposition zu füllen. Zum Beispiel produziert im Fall k1 = 1:0:0:0:1:1:0:0 und r2 = 4 dann „KSHLONESB k1, r2” ein Ergebnis k1 = 1:1:0:0:1:1:1:1, wobei jede „0” und „1” einen Bitwert repräsentiert. Es wird angemerkt, dass lediglich die Position derjenigen k1-Bit, die im resultierenden (Ziel-)k1 verbleiben, verschoben wird und ihre Werte durch die Verschiebung nicht geändert werden. Die zu den LSB-Positionen hinzukommenden neuen Bits sind alles Einsen.
-
2B zeigt eine alternative Ausführungsform einer Maskenerzeugungsanweisung SHLONES[B/W/D/Q] r1, r2, die ein Vielzweckregister r1 sowohl als Quellenoperanden als auch das Ziel verwendet. Diese Form der Anweisung ermöglicht ihre Verwendung als Komplementärbitmanipulationsanweisung. 2C zeigt eine andere alternative Ausführungsform einer Maskenerzeugungsanweisung, die Zustandsflags (ZF, CF) modifiziert, dergestalt, dass die Anweisung direkt zum Steuerfluss verwendet werden kann. Eine andere Ausführungsform der Maskenerzeugungsanweisung speichert ein verschobenes Ergebnis (d. h. die resultierende Maske) in einem Zielregister, das von den Quellenoperanden verschieden ist; z. B. KSHLONES k1, k2, r2 und SHLONES r1, r2, r3. Es kann zusätzliche alternative Ausführungsformen der Anweisungen geben, die nicht unbedingt dieselben Anweisungsformate wie die oben beschriebenen Maskenerzeugungsanweisungen aufweisen. In der folgenden Beschreibung werden die verschiedenen Formen der Maskenerzeugungsanweisungen als KSHLONES und ihre Varianten bezeichnet.
-
3A und 3B zeigen Beispielsszenarien, in denen KSHLONES und ihre Varianten zur Verbesserung der Effizienz der Vektorberechnung verwendet werden können. In diesem Beispielen füllen die Rest-Arrayelemente in der Restschleife einer Vektoroperation nicht das gesamte Vektorregister. In diesen Elementen wird angenommen, dass das Vektorregister bis zu 16 Arrayelemente speichern kann: z. B. besitzt das Vektorregister 512 Bit und jedes Arrayelement ist ein 32-Bit-Doppelwort. Wenn die Gesamtzahl der Arrayelemente 35 ist und der Anfang der Schleife mit dem Vektorregister ausgerichtet ist (wie in 3A gezeigt), gibt es am Ende drei Rest-Arrayelemente, die nicht in der vektorisierten Schleife verarbeitet werden und getrennt behandelt werden müssen. Wenn die Gesamtzahl der Arrayelemente 35 ist und der Anfang der Schleife nicht mit dem Vektorregister ausgerichtet ist (zwei Arrayelemente in der ersten vektorisierten Schleife wie in 3B gezeigt), gibt es am Ende ein Rest-Arrayelement, das in der vektorisierten Schleife nicht verarbeitet wird und getrennt behandelt werden muss. Die hier beschriebene Maskenerzeugungsanweisung erzeugt eine Maske, die bei Maskenvektoroperationen mit den Rest-Arrayelementen verwendet werden kann, um die Schleifenvektorisierung zu verbessern.
-
Um die Effizienz des Datenzugriffs zu verbessern, kann ein Compiler Code zum getrennten Behandeln der Rest-Arrayelemente in der letzten vektorisierten Schleife erzeugen. Die Anzahl der Arrayelemente in der letzten vektorisierten Schleife kann zur Compilezeit jedoch im Allgemeinen nicht aufgelöst werden, da die Adressen der Arrayelemente und/oder Schleifendurchgangszählwerte zu diesem Zeitpunkt nicht bekannt sind. Mit den hier beschriebenen Ausführungsformen kann der Compiler zur Compilezeit eine oder mehrere der Maskenerzeugungsanweisungen anstelle von anderen Codesequenzen, die dieselben Aufgaben ausführen, erzeugen. Somit kann ein Compiler diese Maskenerzeugungsanweisungen benutzen, um seine Aufgabe der Schleifenoptimierung zu vereinfachen. Bei alternativen Ausführungsformen können die Maskenerzeugungsanweisungen von einem Programmierer oder einer anderen Codeerzeugungsentität verwendet werden.
-
Die KSHLONES-Anweisung und ihre Varianten können verwendet werden, um mit dem Szenario umzugehen, bei dem die Gesamtgröße der Rest-Datenelemente am letzten Ende einer Schleife kleiner als die Breite des Vektorregisters ist. Das heißt, dass die KSHLONES-Anweisung und ihre Varianten verwendet werden können, wenn es nicht genug Iterationen in einer Schleife (das heißt, nicht genug Datenelemente im Array) gibt, um eine Vektoroperation voller Breite darzustellen.
-
In dem Beispiel von 3C nehmen die letzen drei Datenelemente des Arrays (d. h. A(32), A(33), A(34)) nicht die volle Breite eines Quellenvektors 307 ein. Das heißt, es verbleiben nicht genug Elemente in A, um das gesamte Vektorregister zu füllen. Da der Quellenvektor 307 A(32), A(33), A(34) als seine Datenelemente niedrigster Ordnung enthält, werden nur die drei Bit niedrigster Ordnung einer Maske 308 (z. B. auf 1) gesetzt, um anzuzeigen, dass für A(32), A(33), A(34) die Addition durchgeführt werden soll und die Ergebnisse der Addition gespeichert werden sollen. Die 13 Bit höherer Ordnung der Maske 308 werden gelöscht (z. B. 0). Die Maske 308 kann das Ergebnis sein, das durch einen Prozessor erzeugt wird, der die KSHLONES-Anweisung oder eine ihrer Varianten ausführt.
-
Bei einer Ausführungsform kann das Fehlen von Datenelementen am Ende eines Arrays (zum Füllen eines gesamten Vektorregisters) ein Ergebnis einer anfänglichen Fehlausrichtung an der Basisadresse des Arrays sein. Zum Beispiel ist bei Bildverarbeitungsanwendungen oftmals die Größe des Bildarrays ein ganzzahliges Vielfaches der Vektorregisterbreite. Wenn der Anfang des Bildarrays jedoch fehlausgerichtet ist, kann eine Anzahl von Datenelementen am Ende der Schleife, die nicht das gesamte Vektorregister füllen kann, übrig sein.
-
Die Verwendung der Maske 308 hilft dabei, die Ausführung einer Schleife, bei der Datenelemente eines Arrays Operanden sind, zu vektorisieren. In den Beispielen von 3C kann der Iterationsindex i = 32, 33 und 34 mit einer maskierten Vektoroperation vektorisiert werden, bei der der Quellenvektor 307 mit der Maske 308 verwendet wird. Bei einer Ausführungsform kann bei Detektion einer Schleife ein Compiler Schleifenoptimierungscode erzeugen, der eine oder mehrere der hier beschriebenen Maskenerzeugungsanweisungen umfasst.
-
Die Anweisung für die dargestellte maskierte Vektoroperation 303 gibt einen zu einem Skalarwert zu addierenden Quellenvektor an. Andere maskierte Vektoranweisungen können zwei oder mehr Quellenvektoren angeben. Die Anweisung der maskierten Vektoroperation 303 spezifiziert auch die Maske 308. Jede der Masken umfasst mehrere Maskenelemente, Prädikatelemente, konditionale Steuerelemente oder Flags. Wie in der Darstellung gezeigt, kann es ein solches Maskenelement oder Flag für jedes entsprechende Quellendatenelement geben, falls an der Operation ein Quellenvektoroperand beteiligt ist. Gewöhnlich kann jedes Element oder Flag ein einzelnes Bit sein. Ein einzelnes Bit kann erlauben, eine von zwei verschiedenen Möglichkeiten zu spezifizieren (z. B. die Operation auszuführen oder die Operation nicht auszuführen, Speichern eines Ergebnisses der Operation oder Nichtspeichern eines Ergebnisses der Operation usw.). Als Alternative können, wenn Auswahl zwischen mehr als zwei verschiedenen Auswahlmöglichkeiten erwünscht ist, zwei oder mehr Bit für jedes Flag oder Element verwendet werden.
-
Gemäß der dargestellten Konvention wird, wenn ein gegebenes Maskenbit auf 1 gesetzt ist, ein Ergebnis der Vektoroperation an einem entsprechenden Datenelement des Quellenvektors ausgeführt und in einem entsprechenden Datenelement des Ergebnisses gespeichert. Wenn umgekehrt das gegebene Maskenbit auf 0 gelöscht ist, wird die Vektoroperation für das entsprechende Datenelement des Quellenvektors entweder ausgelassen (d. h. nicht ausgeführt), oder es wird nicht erlaubt, das Ergebnis in dem entsprechenden Datenelement des Ergebnisses zu speichern. Stattdessen kann ein anderer Wert in dem Ergebnisdatenelement gespeichert werden. Zum Beispiel wird der numerische Wert des entsprechenden Datenelements aus dem Quellenvektor gespeichert. Bei einer alternativen Ausführungsform kann ein 0- oder anderer vorbestimmter Wert in dem entsprechenden Datenelement des Ergebnisses gespeichert werden. Es ist auch eine zu der dargestellten entgegengesetzte Konvention möglich, bei der Bit gelöscht werden (d. h. 0), um Speichern der Ergebnisse zu erlauben, oder gesetzt werden (d. h. 1), um das Speichern der Ergebnisse nicht zu erlauben.
-
Die folgende Beispiel-Codesequenz erzeugt eine Maske für eine Rest-Schleife, wobei der aktuelle Iterationszählwert in rbx und die Schleifengrenze in rcx gespeichert werden. Unter Verwendung der dargestellten Ausführungsform von 3C beträgt der aktuelle Iterationszählwert 31 und die Schleifengrenze 34.
SUB rbx, rcx //Berechnen der Anzahl übriger Iterationen
KXOR k1, k1, k1 //Maske nullen
KSHLONES k1, rbx //Maske für Rest-Schleife erzeugen
-
Es gibt viele Vorteile der Verwendung der KSHLONES-Anweisung (einschließlich ihrer Varianten) zum Erzeugen einer Maske für eine Restschleife. Die KSHLONES-Anweisungen operieren mit einem Subtraktionsergebnis. Für eine andere Anweisung, die die Subtraktion als Teil ihrer Operation umfasst, entstünde zusätzliches Vorberechnungs-Overhead zum Durchführen des Operandentypvergleichs vor der Subtraktion. Ferner decken die KSHLONES-Anweisungen Szenarien ab, bei denen der Iterationszähler und/oder die Schleifengrenze negativ sein können, wodurch mehr Variabilität für den Compiler zum Optimieren des Codes erlaubt wird. Zusätzlich wird der Code zum Erzeugen einer Maske für eine Restschleife in drei Phasen (d. h. die drei Anweisungen in der obigen Codesequenz) aufgeteilt, wodurch die Ausführungseinteilung verbessert und mehr Variabilität und Flexibilität bei der Verwendung der KSHLONES-Anweisungen bereitgestellt wird. Die KSHLONES-Anweisungen können für sich oder in Kombination mit anderen Anweisungen verwendet werden, wenn keine Subtraktion von Operanden benötigt wird. Wenn zum Beispiel die Anzahl (N) von Einsen bekannt ist, kann KSHLONES verwendet werden, um eine Maske mit Einsen in den N niedrigstwertigen Bit wie folgt zu erzeugen: N = 5; k1 = 0:0:0:0:0:0:0:0; KSHLONES k1, N Ergebnisse in k1 = 0:0:0:1:1:1:1:1.
-
Die KSHLONES-Anweisungen können auch bei der Datenakkumulation für spärliche Vektorberechnung verwendet werden, wie in dem Beispiel von 4 gezeigt. In diesem Beispiel werden ein Paar von Vektorregistern (V1 und V2) und ein Paar von Maskenregistern (K1 und K2) benutzt, um Datenakkumulation durchzuführen. V1 und V2 sind beide spärliche Vektoren, in denen nicht alle Datenelementpositionen gefüllt sind. V1 dient als Akkumulator zum Akkumulieren von Vektorelementen zur Berechnung und V2 stellt neue Datenelemente zum Ausfüllen der unbenutzten Schlitze in V1 bereit. Die Maskenregister K1 und K2 dienen zur Anzeige, welche Positionen in den entsprechenden Vektorregistern gültige Datenelemente zur Berechnung enthalten. In diesem Beispiel werden die den gültigen Datenelementen entsprechenden Maskenbit sowohl für K1 als auch für K2 auf 1 gesetzt. Es versteht sich, dass die Bitwerte von K2 für dieselben Datenelemente von V2 umgekehrt werden können.
-
In dem Beispiel von 4 enthält V2 zu Anfang vier als B0 angegebene Elemente. Die entsprechenden Maskenbit im K2 geben die Positionen dieser vier Elemente an. Durch Verwendung von N = POPCNT(K2) wird der Wert von N auf die Anzahl von K2-Bit mit dem Wert 1 gesetzt. In diesem Beispiel ist also N = 4. Die Maskenbit in K1 enthalten drei Einsen, entsprechend den Elementpositionen 0–2 des anfänglichen V1. Die in K1 enthaltenen Informationen geben nicht nur die Anzahl akkumulierter Elemente A0 an, sondern auch die rechte Grenze leerer Schlitze in V1 (in diesem Beispiel befindet sich die rechte Grenze an der dritten Elementposition). K1 kann zur weiteren Datenakkumulation, die die Anweisungen COMPRESS und/oder EXPAND umfasst, so wie es ist oder invertiert verwendet werden.
-
Die vier B0 können unter Verwendung existierender Vektoranweisungen komprimiert und in die Elementpositionen 3–6 von V1 zusammengelegt werden. Das aktualisierte V1 wird dichter als das anfängliche V1, und deshalb bezüglich effizienter Vektorberechnung besser handhabbar. Das entsprechende K1 nach der Zusammenlegung kann durch K1 = KSHLONES(K1, N) berechnet werden, wodurch die anfänglichen drei Bit von eins in dem Quellenwert von K1 bewahrt und vier zusätzliche Bit von eins hinzugefügt werden. Durch das Bewahren des Quellenwerts von K1 wird das Führen getrennter Zähler zum Verfolgen der Anzahl der Elemente in dem Akkumulator vor und nach dem Zusammenlegen überflüssig. Nachdem das aktualisierte V1 in einer Vektorberechnung verwendet wird, können die Operationen von 4 wiederholt werden, so dass der Akkumulator weiter Datenelemente für Vektorberechnung akkumulieren kann.
-
Die hier offenbarten Maskenerzeugungsanweisungen sind Vielzweckanweisungen, die viele Verwendungen haben. Zum Beispiel können diese Anweisungen entweder alleine oder in Kombination mit anderen Anweisungen zur Berechnung einer Maske für eine Restschleife von Vektoroperationen oder zur Datenakkumulation bei der spärlichen Vektorberechnung verwendet werden. Andere Verwendungen werden auch auf der Basis der vorliegenden Offenbarung in Betracht gezogen.
-
5 ist ein Blockflussdiagramm eines Verfahrens 500 zum Ausführen einer Maskenerzeugungsanweisung gemäß einer Ausführungsform. Das Verfahren 500 beginnt damit, dass ein Prozessor (genauer gesagt z. B. die Ausführungseinheit 140 von 1) eine Maskenerzeugungsanweisung empfängt, die mindestens einen ersten Operanden und einen zweiten Operanden spezifiziert (Block 510). Beispiele für die Maskenerzeugungsanweisungen wären die KSHLONES-Anweisung und ihre Varianten wie oben beschrieben. Bei einer Ausführungsform ist der erste Operand ein Maskenregister und der zweite Operand ein Vielzweckregister. Bei einer alternativen Ausführungsform sind der erste Operand und der zweite Operand beide Vielzweckregister. Als Reaktion auf die Maskenerzeugungsanweisung führt der Prozessor die folgenden Operationen aus (Block 520): Linksverschieben von Bit des ersten Operanden um eine Anzahl von Malen, die in dem zweiten Operanden definiert wird (Block 530), und Hereinziehen eines niedrigstwertigen Bit von eins jedes Mal, wenn ein höchstwertiges Bit des ersten Operanden (nach links) herausgeschoben wird, um dadurch ein Ergebnis zu erzeugen (Block 540). Jedes Bit im Ergebnis entspricht einem Datenelement. Das Ergebnis ist eine bei einer maskierten Vektoroperation zu verwendende Maske.
-
Bei verschiedenen Ausführungsformen kann das Verfahren 500 durch einen Vielzweckprozessor, einen Spezialprozessor (z. B. einen Grafikprozessor oder einen digitalen Signalprozessor) oder eine andere Art von digitaler Logikvorrichtung oder Anweisungsverarbeitungsvorrichtung ausgeführt werden. Bei bestimmten Ausführungsformen kann das Verfahren 500 durch die Anweisungsverarbeitungsvorrichtung 115 von 1 oder einen ähnlichen Prozessor, eine Vorrichtung oder ein System, wie etwa die in 7–13 gezeigten Ausführungsformen, ausgeführt werden. Außerdem können die Anweisungsverarbeitungsvorrichtung 115 von 1 sowie der Prozessor, die Vorrichtung oder das System, die in 7–13 gezeigt sind, Ausführungsformen von Operationen und Verfahren entweder genauso wie das Verfahren 500, diesem ähnlich oder von diesem verschieden ausführen.
-
Bei bestimmten Ausführungsformen kann die Anweisungsverarbeitungsvorrichtung 115 von 1 in Verbindung mit einem Anweisungsumsetzer arbeiten, der eine Anweisung aus einem Quellenanweisungssatz in einen Zielanweisungssatz umsetzt. Zum Beispiel kann der Anweisungsumsetzer (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Compilierung) eine Anweisung in eine oder mehrere andere Anweisungen, die durch den Kern zu verarbeiten sind, übersetzen, umformen, emulieren oder anderweitig umsetzen. Der Anweisungsumsetzer kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Anweisungsumsetzer kann auf dem Prozessor, außerhalb des Prozessors oder teilweise auf dem Prozessor und teilweise außerhalb des Prozessors sein.
-
6 ist ein Blockschaltbild, das die Verwendung eines Softwareanweisungsumsetzers gemäß Ausführungsformen der Erfindung kontrastiert. Bei der dargestellten Ausführungsform ist der Anweisungsumsetzer ein Softwareanweisungsumsetzer, obwohl der Anweisungsumsetzer als Alternative in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 6 zeigt ein Programm in einer höheren Sprache 602, das unter Verwendung eines x86-Compilers 604 compiliert werden kann, um x86-Binärcode 606 zu erzeugen, der nativ durch einen Prozessor mit mindestens einem x86-Anweisungssatzkern 616 ausgeführt werden kann. Der Prozessor mit dem mindestens einen x86-Anweisungssatzkern 616 repräsentiert einen beliebigen Prozessor, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern ausführen kann, indem Folgendes kompatibel ausgeführt oder anderweitig verarbeitet wird: (1) ein wesentlicher Teil des Anweisungssatzes des Intel-x86-Anweisungssatzkerns oder (2) Objektcodeversionen von Anwendungen oder anderer Software, die dafür bestimmt sind, auf einem Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern ausgeführt zu werden, um im Wesentlichen dasselbe Ergebnis wie ein Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern zu erzielen. Der x86-Compiler 604 repräsentiert einen Compiler, der betreibbar ist, um x86-Binärcode 606 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit dem mindestens einen x86-Anweisungssatzkern 616 ausgeführt werden kann. Ähnlich zeigt 6, dass das Programm in der höheren Sprache 602 unter Verwendung eines Alternativ-Anweisungssatz-Compilers 608 compiliert werden kann, um Alternativ-Anweisungssatz-Binärcode 610 zu erzeugen, der nativ durch einen Prozessor ohne mindestens einen x86-Anweisungssatzkern 614 ausgeführt werden kann (z. B. einen Prozessor mit Kernen, die den MIPS-Anweisungssatz der MIPS Technologies in Sunnyvale, CA, ausführen und/oder die den ARM-Anweisungssatz der ARM Holdings in Sunnyvale, CA, ausführen). Der Anweisungsumsetzer 612 dient zum Umsetzen des x86-Binärcodes 606 in Code, der nativ durch den Prozessor ohne einen x86-Anweisungssatzkern 614 ausgeführt werden kann. Dieser umgesetzte Code ist wahrscheinlich nicht derselbe wie der Alternativ-Anweisungssatz-Binärcode 610, da ein Anweisungssatzumsetzer, der hierzu fähig ist, schwierig herzustellen ist; der umgesetzte Code erreicht jedoch die allgemeine Operation und kann aus Anweisungen aus dem Alternativ-Anweisungssatz bestehen. Somit repräsentiert der Anweisungsumsetzer 612 Software, Firmware, Hardware oder eine Kombination davon, die durch Emulation, Simulation oder einen beliebigen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung ohne einen x86-Anweisungssatzprozessor oder -kern erlaubt, den x86-Binärcode 606 auszuführen.
-
Beispielhafte Kernarchitekturen
-
In-Reihenfolge- und Außer-Reihenfolge-Kernblockschaltbild
-
7A ist ein Blockschaltbild sowohl einer beispielhaften In-Reihenfolge-Pipeline als auch einer beispielhaften Registerumbenennungs-Außer-Reihenfolge-Ausgabe-/-Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung. 7B ist ein Blockschaltbild sowohl einer beispielhaften Ausführungsform eines In-Reihenfolge-Architektur-Kerns als auch eines beispielhaften Registerumbenennungs-Außer-Reihenfolge-Ausgabe-/-Ausführungs-Architektur-Kerns, der in einen Prozessor gemäß Ausführungsformen der Erfindung aufgenommen werden soll. Die durchgezogen gezeichneten Kästen in 7A und 7B zeigen die In-Reihenfolge-Pipeline und den In-Reihenfolge-Kern, während der optionale Zusatz der gestrichelt gezeichneten Kästen Pipeline und Kern mit Registerumbenennung-Außer-Reihenfolge-Ausgabe-/-Ausführung zeigen. Da der In-Reihenfolge-Aspekt eine Teilmenge des Außer-Reihenfolge-Aspekts ist, wird der Außer-Reihenfolge-Aspekt beschrieben.
-
In 7A umfasst eine Prozessor-Pipeline 700 eine Abrufstufe 702, eine Längendecodierungsstufe 704, eine Decodierungsstufe 706, eine Zuteilungsstufe 708, eine Umbenennungsstufe 710, eine Scheduling-Stufe 712 (auch als Entsende- oder Ausgabestufe bekannt), eine Registerlese-/Speicherlesestufe 714, eine Ausführungsstufe 716, eine Rückschreib-/Speicherschreibstufe 718, eine Programmfehlerabwicklungsstufe 722 und eine Commit-Stufe 724.
-
7B zeigt den Prozessorkern 790 mit einer Frontend-Einheit 730, die mit einer Ausführungs-Engine-Einheit 750 gekoppelt ist, und beide sind mit einer Speichereinheit 770 gekoppelt. Der Kern 790 kann ein RISC-Kern (Reduced Instruction Set Computing), ein CISC-Kern (Complex Instruction Set Computing), ein VLIW-Kern (Very Long Instruction Word) oder ein hybrider oder alternativer Kerntyp sein. Als weitere Möglichkeit kann der Kern 790 ein Spezialkern sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Kompressions-Engine, ein Koprozessor-Kern, ein GPGPU-Kern (Vielzweck-Datenverarbeitungs-Grafikverarbeitungseinheit), ein Grafikkern oder dergleichen.
-
Die Frontend-Einheit 730 umfasst eine Zweigprädiktionseinheit 732, die mit einer Anweisungscache-Einheit 734 gekoppelt ist, die mit einem Anweisungsübersetzungs-Lookaside-Puffer (TLB) 736 gekoppelt ist, der mit einer Anweisungsabrufeinheit 738 gekoppelt ist, die mit einer Decodiereinheit 740 gekoppelt ist. Die Decodiereinheit 740 (bzw. Decodierer) kann Anweisungen decodieren und erzeugt als Ausgabe eine oder mehrere Mikro-Operationen, Mikro-Code-Eintrittspunkte, Mikroanweisungen, andere Anweisungen oder andere Steuersignale, die aus den ursprünglichen Anweisungen decodiert werden oder die anderweitig diese widerspiegeln oder aus ihnen abgeleitet werden. Die Decodiereinheit 740 kann unter Verwendung verschiedener unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen wären, aber ohne Beschränkung darauf, Nachschlagetabellen, Hardwareimplementierungen, programmierbare Logikarrays (PLA), Mikrocode-Nurlesespeicher (ROM) usw. Bei einer Ausführungsform umfasst der Kern 790 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makroanweisungen speichert (z. B. in der Decodiereinheit 740 oder ansonsten in der Frontend-Einheit 730). Die Decodiereinheit 740 ist mit einer Umbenennungs-/Zuteilereinheit 752 in der Ausführungs-Engine-Einheit 750 gekoppelt.
-
Die Ausführungs-Engine-Einheit 750 umfasst die Umbenennungs-/Zuteilereinheit 752, die mit einer Ausscheideeinheit 754 und einer Menge aus einer oder mehreren Scheduler-Einheiten 756 gekoppelt ist. Die Scheduler-Einheit(en) 756 repräsentiert eine beliebige Anzahl verschiedener Scheduler, darunter Reservierungsstationen, Zentral-Anweisungsfenster usw. Die Scheduler-Einheit(en) 756 ist mit den physischen Registerfile-Einheit(en) 758 gekoppelt. Jede der physischen Registerfile-Einheiten 758 repräsentiert ein oder mehrere physische Registerfiles, von denen verschiedene einen oder mehrere verschiedene Datentypen speichern, wie etwa Skalar-Integer, Skalar-Gleitkomma, Integer-gepackt, Gleitkomma-gepackt, Vektor-Integer, Vektor-Gleitkomma, Status (z. B. ein Anweisungszeiger, der die Adresse der nächsten auszuführenden Anweisung ist) usw. Bei einer Ausführungsform umfasst die physische Registerfile-Einheit 758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine Skalarregistereinheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Vielzweckregister bereitstellen. Die physische Registerfile-Einheit(en) 758 wird durch die Ausscheidungseinheit 754 überlappt, um verschiedene Weisen darzustellen, auf die Registerumbenennung und Außerreihenfolgeausführung implementiert werden kann (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und eines oder mehrerer Ausscheidungs-Registerfiles; Verwendung von Zukunft-Files, Geschichte-Puffer und Ausscheidungsregister-Files; Verwendung von Registerabbildungen und eines Pools von Registern; usw.). Die Ausscheidungseinheit 754 und die physische Registerfile-Einheit(en) 758 sind mit dem Ausführungs-Cluster 760 gekoppelt. Das Ausführungs-Cluster 760 umfasst eine Menge aus einer oder mehreren Ausführungseinheiten 762 und eine Menge aus einer oder mehreren Speicherzugriffseinheiten 764. Die Ausführungseinheiten 762 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) ausführen, und an verschiedenen Arten von Daten (z. B. Skalar-Gleitkomma, Integer-Gepackt, Gleitkomma-Gepackt, Vektor-Integer, Vektor-Gleitkomma). Obwohl bestimmte Ausführungsformen eine Anzahl von Ausführungseinheiten umfassen können, die spezifischen Funktionen oder Mengen von Funktionen gewidmet sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle die gesamten Funktionen ausführen. Die Scheduler-Einheiten 756, physischen Registerfile-Einheiten 758 und Ausführungs-Cluster 760 sind als möglicherweise mehrzahlig gezeigt, weil bestimmte Ausführungsformen für bestimmte Arten von Daten/Operationen getrennte Pipelines erzeugen (z. B. eine Skalar-Integer-Pipeline, eine Skalar-Gleitkomma-/Integer-Gepackt-/Gleitkomma-Gepackt-/Vektor-Integer-/Vektor-Gleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die jeweils ihre eigene Scheduler-Einheit, physische Registerfile-Einheit und/oder Ausführungs-Cluster aufweisen – und im Fall einer getrennten Speicherzugriffs-Pipeline werden bestimmte Ausführungsformen implementiert, bei denen nur das Ausführungs-Cluster dieser Pipeline die Speicherzugriffseinheit(en) 764 aufweist). Es versteht sich auch, dass, obwohl getrennte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Außer-Reihenfolge-Ausgabe/-Ausführung und der Rest In-Reihenfolge sein können.
-
Die Menge von Speicherzugriffseinheiten 764 ist mit der Speichereinheit 770 gekoppelt, die eine Daten-TLB-Einheit 772 umfasst, die mit einer Daten-Cache-Einheit 774 gekoppelt ist, die mit einer Level-2-(L2-)Cache-Einheit 776 gekoppelt ist. Bei einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 764 eine Ladeeinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 772 in der Speichereinheit 770 gekoppelt sind. Die Anweisungs-Cache-Einheit 734 ist ferner mit einer Level-2-(L2-)Cache-Einheit 776 in der Speichereinheit 770 gekoppelt. Die L2-Cache-Einheit 776 ist mit einer oder mehreren anderen Ebenen von Cache und letztendlich mit einem Hauptspeicher gekoppelt.
-
Beispielsweise kann die beispielhafte Registerumbenennungs-Außer-Reihenfolge-Ausgabe-/-Ausführungs-Kern-Architektur die Pipeline 700 folgendermaßen implementieren: 1) der Anweisungs-Abruf 738 führt die Abruf- und Längendecodierungsstufen 702 und 704 aus; 2) die Decodiereinheit 740 führt die Decodierstufe 706 aus; 3) die Umbenennungs-/Zuteilereinheit 752 führt die Zuteilungsstufe 708 und die Umbenennungsstufe 710 aus; 4) die Scheduler-Einheit(en) 756 führt die Schedule-Stufe 712 aus; 5) die physischen Registerfile-Einheit(en) 758 und die Speichereinheit 770 führen die Registerlese-/Speicherlesestufe 714 aus; das Ausführungs-Cluster 760 führt die Ausführungsstufe 716 aus; 6) die Speichereinheit 770 und die physischen Registerfile-Einheit(en) 758 führen die Rückschreib-/Speicherschreibstufe 718 aus; 7) verschiedene Einheiten können an der Programmfehlerabwicklungsstufe 722 beteiligt sein; und 8) die Ausscheidungseinheit 754 und die physischen Registerfile-Einheit(en) 758 führen die Commit-Stufe 724 aus.
-
Der Kern 790 kann einen oder mehrere Anweisungssätze unterstützen (z. B. den x86-Anweisungssatz (mit bestimmten Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Anweisungssatz der MIPS Technologies in Sunnyvale, CA; den ARM-Anweisungssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) der ARM Holdings in Sunnyvale, CA), einschließlich der Anweisung(en), die hier beschrieben werden. Bei einer Ausführungsform umfasst der Kern 790 Logik zur Unterstützung einer Gepackte-Daten-Anweisungssatz-Erweiterung (z. B. SSE, AVX1, AVX2, usw.), um dadurch eine Ausführung der von vielen Multimediaanwendungen verwendeten Operationen unter Verwendung gepackter Daten zu erlauben.
-
Es versteht sich, dass der Kern Mehrfach-Threading (Ausführen von zwei oder mehr parallelen Mengen von Operationen oder Threads) unterstützen kann und zwar auf vielfältige Weisen, einschließlich Zeitscheiben-Mehrfach-Threading, Simultan-Mehrfach-Threading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Threads bereitstellt, die der physische Kern simultan im Mehrfach-Threading behandelt), oder eine Kombination davon (z. B. Zeitschalt-Abruf und -Decodierung und simultanes Mehrfach-Threading danach, wie etwa bei der Hyperthreading-Technologie von Intel®).
-
Obwohl Registerumbenennung im Kontext der Außerreihenfolge-Ausführung beschrieben wird, versteht sich, dass Registerumbenennung in einer In-Reihenfolge-Architektur verwendet werden kann. Obwohl die dargestellte Ausführungsform des Prozessors auch getrennte Anweisungs- und Daten-Cache-Einheiten 734/774 und eine gemeinsam benutzte L2-Cache-Einheit 776 umfasst, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Anweisungen als auch für Daten aufweisen, wie etwa zum Beispiel einen internen Level-1-(L1-)Cache oder mehrere Ebenen von internem Cache. Bei bestimmten Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache, der sich außerhalb des Kerns und/oder des Prozessors befindet, umfassen. Als Alternative kann sich der gesamte Cache außerhalb des Kerns und/oder des Prozessors befinden.
-
Eine spezifische beispielhafte In-Reihenfolge-Kernarchitektur
-
8A–B zeigen ein Blockschaltbild einer spezifischeren beispielhaften In-Reihenfolge-Kernarchitektur, wobei dieser Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne desselben Typs und/oder verschiedener Typen) in einem Chip wäre. Die Logikblöcke kommunizieren ein Verbindungsnetzwerk hoher Bandbreite (z. B. ein Ringnetzwerk) mit bestimmter Festfunktionslogik, Speicher-E/A-Schnittstellen und anderer notwendiger E/A-Logik, abhängig von der Anwendung.
-
8A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit seiner Verbindung mit dem auf dem Chip befindlichen Verbindungsnetzwerk 802 und mit seiner lokalen Teilmenge des Level-2-(L2-)Cache 804 gemäß Ausführungsformen der Erfindung. Bei einer Ausführungsform unterstützt ein Anwendungsdecodier 800 den x86-Anweisungssatz mit einer Gepackte-Daten-Anweisungssatzerweiterung. Ein L1-Cache 806 erlaubt Zugriffe auf den Cache-Speicher mit niedriger Latenz in die Skalar- und Vektoreinheiten. Obwohl bei einer Ausführungsform (zur Vereinfachung des Entwurfs) eine Skalareinheit 808 und eine Vektoreinheit 810 getrennte Registermengen verwenden (jeweils Skalarregister 812 und Vektorregister 814) und zwischen ihnen transferierte Daten in Speicher geschrieben und dann aus einem Level-1-(L1-)Cache 806 wieder ausgelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. Verwendung einer einzigen Registermenge oder Aufnehmen eines Kommunikationspfads, der den Transfer von Daten zwischen den zwei Registerfiles ohne Schreiben und Wiederlesen erlaubt).
-
Die lokale Teilmenge des L2-Cache 804 ist Teil eines globalen L2-Cache, der in getrennte lokale Teilmengen (eine pro Prozessorkern) aufgeteilt wird. Jeder Prozessorkern besitzt einen direkten Zugriffspfad zu seiner eigenen lokalen Teilmenge des L2-Cache 804. Durch einen Prozessorkern gelesene Daten werden in seiner L2-Cache-Teilmenge 804 gespeichert und es kann schnell und parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilmengen zugreifen, auf sie zugegriffen werden. Durch einen Prozessorkern geschriebene Daten werden in seiner eigenen L2-Cache-Teilmenge 804 gespeichert und aus anderen Teilmengen ausgeräumt, wenn es notwendig ist. Das Ringnetzwerk stellt Kohärenz für gemeinsam benutzte Daten sicher. Das Ringnetzwerk ist bidirektional, um es Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu erlauben, im Chip miteinander zu kommunizieren. Jeder Ring-Datenpfad ist in jeder Richtung 1012 Bit breit.
-
8B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen der Erfindung. 8B umfasst einen L1-Daten-Cache 806A als Teil des L1-Cache 804, sowie mehr Einzelheiten bezüglich der Vektoreinheit 810 und der Vektorregister 814. Speziell ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 828), die eine oder mehrere von Integer-, Single-Precision-Float- und Double-Precision-Float-Anweisungen ausführt. Die VPU unterstützt Swizzling der Registereingänge mit der Swizzle-Einheit 820, numerische Umsetzung mit numerischen Umsetzungseinheiten 822A–B und Replikation mit der Replikationseinheit 824 am Speichereingang. Schreibmaskenregister 826 erlauben Prädikatisierung von resultierenden Vektorschreibvorgängen.
-
Ein Prozessor mit integrierter Speichersteuerung und Grafik
-
9 ist ein Blockschaltbild eines Prozessors 900, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die durchgezogen gezeichneten Kästen in 9 zeigen einen Prozessor 900 mit einem einzigen Kern 902A, einen Systemagenten 910, eine Menge von einer oder mehreren Bussteuerungseinheiten 916, während der optionale Zusatz der gestrichelt gezeichneten Kästen einen alternativen Prozessor 900 mit mehreren Kernen 902A–N, eine Menge von einer oder mehreren Speichersteuerungseinheit(en) 914 in der Systemagenteinheit 910 und Speziallogik 908 darstellt.
-
Somit können verschiedene Implementierungen des Prozessors 900 Folgendes umfassen: 1) eine CPU mit der Speziallogik 908, die integrierte Grafik ist, und/oder wissenschaftliche (Durchsatz-)Logik (die einen oder mehrere Kerne umfassen kann) und wobei die Kerne 902A–N ein oder mehrere Vielzweckkerne sein können (z. B. Vielzweck-In-Reihenfolge-Kerne, Vielzweck-Außerreihenfolge-Kerne, eine Kombination der beiden); 2) einen Coprozessor, wobei die Kerne 902A–N eine große Anzahl von Spezialkernen sind, die hauptsächlich für Grafik und/oder Wissenschaft (Durchsatz) bestimmt sind; und 3) einen Coprozessor mit den Kernen 902A–N, die eine große Anzahl von Vielzweck-In-Reihenfolge-Kernen sind. Somit kann der Prozessor 900 ein Vielzweckprozessor, ein Koprozessor oder Spezialprozessor sein, wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU (Vielzweck-Grafikverarbeitungseinheit), ein Hochdurchsatz-MIC-Koprozessor (Many Integrated Core) (mit 30 oder mehr Kernen), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann Teil von einem oder mehreren Substraten und/oder darauf implementiert sein, die beliebige einer Anzahl von Prozesstechnologien verwenden, wie zum Beispiel BiCMOS, CMOS oder NMOS.
-
Die Speicherhierarchie umfasst eine oder mehrere Ebenen von Cache in den Kernen, eine Menge von einer oder mehreren gemeinsam benutzten Cache-Einheiten 906 und externen Speichern (nicht gezeigt), der mit der Menge von integrierten Speichersteuerungseinheiten 914 gekoppelt ist. Die Menge gemeinsam benutzter Cache-Einheiten 906 kann einen oder mehrere Mitebenen-Caches umfassen, wie etwa Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Ebenen von Cache, einen Last-Level-Cache (LLC) und/oder Kombinationen davon. Obwohl bei einer Ausführungsform eine Verbindungseinheit 912 auf Ringbasis die integrierte Grafiklogik 908, die Menge von gemeinsam benutzten Cache-Einheiten 906 und die Systemagenteinheit 910/integrierten Speichersteuerungseinheit(en) 914 verbindet, können alternative Ausführungsformen eine beliebige Anzahl wohlbekannter Techniken zur Verbindung solcher Einheiten verwenden. Bei einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cache-Einheiten 906 und Kernen 902A–N aufrechterhalten.
-
Bei bestimmten Ausführungsformen sind ein oder mehrere der Kerne 902A–N zu Mehrfach-Threading fähig. Der Systemagent 910 umfasst die Komponenten, die die Kerne 902A–N koordinieren und betreiben. Die Systemagenteinheit 910 kann zum Beispiel eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten sein oder umfassen, die zum Regeln des Leistungszustands der Kerne 902A–N und der integrierten Grafiklogik 908 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern verbundener Anzeigen.
-
Die Kerne 902A–N können im Hinblick auf den Architekturanweisungssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 902A–N können zur Ausführung desselben Anweisungssatzes fähig sein, während andere nur zur Ausführung einer Teilmenge des Anweisungssatzes oder eines anderen Anweisungssatzes fähig sein können.
-
Beispielhafte Computerarchitekturen
-
10–13 sind Blockschaltbilder beispielhafter Computerarchitekturen. Es sind auch andere Systementwürfe und Konfigurationen, die in der Technik für Laptops, Desktops, in der Hand gehaltene PCs, Personal Digital Assistants, technische Workstations, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxes, Mikrosteuerungen, Mobiltelefone, tragbare Medienplayer, in der Hand gehaltene Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, geeignet. Im Allgemeinen ist eine enorme Vielfalt von Systemen oder elektronischen Vorrichtungen mit der Fähigkeit, einen Prozessor und/oder andere Ausführungslogik wie hier offenbart zu enthalten, geeignet.
-
Nunmehr mit Bezug auf 10 ist ein Blockschaltbild eines Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 umfassen, die mit einem Steuerungs-Hub 1020 gekoppelt sind. Bei einer Ausführungsform umfasst der Steuerungs-Hub 1020 einen Grafikspeichersteuerungs-Hub (GMCH) 1090 und einen Eingabe/Ausgabe-Hub (IOH) 1050 (die sich auf getrennten Chips befinden können); der GMCH 1090 umfasst Speicher- und Grafiksteuerungen, mit denen Speicher 1040 und ein Coprozessor 1045 gekoppelt sind; der IOH 1050 koppelt Eingabe/Ausgabe-(E/A-)Vorrichtungen 1060 mit dem GMCH 1090. Als Alternative sind eine oder beide der Speicher- und Grafiksteuerungen in den Prozessor (wie hier beschrieben) integriert, der Speicher 1040 und der Coprozessor 1045 sind direkt mit dem Prozessor 1010 gekoppelt und der Steuerungs-Hub 1020 in einem einzigen Chip mit dem IOH 1050.
-
Die optionale Beschaffenheit der zusätzlichen Prozessoren 1015 wird in 10 mit gestrichelten Linien bezeichnet. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hier beschriebenen Prozessorkerne umfassen und kann eine bestimmte Version des Prozessors 900 sein.
-
Der Speicher 1040 kann zum Beispiel dynamischer Direktzugriffsspeicher (DRAM), Phasenänderungsspeicher (PCM) oder eine Kombination der beiden sein. Für mindestens eine Ausführungsform kommuniziert der Steuerungs-Hub 1020 über einen Mehrfachabkopplungsbus, wie etwa einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle wie eine QuickPath-Verbindung (QPI) oder eine ähnliche Verbindung 1095 mit dem/den Prozessor(en) 1010, 1015.
-
Bei einer Ausführungsform ist der Koprozessor 1045 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. Bei einer Ausführungsform kann der Steuerungs-Hub 1020 einen integrierten Grafikbeschleuniger umfassen.
-
Es kann vielfältige Unterschiede zwischen den physischen Betriebsmitteln 1010, 1015 im Hinblick auf ein Spektrum von Nutzmetriken geben, wie zum Beispiel architekturelle, mikroarchitekturelle, thermische, Stromverbrauchseigenschaften und dergleichen.
-
Bei einer Ausführungsform führt der Prozessor 1010 Anweisungen aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In die Anweisungen können Koprozessoranweisungen eingebettet sein. Der Prozessor 1010 erkennt diese Koprozessoranweisungen als von einem Typ, der durch den angeschlossenen Koprozessor 1045 ausgeführt werden soll. Dementsprechend gibt der Prozessor 1010 diese Koprozessoranweisungen (oder Koprozessoranweisungen repräsentierende Steuersignale) auf einem Koprozessorbus oder einer anderen Verbindung an den Coprozessor 1045 aus. Koprozessor(en) 1045 nehmen die empfangenen Koprozessoranweisungen an und führen sie aus.
-
Nunmehr mit Bezug auf 11 ist ein Blockschaltbild eines ersten spezifischeren beispielhaften Systems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Wie in 11 gezeigt, ist das Mehrprozessorsystem 1100 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 1170 und einen zweiten Prozessor 1180, die über eine Punkt-zu-Punkt-Verbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann eine bestimmte Version des Prozessors 900 sein. Bei einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 Prozessoren 1010 bzw. 1015, während der Koprozessor 1138 der Koprozessor 1045 ist. Bei einer anderen Ausführungsform sind die Prozessoren 1170 und 1180 Prozessor 1010 bzw. Koprozessor 1045.
-
Die Prozessoren 1170 und 1180 sind als IMC-Einheiten 1172 bzw. 1182 (integrierte Speichersteuerung) enthaltend gezeigt. Der Prozessor 1170 umfasst als Teil seiner Bussteuerungseinheiten außerdem Punkt-zu-Punkt-(P-P-)Schnittstellen 1176 und 1178; ähnlich umfasst der zweite Prozessor 1180 P-P-Schnittstellen 1186 und 1188. Die Prozessoren 1170, 1180 können über eine Punkt-zu-Punkt=(P-P-)Schnittstelle 1150 unter Verwendung von P-P-Schnittstellenschaltungen 1178, 1188 Informationen austauschen. Wie in 11 gezeigt, koppeln IMC 1172 und 1182 die Prozessoren mit jeweiligen Speichern, nämlich einem Speicher 1132 und einem Speicher 1134, die Teile von Hauptspeicher sein können, der lokal an die jeweiligen Prozessoren angeschlossen ist.
-
Die Prozessoren 1170, 1180 können jeweils über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 1176, 1194, 1186, 1198 Informationen mit einem Chipsatz 1190 austauschen. Der Chipsatz 1190 kann gegebenenfalls über eine Hochleistungsschnittstelle 1139 Informationen mit dem Koprozessor 1138 austauschen. Bei einer Ausführungsform ist der Koprozessor 1138 ein Spezialprozessor, wie zum Beispiel ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
-
Ein (nicht gezeigter) gemeinsam benutzter Cache kann in jedem Prozessor oder außerhalb beider Prozessoren enthalten sein und dennoch über P-P-Verbindungen mit den Prozessoren verbunden sein, so dass lokale Cache-Informationen von einem oder beiden der Prozessoren in dem gemeinsam benutzten Cache gespeichert werden können, wenn ein Prozessor in einen Low-Power-Modus versetzt wird.
-
Der Chipsatz 1190 kann über eine Schnittstelle 1196 mit einem ersten Bus 1116 gekoppelt sein. Bei einer Ausführungsform kann der erste Bus 1116 ein PCI-Bus (Peripheral Component Interconnect) oder ein Bus wie etwa ein PCI-Express-Bus oder ein anderer E/A-Verbindungsbus dritter Generation sein, obwohl der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
-
Wie in 11 gezeigt, können verschiedene E/A-Vorrichtungen 1114 mit dem ersten Bus 1116 zusammen mit einer Busbrücke 1118, die den ersten Bus 1116 mit einem zweiten Bus 1120 koppelt, gekoppelt sein. Bei einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1115 wie Koprozessoren, Hochdurchsatz-MlC-Prozessoren, GPGPUs, Beschleuniger (wie zum Beispiel Grafikbeschleuniger oder Digitalsignalverarbeitungs-(DSP-)Einheiten), am Einsatzort programmierbare Gatearrays oder ein beliebiger anderer Prozessor mit dem ersten Bus 1116 gekoppelt. Bei einer Ausführungsform kann der zweite Bus 1120 ein LPC-Bus (Low Pin Count) sein. Es können bei einer Ausführungsform verschiedene Vorrichtungen mit einem zweiten Bus 1120 gekoppelt sein, darunter zum Beispiel eine Tastatur und/oder eine Maus 1122, Kommunikationsvorrichtungen 1127 und eine Speichereinheit 1128, wie etwa eine Festplatte oder eine andere Massenspeichervorrichtung, die Anweisungen/Code und Daten 1130 umfassen können. Ferner kann ein Audio-E/A 1124 mit dem zweiten Bus 1120 gekoppelt sein. Man beachte, dass andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Punkt-zu-Punkt-Architektur von 11 einen Mehrfachabkopplungsbus oder eine andere solche Architektur implementieren.
-
Nunmehr mit Bezug auf 12 ist ein Blockschaltbild eines zweiten spezifischeren beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Gleiche Elemente in 11 und 12 tragen gleiche Bezugszahlen und bestimmte Aspekte von 11 wurden aus 12 weggelassen, um eine Verschleierung anderer Aspekte von 12 zu vermeiden.
-
12 zeigt, dass die Prozessoren 1170, 1180 integrierte Speicher- und E/A-Steuerlogik CL 1172 bzw. 1182 umfassen können. Somit umfassen CL 1172, 1182 integrierte Speichersteuerungseinheiten und umfassen E/A-Steuerlogik. 12 zeigt, dass nicht nur die Speicher 1132, 1134 mit CL 1172, 1182 gekoppelt sind, sondern auch dass E/A-Vorrichtungen 1214 auch mit der Steuerlogik 1172, 1182 gekoppelt sind. Veraltete E/A-Vorrichtungen 1215 werden mit dem Chipsatz 1190 gekoppelt.
-
Nunmehr mit Bezug auf 13 ist ein Blockschaltbild eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Ähnliche Elemente in 9 tragen gleiche Bezugszahlen. Außerdem sind gestrichelt gezeichnete Kästen optionale Merkmale auf fortschrittlicheren SoC. In 13 ist eine Verbindungseinheit(en) 1302 mit Folgendem gekoppelt: einem Anwendungsprozessor 1310, der eine Menge von einem oder mehreren Kernen 202A–N und gemeinsam benutzte Cache-Einheit(en) 906 umfasst; eine Systemagenteinheit 910; eine Bussteuerungseinheit(en) 916; eine integrierte Speichersteuerungseinheit(en) 914; eine Menge von einem oder mehreren Koprozessoren 1320, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; eine SRAM-Einheit 1330 (statischer Direktzugriffsspeicher); eine DMA-Einheit 1332 (Direct Memory Access); und eine Anzeigeeinheit 1340 zur Kopplung mit einer oder mehreren externen Anzeigen. Bei einer Ausführungsform umfassen die Koprozessor(en) 1320 einen Spezialprozessor, wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
-
Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode zur Ausführung auf programmierbaren Systemen implementiert werden, die mindestens einen Prozessor, ein Speichersystem (mit flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung umfassen.
-
Programmcode, wie etwa der in 11 dargestellte Code 1130, kann auf Eingabeanweisungen angewandt werden, um die hier beschriebenen Funktionen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf bekannte Weise an eine oder mehrere Ausgabevorrichtungen angelegt werden. Für die Zwecke der vorliegenden Anmeldung umfasst ein Verarbeitungssystem ein beliebiges System mit einem Prozessor, wie etwa einem Digitalsignalprozessor (DSP), einer Mikrosteuerung, einer anwendungsspezifischen integrierten Schaltung (ASIC) oder einem Mikroprozessor.
-
Der Programmcode kann in einer höheren prozeduralen oder objektorientierten Programmiersprache zur Kommunikation mit einem Verarbeitungssystem implementiert werden. Der Programmcode kann gegebenenfalls auch in Assembler- oder Maschinensprache implementiert werden. Tatsächlich sind die hier beschriebenen Mechanismen bezüglich des Umfangs nicht auf irgendeine konkrete Programmiersprache beschränkt. Auf jeden Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
-
Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Anweisungen implementiert werden, die auf einem maschinenlesbaren Medium gespeichert werden, wodurch verschiedenartige Logik in dem Prozessor repräsentiert wird, die, wenn sie durch eine Maschine gelesen wird, bewirkt, dass die Maschine Logik zum Ausführen der hier beschriebenen Techniken generiert. Solche Repräsentationen, die als „IP-Kerne” bekannt sind, können auf einem greifbaren maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Herstellungseinrichtungen geliefert werden, um in die Herstellungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich herstellen.
-
Solche maschinenlesbaren Speichermedien wären zum Beispiel und ohne Beschränkung nichtflüchtige greifbare Anordnungen von Artikeln, die durch eine Maschine oder Vorrichtung hergestellt oder gebildet werden, darunter Speichermedien wie Festplatten, eine beliebige andere Art von Datenträger wie Disketten, optische Datenträger, CD-Rom (Compact Disk Read-Only Memories), CD-RW (Compact Disk Rewritable's) und magnetooptische Datenträger, Halbleitervorrichtungen wie Nurlesespeicher (ROM), Direktzugriffsspeicher (RAM) wie dynamische Direktzugriffsspeicher (DRAM), statische Direktzugriffsspeicher (SRAM), löschbare programmierbare Nurlesespeicher (EPROM), Flash-Speicher, elektrisch löschbare programmierbare Nurlesespeicher (EEPROM), Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder eine beliebige andere Art von Medien, die zum Speichern elektronischer Anweisungen geeignet ist.
-
Ausführungsformen der Erfindung umfassen dementsprechend auch nichtflüchtige greifbare maschinenlesbare Medien, die Anweisungen enthalten oder Entwurfsdaten enthalten, wie etwa HDL (Hardware Description Language), wodurch Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert werden, die hier beschrieben werden. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
-
Obwohl bestimmte beispielhafte Ausführungsformen beschrieben und in den beigefügten Zeichnungen gezeigt wurden, versteht sich, dass solche Ausführungsformen lediglich die allgemeine Erfindung veranschaulichen und nicht einschränken und dass die vorliegende Erfindung nicht auf die spezifischen gezeigten und beschriebenen Konstruktionen und Anordnungen beschränkt werden soll, da Durchschnittsfachleuten bei Durchsicht der vorliegenden Offenbarung verschiedene andere Modifikationen einfallen können. In einem technologischen Bereich wie diesem, in dem das Wachstum schnell ist und weitere Fortschritte nicht leicht vorherzusehen sind, können die offenbarten Ausführungsformen bezüglich Anordnung und Detail durch Ermöglichung technologischer Fortschritte ermöglicht ohne Weiteres modifizierbar sein, ohne von den Prinzipien der vorliegenden Offenbarung oder dem Schutzumfang der beigefügten Ansprüche abzuweichen.