-
Gebiet der Erfindung
-
Die
vorliegende Beschreibung betrifft allgemein das Gebiet der Datenverarbeitung
und insbesondere Verfahren und eine zugehörige Vorrichtung zum Verarbeiten
von Vektordaten.
-
Hintergrund der Erfindung
-
Ein
Datenverarbeitungssystem kann Hardware-Ressourcen aufweisen, wie
etwa eine Zentraleinheit (CPU), einen Schreib-Lese-Speicher (RAM),
einen Nur-Lese-Speicher (ROM) usw. Das Verarbeitungssystem kann
außerdem
Software-Ressourcen aufweisen, wie etwa ein Basic Input/Output System
(BIOS), einen Virtual Machine Monitor (VMM) und ein oder mehrere
Betriebssysteme (OSs).
-
Die
CPU kann Hardware-Unterstützung
zum Verarbeiten von Vektoren bieten. Ein Vektor ist eine Datenstruktur,
die eine Anzahl von fortlaufenden Datenelementen hält. Ein
Vektorregister der Größe M kann
N Vektorelemente der Größe O enthalten,
wobei N = M/O ist. Zum Beispiel kann ein 64-Byte-Vektorregister
partitioniert werden in (a) 64 Vektorelemente, wobei jedes Vektorelement
ein Datenelement hält,
das 1 Byte belegt, (b) 32 Vektorelemente zum Halten von Datenelementen,
die jeweils 2 Byte (oder ein „Wort") belegen, (c) 16
Vektorelemente zum Halten von Datenelementen, die jeweils 4 Byte
(oder ein „Doppelwort") belegen, oder 8
Vektorelemente zum Halten von Datenelementen, die jeweils 8 Byte
(oder ein „Quadwort") belegen.
-
Um
eine Parallelität
auf der Daten-Ebene herzustellen, kann die CPU SIMD-Operationen
(SIMD: Single Instruction Multiple Data) unterstützen. SIMD-Operationen schließen die
Verwendung ein und derselben Operation für mehrere Datenelemente ein.
Zum Beispiel kann eine CPU in Reaktion auf einen einzigen SIMD-Additionsbefehl
jedes Element in einem Vektor zu dem entsprechenden Element in einem
anderen Vektor addieren. Die CPU kann mehrere Verarbeitungskerne
haben, um parallele Operationen zu ermöglichen.
-
Kurze Beschreibung der Zeichnungen
-
Merkmale
und Vorzüge
der vorliegenden Erfindung dürften
aus den beigefügten
Ansprüchen,
der nachstehenden detaillierten Beschreibung einer oder mehrerer
beispielhafter Ausführungsformen
und den entsprechenden Figuren hervorgehen. Hierbei sind:
-
1 ein
Blockdiagramm, das eine geeignete Datenverarbeitungsumgebung zeigt,
in der bestimmte Aspekte einer beispielhaften Ausführungsform
der vorliegenden Erfindung implementiert werden können;
-
2 ein
Ablaufdiagramm einer beispielhaften Ausführungsform eines Prozesses
zum Verarbeiten von Vektoren in dem Verarbeitungssystem von 1 und
-
die 3 und 4 Blockdiagramme,
die beispielhafte Speicherkonstrukte zeigen, die in der Ausführungsform
von 1 zum Verarbeiten von Vektoren verwendet werden.
-
Detaillierte Beschreibung
-
Ein
Programm in einem Verarbeitungssystem kann einen Vektor erzeugen,
der Tausende von Elementen enthält.
Darüber
hinaus kann der Prozessor in dem Verarbeitungssystem ein Vektorregister
haben, das nur 16 Elemente auf einmal halten kann. Daher kann das
Programm die Tausende von Elementen in dem Vektor in Stapeln von
16 verarbeiten. Der Prozessor kann außerdem mehrere Verarbeitungseinheiten
oder Verarbeitungskerne (z. B. 16 Kerne) zum parallelen Verarbeiten
mehrerer Vektorelemente haben. Zum Beispiel können die 16 Kerne die 16 Vektorelemente
parallel in 16 getrennten Ausführungs-Threads
oder -strömen
verarbeiten.
-
Bei
einigen Anwendungen brauchen jedoch die meisten Elemente eines Vektors
normalerweise kaum oder gar nicht verarbeitet zu werden. Zum Beispiel
kann ein Strahlenverfolgungsprogramm Vektorelemente zum Darstellen
von Strahlen verwenden, und dieses Programm kann mehr als 10.000
Strahlen prüfen
und kann feststellen, dass nur 99 von ihnen von einem bestimmten
Objekt reflektiert werden. Wenn ein Strahl das gegebene Objekt schneidet,
muss das Strahlenverfolgungsprogramm möglicherweise eine Additionsverarbeitung
für dieses
Strahlenelement durchführen,
um zu bewirken, dass der Strahl mit dem Objekt in Wechselwirkung
tritt.
-
Für die meisten
Strahlen, die das Objekt nicht schneiden, ist jedoch keine Additionsverarbeitung
erforderlich. Zum Beispiel kann ein Zweig des Programms die folgenden
Operationen ausführen:
-
Das
Strahlenverfolgungsprogramm kann eine bedingte Anweisung (z. B. „Vektor
vergleichen" oder „vcmp") verwenden, um zu
ermitteln, welches der Elemente in dem Vektor verarbeitet werden
muss, und kann eine Bitmaske oder „Schreibmaske" zum Aufzeichnen
der Ergebnisse verwenden. Die Bitmap kann somit die Elemente „maskieren", die nicht verarbeitet
werden müssen.
-
Wenn
ein Vektor zahlreiche Elemente enthält, kommt es manchmal vor,
dass nach einer oder mehreren bedingten Prüfungen in der Anwendung einige
Vektorelemente unmaskiert bleiben. Wenn es in diesem Zweig viel
zu verarbeiten gibt und die Elemente, die die Bedingung erfüllen, spärlich angeordnet
sind, kann ein beträchtlicher
Prozentsatz der Vektorverarbeitungskapazität vergeudet werden. Zum Beispiel
kann ein Programmzweig, der eine einfache Wenn-dann-Anweisung unter
Verwendung von vcmp und Schreibmasken nutzt, dazu führen, dass
nur einige oder sogar gar keine unmaskierten Elemente verarbeitet
werden, bis sie diesen Zweig im Steuerungsablauf verlassen.
-
Da
viel Zeit benötigt
werden könnte,
um ein Vektorelement zu verarbeiten (z. B. um einen Strahl zu verarbeiten,
der auf ein Objekt auftrifft), kann die Effizienz dadurch verbessert
werden, dass die 99 interessierenden Strahlen (von den Zehntausenden)
in einen zusammenhängenden
Cluster von Vektorelementen gepackt werden, sodass immer 16 der
99 Elemente auf einmal verarbeitet werden können. Ohne dieses Bündeln könnte die
Parallelverarbeitung von Daten sehr ineffizient sein, wenn der Problemsatz
spärlich
ist (d. h., wenn die interessierende Verarbeitung mit Speicherplätzen verbunden
ist, die weit voneinander entfernt sind, anstatt dicht gepackt zu
sein). Wenn zum Beispiel die 99 interessierenden Strahlen nicht
in zusammenhängende
Elemente gepackt sind, kann jeder 16-Elemente-Stapel nur wenige
oder gar keine Elemente haben, die für diesen Stapel zu verarbeiten
sind. Daher können
die meisten Kerne unbenutzt bleiben, während dieser Stapel verarbeitet
wird.
-
Das
Verfahren des Zusammenpackens von interessierenden Vektorelementen
für die
Parallelverarbeitung ist nicht nur für Strahlenverfolgungsanwendungen
zweckmäßig, sondern
hat auch Vorteile für
andere Anwendungen, insbesondere für Anwendungen mit einem oder
mehreren großen
Eingangsdatensätzen,
die kaum verarbeitet werden müssen.
-
In
dieser Beschreibung wird ein Typ eines Maschinenbefehls oder Prozessorbefehls
beschrieben, der alle unmaskierten Elemente eines Vektorregisters
bündelt
und diesen neuen Vektor (eine Untermenge der Registerdateiquelle)
ab einer beliebigen Element-orientierten Adresse abspeichert. Im
Sinne dieser Beschreibung wird dieser Befehlstyp als PackStore-Befehl
bezeichnet.
-
In
dieser Beschreibung wird auch ein anderer Typ eines Prozessorbefehls
beschrieben, der mehr oder weniger das Gegenteil des PackStore-Befehls
ausführt.
Dieser andere Typ von Befehl lädt
Elemente von einer beliebigen Speicheradresse und „entpackt" die Daten in die
unmaskierten Elemente des Ziel-Vektorregisters. Im Sinne dieser
Beschreibung wird dieser zweite Typ von Befehl als LoadUnpack-Befehl
bezeichnet.
-
Mit
dem PackStore-Befehl können
Programmierer Programme erzeugen, die Daten aus einem Vektor schnell
in Gruppen von Datenelementen sortieren, die zum Beispiel jeweils
einen gemeinsamen Steuerweg durch eine zweigreiche Codesequenz nehmen.
Die Programme können
auch LoadUnpack verwenden, um nach Beendigung des Steuerzweiges
die Datenelemente zügig
zurück
aus einer Gruppe an die ursprünglichen Plätze für diese
Elemente in der Datenstruktur (z. B. in die ursprünglichen
Elemente in dem Vektorregister) zu expandieren. Somit ermöglichen
diese Befehle Funktionen zum Bilden und Eliminieren von Warteschlangen, was
zu Programmen führen
kann, die in einem Zustand, in dem zahlreiche Vektorelemente maskiert
sind, einen kleineren Teil ihrer Ausführungszeit als solche Programme
verwenden, die nur herkömmliche
Vektorbefehle nutzen.
-
Der
folgende Pseudocode zeigt ein beispielhaftes Verfahren zum Verarbeiten
eines spärlichen
Datensatzes:
-
In
diesem Beispiel leisten nur drei der Elemente, und daher ungefähr drei
der Kerne, tatsächlich
wesentliche Arbeit (da nur 3 Bit der Maske 1 sind).
-
Im
Gegensatz dazu führt
der folgende Pseudocode den Vergleich über einen großen Satz
von Vektorregistern durch und packt dann alle Daten, die mit der
gültigen
Maske (Maske = 1) assoziiert sind, in zusammenhängende Speichercluster:
-
Wenn
die Elemente, die verarbeitet werden müssen, spärlich sind und die Verarbeitung
signifikant ist, ist diese zweite Lösung normalerweise effizienter,
auch wenn es einen Overhead durch das Packen und Entpacken gibt.
-
Darüber hinaus
können
bei mindestens einer Ausführungsform
PackStore und LoadUnpack auch On-the-Fly-Format-Umwandlungen für Daten,
die aus dem Speicher in ein Vektorregister geladen werden, und für Daten
durchführen,
die aus einem Vektorregister abgespeichert werden. Die unterstützten Format-Umwandlungen
können
Umwandlungen in einer Richtung oder in jeder Richtung zwischen zahlreichen
verschiedenen Formatpaaren sein, wie etwa 8 Bit und 32 Bit (z. B.
uint8→float32,
uint8→uint32),
16 Bit und 32 Bit (z. B. sint16→float32,
sint16→int32)
usw. Bei einer Ausführungsform
können
Operationscodes (Opcodes) ein Format wie das folgende verwenden,
um die gewünschte
Format-Umwandlung anzugeben:
- • LoadUnpackMN:
legt fest, dass jedes Datenelement M Byte im Speicher belegt, und
wird in N Byte zum Laden in ein Vektorelement umgewandelt, das N
Byte belegt.
- • PackLoadOP:
legt fest, dass jedes Vektorelement O Byte in dem Vektorregister
belegt, und wird in P Byte umgewandelt, die abgespeichert werden
sollen.
-
Bei
anderen Ausführungsformen
können
auch andere Arten von Umwandlungsindikatoren (z. B. Befehlsparameter)
verwendet werden, um die gewünschte
Format-Umwandlung festzulegen.
-
Diese
Befehle sind nicht nur zum Bilden und Eliminieren von Warteschlangen
zweckmäßig, sondern sie
können
sich auch als bequemer und effizienter als Vektorbefehle erweisen,
die ein Ausrichten des Speichers auf den gesamten Vektor erfordern.
Im Gegensatz dazu können
PackStore und LoadUnpack mit Speicherplätzen verwendet werden, die
nur auf die Größe eines
Elements des Vektors ausgerichtet sind. Ein Programm kann zum Beispiel
einen LoadUnpack-Befehl
mit einer Umwandlung von 8 Bit in 32 Bit ausführen, und in diesem Fall kann
die Ladung von einem beliebigen Speicherzeiger stammen. Nachstehend
werden weitere Einzelheiten zu beispielhaften Implementierungen
von PackStore- und LoadUnpack-Befehlen angegeben.
-
1 ist
ein Blockdiagramm, das eine geeignete Datenverarbeitungsumgebung 12 zeigt,
in der bestimmte Aspekte einer beispielhaften Ausführungsform
der vorliegenden Erfindung implementiert werden können. Die
Datenverarbeitungsumgebung 12 weist ein Verarbeitungssystem 20 auf,
das verschiedene Hardware-Komponenten 82, wie etwa einen
oder mehrere CPUs oder Prozessoren 22, sowie verschiedene
andere Komponenten hat, die über
einen oder mehrere Systembusse 14 oder andere Kommunikationswege
oder -medien kommunikationsfähig
verbunden sein können.
In dieser Beschreibung dient der Begriff „Bus" zum Bezeichnen von gemeinsam genutzten
Kommunikationswegen (z. B. mit mehreren Stationen) sowie von Punkt-zu-Punkt-Wegen. Jeder
Prozessor kann eine oder mehrere Verarbeitungseinheiten oder -kerne
haben. Die Kerne können
als Hyper-Threading(HT)-Technologie oder als jede andere geeignete
Technologie zum simultanen oder im Wesentlichen simultanen Ausführen mehrerer
Threads oder Befehle implementiert werden.
-
Der
Prozessor 22 kann kommunikationsfähig verbunden werden mit einem
oder mehreren flüchtigen oder
nichtflüchtigen
Datenspeichervorrichtungen, wie etwa einem RAM 26, einem
ROM 42, Massenspeichern 36, wie etwa Festplatten,
und/oder anderen Vorrichtungen oder Medien, wie etwa Disketten,
optischen Speichern, Bändern,
Flash-Speichern, Speichersticks, Digital Versatile Disks (DVDs)
usw. Im Sinne dieser Beschreibung können die Begriffe „Nur-Lese-Speicher" und „ROM" im Allgemeinen zum
Bezeichnen von nichtflüchtigen
Speichervorrichtungen verwendet werden, wie etwa einem löschbaren
programmierbaren Nur-Lese-Speicher (EPROM), einem elektrisch löschbaren
programmierbaren Nur-Lese-Speicher (EEPROM), einem Flash-ROM, einem
Flash-Speicher usw. Das Verarbeitungssystem 20 verwendet
den RAM 26 als Hauptspeicher. Darüber hinaus kann der Prozessor 22 einen
Cache-Speicher haben, der ebenfalls vorübergehend als Hauptspeicher
dienen kann.
-
Der
Prozessor 22 kann außerdem
mit weiteren Komponenten kommunikationsfähig verbunden werden, wie etwa
einem Videosteuergerät,
IDE-Steuergeräten
(IDE: Integrated Drive Electronics; integrierte Steuerelektronik),
SCSI-Steuergeräten
(SCSI: Small Computer System Interface), USB-Steuergeräten (USB:
Universal Serial Bus), Eingangs/Ausgangs(E/A)anschlüssen 28,
Eingabevorrichtungen, Ausgabevorrichtungen, wie etwa Anzeigevorrichtungen,
usw. Ein Chipsatz 34 in dem Verarbeitungssystem 20 kann
verschiedene Hardware-Komponenten miteinander verbinden. Der Chipsatz 34 kann
eine oder mehrere Brücken
und/oder Hubs sowie weitere Logik- und Speicherkomponenten haben.
-
Das
Verarbeitungssystem 20 kann, zumindest teilweise, durch
die Eingabe von Eingabevorrichtungen, wie etwa einer Tastatur, einer
Maus usw., und/oder durch Befehle gesteuert werden, die von einer
anderen Maschine, durch biometrische Rückkopplung oder von anderen
Eingabequellen oder -signalen erhalten werden. Das Verarbeitungssystem 20 kann
eine oder mehrere Verbindungen zu einem oder mehreren entfernten
Datenverarbeitungssystemen 90 nutzen, wie etwa über ein
Netzwerk-Schnittstellen-Steuergerät (network interface controller,
NIC) 40, ein Modem oder andere Kommunikationskanäle oder
-verbindungen. Verarbeitungssysteme können mittels eines physischen
und/oder logischen Netzwerks 92 miteinander verbunden werden, wie
etwa ein lokales Netzwerk (LAN), ein Weitverkehrsnetz (WAN), ein
Intranet, das Internet usw. Eine Kommunikation, die das Netzwerk 92 verwendet,
kann verschiedene drahtgebundene und/oder drahtlose Nahbereichs-
oder Fernbereichsträger
und -protokolle nutzen, unter anderem Hochfrequenz(HF)-, Satelliten-,
Mikrowellen-, IEEE-802.11, -802.16, -802.20-(IEEE: Institute of Electrical and Electronics
Engineers), Bluetooth-, optische, Infrarot-, Kabel-, Laser- u. ä. -Träger und
-Protokolle. Protokolle für
802.11 können
auch als WiFi-Protokolle (WiFi: wireless fidelity) bezeichnet werden.
Protokolle für
802.16 können
auch als WiMAX-Protokolle (WiMAX:
wireless metropolitan area network) bezeichnet werden, und Informationen
zu diesen Protokollen sind aktuell unter grouper.ieee.org/groups/802/16/published.html
erhältlich.
-
Einige
Komponenten können
als Adapterkarten mit Schnittstellen, z. B. einem PCI-Verbinder
(PCI: Peripheral Component Interconnect), zum Kommunizieren mit
einem Bus implementiert werden. Bei einigen Ausführungsformen können ein
oder mehrere Geräte
als eingebettete Steuergeräte
implementiert werden, wobei Komponenten, wie etwa programmierbare
oder nichtprogrammierbare Logikgeräte oder -Arrays, anwendungsspezifische
integrierte Schaltungen (ASICs), eingebettete Prozessoren, SmartCards
und dergleichen, verwendet werden.
-
Die
Erfindung wird hier anhand von Daten beschrieben, wie etwa Befehlen,
Funktionen, Prozeduren, Datenstrukturen, Anwendungsprogrammen, Konfigurationseinstellungen
usw. Wenn eine Maschine auf die Daten zugreift, kann die Maschine
durch Ausführen
von Tasks, Definieren von abstrakten Datentypen, Erstellen von Low-Level-Hardware-Kontexten
und/oder Ausführen
von anderen Operationen reagieren, wie nachstehend näher beschrieben
wird. Die Daten können
in einem flüchtigen
und/oder nichtflüchtigen
Datenspeicher gespeichert werden. Im Sinne dieser Beschreibung deckt
der Begriff „Programm" einen großen Bereich
von Software-Komponenten und -Konstrukten ab, unter anderem Anwendungen,
Treiber, Prozesse, Routinen, Verfahren, Module und Unterprogramme.
Der Begriff „Programm" kann zum Bezeichnen
einer kompletten Kompilationseinheit (d. h., ein Satz von Befehlen,
die einzeln kompiliert werden können),
einer Auswahl von Kompilationseinheiten oder eines Teils einer Kompilationseinheit
verwendet werden. Somit kann der Begriff „Programm" zum Bezeichnen einer Auswahl von Befehlen
verwendet werden, die beim Ausführen
mit einem Verarbeitungssystem eine oder mehrere gewünschte Operationen
ausführen.
-
Bei
der Ausführungsform
von 1 wird mindestens ein Programm 100 in
dem Massenspeicher 36 gespeichert, und das Verarbeitungssystem 20 kann
das Programm 100 in den RAM 26 kopieren und kann
das Programm 100 auf dem Prozessor 22 abarbeiten.
Das Programm 100 enthält
einen oder mehrere Vektorbefehle, wie etwa LoadUnpack-Befehle und
PackStore-Befehle. Das Programm 100 und/oder alternative
Programme können
so geschrieben werden, dass sie den Prozessor 22 veranlassen,
LoadUnpack-Befehle und PackStore-Befehle für Grafik-Operationen, wie etwa
Strahlenverfolgung, und/oder für
zahlreiche andere Zwecke zu verwenden, wie etwa Textverarbeitung,
Rasterisierung, Physiksimulation usw.
-
Bei
der Ausführungsform
von 1 ist der Prozessor 22 als Ein-Chip-Paket
implementiert, das mehrere Kerne (z. B. einen Verarbeitungskern 31,
einen Verarbeitungskern 33, ..., einen Verarbeitungskern 33n) hat.
Der Verarbeitungskern 31 kann als Hauptprozessor dienen,
und der Verarbeitungskern 33 kann als Hilfskern oder Coprozessor
dienen. Der Verarbeitungskern 33 kann zum Beispiel als
Grafik-Coprozessor, Grafikprozessor (graphics processing unit, GPU)
oder Vektorprozessor (vector processing unit, VPU) dienen, der SIMD-Befehle
ausführen
kann.
-
Weitere
Verarbeitungskerne in dem Verarbeitungssystem 20 (z. B.
der Verarbeitungskern 33n) können ebenfalls als Coprozessoren
und/oder als Hauptprozessor dienen. Bei einer Ausführungsform
kann zum Beispiel ein Verarbeitungssystem eine CPU mit einem Hauptverarbeitungskern
und sechzehn Hilfsverarbeitungskernen haben. Einige oder alle Kerne
können
Befehle parallel zueinander ausführen.
Darüber
hinaus kann jeder einzelne Kern zwei oder mehr Befehle gleichzeitig
ausführen.
Zum Beispiel kann jeder Kern als 16er Vektor-Maschine arbeiten,
die bis zu 16 Elemente parallel verarbeitet. Für Vektoren mit mehr als 16
Elementen kann die Software den Vektor in Untermengen unterteilen,
die jeweils 16 Elemente (oder ein Vielfaches davon) enthalten, wobei
zwei oder mehr Untermengen im Wesentlichen gleichzeitig auf zwei
oder mehr Kernen laufen. Außerdem
können
ein oder mehrere der Kerne superskalar sein (z. B. können sie
parallele/SIMD-Operationen und skalare Operationen ausführen). Darüber hinaus
können
bei anderen Ausführungsformen
geeignete Abwandlungen der vorgenannten Konfigurationen verwendet
werden, wie etwa CPUs mit mehr oder weniger Hilfskernen, usw.
-
Bei
der Ausführungsform
von 1 hat der Verarbeitungskern 33 eine Ausführungseinheit 130 und eine
oder mehrere Registerdateien 150. Die Registerdateien 150 können verschiedene
Vektorregister (z. B. ein Vektorregister V1, ein Vektorregister
V2, ..., ein Vektorregister Vn) und verschiedene Maskenregister
(z. B. ein Maskenregister M1, ein Maskenregister M2, ..., ein Maskenregister
Mn) haben. Registerdateien können auch
verschiedene andere Register, wie etwa ein oder mehrere IP-Register 211 (IP:
instruction pointer; Befehlszeiger) zum Verfolgen des oder der aktuellen
oder nächsten
Prozessorbefehls/-befehle zum Ausführen in einem oder mehreren
Ausführungsströmen oder
-threads, und andere Arten von Registern haben.
-
Der
Verarbeitungskern 33 hat außerdem einen Decodierer 165 zum
Erkennen und Decodieren von Befehlen eines Befehlssatzes, der PackStore-
und LoadUnpack-Befehle enthält,
zur Ausführung
mit der Ausführungseinheit 130.
Der Verarbeitungskern 33 kann auch einen Cache-Speicher 160 haben.
Der Verarbeitungskern 31 kann auch Komponenten wie einen
Decodierer, eine Ausführungseinheit,
einen Cache-Speicher, Registerdateien usw. haben. Die Verarbeitungskerne 31, 33 und 33n und
der Prozessor 22 haben außerdem weitere Schaltungen,
die für
das Verständnis
der vorliegenden Erfindung nicht erforderlich sind.
-
Bei
der Ausführungsform
von 1 dient der Decodierer 165 zum Decodieren
von Befehlen, die mit dem Verarbeitungskern 33 empfangen
werden, und die Ausführungseinheit 130 dient
zum Ausführen
von Befehlen, die mit dem Verarbeitungskern 33 empfangen
werden. Der Decodierer 165 kann zum Beispiel Maschinenbefehle,
die mit dem Prozessor 22 empfangen werden, in Steuersignale
und/oder Mikrocode-Eingabestellen decodieren. Diese Steuersignale
und/oder Mikrocode-Eingabestellen können von dem Decodierer 165 an die
Ausführungseinheit 130 gesendet
werden.
-
Bei
einer alternativen Ausführungsform,
die in 1 durch Strichlinien dargestellt ist, kann ein
Decodierer 167 in dem Verarbeitungskern 31 die
Maschinenbefehle decodieren, die mit dem Prozessor 22 empfangen
werden, und der Verarbeitungskern 31 kann einige Befehle
(z. B. PackStore und LoadUnpack) als einen Typ erkennen, der von
einem Coprozessor, wie etwa dem Kern 33, verarbeitet werden
sollte. Die Befehle, die von dem Decodierer 167 zu einem
anderen Kern geroutet werden sollen, können als Coprozessorbefehle
bezeichnet werden. Wenn der Verarbeitungskern 31 einen
Coprozessorbefehl erkennt, kann er diesen Befehl zu dem Verarbeitungskern 33 zur
Ausführung
routen. Alternativ kann der Hauptkern bestimmte Steuersignale an den
Hilfskern senden, wobei diese Steuersignale den auszuführenden
Coprozessorbefehlen entsprechen.
-
Bei
einer alternativen Ausführungsform
können
verschiedene Verarbeitungskerne in getrennten Chippaketen residieren.
Bei anderen Ausführungsformen
können
mehr als zwei verschiedene Prozessoren und/oder Verarbeitungskerne
verwendet werden. Bei einer weiteren Ausführungsform kann ein Verarbeitungssystem
einen einzigen Prozessor mit einem einzigen Verarbeitungskern mit
Möglichkeiten
zum Ausführen
der hier beschriebenen Operationen haben. Auf jeden Fall kann mindestens
ein Verarbeitungskern mindestens einen Befehl, der unmaskierte Elemente
eines Vektorregisters bündelt
und die gebündelten
Elemente ab einer festgelegten Adresse abspeichert, und/oder mindestens
einen Befehl ausführen,
der Elemente von einer festgelegten Speicheradresse lädt und die
Daten in die unmaskierten Elemente eines Ziel-Vektorregisters entpackt.
Zum Beispiel kann der Decodierer 165 in Reaktion auf den
Empfang eines PackStore-Befehls
eine Vektorverarbeitungsschaltung 145 in der Ausführungseinheit 130 veranlassen,
das erforderliche Packen und Speichern durchzuführen. Und in Reaktion auf den
Empfang eines LoadUnpack-Befehls kann der Decodierer 165 die
Vektorverarbeitungsschaltung 145 in der Ausführungseinheit 130 veranlassen,
das erforderliche Laden und Entpacken durchzuführen.
-
2 ist
ein Ablaufdiagramm einer beispielhaften Ausführungsform eines Prozesses
zum Verarbeiten von Vektoren in dem Verarbeitungssystem von 1.
Der Prozess beginnt an einem Block 210 damit, dass der
Decodierer 165 einen Prozessorbefehl aus einem Programm 100 empfängt. Das
Programm 100 kann zum Beispiel ein Programm zum Rendern
von Grafik sein. Bei einem Block 220 ermittelt der Decodierer 165,
ob der Befehl ein PackStore-Befehl ist. Wenn der Befehl ein PackStore-Befehl
ist, sendet der Decodierer 165 den Befehl oder Signale,
die dem Befehl entsprechen, an die Ausführungseinheit 130.
Wie bei einem Block 222 gezeigt ist, kann die Vektorverarbeitungsschaltung 145 in
der Ausführungseinheit 130 in
Reaktion auf den Empfang dieses Eingangssignals die unmaskierten
Vektorelemente aus dem festgelegten Vektorregister ab einem festgelegten
Speicherplatz in den Speicher kopieren. Die Vektorverarbeitungsschaltung 145 kann
auch als Vektorprozessor 145 bezeichnet werden. Insbesondere
kann der Vektorprozessor 145 die Daten aus den unmaskierten
Elementen in einen zusammenhängenden
Speicherplatz im Speicher packen, wie nachstehend unter Bezugnahme
auf 3 näher
erläutert
wird.
-
Wenn
jedoch der Befehl kein PackStore-Befehl ist, kann der Prozess von
dem Block 220 zu einem Block 230 weitergehen,
der zeigt, dass der Decodierer 165 ermittelt, ob der Befehl
ein LoadUnpack-Befehl ist. Wenn der Befehl ein LoadUnpack-Befehl
ist, sendet der Decodierer 165 den Befehl oder Signale,
die dem Befehl entsprechen, an die Ausführungseinheit 130.
Wie bei einem Block 232 gezeigt ist, kann die Vektorverarbeitungsschaltung 145 in
der Ausführungseinheit 130 in
Reaktion auf den Empfang dieses Eingangssignals Daten aus zusammenhängenden
Plätzen
im Speicher ab einem festgelegten Speicherplatz in unmaskierte Vektorelemente
eines festgelegten Vektorregisters kopieren, wobei Daten in einem
festgelegten Maskenregister angeben, welche Vektorelemente maskiert
sind. Wie bei einem Block 240 gezeigt ist, kann der Prozessor 22 in
dem Fall, dass der Befehl kein PackStore und kein LoadUnpack ist,
dann mit mehr oder weniger herkömmlichen
Verfahren den Befehl ausführen.
-
3 ist
ein Blockdiagramm, das beispielhafte Argumente und Speicherkonstrukte
zum Ausführen
eines PackStore-Befehls zeigt. Insbesondere zeigt 3 ein
beispielhaftes Template 50 für einen PackStore-Befehl. Zum
Beispiel gibt das PackStore-Template 50 an, dass der PackStore-Befehl einen Opcode 52 und mehrere
Argumente oder Parameter haben kann, wie etwa einen Ziel-Parameter 54,
einen Quellen-Parameter 56 und einen Masken-Parameter 58.
In dem Beispiel von 3 identifiziert der Opcode 52 den
Befehl als PackStore-Befehl, der Ziel-Parameter 54 legt
einen Speicherplatz fest, der als Bestimmungsort für das Ergebnis
zu verwenden ist, der Quellen-Parameter 56 legt ein Quellen-Vektorregister
fest, und der Masken-Parameter 58 legt ein Maskenregister
mit Bits fest, die Elementen in dem festgelegten Vektorregister
entsprechen.
-
Insbesondere
zeigt 3, dass der spezielle PackStore-Befehl in dem
Template 50 das Maskenregister M1 mit dem Vektorregister
V1 assoziiert. Darüber
hinaus zeigt die Tabelle in 3 rechts
oben, wie verschiedene Gruppen von Bits in dem Vektorregister V1
mit verschiedenen Vektorelementen korrespondieren. Zum Beispiel
enthalten Bits 31:0 ein Element a, Bits 63:32 enthalten ein Element
b, usw. Darüber
hinaus ist das Maskenregister M1 auf das Vektorregister V1 ausgerichtet
dargestellt, um zu zeigen, dass Bits in dem Maskenregister M1 mit
Elementen in dem Vektorregister V1 korrespondiert. Zum Beispiel
enthalten die ersten drei Bits (von rechts) in dem Maskenregister
M1 0en, wodurch angegeben wird, dass die Elemente a, b und c maskiert
sind. Alle anderen Elemente außer
Elementen d, e und n, die 1en in dem Maskenregister M1 entsprechen,
sind ebenfalls maskiert. Die Tabelle rechts unten in 3 zeigt
die unterschiedlichen Adressen, die mit unterschiedlichen Plätzen in
einem Speicherbereich MA1 assoziiert sind. Zum Beispiel referenziert
eine lineare Adresse 0b0100 (wobei das Präfix 0b eine Binärdarstellung
angibt) ein Element E in dem Speicherbereich MA1, die lineare Adresse
0b0101 referenziert ein Element F in dem Speicherbereich MA1, usw.
-
Wie
vorstehend dargelegt worden ist, kann der Prozessor 22 einen
Prozessorbefehl mit einem Quellen-Parameter zum Festlegen eines
Vektorregisters, einen Masken-Parameter zum Festlegen eines Maskenregisters
und einen Ziel-Parameter zum Festlegen eines Speicherplatzes empfangen.
Der Prozessor 22 kann in Reaktion auf den Empfang des Prozessorbefehls
Vektorelemente, die unmaskierten Bits in dem festgelegten Maskenregister
entsprechen, ab dem festgelegten Speicherplatz an fortlaufende Speicherplätze kopieren, ohne
Vektorelemente zu kopieren, die maskierten Bits in dem festgelegten
Maskenregister entsprechen.
-
Somit
kann, wie durch die Pfeile angegeben wird, die von den Elementen
d, e und n in dem Vektorregister V1 zu Elementen F, G und H in dem
Speicherbereich MA1 führen,
der PackStore-Befehl 50 den Prozessor 22 veranlassen,
nicht-zusammenhängende
Elemente d, e und n aus dem Vektorregister V1 ab dem festgelegten
Speicherplatz an zusammenhängende
Speicherplätze
(z. B. die Speicherplätze
F, G und H) zu packen.
-
4 ist
ein Blockdiagramm, das beispielhafte Argumente und Speicherkonstrukte
zum Ausführen
eines LoadUnpack-Befehls zeigt. Insbesondere zeigt 4 ein
beispielhaftes Template 60 für einen LoadUnpack-Befehl.
Zum Beispiel gibt das LoadUnpack-Template 60 an, dass der
LoadUnpack-Befehl einen Operationscode (Opcode) 62 und
mehrere Argumente oder Parameter haben kann, wie etwa einen Ziel-Parameter 64,
einen Quellen-Parameter 66 und einen Masken-Parameter 68.
In dem Beispiel von 4 identifiziert der Opcode 62 den
Befehl als LoadUnpack-Befehl, der Ziel-Parameter 64 legt
ein Quellen-Vektorregister fest, das als Bestimmungsort für das Ergebnis
zu verwenden ist, der Quellen-Parameter 66 legt einen Quellen-Speicherplatz
fest, und der Masken-Parameter 68 legt ein Maskenregister
mit Bits fest, die Elementen in dem festgelegten Vektorregister
entsprechen.
-
Insbesondere
zeigt 4, dass der spezielle LoadUnpack-Befehl in dem
Template 60 das Maskenregister M1 mit dem Vektorregister
V1 assoziiert. Darüber
hinaus zeigt die Tabelle in 4 rechts
oben, wie verschiedene Gruppen von Bits in dem Vektorregister V1
mit verschiedenen Vektorelementen korrespondieren. Darüber hinaus
ist das Maskenregister M1 auf das Vektorregister V1 ausgerichtet
dargestellt, um zu zeigen, dass Bits in dem Maskenregister M1 mit
Elementen in dem Vektorregister V1 korrespondieren. Die Tabelle rechts
unten in 4 zeigt die unterschiedlichen
Adressen, die mit unterschiedlichen Plätzen in dem Speicherbereich
MA1 assoziiert sind.
-
Wie
vorstehend dargelegt worden ist, kann der Prozessor 22 einen
Prozessorbefehl mit einem Quellen-Parameter zum Festlegen eines
Speicherplatzes, einen Masken-Parameter zum Festlegen eines Maskenregisters
und einen Ziel-Parameter zum Festlegen eines Vektorregisters empfangen.
Der Prozessor 22 kann in Reaktion auf den Empfang des Prozessorbefehls
Datenelemente aus zusammenhängenden
Speicherplätzen
ab dem festgelegten Speicherplatz in Elemente des festgelegten Vektorregisters
kopieren, die unmaskierten Bits in dem festgelegten Maskenregister
entsprechen, ohne Daten in Vektorelemente zu kopieren, die maskierten
Bits in dem festgelegten Maskenregister entsprechen.
-
Somit
kann, wie durch die Pfeile angegeben wird, die von den Speicherplätzen F,
G und H in dem Speicherbereich MA1 zu den Elementen d, e bzw. n
in dem Vektorregister V1 führen,
der LoadUnpack-Befehl 60 den Prozessor 22 veranlassen,
Daten aus zusammenhängenden
Speicherplätzen
(z. B. den Speicherplätzen
F, G und H) ab dem festgelegten Speicherplatz (z. B. dem Speicherplatz
F an der linearen Adresse 0b0101) in nicht-zusammenhängende Elemente
des Vektorregisters V1 zu kopieren.
-
Wie
vorstehend dargelegt worden ist, können also mit dem PackStore-Befehl
ausgewählte
Elemente von einem Quellenvektor in zusammenhängende Speicherplätze verschoben
oder kopiert werden, und mit dem LoadUnpack-Befehl können zusammenhängende Datenelemente
im Speicher in ausgewählte
Elemente in einem Vektorregister verschoben oder kopiert werden.
In beiden Fällen
beruhen Mappings zumindest teilweise auf einem Maskenregister, das
Maskenwerte enthält,
die den Elementen des Vektorregisters entsprechen. Diese Arten von
Operationen können
oftmals „frei" sein oder sie haben
nur einen minimalen Einfluss auf die Durchführung in dem Sinne, dass der
Programmierer in der Lage ist, Ladungen und Speicher in ihrem Code durch
LoadUnpacks und PackStores mit, wenn überhaupt, minimalen zusätzlichen
Setup-Befehlen zu ersetzen.
-
Angesichts
der Grundsätze
und beispielhaften Ausführungsformen,
die hier beschrieben und dargestellt worden sind, ist zu erkennen,
dass die dargestellten Ausführungsformen
in ihrer Anordnung und ihren Einzelheiten modifiziert werden können, ohne
von diesen Grundsätzen
abzuweichen. Zum Beispiel werden bei den Ausführungsformen der 3 und 4 Speicherplätze durch
eine lineare Adresse (z. B. durch Adressbits, die einen Speicherplatz
in einer 64-Byte-Cache-Leitung
definieren) referenziert. Bei anderen Ausführungsformen können jedoch
andere Verfahren zum Identifizieren von Speicherplätzen verwendet
werden.
-
Die
vorstehende Diskussion hat sich auf spezielle Ausführungsformen
konzentriert, aber es werden auch andere Konfigurationen in Erwägung gezogen.
Insbesondere werden hier Ausdrücke
wie „bei
einer Ausführungsform", „bei einer
anderen Ausführungsform" oder dergleichen
verwendet, aber diese Wendungen sollen allgemein auf mögliche Ausführungsformen
hinweisen und sollen die Erfindung nicht auf bestimmte Konfigurationen
von Ausführungsformen
beschränken.
Diese Begriffe, die hier benutzt werden, können auf dieselben oder andere
Ausführungsformen
hinweisen, die zu anderen Ausführungsformen
kombiniert werden können.
-
Ebenso
sind beispielhafte Prozesse in Bezug auf spezielle Operationen beschrieben
worden, die in einer speziellen Reihenfolge ausgeführt werden,
aber für
diese Prozesse könnten
zahlreiche Modifikationen verwendet werden, um zahlreiche alternative
Ausführungsformen
der vorliegenden Erfindung abzuleiten. Zum Beispiel können alternative
Ausführungsformen
Prozesse beinhalten, die weniger als alle der beschriebenen Operationen
verwenden; Prozesse, die zusätzliche
Operationen verwenden; Prozesse, die die gleichen Operationen in
einer anderen Reihenfolge verwenden; und Prozesse, in denen die
einzelnen Operationen, die hier beschrieben sind, kombiniert, unterteilt
oder in anderer Weise abgeändert
werden.
-
Alternative
Ausführungsformen
der Erfindung können
auch maschinenzugreifbare Medien beinhalten, die Befehle zum Ausführen von
Operationen der Erfindung codieren. Solche Ausführungsformen können auch als
Programmprodukte bezeichnet werden. Solche maschinenzugreifbaren
Medien können
unter anderem Speichermedien, wie etwa Disketten, Festplatten, CD-ROMs,
ROMs und RAMs, und andere identifizierbare Anordnungen von Teilchen
sein, die mit einer Maschine oder einer Vorrichtung hergestellt
werden. Befehle können
auch in einer verteilten Umgebung verwendet werden und können für den Zugriff
durch Ein- oder Mehrprozessormaschinen lokal und/oder entfernt gespeichert
werden.
-
Es
dürfte
ebenfalls klar sein, dass die hier dargestellten Hardware- und Software-Komponenten
Funktionselemente darstellen, die weitgehend in sich abgeschlossen
sind, sodass jede Komponente im Wesentlichen unabhängig von
den anderen entworfen, konstruiert oder aktualisiert werden kann.
Die Steuerlogik zum Bereitstellen der hier beschriebenen und dargestellten
Funktionalität
kann bei verschiedenen Ausführungsformen
als Hardware, Software oder Kombinationen von Hardware und Software
implementiert werden. Zum Beispiel kann die Ausführungslogik in einem Prozessor
Schaltkreise und/oder Mikrocodes zum Ausführen der Operationen haben,
die zum Abrufen, Decodieren und Ausführen von Maschinenbefehlen
erforderlich sind.
-
Die
hier benutzten Begriffe „Verarbeitungssystem" und „Datenverarbeitungssystem" sollen allgemein eine
einzelne Maschine oder ein System von kommunikationsfähig verbundenen
Maschinen oder Vorrichtungen umfassen, die gemeinsam arbeiten. Beispielhafte
Verarbeitungssysteme sind unter anderem verteilte Rechensysteme,
Supercomputer, Hochleistungs-Rechensysteme, Rechencluster, Großrechner,
Minicomputer, Client-Server-Systeme, Personal Computer, Workstations,
Server, tragbare Computer, Laptop-Computer, Tabletts, Telefone,
Per sonal Digital Assistants (PDAs), Handheld-Geräte, Unterhaltungsgeräte, wie
etwa Audio- und/oder
Videogeräte,
und andere Plattformen oder Geräte
zur Verarbeitung oder Übertragung
von Informationen.
-
Angesichts
der breiten Palette von zweckmäßigen Permutationen,
die problemlos von den hier beschriebenen beispielhaften Ausführungsformen
abgeleitet werden können,
soll diese detaillierte Beschreibung nur erläuternd sein und darf nicht
als Beschreibung angesehen werden, die den Schutzumfang der Erfindung beschränkt. Das,
was als Erfindung beansprucht wird, umfasst daher alle Implementierungen,
die innerhalb des Schutzumfangs und des Grundgedankens der nachstehenden
Ansprüche
liegen, und alle Äquivalente
dieser Implementierungen.