-
Fachgebiet
-
Die vorliegende Offenbarung betrifft das Gebiet der Ablauflogik, der Mikroprozessoren und der dazugehörigen Befehlssatzarchitektur, die bei Ausführung durch den Prozessor oder eine andere Ablauflogik logische, mathematische oder sonstige funktionelle Vorgänge durchführt.
-
Hintergrund des Standes der Technik
-
Ein Befehlssatz oder eine Befehlssatzarchitektur (ISA) ist der mit Programmierung zusammenhängende Teil der Rechnerarchitektur und kann die nativen Datentypen, Befehle, Registerarchitektur, Adressierungsarten, Speicherarchitektur, Unterbrechungs- und Ausnahmeverwaltung und externe Eingabe und Ausgabe (I/O) umfassen. Der Begriff Befehl bezeichnet hierin allgemein Makrobefehle – d. h. Befehle, die dem Prozessor (oder einem Befehlsumwandler, der einen Befehl in einen oder mehrere durch den Prozessor zu verarbeitende Befehle (z. B. unter Verwendung statischer Binärübertragung, dynamischer Binärübertragung einschließlich dynamischer Kompilierung) überträgt, morpht, emuliert oder auf sonstige Weise umwandelt) – im Gegensatz zu Mikrobefehlen oder Mikrovorgänge (Micro-Ops) – zur Ausführung bereitgestellt werden, die die Folge dessen ist, dass der Entschlüssler eines Prozessors Makrobefehle entschlüsselt.
-
Die ISA wird von der Mikroarchitektur unterschieden, die die innere Auslegung des Prozessors ist, der den Befehlssatz implementiert. Prozessoren mit unterschiedlichen Mikroarchitekturen können sich einen gemeinsamen Befehlssatz teilen. Beispielsweise implementieren Intel®-CoreTM-Prozessoren und Prozessoren von Advanced Micro Devices, Inc. aus Sunnyvale, Kalifornien nahezu identische Versionen des x86-Befehlssatzes (mit manchen Erweiterungen, die bei neueren Versionen hinzugefügt wurden), weisen aber unterschiedliche innere Auslegungen auf. Beispielsweise kann die gleiche Registerarchitektur der ISA in unterschiedlichen Mikroarchitekturen unter Anwendung hinlänglich bekannter Verfahren auf unterschiedliche Arten implementiert werden, darunter eigens zugewiesene physische Register, ein oder mehrere dynamisch zugeordnete physische Register, die einen Registerumbenennungsmechanismus verwenden etc.
-
Viele moderne ISA unterstützen SIMD-Befehle (Simple Instruction, Multiple Data). Anstelle eines skalaren Befehls, der nur auf einem oder zwei Datenelementen operiert, kann ein Vektorbefehl (auch als gepackter Datenbefehl oder SIMD-Befehl bezeichnet) mehrere Datenelemente oder mehrere Paare von Datenelementen gleichzeitig oder parallel zueinander bearbeiten. Der Prozessor kann Parallelausführungshardware aufweisen, die als Antwort auf den Vektorbefehl die mehreren Vorgänge gleichzeitig oder parallel zueinander durchführt. Ein SIMD-Vorgang bearbeitet mehrere innerhalb eines Vektorregisters oder Speicherplatzes verpackte Datenelemente in einem Vorgang. Diese Datenelemente werden als gepackte Daten oder Vektordaten bezeichnet. Jedes der Vektorelemente kann ein gesondertes, eigenes Stück Daten (z. B. eine Farbe eines Pixels etc.) darstellen, das gesondert oder unabhängig von den anderen bearbeitet werden kann.
-
In manchen Szenarien kann ein SIMD-Vorgang unabhängige Vektordatenelemente auf rekursive Art und Weise bearbeiten, wobei die Anzahl der Wiederholungen sich bei unterschiedlichen Datenelementen jeweils unterscheidet. Somit kann die Berechnung für manche Datenelemente abgeschlossen sein, während andere Datenelemente weiterer Wiederholungen bedürfen. Ein Beispiel für rekursive Berechnung ist ein WÄHREND-Schleifenvorgang. In diesem Beispiel wird ein Datenfeld X[i] (i = 0, ..., N – 1) von N Elementen einer rekursiven Berechnung unterzogen, während die Bedingung (X[i]) zutrifft (erfüllt wird). Die Berechnung für X[i] endet, wenn die Bedingung (X[i]) falsch wird. Ein Beispiel für die Bedingung kann Folgendes sein: X[i] > 0.
für (i = 0; i < N; i++){
während (Bedingung (X[i])){
X[i] = Berechnung (X[i]);}}
-
Die obige Berechnung kann nicht einfach vektorisiert werden, wenn die Anzahl der WÄHREND-Schleifenwiederholungen sich für unterschiedliche Datenelemente von X[i] unterscheidet. Ein möglicher Ansatz besteht darin, dass ein Prozessor eine Berechnung über jene Elemente durchführt, die die Bedingung nicht erfüllen, und dann die von diesen Elementen abgeleiteten Ergebnisse verworfen werden. Dieser Ansatz ist jedoch von geringer Wirksamkeit, da der Prozessor nicht nur eine unnötige Berechnung über diese Elemente durchführt, sondern auch nicht in der Lage ist, die von diesen Elementen besetzten Vektorregisterplätze zu nutzen. Kurzbeschreibung der Zeichnungen In den Figuren der beiliegenden Zeichnungen sind Ausführungsformen als Beispiele und nicht zur Einschränkung dargestellt:
-
1 ist ein Blockschaltbild einer Befehlsverarbeitungsvorrichtung, die Vektorregister und Maskenregister gemäß einer Ausführungsform umfasst.
-
2 ist ein Blockschaltbild von Registerarchitektur gemäß einer Ausführungsform.
-
3 zeigt ein Beispiel für eine Vektorvorgangsabfolge gemäß einer Ausführungsform.
-
4A zeigt ein Beispiel für Pseudocode für Befehle, die einen Prozessor dazu bringen, Vorgänge an Vektorregistern und Maskenregistern gemäß einer Ausführungsform durchzuführen.
-
4B zeigt ein Beispiel für ein Codesegment zur Verwendung der Befehle aus 4A gemäß einer Ausführungsform.
-
5A ist ein Flussbild, das als Antwort auf ein Codesegment, das den Maskenaktualisierungsbefehl und den Vektorbewegungsbefehl gemäß einer Ausführungsform verwendet, durchzuführende Vorgänge zeigt.
-
5B ist ein Flussbild, das als Antwort auf einen Maskenaktualisierungsbefehl gemäß einer Ausführungsform durchzuführende Vorgänge zeigt.
-
5C ist ein Flussbild, das als Antwort auf einen Vektorbewegungsbefehl gemäß einer Ausführungsform durchzuführende Vorgänge zeigt.
-
6 ist ein Blockschaltbild, das die Verwendung eines Softwarebefehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß einer Ausführungsform zeigt.
-
7A ist ein Blockschaltbild einer Pipeline in Betrieb und außer Betrieb gemäß einer Ausführungsform.
-
7B ist ein Blockschaltbild eines Kerns in Betrieb und außer Betrieb gemäß einer Ausführungsform.
-
Die 8A–B sind Blockschaltbilder einer konkreteren beispielhaften Kernarchitektur in Betrieb gemäß einer Ausführungsform.
-
9 ist ein Blockschaltbild eines Prozessors gemäß einer Ausführungsform.
-
10 ist ein Blockschaltbild eines Systems in Übereinstimmung mit einer Ausführungsform.
-
11 ist ein Blockschaltbild eines zweiten Systems in Übereinstimmung mit einer Ausführungsform.
-
12 ist ein Blockschaltbild eines dritten Systems in Übereinstimmung mit einer Ausführungsform der Erfindung.
-
13 ist ein Blockschaltbild eines Ein-Chip-Systems (SoC) in Übereinstimmung mit einer Ausführungsform.
-
Beschreibung der Ausführungsformen
-
In der folgenden Beschreibung werden zahlreiche konkrete Details dargelegt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung auch ohne diese konkreten Details angewandt werden können. In anderen Fällen werden hinlänglich bekannte Schaltungen, Strukturen und Verfahren nicht im Detail dargestellt, um ein Verständnis dieser Beschreibung nicht zu erschweren.
-
Hierin beschriebene Ausführungsformen stellen Befehle zur Verbesserung der Wirksamkeit rekursiver Vektorberechnungen über unabhängige Datenelemente bereit. Die Befehle verwenden ein Paar von Vektorregistern und ein Paar von Maskenregistern, um rekursive Vektorberechnungen durchzuführen, wobei ein erstes Vektorregister als Akkumulator zum Akkumulieren von Vektorberechnungsergebnissen dient und ein zweites Vektorregister neue Datenelemente zum Füllen der ungenutzten Plätze (ungenutzte oder abgeschlossene Datenelementpositionen) des ersten Vektorregisters bereitstellt. Die Maskenregister werden dazu verwendet, um anzuzeigen, welche Datenelemente in den entsprechenden Vektorregistern weiterer Berechnung bedürfen.
-
In einer Ausführungsform akkumuliert das erste Vektorregister (d. h. der Akkumulator) Eingabedatenelemente, bis das Register mit einem vollen Vektor angefüllt ist. Dann führt der Prozessor eine Berechnung an diesen Datenelementen unter Verwendung nicht maskierter (d. h. dichter) Vektorvorgänge durch. Nach der Berechnung können manche Elemente (für die die Berechnung abgeschlossen ist) in dem Akkumulator an Speicher- oder sonstige Aufbewahrungsplätze gesandt werden und können andere Elemente (für die die Berechnung noch nicht abgeschlossen ist) für eine Reihe zusätzlicher Wiederholungen in dem Akkumulator behalten werden. Die Datenelementpositionen der abgeschlossenen Berechnung in dem Akkumulator können von neuen Datenelementen genutzt werden, die auch der gleichen rekursiven Berechnung bedürfen.
-
Zwei Befehle, RWMASKUPDATE und SPARSEMOV, sind hierin beschrieben. Diese Befehle verbessern die Wirksamkeit von Vektorisierung in vielen Szenarien. Beispielsweise können in einem Szenario die Eingabedatenelemente von einem oder mehreren dünn besetzten Vektordatensätzen stammen, die jeweils nicht genügend Elemente aufweisen, um den gesamten Akkumulator (d. h. das erste Vektorregister) zu füllen. Außerdem können Eingabedatenelemente aus unterschiedlichen Datensätzen einer unterschiedlichen Anzahl an Wiederholungen bei der Berechnung bedürfen. Somit werden ungenutzte Plätze aus jenen Datenelementen in dem Akkumulator gelassen, die keiner weiteren Berechnung bedürfen. Die hierin beschriebenen Befehle ermöglichen, dass diese ungenutzten Plätze mit nützlichen Elementen gefüllt werden, wodurch eine rekursive Berechnung über einen vollen Vektor ermöglicht wird. Wie weiter unten eingehender beschrieben wird, ist der SPARSEMOV-Befehl ein Vektorbewegungsbefehl, der nützliche Datenelemente (d. h. Datenelemente, die einer Berechnung bedürfen) aus einem zweiten Vektorregister in den Akkumulator bewegt. Der RWMASKUPDATE-Befehl aktualisiert sowohl ein Lesemaskenregister (das dem zweiten Vektorregister zugeordnet ist) als auch ein Schreibmaskenregister (das dem Akkumulator zugeordnet ist), um die Positionen nützlicher Datenelemente in diesen beiden Vektorregistern zu identifizieren.
-
Die Verwendung von RWMASKUPDATE in Kombination mit SPARSEMOV reduziert die Gesamtanzahl der bei einer rekursiven Berechnung benötigten Befehle und vereinfacht die Überlauf- und Unterlaufälle, bei denen die Anzahl der nützlichen Datenelemente (d. h. Quelldatenelemente) im zweiten Vektorregister nicht mit der Anzahl an ungenutzten Plätzen (d. h. Zielpositionen) im ersten Vektorregister übereinstimmt. Die aktualisierten Lese- und Schreibmasken werden dazu verwendet, die Datenbewegung zwischen den beiden Vektorregistern zu steuern. Die Verwendung invertierter Schreibmaskenbits zur Identifizierung der Zielpositionen vereinfacht die Datenakkumulierung bei der Vektorisierung dünn besetzter und rekursiver Berechnung.
-
1 ist ein Blockschaltbild einer Ausführungsform einer Befehlsverarbeitungsvorrichtung 115 mit einer Ausführungseinheit 140, die eine Schaltungsanordnung umfasst, die ausgelegt ist, Befehle auszuführen, einschließlich des RWMASKUPDATE- und des SPARSEMOV-Befehls. In manchen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung 115 ein Prozessor, ein Prozessorkern eines Mehrkemprozessors oder ein Verarbeitungselement in einem Elektroniksystem sein.
-
Ein Entschlüssler 130 empfängt einlangende Befehle in Form höherrangiger Maschinenbefehle oder Makrobefehle und entschlüsselt diese, um niederrangige Mikrovorgänge, Mikrocodeeingangspunkte, Mikrobefehle oder sonstige niederrangige Befehle oder Steuersignale zu erzeugen, die den ursprünglichen höherrangigen Befehl Wiederspiegeln und/oder von diesem abstammen. Die niederrangigen Befehle oder Steuersignale können den Vorgang des höherrangigen Befehls durch niederrangige Vorgänge (z. B. auf Schaltungs- oder Hardwareebene) implementieren. Der Entschlüssler 130 kann unter Anwendung diverser unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, ohne auf diese beschränkt zu sein, Mikrocode, Verweistabellen, Hardwareimplementierungen, programmierbare Logikanordnungen (PLA), sonstige Mechanismen, die zum Implementieren fachbekannter Entschlüssler verwendet werden, etc.
-
Der Entschlüssler 130 kann einlangende Befehle für ein Cache 110, einen Speicher 120 oder sonstige Quellen empfangen. Die entschlüsselten Befehle werden an die Ausführungseinheit 140 gesandt. Die Ausführungseinheit 140 kann vom Entschlüssler 130 ein(en) oder mehrere Mikrovorgänge, Mikrocodeeingangspunkte, Mikrobefehle, sonstige Befehle oder sonstige Steuersignale empfangen, die die empfangenen Befehle Wiederspiegeln oder von diesen stammen. Die Ausführungseinheit 140 empfängt Dateneingaben von einer und erzeugt Datenausgaben an eine Registerdatei 170, das Cache 110 und/oder den Speicher 120.
-
In einer Ausführungsform umfasst die Registerdatei 170 Architekturregister, die auch als Register bezeichnet werden. Sofern nicht anders angegeben oder eindeutig, werden die Begriffe Architekturregister, Registerdatei und Register hierin zur Bezeichnung von Registern verwendet, die für die Software und/oder den Programmierer sichtbar (z. B. softwaresichtbar) sind und/oder von jenen Registern, die von Makrobefehlen spezifiziert sind, Operanden zu identifizieren. Diese Register stehen im Gegensatz zu anderen, die nicht Architekturregister sind, in einer bestimmten Mikroarchitektur (z. B. temporäre Register, Neubestellungspuffer, Rückzugsregister etc.)
-
Um die Beschreibung nicht unklar zu machen, wird eine relativ einfache Verarbeitungsvorrichtung 115 gezeigt und beschrieben. Es versteht sich, dass andere Ausführungsformen mehr als eine Ausführungseinheit aufweisen können. Beispielsweise kann die Vorrichtung 115 mehrere unterschiedliche Arten von Ausführungseinheiten umfassen, z. B. arithmetische Einheiten, arithmetische Logikeinheiten (ALU), Integereinheiten, Gleitkommaeinheiten etc. Wieder andere Ausführungsformen von Befehlsverarbeitungsvorrichtungen oder Prozessoren können einfachere Kerne, logische Prozessoren oder Ausführungsengines aufweisen. Eine Reihe von Ausführungsformen der Befehlsverarbeitungsvorrichtung 115 wird weiter unten unter Bezugnahme auf die 7–13 bereitgestellt.
-
Gemäß einer Ausführungsform umfasst die Registerdatei 170 einen Satz Vektorregister 175 und einen Satz Maskenregister 185, die beide die Operanden des RWMASKUPDATE- und des SPARSEMOV-Befehls aufbewahren. Jedes Vektorregister 175 kann 512 Bits, 256 Bits oder 128 Bits breit sein, oder es kann eine andere Vektorbreite eingesetzt werden. Jedes Maskenregister 185 enthält eine Anzahl von Maskenbits, wobei jedes Maskenbit einem Datenelement eines der Vektorregister 175 entspricht. Da jedes Maskenbit zum Maskieren eines Datenelements eines Vektorregisters verwendet wird, kann ein Maskenregister von 64 Bits dazu verwendet werden, vierundsechzig 8-Bit-Datenelemente eines 512-Bit-Registers zu maskieren. Für ein Vektorregister mit einer anderen Breite (z. B. 256 Bits oder 128 Bits) und Datenelementen einer anderen Größe (z. B. 16 Bits, 32 Bits oder 64 Bits) kann eine andere Anzahl von Maskenbits in Verbindung mit einem Vektorvorgang eingesetzt werden.
-
2 zeigt eine Ausführungsform zugrunde liegender Registerarchitektur 200, die die hierin beschriebenen Befehle unterstützt. Die Registerarchitektur 200 basiert auf den Intel®-CoreTM-Prozessoren, die einen Befehlssatz implementieren, der die Befehle x86, MMXTM, Streaming SIMD Extensions (SSE), SSE2, SSE3, SSE4.1 und SSE4.2 sowie einen zusätzlichen Satz SIMD-Erweiterungen umfasst, die als die Advanced Vector Extensions (AVX) (AVX1 und AVX2) bezeichnet werden. Es versteht sich jedoch, dass auch andere Registerarchitektur, die andere Registerlängen, andere Registerarten und/oder andere Registeranzahlen unterstützt, eingesetzt werden kann.
-
In der dargestellten Ausführungsform gibt es zweiunddreißig Vektorregister 210, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die niederrangigen 256 Bits des niederen Sechzehn-zmm-Registers überlagern die Register ymm0-16. Die niederrangigen 128 Bits der niederen Sechzehn-zmm-Register (die niederrangigen 128 Bits der ymm-Register) überlagern die Register xmm0-15. In der dargestellten Ausführungsform gibt es acht Maskenregister 220 (k0 bis k7) mit einer Länge von je 64 Bits. In einer alternativen Ausführungsform sind die Maskenregister 220 16 Bits breit.
-
In der dargestellten Ausführungsform umfasst die Registerarchitektur 200 ferner sechzehn 64-Bit-Allzweck-(-GP-)Register 230. In einer Ausführungsform werden sie neben den bestehenden x86-Adressierungsarten zum Adressieren von Speicheroperanden verwendet. Die Ausführungsform zeigt auch RFLAGS-Register 260, RIP-Register 270 und MXCSR-Register 280.
-
Die Ausführungsform zeigt auch eine Stapelregisterdatei (x87-Stapel) 240 eines skalaren Gleitkommas (FP), auf dem die MMX-gepackte Integerflachregisterdatei 250 verfälscht ist. In der dargestellten Ausführungsform ist der x87-Stapel ein Stapel mit acht Elementen, die zum Durchführen von skalaren Gleitkommavorgängen auf 32/64/80-Bit-Gleitkommadaten unter Verwendung der x87-Befehlssatzerweiterung verwendet werden; während die MMX-Register dazu verwendet werden, Vorgänge an 64-Bit-gepackten Integerdaten durchzuführen sowie Operanden für manche zwischen den MMX- und xmm-Registern durchgeführten Vorgänge zu umfassen.
-
Alternative Ausführungsformen können breitere oder schmalere Register verwenden. Zusätzlich dazu können alternative Ausführungsformen der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
-
3 ist ein Diagramm, das ein Beispiel für die Vorgänge zeigt, die ein Prozessor (z. B. die Befehlsverarbeitungsvorrichtung 115) durchführt, um die Berechnung über unabhängige Datenelemente wirksam zu vektorisieren. Um die Veranschaulichung zu vereinfachen, ist jedes Vektorregister in diesem Beispiel mit nur acht Datenelementen dargestellt. Alternative Ausführungsformen können eine andere Anzahl an Datenelementen in den Vektorregistern aufweisen. Die Vektorregister können 128 Bits, 256 Bits oder 512 Bits breit sein (z. B. die xmm-, ymm- oder zmm-Register aus 2), oder es kann eine andere Breite verwendet werden. Da acht Datenelemente in jedem Vektorregister vorliegen, werden nur acht Maskenbits in Verbindung mit jedem Vektorregister verwendet.
-
In diesem Beispiel wird das Vektorregister V1 als Akkumulator verwendet und wird das Vektorregister V2 dazu verwendet, V1 neue Datenelemente bereitzustellen. Die Maskenregister K1 (die Schreibmaske) und K2 (die Lesemaske) werden zum Maskieren der Datenelemente in V1 bzw. V2 verwendet. In diesem Beispiel zeigt ein Maskenbit von null an, das das entsprechende Datenelement gegenüber einer Berechnung maskiert ist (d. h. keine weitere Berechnung notwendig ist), und zeigt ein Maskenbit von eins an, dass das entsprechende Datenelement weiterer Berechnung bedarf. In einer alternativen Ausführungsform kann die Bedeutung des Maskenbitwerts umgekehrt werden; z. B. kann ein Maskenbit von eins dazu verwendet werden anzuzeigen, dass das entsprechende Datenelement keiner weiteren Berechnung bedarf, und kann ein Maskenbit von null dazu verwendet werden anzuzeigen, dass das entsprechende Datenelement weiterer Berechnung bedarf.
-
Anfangs wird angenommen, dass der Akkumulator V1 zwei Datensätze als Eingabevektor aufbewahrt: A und B, die jeweils Teil eines dünn besetzten Datenfelds sein können. Das tiefgestellte j von Aj und Bj zeigt die Anzahl an Wiederholungen an, die ein Datenelement durchlaufen hat; z. B. ist A0 das Element von A vor jeglichen Wiederholungen und A1 das Element von A nach einer ersten Wiederholung 310. Um die Veranschaulichung zu vereinfachen, werden unterschiedliche Datenelemente aus demselben Datensatz in derselben Wiederholung mit der gleichen Kennung dargestellt, z. B. sind A0 an Position 0 und A0 in Position 2 zwei unterschiedliche Elemente und können den gleichen oder unterschiedliche Werte aufweisen und sind B0 an Position 1 und B0 an Position 3 des Eingabevektors zwei unterschiedliche Elemente und können die gleichen oder unterschiedliche Werte aufweisen. Die Anfangswerte der Maskenbits im Maskenregister K1 sind alle jeweils eins, was darauf hindeutet, dass der anfängliche Eingabevektor in V1 ein voller Vektor ist und dass jedes Element von V1 an der ersten Wiederholung 310 der Vektorberechnung teilnehmen kann.
-
In diesem Beispiel stellt jede Wiederholung eine Wiederholung einer WÄHREND-Schleife dar, in der eine rekursive Vektorberechnung durchgeführt wird. Nach der ersten Wiederholung 310 umfasst der Akkumulator V1 einen Satz aus A1-en und B1-en, wobei die tiefgestellte Ziffer anzeigt, dass diese Elemente die erste Wiederholung abgeschlossen haben. Angenommen, Elemente von A bedürfen nur einer Wiederholung der WÄHREND-Schleife und Elemente von B bedürfen zweier Wiederholungen. Somit ist nach einer Wiederholung der WÄHREND-Schleife die Berechnung für die A-Elemente abgeschlossen, während eine weitere Wiederholung für die B-Elemente benötigt wird. Zu diesem Zeitpunkt ist die Bedingung für jedes der A-Elemente falsch (weil sie die Bedingung für weitere Berechnung nicht erfüllen) und trifft die Bedingung für jedes der B-Elemente zu (weil sie die Bedingung für weitere Berechnung erfüllen). Somit sind die Maskenbitwerte in K1 für die A1-en entsprechenden Maskenbits auf null und für die B1-en entsprechenden Maskenbits auf eins gestellt.
-
In einer Ausführungsform zeigt ein Maskenbit von null an, dass das Ergebnis an der entsprechenden Elementposition nach einem Vektorvorgang über das gesamte Vektorregister (in diesem Fall V1) verworfen wird. In alternativen Ausführungsformen zeigt ein Maskenbit von null an, dass die Berechnung für die entsprechende Elementposition nicht durchgeführt wird und diese Elementposition daher ungenutzt ist. In beiden Szenarien ist das Beibehalten der A1-en im Akkumulator V1 eine Verschwendung von Vektorressourcen und reduziert die Wirksamkeit der Vektorberechnung. Daher wird gemäß einer Ausführungsform der Erfindung ein zweites Vektorregister V2 verwendet, V1 neue Datenelemente bereitzustellen, um die von A1-en zurückgelassenen ungenutzten Plätze (d. h. die Datenelementpositionen) zu füllen. Die Datenelemente der A1-en können im Speicher, im Cache oder in sonstiger Datenaufbewahrung gespeichert werden.
-
In dem Beispiel aus 3 bewahrt das Vektorregister V2 Elemente eines Datensatzes C auf, der Teil eines anderen dünn besetzten Datenfelds sein kann. Die mit „*” markierten Positionen in V2 stehen für „egal”, was bedeutet, sie enthalten keine für den Zweck der rekursiven Vektorberechnung nützlichen Datenelemente. Angenommen, jedes Datenelement von C muss drei Wiederholungen der WÄHREND-Schleife durchlaufen. Anstelle der Elemente von C oder zusätzlichen dazu kann V2 neue Datenelemente von A und/oder B (z. B. A0-en, B0-en und/oder B1-en) bereitstellen, die eine oder mehrere Wiederholungen der WÄHREND-Schleife (und somit weitere Berechnung) durchlaufen müssen. Diese Datenelemente in V2, die weiterer Berechnung bedürfen, werden als „Quelldatenelemente” bezeichnet. Diese Quelldatenelemente in V2 können die (als „Zieldatenelemente” bezeichneten) von A1-en zurückgelassenen ungenutzten Plätze in V1 füllen. Zur leichteren Beschreibung werden Datenelemente in V1 und/oder V2, die weiterer Berechnung bedürfen, als „nützliche Datenelemente” bezeichnet. Somit wird ein Verschmelzungsvorgang 320 durchgeführt, um die nützlichen Datenelemente in V1 und V2 verschmelzen zu lassen, sodass die Quelldatenelemente in V2 an die von den Zieldatenelementen besetzten Positionen in V1 bewegt werden und die rekursive Berechnung zu einer zweiten Wiederholung 330 mit zusätzlichen nützlichen Datenelementen in V1 fortschreiten kann.
-
Bei einem solchen Verschmelzungsvorgang können drei Szenarien eintreten: Überlauf, Unterlauf und genaue Übereinstimmung. Eine genaue Übereinstimmung zeigt an, dass die gleiche Anzahl nützlicher Datenelemente in V2 vorliegt, wie es in V1 zurückgelassene ungenutzte Plätze gibt. Somit bewegen sich bei einer genauen Übereinstimmung alle Quelldatenelemente in V2 an die in V1 zurückgelassenen ungenutzten Plätze (d. h. ersetzen diese). Folglich weist V1 einen vollen Vektor zum Beginnen der nächsten Wiederholung auf und ist K1 aktualisiert, sodass es alle Einsen enthält. In V2 ist kein weiteres Quelldatenelement übrig, und K2 ist aktualisiert, sodass es alle Nullen enthält.
-
Der Verschmelzungsvorgang 320 zeigt ein Überlaufszenario, bei dem die Anzahl der neuen Datenelemente (C0) größer ist als die Anzahl der nullwertigen Maskenbits in K1 (d. h. die Anzahl von A1-en). Somit können sich nicht alle neuen Datenelemente in V2 in V1 bewegen. In diesem Beispiel bleibt das eingekreiste Co an Position 7 von V2 in V2 zurück, während die anderen C0-en an den Positionen 2, 4 und 6 sich in V1 bewegt haben. In dieser Ausführungsform werden die niederrangigen Elemente von V2 in V1 bewegt; in alternativen Ausführungsformen können die höherrangigen Elemente von V2 in V1 bewegt werden. Der Verschmelzungsvorgang 320 aktualisiert auch die entsprechenden Maskenbits in K1 und K2.
-
Nach dem Verschmelzungsvorgang 320 enthält V1 einen vollen Vektor aus acht Elementen, um die zweite Wiederholung 330 zu beginnen und weist V2 nur ein C0 auf, das an Position 7 zurückgeblieben ist. Das entsprechende Maskenregister K1 enthält zu diesem Zeitpunkt (nach dem Verschmelzungsvorgang 320) sämtliche Einsen, und K2 enthält nur ein Maskenbit mit einem Wert eins an Position 7.
-
Nach der zweiten Wiederholung 330 enthält der Akkumulator V1 eine Kombination aus B2-en und C1-en. Da die Berechnung für die B-Elemente nach dieser Wiederholung abgeschlossen ist können diese B2-en im Speicher, im Cache oder in sonstiger Datenaufbewahrung gespeichert werden. Somit ist die Bedingung für jedes der B-Elemente falsch (da sie die Bedingung für weitere Berechnung nicht erfüllen) und trifft die Bedingung für jedes der B-Elemente zu (weil sie die Bedingung für weitere Berechnung erfüllen). Somit sind die Maskenbitwerte in K1 für die B2-en entsprechenden Maskenbits auf null und für die C1-en entsprechenden Maskenbits auf eins gestellt.
-
Die von B2-en zurückgelassenen ungenutzten Plätze können von den verbleibenden Quelldatenelementen in V2 gefüllt werden; in diesem Fall C0 an Position 7 von V2. Da jedoch eine geringere Anzahl an C0-en vorliegt als an B2-en, kommt es bei einem anschließenden Verschmelzungsvorgang 340 zu einem Unterlauf. In dem in 3 gezeigten Unterlaufszenario wird das niedrigstrangige B2 in V1 durch Co ersetzt; in alternativen Ausführungsformen kann das höchstrangige B2 in V1 durch C0 ersetzt werden. Der Verschmelzungsvorgang 340 aktualisiert auch die entsprechenden Maskenbits in K1 und K2.
-
Nach dem Verschmelzungsvorgang 340 ist der Akkumulator V1 nicht vollständig gefüllt und weist V2 keine nützlichen Datenelemente mehr auf, die sich in V1 bewegen können. Das Maskenregister K1 enthält zu diesem Zeitpunkt (nach dem Verschmelzungsvorgang 340) Einsen an den Positionen, die den C-Elementen entsprechen, und K2 enthält sämtliche Nullen. V2 kann zusätzliche nützliche Datenelemente, die zu bewegen sind, in V1 laden, und die Verschmelzungsvorgänge von 320 und/oder 340 können wiederholt werden, bis alle nützlichen Datenelemente verarbeitet und keine Quelldatenelemente mehr in V2 übrig sind. Zu diesem Zeitpunkt kann V1 eine Reihe zusätzlicher Wiederholungen durchlaufen, bis alle Elemente in V1 die erforderliche Anzahl an Wiederholungen erreichen.
-
Es versteht sich, dass die Bedeutung von Maskenbitwerten von Nullen und Einsen im Vergleich zu der in 3 gezeigten umgekehrt werden kann; z. B. kann ein Maskenbitwert von null so eingesetzt werden, dass er bedeutet, dass eine Bedingung erfüllt ist, und ein Maskenbitwert von eins so eingesetzt werden, dass er bedeutet, dass die Bedingung nicht erfüllt ist. In manchen Ausführungsformen kann die Bedeutung von K1-Maskenbitwerden im Vergleich zur Bedeutung von K2-Maskenbitwerden umgekehrt werden; z. B. kann ein K1-Maskenbitwert von eins so eingesetzt werden, dass er bedeutet, dass eine Bedingung nicht erfüllt ist, und ein Maskenbitwert von eins so eingesetzt werden, dass er bedeutet, dass die Bedingung erfüllt ist. So können in dem Beispiel aus 3 unterschiedliche Maskenbitwerte für das gleiche Szenario verwendet werden, solange die Bedeutung jedes Maskenbits in jedem Maskenregister durchgängig so definiert ist, dass durchgängige Auslegung möglich ist.
-
Gemäß einer Ausführungsform der Erfindung werden die in Verbindung mit 3 beschriebenen Vorgänge durch einen Prozessor (z. B. die Befehlsverarbeitungsvorrichtung 115) als Antwort auf die Vektorbefehle durchgeführt, die den RWMASKUPDATE- und den SPARSEMOV-Befehl umfassen. Der SPARSEMOV-Befehl kann zum Bewegen von Quelldatenelementen aus Vektorregister V2 in Vektorregister V1 verwendet werden, wodurch die Zielelemente in V1, die eine Bedingung nicht erfüllen (z. B. Elemente, die keiner weiteren Berechnung bedürfen), ersetzt werden. Der RWMASKUPDATE-Befehl kann zum Aktualisieren der Maskenregister K1 und K2 verwendet werden, um so die Positionen der Datenelemente in V1 bzw. V2 zu identifizieren, die eine Bedingung erfüllen (z. B. Elemente, die weiterer Berechnung bedürfen). In einer Ausführungsform weist RWMASKUPDATE zwei Operanden auf, K1 und K2, und SPARSEMOV weist vier Operanden auf, K1, V1, K2 und V2. In alternativen Ausführungsformen können manche der Operanden von RWMASKUPDATE und/oder SPARSEMOV implizit sein.
-
4A zeigt ein Beispiel für Pseudocode 401 und 402 für den RWMASKUPDATE- und den SPARSEMOV-Befehl gemäß einer Ausführungsform. Im Pseudocode 401 und 402 steht KL für die Vektorlänge, die die Gesamtanzahl an Datenelementen in jedem Vektorregister ist (z. B. jedes von V1 und V2). Wird ein zmm-Register als der Akkumulator mit 8-Bit-Datenelementen verwendet, dann ist KL = 512/8 = 64. Pseudocode 401 beschreibt den RWMASKUPDATE-Befehl, und Pseudocode 402 beschreibt den SPARSEMOV-Befehl. Es gilt anzumerken, dass ein Prozessor den RWMASKUPDATE- und den SPARSEMOV-Befehl mit anderen Vorgängen oder anderer Logik implementieren kann, als jeweils im Pseudocode 401 und 402 dargestellt ist.
-
Die RWMASKUPDATE- und SPARSEMOV-Befehle aktualisieren Maskenregister bzw. bewegen Datenelemente. Weitere Befehle können ausgeführt werden, um Ergebnisse dieser Befehle zu nutzen, um dadurch rekursive Vektorberechnung wirksamer durchzuführen. 4B zeigt ein Beispiel für ein Codesegment 400, das RWMASKUPDATE- und SPARSEMOV-Befehle gemäß einer Ausführungsform einsetzt. Das Codesegment 400 bringt bei Ausführung durch einen Prozessor den Prozessor dazu, rekursive Vektorberechnung über unabhängige Datenelemente einer Anordnung X durchzuführen. Die Anordnung X kann in dem Speicher, im Cache oder an sonstigen Datenaufbewahrungsorten aufbewahrt sein. Das Codesegment 400 umfasst einen Initialisierungsabschnitt 410, einen anfänglichen Verschmelzungsabschnitt 420, einen nachfolgenden Verschmelzungsabschnitt 430, einen Berechnungsabschnitt 440 und einen verbleibenden Abschnitt 450. Vorgänge in jedem der Abschnitte 410–450 werden weiter unten unter Bezugnahme auf das Flussbild von 5A beschrieben, das eine Ausführungsform eines Verfahrens 500 zeigt, das durch einen Prozessor (z. B. die Befehlsverarbeitungsvorrichtung 115 aus 1) durchgeführt wird.
-
Im Initialisierungsabschnitt 410 sind die Maskenregister K1 und K2 beide auf null initialisiert, was anzeigt, dass keine nützlichen Datenelemente in ihren entsprechenden Vektorregistern V1 und V2 vorliegen. Der Begriff „nützliche Datenelemente” bedeutet Datenelemente, die einer Berechnung bedürfen. Wiederholungen beginnen im anfänglichen Verschmelzungsabschnitt 420, wo K2 zunächst geprüft wird, um zu bestimmen, ob nützliche Datenelemente in V2 übrig sind (Block 531). Falls keine nützlichen Daten in V2 vorliegen, werden Eingabedatenelemente aus der Anordnung X in V2 geladen (Block 532) und ihre entsprechenden Maskenbits in K2 entsprechend eingestellt.
-
Der nachfolgende Verschmelzungsabschnitt 430 behandelt das Szenario, in dem V2 nützliche Datenelemente enthält. Die nützlichen Datenelemente können aus einem vorausgehenden Datenüberlauf in V2 zurückgelassen oder in V2 in Block 532 geladen werden. Als Antwort auf den SPARSEMOV-Befehl 431 werden diese nützlichen Datenelemente in V2 gemäß den Maskenbits in K1 und K2 in V1 bewegt (Block 533). Als Antwort auf den RWMASKUPDATE-Befehl 433 werden die Maskenregister K1 und K2 aktualisiert, um nach der Bewegung in Block 533 die aktuellen Positionen der nützlichen Datenelemente in V1 bzw. V2 zu identifizieren (Block 534).
-
Im nachfolgenden Verschmelzungsabschnitt 430 wird ein zweiter SPARSEMOV-Befehl 432 ausgeführt, um die Indizes (Positionen) der Datenelemente in Anordnung X, die aus V2 in V1 bewegt wurden, aufzubewahren, sodass Ergebnisse der Berechnung wieder an ihren ursprüngliche Positionen in Anordnung X aufbewahrt werden können.
-
Der Berechnungsabschnitt 440 behandelt die Vektorberechnung eines vollen Vektors (dadurch angezeigt, dass die entsprechende Maske durchwegs aus Einsen besteht; d. h. wenn IstVolleMaske(K1) zutrifft). Weist V1 keinen vollen Vektor nützlicher Datenelemente auf (Block 535) und liegen Eingabedatenelemente vor, die nicht in V1 geladen wurden (Block 538), deutet dies darauf hin, dass zusätzliche Eingabedatenelemente über V2 in V1 geladen werden können (Blöcke 532–534). Weist V1 keinen vollen Vektor auf und liegen keine Eingabedatenelemente zum Laden in V1 vor (Block 538), deutet dies darauf hin, dass die Vorgänge zum verbleibenden Abschnitt 450 fortschreiten, wo verbleibende Datenelemente in V1 berechnet werden, bis die Berechnung abgeschlossen ist und die Ergebnisse wieder in Anordnung X gespeichert werden (Block 539).
-
Weist V1 einen vollen Vektor nützlicher Datenelemente auf (Block 535) kann Vektorberechnung an V1 durchgeführt werden (Block 536). Das Maskenregister K1 wird aktualisiert, wenn Datenelemente in V1 keiner weiteren Berechnung bedürfen. Die Vektorberechnung wird fortgesetzt, bis ein oder mehrere Datenelemente in V1 keiner weiteren Berechnung bedürfen (angezeigt durch entsprechende nullwertige Maskenbits in K1); zu diesem Zeitpunkt werden diese Datenelemente wieder in Anordnung X gespeichert (Block 537). In der Ausführungsform wie dargestellt können die Datenelemente mit einem SCATTER-Befehl gespeichert werden und können nullwertige Maskenbits in K1 unter Verwendung eines Funktionsknotens (K1) identifiziert werden. Mit Ausnahme des RWMASKUPDATE- und des SPARSEMOV-Befehls können die konkreten Befehle und Funktionen, die im Codesegment 400 verwendet werden, wie z. B. SCATTER, Knoten, IstVolleMaske etc. durch alternative Befehlsabfolgen emuliert werden.
-
Die Vorgänge der Blöcke 531–537 werden wiederholt, bis keine Eingabedatenelemente mehr zum Laden in V1 durch V2 vorliegen (Block 538); d. h. wenn alle Eingabedatenelemente in der Anordnung X in V2 geladen und alle nützlichen Datenelemente in V2 in V1 bewegt wurden. Nun beginnt der verbleibende Abschnitt 450. Zu diesem Zeitpunkt kann es sein, dass V1 keinen vollen Vektor nützlicher Datenelemente aufweist, diese Datenelemente in V1 jedoch weiterer Berechnung bedürfen. Die Vektorberechnung setzt sich fort, bis alle verbleibenden Datenelemente in V1 die erforderliche Anzahl an Wiederholungen erreichen (Block 539). Zu diesem Zeitpunkt kann das Berechnungsergebnis in V1 (z. B. unter Verwendung eines SCATTER-Befehls) wieder in die Anordnung X gespeichert werden (Block 539).
-
5B ist ein Blockflussbild eines Verfahrens 510 zur Ausführung des RWMASKUPDATE-Befehls gemäß einer Ausführungsform. Das Verfahren 510 beginnt mit einem Prozessor (z. B. der Befehlsverarbeitungsvorrichtung 115 aus 1), der einen Maskenaktualisierungsbefehl empfängt, der ein erstes Maskenregister und ein zweites Maskenregister spezifiziert (Block 511). Der Prozessor entschlüsselt den Maskenaktualisierungsbefehl (Block 512). Als Antwort auf den entschlüsselten Maskenaktualisierungsbefehl führt der Prozessor die Vorgänge durch, die Folgendes umfassen: das Invertieren einer bestimmten Anzahl an Maskenbits im ersten Maskenregister; z. B. durch Setzen dieser Maskenbits von einem ersten Bitwert (z. B. null) auf einen zweiten Bitwert (z. B. eins) (Block 513); und das Invertieren der bestimmten Anzahl an Maskenbits im zweiten Maskenregister; z. B. durch Setzen dieser Maskenbits von einem zweiten Bitwert (z. B. eins) auf einen ersten Bitwert (z. B. null) (Block 514). Die bestimmte Anzahl ist die kleinere von der Anzahl von Maskenbits im ersten Maskenregister mit dem ersten Bitwert und der Anzahl von Maskenbits im zweiten Maskenregister mit dem zweiten Bitwert. In einer alternativen Ausführungsform kann der erste Bitwert eins und der zweite Bitwert null sein.
-
5C ist ein Blockflussbild eines Verfahrens 520 zur Ausführung eines SPARSEMOV-Befehls gemäß einer Ausführungsform. Das Verfahren 520 beginnt mit einem Prozessor (z. B. der Befehlsverarbeitungsvorrichtung 115 aus 1), der einen Vektorbewegungsbefehl empfängt, der ein erstes Maskenregister, ein zweites Maskenregister, ein erstes Vektorregister und ein zweites Vektorregister spezifiziert (Block 521). Der Prozessor entschlüsselt den Vektorbewegungsvorgang (Block 522). Als Antwort auf den entschlüsselten Vektorbewegungsbefehl und basierend auf den Maskenbitwerten im ersten und im zweiten Maskenregister ersetzt der Prozessor eine bestimmte Anzahl an Zieldatenelementen im ersten Vektorregister durch die bestimmte Anzahl an Quelldatenelementen im zweiten Vektorregister (Block 523). In einer Ausführungsform entspricht jedes Quelldatenelement einem Maskenbit im zweiten Maskenregister mit einem zweiten Bitwert (z. B. eins), und worin jedes Zieldatenelement einem Maskenbit im ersten Maskenregister mit einem ersten Bitwert (z. B. null) entspricht. In einer alternativen Ausführungsform kann der erste Bitwert eins und der zweite Bitwert null sein. Die bestimmte Anzahl ist die kleinere von der Anzahl von Maskenbits im ersten Maskenregister mit dem ersten Bitwert und der Anzahl von Maskenbits im zweiten Maskenregister mit dem zweiten Bitwert.
-
In diversen Ausführungsformen können die Verfahren der 5A–C durch einen Allzweckprozessor, einen Spezialprozessor (z. B. einen Grafikprozessor oder einen Digitalsignalprozessor) oder eine sonstige Art von digitaler Logikvorrichtung oder Befehlsverarbeitungsvorrichtung durchgeführt werden. In manchen Ausführungsformen können die Verfahren der 5A–C durch die Befehlsverarbeitungsvorrichtung 115 aus 1 oder einen ähnlichen Prozessor, eine ähnliche Vorrichtung oder ein ähnliches System durchgeführt werden, z. B. die in den 7–13 gezeigten Ausführungsformen. Darüber hinaus können die Befehlsverarbeitungsvorrichtung 115 aus 1 sowie ein ähnlicher Prozessor, eine ähnliche Vorrichtung oder ein ähnliches System wie den 7–13 gezeigt Ausführungsformen von Vorgängen und Verfahren durchführen, die entweder gleich wie, ähnlich oder anders als jene der Verfahren aus den 5A–C sind.
-
In manchen Ausführungsformen kann die Befehlsverarbeitungsvorrichtung 115 aus 1 in Verbindung mit einem Befehlsumwandler arbeiten, der einen Befehl aus einem Quellbefehlssatz in einen Zielbefehlssatz umwandelt. Beispielsweise kann der Befehlsumwandler einen Befehl in einen oder mehrere durch den Kern zu verarbeitende Befehle (z. B. unter Verwendung statischer Binärübertragung, dynamischer Binärübertragung einschließlich dynamischer Kompilierung) übertragen, morphen, emulieren oder auf sonstige Weise umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination daraus implementiert sein. Der Befehlsumwandler kann ein On-Prozessor, ein Off-Prozessor oder teilweise eine On- und teilweise ein Off-Prozessor sein.
-
6 ist ein Blockschaltbild, das die Verwendung eines Softwarebefehlsumwandlers gemäß Ausführungsformen der Erfindung kontrastiert. In der dargestellten Ausführungsform ist der Befehlsumwandler ein Softwarebefehlsumwandler, wenngleich alternativ dazu der Befehlsumwandler in Software, Firmware, Hardware oder diversen Kombinationen daraus implementiert sein kann. 6 zeigt, dass das Programm in einer höherrangigen Sprache 602 unter Verwendung eines x86-Kompilers 604 kompiliert werden kann, um x86-Binärcode 606 zu erzeugen, der durch einen Prozessor mit zumindest einem x86-Befehlsssatzkern 616 nativ ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlsssatzkern 616 steht für jedweden Prozessor, der im Wesentlichen die gleichen Funktionen erfüllen kann wie ein Intel-Prozessor mit zumindest einem x86-Befehlsssatzkern, indem er kompatibel Folgendes ausführt oder auf sonstige Weise verarbeitet: (1) einen wesentlichen Anteil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder sonstiger Software, die darauf ausgerichtet ist, auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern abzulaufen, um im Wesentlichen das gleiche Ergebnis zu erzielen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern. Der x86-Kompiler 604 stellt einen Kompilierer dar, der ausgelegt ist, x86-Binärcode 606 (z. B. Objektcode) zu erzeugen, der, mit zusätzlicher Verknüpfungsverarbeitung oder ohne diese, auf dem Prozessor mit zumindest einem x86-Befehlssatzkern ausgeführt werden kann. Desgleichen zeigt 6, dass das Programm in der höherrangigen Sprache 602 unter Verwendung eines alternativen Befehlssatzkompilierers 608 kompiliert werden kann, um alternativen Binärcode 610 zu erzeugen, der durch einen Prozessor ohne zumindest einen x86-Befehlsssatzkern 616 nativ ausgeführt werden kann (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien ausführen und/oder die den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, Kalifornien ausführen). Der Befehlsumwandler 612 wird dazu verwendet, den x86-Binärcode 606 in Code umzuwandeln, der von dem Prozessor ohne einen x86-Befehlssatzkern 614 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 610, da ein Befehlsumwandler, der dazu in der Lage ist, schwer herzustellen ist; der umgewandelte Code vollendet jedoch den allgemeinen Vorgang und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit steht der Befehlsumwandler 612 für Software, Firmware, Hardware oder eine Kombination daraus, die durch Emulation, Simulation oder einen sonstigen Prozess ermöglicht, dass ein Prozessor oder eine sonstige Elektronikvorrichtung ohne einen x86-Befehlssatzprozessor oder -kern den x86-Binärcode 606 ausführt.
-
Beispielhafte Kernarchitekturen
-
Kernblockschaltbild in Betrieb und außer Betrieb
-
7A ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform einer Pipeline in Betrieb als auch eine beispielhafte Registerumbenennungs-Außerbetriebsausgabe/-Ausführungspipeline gemäß Ausführungsformen der Erfindung zeigt. 7B ist ein Blockschaltbild, das sowohl eine beispielhafte Ausführungsform eines Architekturkerns in Betrieb als auch einen beispielhaften Registerumbenennungs-Außerbetriebsausgabe/Ausführungsarchitekturkern zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung zeigt. Die Kästchen mit den durchgezogenen Linien in den 7A und 7B zeigen die Pipeline in Betrieb und den Kern außer Betrieb, während der optionale Zusatz der Kästchen mit den gestrichelten Linien die Registerumbenennungs-Außerbetriebsausgabe/-ausführungspipeline bzw. den -kern zeigt. Vorausgesetzt, der Inbetriebsaspekt ist ein Teilsatz des Außerbetriebsaspekts, wird der Außerbetriebsaspekt beschrieben.
-
In 7A umfasst eine Prozessorpipeline eine Abrufstufe 702, eine Längenentschlüsselungsstufe 704, eine Entschlüsselungsstufe 706, eine Zuordnungsstufe 708, eine Umbenennungsstufe 710, eine Planungs- (auch bekannt als Entsendungs- oder Ausgabe-)Stufe 712, eine Registerlese/Speicherlesestufe 714, eine Ausführungsstufe 716, eine Rückschreib-/Speicherschreibstufe 718, eine Ausnahmebehandlungsstufe 722 und eine Verpflichtungsstufe 724.
-
7B zeigt einen Prozessorkern 790, der eine Front-End-Einheit 730, gekoppelt mit einer Ausführungsengineeinheit 750, umfasst, und beide sind mit einer Speichereinheit 770 gekoppelt. Der Kern 790 kann ein reduzierter Befehlssatzberechnungs-(RISC-)Kern, ein komplexer Befehlssatzberechnungs-(CISC-)Kern, ein sehr langer Befehlswort-(VLIW)Kern oder ein hybrider oder alternativer Kerntyp sein. Als noch eine weitere Option kann der Kern 790 ein Spezialkern sein, wie z. B. ein Netz oder ein Kommunikationskern, ein Kompressionsmotor, ein Coprozessorkern, ein Allzweckberechnungsgrafikverarbeitungseinheits-(GPGPU-)Kern, ein Grafikkern oder dergleichen.
-
Die Front-End-Einheit 730 umfasst eine Zweigvorhersageeinheit 732, gekoppelt mit einer Befehlscacheeinheit 734, die mit einem Befehlsübertragungsseitenblickpuffer (TLB) 736 gekoppelt ist, der mit einer Befehlsabrufeinheit 738 gekoppelt ist, die mit einer Entschlüsselungseinheit 740 gekoppelt ist. Die Entschlüsselungseinheit 740 (oder der Entschlüssler) kann Befehle dekodieren und als Ergebnis einen oder mehrere Mikrovorgänge, Mikrocodeeingangspunkte, Mikrobefehle, sonstige Befehle oder sonstige Steuersignale erzeugen, die aus den ursprünglichen Befehlen entschlüsselt sind oder diese auf sonstige Weise wiederspiegeln oder daraus stammen. Die Entschlüsselungseinheit 740 kann unter Anwendung diverser unterschiedlicher Mechanismen implementiert sein. Beispiele für geeignete Mechanismen umfassen, ohne auf diese beschränkt zu sein, Nachschlagtabellen, Hardwareimplementierungen, programmierbare Logikanordnungen (PLA), Mikrocode-Nur-Lese-Speicher (ROM) etc. In einer Ausführungsform umfasst der Kern 790 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für bestimmte Makrobefehle aufbewahrt (z. B. in Entschlüsselungseinheit 740 oder anderswo innerhalb der Front-End-Einheit 730). Die Entschlüsselungseinheit 740 ist mit einer Umbenennungs-/Zuordnungseinheit 752 in der Ausführungsengineeinheit 750 gekoppelt.
-
Die Ausführungsengineeinheit 750 umfasst die Umbenennungs-/Zuordnungseinheit 752, gekoppelt mit einer Rückzugseinheit 754 und einem Satz aus einer oder mehreren Planungseinheiten 756. Die Planungseinheit(en) steht/stehen für jede beliebige Anzahl unterschiedlicher Planer, einschließlich von Reservierungsstationen, zentralem Befehlsfenster etc. Die Planungseinheit(en) 756 ist/sind mit der/den physischen Registerdatei(en)einheit(en) 758 gekoppelt. Jede der physischen Registerdatei(en)einheiten 758 steht für eine oder mehrere physische Registerdateien, von denen jeweils unterschiedliche einen oder mehrere unterschiedliche Datentypen aufbewahren, wie z. B. skalares Integer, skalares Gleitkomma, gepackte Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma, Zustand (z. B. ein Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) etc. In einer Ausführungsform umfasst die physische Registerdatei(en)einheit 758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können Architekturvektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die physische Registerdatei(en)einheit(en) 758 ist/sind von der Rückzugseinheit 754 überlappt, um diverse Arten zu zeigen, wie Registerumbenennung und Außerbetriebsausführung implementiert sein können (z. B. unter Verwendung eines oder mehrerer Neuordnungspuffer und eines oder mehrerer Rückzugsregisterdateien; unter Verwendung einer oder mehrerer Zukunftsdateien, eines oder mehrerer Verlaufspuffer und einer oder mehrerer Rückzugsregisterdateien; unter Verwendung einer oder mehrerer Registerkarten und eines Pools von Registern etc.). Die Rückzugseinheit 754 und die physische(n) Registerdatei(en)einheit(en) 758 sind mit dem/den Ausführungscluster(n) 760 gekoppelt. Der/die Ausführungscluster 760 umfasst/umfassen einen Satz von einer oder mehreren Ausführungseinheiten 762 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 764. Die Ausführungseinheiten 762 können diverse Vorgänge (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an diversen Arten von Daten (z. B. skalares Gleitkomma, gepackter Integer, gepacktes Gleitkomma, Vektorinteger, Vektorgleitkomma) durchführen. Während manche Ausführungsformen eine Reihe von Ausführungseinheiten umfassen können, die bestimmten Funktionen oder Gruppen von Funktionen zugewiesen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten umfassen, die alle Funktionen erfüllen. Die Planungseinheit(en) 756, die physische(n) Registerdatei(en)einheit(en) 758 und der/die Ausführungscluster 760 sind als möglicherweise im Plural vorhanden dargestellt, da bestimmte Ausführungsformen gesonderte Pipelines für bestimmte Arten von Daten/Vorgängen (z. B. eine Skalenintegerpipeline, eine Skalengleitkomma-/gepackte Integer-/gepackte Gleitkomma-/Vektorinteger/Vektorgleitkomma-Pipeline und/oder eine Speicherzugriffspipeline, die jeweils ihre eigene Planungseinheit, physische Registerdatei(en)einheit und/oder ihren eigenen Ausführungscluster aufweisen – und im Falle einer gesonderten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 764 aufweist). Es versteht sich auch, dass dort, wo gesonderte Pipelines verwendet werden, eine oder mehrere dieser Pipelines Außerbetriebsausgabe/-ausführung und der Rest in Betrieb sein kann.
-
Der Satz von Speicherzugriffseinheiten 764 ist mit der Speichereinheit 770 gekoppelt, die eine Daten-TLB-Einheit 772 umfasst, die mit einer Datencacheeinheit 774 gekoppelt ist, die mit einer Ebene-2-(L2-)Cacheeinheit 776 gekoppelt ist. In einem Ausführungsbeispiel können die Speicherzugriffseinheit 764 eine Beladungseinheit, eine Speicheradressierungseinheit und eine Speicherdateneinheit umfassen, die jeweils mit der Daten-TLB-Einheit 772 in der Speichereinheit 770 gekoppelt ist. Die Befehlscacheeinheit 734 ist ferner an eine Ebene-2-(L2-)Cacheeinheit 776 in der Speichereinheit 770 gekoppelt. Die L2-Cacheeinheit 776 ist mit einer oder mehreren anderen Cacheebenen und schließlich mit einem Hauptspeicher gekoppelt.
-
Beispielsweise kann die beispielhafte Registerumbenennungs-Außerbetriebsausgabe/-ausführungskernarchitektur die Pipeline 700 wie folgt implementieren: 1) der Befehlsabruf 738 führt die Abruf- und die Längenentschlüsselungsstufe 702 und 704 durch; 2) die Entschlüsselungseinheit führt die Entschlüsselungsstufe 706 durch; 3) die Umbenennungs-/Zuordnungseinheit 752 führt die Zuordnungsstufe 708 und die Umbenennungsstufe 710 durch; 4) die Planungseinheit(en) 756 führt/führen die Planungsstufe 712 durch; 5) die physische(n) Registerdatei(en)einheit(en) 758 und die Speichereinheit 770 führen die Registerlese/Speicherlesestufe 714 durch; der Ausführungscluster 760 führt die Ausführungsstufe 716 durch; 6) die Speichereinheit 770 und die physische(n) Registerdatei(en)einheit(en) 758 führen die Rückschreib-/Speicherschreibstufe 718 durch; 7) diverse Einheiten können an der Ausnahmebehandlungsstufe 722 beteiligt sein; und 8) die Rückzugseinheit 754 und die physische(n) Registerdatei(en)einheit(en) 758 führen die Verpflichtungsstufe 724 durch.
-
Der Kern 790 kann einen oder mehrere Befehlssätze (z. B. den x86-Befehlssatz (mit manchen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien; den ARM-Befehlssatz (mit optionalen Zusatzerweiterungen, wie z. B. NEON) von ARM Holdings aus Sunnyvale, Kalifornien) ausführen, den/die hierin beschriebenen Befehl(e) eingeschlossen. In einer Ausführungsform umfasst der Kern 790 Logik zur Unterstützung einer gepackten Befehlssatzerweiterung (z. B. SSE, AVX1, AVX2 etc.), wodurch ermöglicht wird, dass die von vielen multimedialen Anwendungen verwendeten Vorgänge unter Verwendung gepackter Daten durchgeführt werden.
-
Es versteht sich, dass der Kern Multithreading (das Ausführen zweier oder mehrerer Sätze von Vorgängen oder Threads parallel) unterstützen kann und dies auf vielerlei Arten tun kann, darunter zeitlich geschichtetes Multithreading, gleichzeitiges Multithreading (wobei ein einziges physischer Kern einen logischen Kern für jeden der Threads, an dem dieser physische Kern gleichzeitig Multithreading anwendet, bereitstellt) oder eine Kombination daraus (z. B. zeitlich geschichtetes Abrufen und Dekodieren und gleichzeitiges Multithreading danach, wie z. B. bei der Intel®-Hyperthreading-Technologie).
-
Während Registerumbenennung im Kontext einer Außerbetriebsausführung beschrieben ist, versteht sich, dass Registerumbenennung auch in einer Inbetriebsarchitektur eingesetzt werden kann. Während die dargestellte Ausführungsform des Prozessors auch gesonderte Befehls- und Datencacheeinheiten 734/774 und eine geteilte L2-Cacheeinheit 776 umfasst, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, wie z. B. einen internen Ebene-1-(L1-)Cache oder mehrere Ebenen internen Cache. In manchen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache umfassen, der außerhalb des Kerns und/oder des Prozessors liegt. Alternativ dazu können alle Caches außerhalb des Kerns und/oder des Prozessors liegen.
-
Konkrete beispielhafte Kernarchitektur in Betrieb
-
Die 8A–B zeigen ein Blockschaltbild einer konkreteren beispielhaften Kernarchitektur in Betrieb, wobei dieser Kern einer von mehreren Logikblöcken (darunter weitere Kerne desselben Typs und/oder anderer Typen) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Hochbreitbandverbindungsnetz (z. B. ein Ringnetz) mit einer gewissen festen Funktionslogik, Speicher-I/O-Schnittstellen und sonstiger notwendiger I/O-Logik, je nach Anwendung.
-
8A ist ein Blockschaltbild eines einzigen Prozessorkerns zusammen mit dessen Verbindung mit dem innerhalb des Nacktchips gelegenen Verbindungsnetz 802 und mit dessen lokalem Teilsatz des Ebene-2-(L2-)Caches 804, gemäß Ausührungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsentschlüssler 800 den x86-Befehlssatz mit einer gepackten Datenbefehlssatzerweiterung. Ein L1-Cache 806 ermöglicht Zugriffe auf Cachespeicher in den skalaren und Vektoreinheiten mit niedriger Latenz. Während in einer Ausführungsform (um die Auslegung zu vereinfachen) eine skalare Einheit 808 und eine Vektoreinheit 810 gesonderte Registersätze verwenden (skalare Register 812 bzw. Vektorregister 814) und zwischen diesen übertragene Daten auf Speicher geschrieben und dann wieder von einem Ebene-1-(L1-)Cache 806 eingelesen werden, können alternative Ausführungsformen der Erfindung einen anderen Ansatz verwenden (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad umfassen, der es ermöglicht, Daten zwischen den beiden Registerdateien zu übertragen, ohne geschrieben und wieder gelesen zu werden).
-
Der lokale Teilsatz des L2-Caches 804 ist Teil eines globalen L2-Caches, der in gesonderte lokale Teilsätze unterteilt ist, einer pro Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad zu seinem eigenen lokalen Teilsatz des L2-Caches 804 auf. Durch einen Prozessorkern gelesene Daten werden in dessen L2-Cache-Teilsatz 804 aufbewahrt, und es kann rasch darauf zugegriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Durch einen Prozessorkern geschriebene Daten werden in dessen eigenem L2-Cache-Teilsatz 804 aufbewahrt und erforderlichenfalls von anderen Teilsätzen abgezogen. Das Ringnetz gewährleistet Kohärenz bei geteilten Daten. Das Ringnetz ist bidirektional, um es Akteuren, wie z. B. Prozessorkernen, L2-Caches und sonstigen Logikblöcken, zu ermöglichen, miteinander innerhalb des Chips zu kommunizieren. Jeder Ringdatenpfad ist 1012 Bits pro Richtung breit.
-
8B ist eine vergrößerte Ansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen der Erfindung. 8B umfasst einen L1-Datencache 806A, der Teil des L1-Caches 804 ist, sowie mehr Detail betreffend die Vektoreinheit 810 und die Vektorregister 814. Konkret ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 828), die eines oder mehrere von Integer-, Einzelpräzisionsgleit- und Doppelpräzisionsgleitbefehle ausführt. Die VPU unterstützt ein Vermischen der Registereingaben mit der Vermischeinheit 820, numerische Umwandlung mit numerischen Umwandlungseinheiten 822A–B und Replikation mit einer Replikationseinheit 824 auf der Speichereingabe. Schreibmaskenregister 826 ermöglichen eine Vorhersage der resultierenden Vektorschriften.
-
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 Kästchen mit den durchgezogenen Linien in 9 zeigen einen Prozessor 900 mit einem einzigen Kern 902A, einem Systemagent 910, einem Satz von einer oder mehreren Bussteuereinheiten 916, während der optionale Zusatz der Kästchen mit den gestrichelten Linien einen alternativen Prozessor 900 mit mehreren Kernen 902A–N, einem Satz von einer oder mehreren integrierten Speichersteuereinheiten 914 in der Systemagenteinheit 910 und Speziallogik 908 zeigt.
-
Somit können unterschiedliche Implementierungen des Prozessors 900 Folgendes umfassen: 1) eine CPU, bei der die Speziallogik 908 integrierte Grafik- und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne umfassen kann) und die Kerne 902A–N ein oder mehrere Allzweckkerne sind (z. B. Allzweckkerne in Betrieb, Allzweckkerne außer Betrieb, eine Kombination aus beidem); 2) einen Coprozessor, bei dem die Kerne 902A–N eine hohe Anzahl Spezialkerne ist, die in erster Linie für Grafik und/oder wissenschaftlich(en Durchsatz) vorgesehen sind; und 3) einen Coprozessor, bei dem die Kerne 902A–N eine hohe Anzahl an Kernen in Betrieb sind. Somit kann der Prozessor 900 ein Allzweckprozessor, ein Coprozessor oder Spezialprozessor sein, wie z. B. ein Netz- oder Kommunikationsprozessor, ein Kompressionsmotor, ein Grafikprozessor, eine GPGPU (Allzweckgrafikverarbeitungseinheit), ein Hochdurchsatzcoprozessor mit vielen integrierten Kernen (MIC) (darunter 30 oder mehr Kerne), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 900 kann ein Teil von einem oder mehreren Substraten und/oder darauf unter Verwendung einer Reihe von Prozesstechnologien implementiert sein, wie z. B. BiCMOS, CMOS oder NMOS.
-
Die Speicherhierarchie umfasst eine oder mehrere Cacheebenen innerhalb der Kerne, einen Satz oder ein oder mehrere geteilte Cacheeinheiten 906 und externen Speicher (nicht dargestellt), gekoppelt mit dem Satz von integrierten Speichersteuerungseinheiten 914. Der Satz geteilter Cacheeinheiten 906 kann einen oder mehrere Mittelebenencaches, wie z. B. Ebene 2 (L2), Ebene 3 (L3), Ebene 4 (L4) oder weitere Cacheebenen, eine letzte Cacheebene (LLC) und/oder Kombinationen aus diesen umfassen. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 912 die integrierte Grafiklogik 908, den Satz geteilter Cacheeinheiten 906 und die Systemagenteinheit 910/die integrierte(n) Speichersteuereinheit(en) 914 miteinander verbindet, können alternative Ausführungsformen jede beliebige Anzahl an hinlänglich bekannten Verfahren zur Verbindung solcher Einheiten miteinander einsetzen. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 906 und Kernen 902A–N gewahrt.
-
In manchen Ausführungsformen ist einer oder sind mehrere der Kerne 902A–N zu Multithreading in der Lage. Der Systemagent 910 umfasst jene Bauteile, die die Kerne 902A–N koordinieren und betreiben. Die Systemagenteinheit 910 kann z. B. eine Leistungssteuereinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Bauteile sein oder umfassen, die zur Regelung des Leistungszustands der Kerne 902A–N und der integrierten Grafiklogik 908 benötigt werden. Die Anzeigeeinheit dient dem Betrieb einer oder mehrerer extern verbundenen Anzeigen.
-
Die Kerne 902A–N können homogen oder heterogen im Sinne eines Architekturbefehlssatzes sein; d. h. zwei oder mehrere der Kerne 902A–N können zur Ausführung desselben Befehlssatzes in der Lage sein, während andere nur in der Lage sein können, einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen. Beispielhafte Rechnerarchitekturen
-
Die 10–13 sind Blockschaltbilder beispielhafter Rechnerarchitekturen. Weitere fachbekannte Systemauslegungen und Konfigurationen für Laptops, Tisch-PCs, Handheld-PCs, Personal Digital Assistants, Technikarbeitsplätze, Server, Netzvorrichtungen, Netzknoten, Schalter, eingebettete Prozessoren, digitale Signalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuerungen, Handys, tragbare Mediaplayer, Handheldvorrichtungen und diverse andere Elektronikvorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt an Systemen oder Elektronikvorrichtungen, die einen Prozessor und/oder sonstige Ausführungslogik wie hierin offenbart enthalten, allgemein geeignet.
-
Unter nunmehriger Bezugnahme auf 10 ist ein Blockdiagramm eines Systems 1000 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 umfassen, die mit einem Steuerungsknoten 1020 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungsknoten 1020 einen Grafikspeichersteuerungsknoten (GMCH) 1090 und einen Eingabe/Ausgabe-Knoten (IOH) 1050 (die sich auf gesonderten 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-(I/O-)Vorrichtungen 1060 mit dem GMCH 1090.
-
Alternativ dazu ist eine von Speicher- und Grafiksteuerung oder sind beide in den Prozessor integriert (wie hierin beschrieben), sind der Speicher 1040 und der Coprozessor 1045 direkt mit dem Prozessor 1010 und dem Steuerungsknoten 1020 in einem einzigen Chip mit dem IOH 1050 gekoppelt.
-
Die optionale Beschaffenheit zusätzlicher Prozessoren 1015 ist in 10 mit durchbrochenen Linien angeführt. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hierin beschriebenen Prozessorkerne umfassen und kann eine Version des Prozessors 900 sein.
-
Der Speicher 1040 kann z. B. ein dynamischer Direktzugriffsspeicher (DRAM), einen Phasenveränderungsspeicher (PCM) oder eine Kombination aus den beiden sein. Bei zumindest einer Ausführungsform kommuniziert der Steuerungsknoten 1020 mit dem/den Prozessor(en) 1010, 1015 über einen Multidropbus, wie z. B. einen vorderseitigen Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1095.
-
In einer Ausführungsform ist der Coprozessor 1045 ein Spezialprozessor, z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, ein Kompressionsmotor, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsknoten 1020 einen integrierten Grafikbeschleuniger umfassen.
-
Es kann eine Vielzahl von Unterschieden zwischen den physischen Ressourcen 1010, 1015 im Sinne eines Spektrums sinnvoller Metrik geben, darunter Architektur-, Mikroarchitektur-, Wärme-, Leistungsverbrauchseigenschaften und dergleichen.
-
In einer Ausführungsform führt der Prozessor 1010 Befehle aus, die Datenverarbeitungsvorgänge einer allgemeinen Art steuern. Eingebettet in die Befehle können Coprozessorbefehle sein. Der Prozessor 1010 erkennt diese Coprozessorbefehle als solche von einer Art, die durch den beigefügten Coprozessor 1045 auszuführen sind. Dementsprechend gibt der Prozessor 1010 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle darstellen) auf dem Coprozessorbus oder einer sonstigen Verbindung an den Coprozessor 1045 aus. Der/die Coprozessor(en) 1045 nehmen die empfangenen Coprozessorbefehle an und führen sie aus.
-
Unter nunmehriger Bezugnahme auf 11 ist ein Blockschaltbild eines ersten, konkreteren beispielhaften Systems 1100 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 11 dargestellt, ist das Multiprozessorsystem 1100 ein Punkt-zu-Punkt-Verbindungssystem und umfasst einen ersten Prozessor 1170 und einen zweiten Prozessor 1180, miteinander gekoppelt über eine Punkt-zu-Punkt-Verbindung 1150. Jeder der Prozessoren 1170 und 1180 kann eine Version des Prozessors 900 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 die Prozessoren 1010 bzw. 1015, während der Coprozessor 118 der Coprozessor 1045 ist. In einer weiteren Ausführungsform sind die Prozessoren 1170 und 1180 der Prozessor 1010 bzw. der Coprozessor 1045.
-
Die Prozessoren 1170 und 1180 sind einschließlich der integrierten Speichersteuerungs-(IMC-)Einheiten 1172 bzw. 1182 dargestellt. Der Prozessor 1170 umfasst als Teil seiner Bussteuerungseinheiten auch Punkt-zu-Punkt-(P-P-)Schnittstellen 1176 und 1178; desgleichen umfasst der zweite Prozessor 1180 P-P-Schnittstellen 1186 und 1188. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 1150 unter Verwendung der P-P-Schnittstellenschaltungen 1178, 1188 austauschen. Wie in 11 gezeigt, koppeln die IMC 1172 und 1182 die Prozessoren mit entsprechenden Speichern, nämlich einem Speicher 1132 und einem Speicher 1134, die Teile eines Hauptspeichers sein können, die lokal den jeweiligen Prozessoren zugeordnet sind.
-
Die Prozessoren 1180, 1180 können jeweils Informationen mit einem Chipsatz 1190 über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung von Punkt-zu-Punkt-Schnittstellen 1176, 1194, 1186, 1198 austauschen. Der Chipsatz 1190 kann gegebenenfalls Informationen mit dem Coprozessor 1138 über eine Hochleistungsschnittstelle 1139 austauschen. In einer Ausführungsform ist der Coprozessor 1138 ein Spezialprozessor, wie z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, ein Kompressionsmotor, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
-
Ein (nicht dargestellter) geteilter Cache kann in einen der Prozessoren oder außerhalb beider Prozessoren, aber mit den Prozessoren über P-P-Verbindung verbunden aufgenommen werden, sodass die lokalen Cacheinformationen eines oder beider der Prozessoren in dem geteilten Cache aufbewahrt werden, wenn ein Prozessor in einen Niedrigleistungsmodus versetzt wird.
-
Der Chipsatz 1190 kann mit einem ersten Bus 1116 über eine Schnittstelle 1196 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1116 ein Peripheral-Component-Interconnect-(PCI-)Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer I/O-Verbindungsbus der dritten Generation sein, wenngleich der Schutzumfang der vorliegenden Erfindung nicht darauf beschränkt ist.
-
Wie in 11 dargestellt, können diverse I/O-Vorrichtungen 1114 mit dem ersten Bus 1116 gekoppelt sein, zusammen mit einer Busbrücke 1118, die den ersten Bus 1116 mit einem zweiten Bus 1120 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1115, wie z. B. Coprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPU, Beschleuniger (wie z. B. Grafikbeschleuniger oder digitale Signalverarbeitungs-(DSP-)Einheiten), feldprogrammierbare Gate-Anordnungen oder ein beliebiger sonstiger Prozessor, mit dem ersten Bus 1116 gekoppelt. In einer Ausführungsform kann der zweite Bus 1120 ein Bus mit niedriger Pinzahl (LPC) sein. Diverse Vorrichtungen können mit dem zweiten Bus 1120 gekoppelt sein, darunter z. B. eine Tastatur und/oder eine Maus 1122, Kommunikationsvorrichtungen 1127 und eine Speichereinheit 1128, wie z. B. ein Diskettenlaufwerk oder eine sonstige Massenspeichervorrichtung, die Befehle/Code und Daten 1130 umfassen kann, in einer Ausführungsform. Ferner kann ein Audio-I/O 1124 mit dem zweiten Bus 1120 gekoppelt sein. Es gilt zu beachten, dass auch andere Architekturen möglich sind. Beispielsweise kann ein System anstelle der Punkt-zu-Punkt-Architektur aus 11 einen Multidropbus oder eine andere solche Architektur implementieren.
-
Unter nunmehriger Bezugnahme auf 12 ist ein Blockschaltbild eines zweiten konkreteren, beispielhaften Systems 1200 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Gleiche Elemente in den 11 und 12 tragen die gleichen Bezugszeichen, und bestimmte Aspekte aus 11 wurden in 12 weggelassen, um Unklarheiten bei anderen Aspekten der 12 zu vermeiden.
-
12 zeigt, dass die Prozessoren 1170, 1180 integrierten Speicher und I/O-Steuerlogik („CL”) 1172 bzw. 1182 umfassen können. Somit umfasst die CL 1172, 1182 integrierte Speichersteuerungseinheiten und umfasst I/O-Steuerlogik. 12 zeigt, dass nicht nur die Speicher 1132, 1134 mit der CL 1172, 1182 gekoppelt sind, sondern auch I/O-Vorrichtungen 1214 mit der Steuerlogik 1172, 1182 gekoppelt sind. Ältere I/O-Vorrichtungen 1215 sind mit dem Chipsatz 1190 gekoppelt.
-
Unter nunmehriger Bezugnahme auf 13 ist ein Blockschaltbild eines SoC 1300 in Übereinstimmung mit einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 9 tragen ähnliche Bezugszeichen. Zudem sind Kästchen mit gestrichelten Linien optionale Merkmale auf fortgeschritteneren SoC. In 13 ist eine oder sind mehrere Verbindungseinheiten 1302 mit Folgendem gekoppelt: einem Anwendungsprozessor 1310, der einen Satz von einem oder mehreren Kernen 202A–N und eine oder mehrere geteilte Cacheeinheiten 906 umfasst; eine Systemagenteinheit 910; einer oder mehreren Bussteuereinheiten 916; einer oder mehreren integrierten Speichersteuereinheiten 914; einem Satz von einem oder mehreren Coprozessoren 1320, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; einer statischen Direktzugriffsspeicher-(SRAM-)Einheit 1330; einer Direktspeicherzugriffs-(DMA-)Einheit 1332; und einer Anzeigeeinheit 1340 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst der eine oder umfassen die mehreren Coprozessoren 1320 einen Spezialprozessor, wie z. B. einen Netz- oder Kommunikationsprozessor, einen Kompressionsmotor, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
-
Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination aus solchen Ausführungsansätzen ausgeführt werden. Ausführungsformen der Erfindung können als Rechnerprogramme oder als Programmcode ausgeführt werden, der auf programmierbaren Systemen ausgeführt wird, die zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtiger und nichtflüchtiger Speicher- und/oder Speicherelemente) oder zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfassen.
-
Programmcode, wie Code 1130, der in 11 dargestellt ist, kann auf Eingabebefehle angewandt werden, um die hierin beschriebenen Funktionen auszuführen und um Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf bekannte Art und Weise auf eine oder mehrere Ausgabevorrichtungen angewandt werden. Zum Zweck dieser Anmeldung umfasst ein Prozesssystem jedes System, das einen Prozessor aufweist, z. B.; einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
-
Der Programmcode kann in einer höheren Prozess- oder objektorientierten Programmiersprache ausgeführt sein, um mit einem Prozesssystem zu kommunizieren. Der Programmcode kann, falls gewünscht, auch in Montage- oder Maschinensprache ausgeführt werden. Tatsächlich sind die hierin beschriebenen Mechanismen in ihrem Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine Compilersprache oder eine interpretierte Sprache sein.
-
Ein oder mehrere Aspekte von zumindest einer Ausführungsform können durch jeweilige Befehle, die auf einem maschinenlesbaren Medium gespeichert sind, die innerhalb des Prozessors mehrere Logiken darstellen, ausgeführt werden, was dazu führt, dass wenn sie von einer Maschine gelesen werden, die Maschine eine Logik fabriziert, um die hierin beschriebenen Verfahren durchzuführen. Solche Darstellungen, bekannt als „IP-Kerne”, können auf einem konkreten, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Herstellungseinrichtungen weitergeleitet werden, um diese in die Maschinenfabrikate zu laden, die die eigentliche Logik oder den Prozessor ausmachen.
-
Solche maschinenlesbaren Speichermedien können, ohne Beschränkung, nichtvorübergehende, konkrete Anordnungen von Fabrikaten umfassen, die von einer Maschine oder einer Vorrichtung hergestellt wurden, einschließlich Speichermedien wie Festplatten, jeder anderen Art von Datenscheiben wie Disketten, optische Disketten, Compact Disk Read-Only Memories (CD-ROMs), Compact Disk Rewritables (CD-RWs) und magnetoptische Disketten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROM), Direktzugriffsspeicher (RAM) wie dynamische Direktzugriffsspeicher (DRAM), statische Direktzugriffsspeicher (SRAM), löschbare programmierbare Nur-Lese-Speicher (EPROM), Phasenänderungsspeicher (PCM), magnetische oder optische Karten oder jede andere Art von Medium, das zum Speichern von elektronischen Befehlen geeignet ist.
-
Dementsprechend umfassen Ausführungsformen der Erfindung ebenfalls nichtvorübergehende, konkrete maschinenlesbare Medien, die Befehle oder Konstruktionsdaten enthalten, wie Hardware Description Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemeigenschaften definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
-
Während bestimmte Ausführungsbeispiele beschrieben sind und in den beiliegenden Zeichnungen gezeigt werden, versteht sich, dass solche Ausführungsformen die breit gefasste Erfindung lediglich veranschaulichen und einschränken und dass diese Erfindung nicht auf die gezeigten und beschriebenen konkreten Konstruktionen und Anordnungen beschränkt ist, da sich diverse weitere Modifikationen Fachleuten bei der Lektüre dieser Offenbarung anbieten können. In einem Technologiebereich wie diesem, wo das Wachstum schnell erfolgt und weitere Fortschritte nicht leicht vorherzusehen sind, können die offenbarten Ausführungsformen, erleichtert durch die Ermöglichung technologischer Fortschritte leicht modifizierbar sein, was Anordnung und Details betrifft, ohne dabei von den Grundsätzen der vorliegenden Offenbarung oder vom Schutzumfang der beigefügten Patentansprüche abzuweichen.