-
HINTERGRUND
-
Um
die Leistung eines Verarbeitungssystem zu verbessern, wird ein Einzelbefehl-Mehrdaten
(SIMD – Single
Instruction, Multiple Data)-Befehl gleichzeitig für mehrere
Operanden auf Daten in einer einzigen Befehlsperiode ausgeführt. Zum
Beispiel könnte
eine SIMD-Ausführungsmaschine
mit acht Kanälen
gleichzeitig einen Befehl für
acht Operanden mit Daten mit 32 Bit ausführen, wobei jeder Operand auf
einen eindeutigen Rechenkanal der SIMD-Ausführungsmaschine abgebildet wird.
Darüberhinaus
können
ein oder mehrere Register in einer Registerdatei von den SIMD-Befehlen
benutzt werden, und jedes Register kann feste Orte haben, die mit
den Ausführungskanälen verknüpft sind
(z.B. könnte
eine Anzahl von Registern mit acht Wörtern für eine SIMD-Ausführungsmaschine
mit acht Kanälen
vorgesehen sein, wobei jedes Wort in einem Register einem unterschiedlichen
Ausführungskanal
zugewiesen ist). Eine Möglichkeit,
in effizienter Weise und flexibel auf Registerinformation auf unterschiedlichen
Wegen zuzugreifen, kann die Leistung einer SIMD-Ausführungsmaschine
weiter verbessern.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1 und 2 sind
Blockschaubilder von Verarbeitungssystemen.
-
3 veranschaulicht
einen Befehl und eine Registerdatei für ein Verarbeitungssystem.
-
4 ist
ein Ablaufdiagramm eines Verfahrens gemäß einigen Ausführungsformen.
-
5 veranschaulicht
einen Befehl und eine Registerdatei für ein Verarbeitungssystem gemäß einigen
Ausführungsformen.
-
6 veranschaulicht
die Abbildung eines Ausführungskanals
in eine Registerdatei gemäß einigen Ausführungsformen.
-
7 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen
einschließlich eines
horizontalen Schrittes.
-
8 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen
einschließlich eines
horizontalen Schrittes Null.
-
9 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen
für Datenelemente
vom Typ Wort.
-
10 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen
einschließlich eines
vertikalen Schrittes.
-
11 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen
einschließlich eines
vertikalen Schrittes Null.
-
12 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen.
-
13 veranschaulicht
eine Bereichsbeschreibung, bei der sowohl der horizontale als auch
der vertikale Schritt Null sind, gemäß einigen Ausführungsformen.
-
14 veranschaulicht
Bereichsbeschreibungen gemäß einigen
Ausführungsformen.
-
15 ist
ein Blockschaubild eines System gemäß einigen Ausführungsformen.
-
GENAUE BESCHREIBUNG
-
Einige
hierin beschriebene Ausführungsformen
sind mit einem „Verarbeitungssystem" verknüpft. Wie hierin
verwendet, kann sich der Ausdruck „Verarbeitungssystem" auf irgendeine Vorrichtung
beziehen, welche Daten verarbeitet. Ein Verarbeitungssystem kann
zum Beispiel mit einer Graphikmaschine verbunden sein, die Graphikdaten
und/oder andere Arten der Me dieninformation verarbeitet. In manchen
Fällen
kann die Leistung eines Verarbeitungssystems mit der Verwendung
einer SIMD-Ausführungsmaschine
verbessert werden. Zum Beispiel kann eine SIMD-Ausführungsmaschine
gleichzeitig einen einzelnen Fließpunkt-SIMD-Befehl für mehrere
Datenkanäle
ausführen
(z.B. um die Transformation zu beschleunigen und/oder um dreidimensionale
geometrische Formen zu liefern). Andere Beispiele von Verarbeitungssystemen
umfassen eine zentrale Verarbeitungseinheit (CPU – Central
Processing Unit) und einen Digitalsignalprozessor (DSP – Digital
Signal Processor).
-
1 veranschaulicht
einen Typ eines Verarbeitungssystems 100, welches eine
SIMD-Ausführungsmaschine 110 umfaßt. In diesem
Fall empfängt
die Ausführungsmaschine 110 einen
Befehl (z.B. von einer Befehlsspeichereinheit) zusammen mit einem
Datenvektor mit vier Komponenten (z.B. Vektorkomponenten X, Y, Z
und W, jede mit Bits, ausgelegt für die Verarbeitung auf entsprechenden
Kanälen
0 bis 3 der SIMD-Ausführungsmaschine 100).
Die Maschine 110 kann dann gleichzeitig den Befehl für alle die
Komponenten in dem Vektor ausführen.
Ein solcher Ansatz wird eine „horizontale", „kanalparallele" oder „Anordnung
von Strukturen (AOS – Array
of Structures)"-Implementierung
genannt.
-
2 veranschaulicht
einen weiteren Typ eines Verarbeitungssystems 200, welches
eine SIMD-Ausführungsmaschine 210 umfaßt. In diesem
Fall empfängt
die Ausführungsmaschine 210 einen
Befehl zusammen mit vier Operanden für Daten, wobei jeder Operand
einem unterschiedlichen Vektor zugewiesen ist (z.B. den vier X-Komponenten
der Vektoren V0 bis V3). Jeder Vektor kann zum Beispiel drei Ortswerte
(z.B. X, Y und Z) umfassen, die einem dreidimensionalen Graphikort
zugewiesen sind. Die Maschine 210 kann dann gleichzeitig
den Befehl für
alle die Operanden in einer einzigen Befehlsperiode durchführen. Ein
solcher Ansatz wird eine „vertikale", „kanalserielle" oder „Struktur
aus Anordnungen (SOA – Structure
of Arrays)"-Implementierung
genannt. Obwohl manche hierin beschriebenen Ausführungsformen mit einer SIMD-Ausführungsmaschine
mit vier und acht Kanälen
verknüpft
ist, sei bemerkt, daß eine
SIMD-Ausführungsmaschine
irgendeine Anzahl von Kanälen
größer als Eins
haben könnte
(z.B. könnten
Ausführungsformen
mit einer Ausführungsmaschine
mit 32 Kanälen
verknüpft
sein).
-
3 veranschaulicht
ein Verarbeitungssystem 300 mit einer SIMD-Ausführungsmaschine 310 mit acht
Kanälen.
Die Ausführungsmaschine 310 kann
eine 8 Byte-Registerdatei 320 umfassen, so wie eine allgemeine
Registerdatei (GRF – General
Register File) auf einem Chip, auf die zugegriffen werden kann,
indem die Assembly-Sprache und/oder Maschinencodebefehle verwendet
werden. Insbesondere umfaßt
die Registerdatei 320 in 3 fünf Register
(R0 bis R4), und die Ausführungsmaschine 310 führt den
folgenden Hardwarebefehl aus:
add(8) R1 R3 R4
-
Die „(8)" gibt an, daß der Befehl
auf Operanden für
alle acht Ausführungskanäle ausgeführt werden wird.
Das „R1" ist ein Zieloperand
(ZIEL), und „R3" und „R4" sind Quellenoperanden
(QUELLE0 bzw. QUELLE1). Somit wird jedes der acht Einzelbyte-Datenelemente
in R4 zu den entsprechenden Datenelementen in R3 addiert. Die acht
Ergebnisse werden dann in R1 gespeichert. Insbesondere wird das
erste Byte von R4 zu dem ersten Byte von R3 addiert, und das Ergebnis
wird in dem ersten Byte von R1 gespeichert. Ähnlich wird das zweite Byte
von R4 zu dem zweiten Byte von R3 addiert, und das Ergebnis wird
in dem zweiten Byte von R1 gespeichert usw.
-
Bei
manchen Anwendungen kann es hilfreich sein, auf verschiedenen Wegen
auf Information in einer Registerdatei zuzugreifen. Zum Beispiel
kann es bei einer Graphikanwendung manchmal hilfreich sein, Teile der
Registerdatei als einen Vektor, einen Skalar und/oder eine Anordnung
aus Werten zu behandeln. Ein solcher Ansatz kann dabei helfen, die
Befehlsmenge und/oder die Datenbewegung, das Packen, Entpacken und/oder
Shuffling zu verringern und die Leistung des Systems zu verbessern.
-
4 ist
ein Ablaufdiagramm eines Verfahrens gemäß einigen Ausführungsformen.
Die hierin beschriebenen Ablaufdiagramme implizieren nicht notwendigerweise
eine feste Reihenfolge für
die Aktionen, und Ausführungsformen
können
in irgendeiner Reihenfolge ausgeführt werden, die praktikabel
ist. Es sei bemerkt, daß jedes
der hierin beschriebenen Verfahren mit Hardware, Software (einschließlich Mikrocode),
Firmware oder irgendeiner Kombination dieser Ansätze durchgeführt werden
kann. Zum Beispiel könnte
eine Befehle abbildende Harware-Maschine benutzt werden, um den
Betrieb gemäß einigen
hierin beschriebenen Ausführungsformen
zu vereinfachen.
-
Bei 402 wird
ein Bereich in einer Registerdatei für einen Operanden beschrieben.
Der Operand kann zum Beispiel ein Ziel- oder Quellenoperand eines
Maschinencodebefehls sein, der von einer SIMD-Ausführungsmaschine
ausgeführt
werden soll. Gemäß einigen
Ausführungsformen
ist der beschriebene Bereich „dynamisch" dahingehend, daß unterschiedliche
Bereiche in der Registerdatei zu unterschiedlichen Zeiten definiert
werden können.
Die Beschreibung des Bereiches könnte
zum Beispiel in den Maschinencodebefehl codiert sein. Man bemerke,
daß mehr
als ein Bereich in der Registerdatei jeweils beschrieben werden
könnte.
-
Bei 404 wird
Information, die in der Registerdatei gespeichert (oder daraus wiedergewonnen)
werden soll, entsprechend dem beschriebenen Bereich angeordnet.
Zum Beispiel könnten
Daten aus einem ersten Bereich mit Daten in einem zweiten Bereich
verglichen werden, und ein Ergebnis könnte in einem dritten Bereich auf
einer Basis pro Kanal gespeichert werden.
-
5 veranschaulicht
ein Verarbeitungssystem 500 gemäß einigen Ausführungsformen
mit einer SIMD-Ausführungsmaschine 510 mit
acht Kanälen.
Bei diesem Beispiel sind drei Bereiche für eine Registerdatei 520 mit
fünf Registern
(R0 bis R4) mit acht Byte beschrieben: ein Zielbereich (ZIEL) und
zwei Quellenbereichen (QUELLE0 und QUELLE1). Diese Bereiche könnten zum
Beispiel durch einen Addierbefehl im Maschinencode definiert worden
sein. Darüberhinaus
werden bei diesem Beispiel alle Ausführungskanäle verwendet, und es wird angenommen,
daß die
Datenelemente Bytes der Daten sind (z.B. jedes der acht QUELLE1-Bytes wird zu einem
entsprechenden QUELLE0-Byte addiert, und die Ergebnisse werden in
den acht ZIEL-Bytes in der Registerdatei 520 gespeichert).
-
Jede
Bereichbeschreibung umfaßt
einen Registeridentifizierer und einen „Teilregisteridentifizierer", die einen Ort eines
ersten Datenelementes in der Registerdatei 520 angeben
(in 5 veranschaulicht als ein „Ursprung" von RegNum.TeilRegNum). Der Teilregisteridentifizierer
kann zum Beispiel eine Verlagerung von dem Beginn eines Registers
angeben (z.B. und kann ausgedrückt
werden, indem eine physikalische Anzahl von Bits oder Bytes oder
eine Anzahl Datenelemente verwendet wird). Zum Beispiel hat der
ZIEL-Bereich in 5 einen Ursprung bei R0.2, was
angibt, daß ein
erstes Datenelement in dem ZIEL-Bereich sich beim Byte 2 des ersten
Registers (R0) befindet. Ähnlich
beginnt der QUELLE0-Bereich beim Byte 3 von R2 (R2.3), und der QUELLE1-Bereich
beginnt beim ersten Byte von R4 (R4.0). Es sei angemerkt, daß die beschriebenen
Bereiche nicht zur Registerdatei 502 ausgerichtet zu sein
brauchen (z.B. ein Bereich braucht bei einem einzelnen Registern
nicht beim Byte 0 zu beginnen und beim Byte 7 zu enden).
-
Es
sei angemerkt, daß ein
Ursprung auf andere Weise definiert werden könnte. Zum Beispiel kann die Registerdatei 520 als
ein Speichergebiet mit aneinandergrenzenden 40 Byte betrachtet werden.
Darüberhinaus
könnte
ein einzelner Ursprung mit einer 6 Bit-Adresse auf ein Byte innerhalb
der Registerdatei 520 zeigen. Es sei angemerkt, daß ein einzelner
Ursprung mit einer 6 Bit-Adresse in der Lage ist, auf irgendein
Byte innerhalb einer Registerdatei bis hinauf zu einer Speicherfläche mit
64 Byte zu zeigen. Als ein weiteres Beispiel könnte die Registerdatei 520 als
ein Speichergebiet mit aneinandergrenzenden 320 Bit betrachtet werden.
In diesem Fall könnte
ein einzelner Ursprung mit 9 Bit-Adresse auf ein Bit innerhalb der
Registerdatei 520 zeigen.
-
Jede
Bereichsbeschreibung kann weiter eine „Breite" des Bereichs umfassen. Die Breite kann
zum Beispiel eine Anzahl Datenelemente angeben, die innerhalb einer
Registerzeile mit dem beschriebenen Bereich verknüpft sind.
Zum Beispiel hat der ZIEL-Bereich, der in 5 veranschaulicht
ist, eine Bereite von vier Datenelementen (z.B. vier Byte). Da acht
Ausführungskanäle verwendet
werden (und daher acht Ergebnisse mit einem Byte gespeichert werden
müssen),
ist die „Höhe" des Bereiches zwei
Datenelemente (z.B. wird der Bereich zwei unterschiedliche Register überspannen).
Das heißt,
die Gesamtanzahl der Datenelemente in dem vier Elemente breiten,
zwei Elemente hohen ZIEL-Bereich wird acht sein. Der ZIEL-Bereich
kann als eine zweidimensionale Anordnung aus Datenelementen betrachtet
werden, die Registerzeilen und Registerspalten umfaßt.
-
In ähnlicher
Weise wird der QUELLE0-Bereich so beschrieben, daß er vier
Byte breit ist (und daher zwei Zeilen oder Register hoch), und der
QUELLE1-Bereich wird beschrieben, daß der acht Byte breit ist (und daher
eine vertikale Höhe
von einem Datenelement hat). Es sei angemerkt, daß ein einzelner
Bereich unterschiedliche Register in der Registerdatei 520 überspannen
kann (z.B. kann sich Teil des ZIEL-Bereiches, der in 5 veranschaulicht
ist, in einem Teil von R0 befinden, und der Rest befindet sich in
einem Teil von R1).
-
Obwohl
manche hierin diskutierten Ausführungsformen
eine Breite eines Bereiches beschreiben, wird gemäß anderen
Ausführungsformen
statt dessen eine vertikale Höhe
des Bereiches beschrieben (wobei in diesem Fall die Breite des Bereiches
basierend auf der Gesamtanzahl der Datenelemente abgeleitet werden kann).
Darüberhinaus
sei angemerkt, daß überlappende
Registerbereiche in der Registerdatei 520 definiert sein
können
(z.B. könnte
der Bereich, der durch QUELLE0 definiert ist, teilweise oder vollständig den
Bereich überlappen,
der durch QUELLE1 definiert ist). Zusätzlich, obwohl manche hierin
diskutierten Beispiele zwei Quellenoperanden und einen Zieloperanden
haben, können
andere Befehlstypen verwendet werden. Zum Beispiel kann ein Befehl
einen Quellenoperanden und einen Zieloperanden haben, drei Quellenoperanden
und zwei Zieloperanden usw.
-
Gemäß einigen
Ausführungsformen
könnten
ein beschriebener Bereichsursprung und eine Breite dazu führen, daß ein Bereich
in das nächste
Register in der Registerdatei 520 „umbricht". Zum Beispiel würde ein Bereich von Bytegroßen Datenelementen
mit einem Ursprung R2.6 und einer Breite acht die letzten Bytes von
R2 zusammen mit den ersten sechs Bytes von R3 umfassen. In ähnlicher
Weise könnte
sich ein Bereich von unten in der Registerdatei 520 nach
oben umbrechen (z.B. von R4 zu R0).
-
Die
SIMD-Ausführungsmaschine 510 kann
jedes Byte in dem beschriebenen QUELLE1-Bereich zu einem entsprechenden Byte
in dem beschriebenen QUELLE0-Bereich addieren und die Ergebnisse
in dem beschriebenen ZIEL-Bereich in der Registerdatei 520 speichern.
Zum Beispiel veranschaulicht 6 das Abbilden
des Ausführungskanals
in die Registerdatei 520 gemäß einigen Ausführungsformen.
In diesem Fall sind Datenelemente innerhalb eines beschriebenen
Bereiches in einer zeilendominierten Reihenfolge (row-major Order)
beschrieben. Man betrachte zum Beispiel den Kanal 6 der Ausführungsmaschine 510.
Dieser Kanal wird den Wert, der in Byte sechs von R4 gespeichert
ist, zu dem Wert, der in Byte fünf
von R3 gespeichert ist, addieren und das Ergebnis in Byte vier von
R1 speichern. Gemäß anderen
Ausführungsformen
können
Datenelemente innerhalb eines beschriebenen Bereiches in einer spaltendominierten
Reihenfolge (column-major Order) oder unter Verwendung irgendwelcher
anderer Abbildungstechniken angeordnet werden.
-
7 veranschaulicht
eine Bereichsbeschreibung, welche einen „horizontalen Schritt" gemäß einigen Ausführungsformen
umfaßt.
Der horizontale Schritt kann zum Beispiel eine Spaltenversetzung
der Datenelemente in einer Registerdatei 720 angeben. Insbesondere
ist der Bereich, der in 7 beschrieben ist, für acht Datenelemente
mit einzelnem Byte (z.B. der Bereich könnte zweckmäßig sein, wenn nur acht Kanäle einer SIMD-Ausführungsmaschine
mit 16 Kanälen
von einem Maschinencodebefehl benutzt werden). Der Bereich ist vier
Byte breit und daher zwei Datenelement hoch (so daß der Bereich
acht Datenelemente umfassen wird) und beginnt bei R1.1 (Byte 1 von
R1).
-
In
diesem Fall ist ein horizontaler Schritt von Zwei beschrieben worden.
Als ein Ergebnis ist jedes Datenelemente in einer Zeile von seinem
benachbarten Datenelement in der Zeile um zwei Byte versetzt. Zum Beispiel
befindet sich das Datenelement, das dem Kanal 5 der Ausführungsmaschine
zugewiesen ist, bei Byte 3 von R2, und das Datenelement, das dem
Kanal 6 zugewiesen ist, befindet sich bei Byte 5 von R2. Auf diese Weise
kann ein beschriebener Bereich in der Registerdatei 720 diskontinuierlich
sein. Es sei angemerkt, daß, wenn
ein horizontaler Schritt von Eins beschrieben wird, das Ergebnis
eine aneinandergrenzende 4 × 2
Anordnung aus Bytes, beginnend bei R1.1, in der zweidimensionalen
Abbildung der Registerdatei 720 sein würde.
-
Der
Bereich, der in 7 beschrieben ist, könnte mit
einem Quellenoperanden verknüpft
sein, wobei in diesem Fall Daten aus den nicht aneinandergrenzenden
Gebieten gesammelt werden können,
wenn ein Befehl ausgeführt
wird. Der Bereich, der in 7 beschrieben
ist, könnte
auch mit einem Zieloperanden verknüpft sein, wobei in diesem Fall
Ergebnisse über
die nicht aneinandergrenzenden Gebiete verstreut werden können, wenn
ein Befehl ausgeführt
wird.
-
8 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen,
welche einen horizontalen Schritt von „Null" umfaßt. Wie bei 7 ist
der Bereich für
acht Datenelemente mit einem Byte und ist vier Byte breit (und daher
zwei Datenelemente hoch). Da jedoch der horizontale Schritt Null
ist, bildet sich jedes der vier Elemente in der ersten Zeile auf
demselben physikalischen Ort in der Registerdatei 820 ab (z.B.
sind sie von ihrem benachbarten Datenelement um Null versetzt).
Als ein Ergebnis wird der Wert in R1.1 für die ersten vier Ausführungskanäle repliziert.
Wenn der Bereich zum Beispiel mit einem Quellenoperanden eines „Addier"-Befehls verknüpft ist,
würde derselbe
Wert von allen den ersten vier Ausführungskanälen verwendet werden. In ähnlicher
Weise wird der Wert in R2.1 für
die letzten vier Ausführungskanäle repliziert.
-
Gemäß manchen
Ausführungsformen
kann der Wert eines horizontalen Schrittes in einem Befehl codiert
werden. Zum Beispiel könnte
ein Feld mit drei Bit verwendet werden, um die folgenden acht potentiellen Werte
für den
horizontalen Schritt zu beschreiben: 0, 1, 2, 4, 8, 16, 32 und 64.
Darüberhinaus
kann gemäß einigen
Ausführungsformen
ein negativer horizontaler Schritt beschrieben werden.
-
Es
sei angemerkt, daß ein
Bereich für
Datenelemente unterschiedlicher Größen beschrieben werden kann.
Zum Beispiel veranschaulicht 9 eine Bereichsbeschreibung
gemäß einigen
Ausführungsformen
für Datenelemente
vom Typ Wort. In diesem Fall hat die Registerdatei 920 acht
Register zu sechzehn Byte (R0 bis R7, wobei jedes 128 Bit hat),
und der Bereich beginnt bei R2.3. Die Ausführungsgröße ist acht Kanäle, und die
Breite des Bereiches beträgt
vier Datenelemente. Darüberhinaus
wird jedes Datenelement als ein Wort (zwei Byte) beschrieben, und
daher belegt das Datenelement, das mit dem ersten Ausführungskanal
(CH0) verknüpft
ist, sowohl das Byte 3 als auch 4r von R2. Es sei angemerkt, daß der horizontale
Schritt dieses Bereiches Eins ist. Zusätzlich zu Datenelementen vom
Typ Byte und Wort können
Ausführungsformen
mit anderen Typen für
die Datenelemente (z.B. Bit oder Elemente vom Fließtyp) verknüpft werden.
-
10 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen,
welche einen „vertikalen
Schritt" umfaßt. Der
vertikale Schritt könnte
zum Beispiel eine Zeilenversetzung zwischen allen Zeilen der von
Datenelemente in einer Registerdatei 1020 anzeigen. Wie
in 9 hat die Registerdatei 1020 acht Register
(R0 bis R7) mit sechzehn Byte, und der Bereich beginnt bei R2.3.
Die Ausführungsgröße ist acht
Kanäle,
und die Breite des Bereichs ist vier Einzelwort-Datenelemente (was
eine Zeilenhöhe
von Zwei für
den Bereich mit sich führt).
In diesem Fall jedoch ist ein vertikaler Schritt von Zwei beschrieben
worden. Als ein Ergebnis wird jedes Datenelement in einer Spalte
von seinen benachbarten Datenelementen in der Spalte um zwei Register
versetzt. Zum Beispiel befindet sich das Datenelement, das mit Kanal
3 der Ausführungsmaschine
verknüpft
ist, in den Bytes 9 und 10 von R2, und das Datenelement, das mit
dem Kanal 7 verknüpft
ist, befindet sich in den Bytes 9 und 10 von R4. Wie bei dem horizontalen
Schritt ist der beschriebene Bereich in der Registerdatei 1020 diskontinuierlich.
Man bemerke, daß wenn
ein vertikaler Schritt von Eins beschrieben ist, das Ergebnis eine
aneinandergrenzende 4 × 2-Anordnung
von Wörtern
sein würde,
beginnend bei R2.3 in der zweidimensionalen Karte der Registerdatei 1020.
-
Der
Bereich, der in 10 beschrieben ist, könnte mit
einem Quellenoperanden verbunden sein, wobei in diesem Fall Daten
aus den nicht aneinandergrenzenden Bereichen gesammelt werden können, wenn ein
Befehl ausgeführt
wird. Der Bereich, der in 10 beschrieben
ist, kann auch mit einem Zieloperanden verbunden sein, wobei in
diesem Fall die Ergebnisse über
die nicht aneinandergrenzenden Gebiete gestreut werden können, wenn
ein Befehl ausgeführt
wird. Gemäß einigen
Ausführungsformen
könnte
ein vertikaler Schritt als eine Spaltenversetzung der Datenelemente
zwischen Zeilen von Datenelementen beschrieben werden (z.B. wie
es in bezug auf 14 beschrieben ist). Man bemerke
auch, daß ein
vertikaler Schritt kleiner als, größer als oder gleich einem horizontalen
Schritt sein könnte.
-
11 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen,
die einen vertikalen Schritt „Null" umfaßt. Wie
bei den 9 und 10 ist
der Bereich für
acht Einzelwort-Datenelemente und ist vier Wörter breit (und daher zwei
Datenelemente hoch). Da jedoch der vertikale Schritt Null ist, bilden sich
beide Elemente in der ersten Spalte auf denselben Ort in der Registerdatei 1130 ab
(z.B. sind sie voneinander um Null versetzt). Als ein Ergebnis wird
das Wort in den Bytes 3–4
von R2 für
diese beiden Ausführungskanäle (z.B.
Kanäle
0 und 4) repliziert. Wenn der Bereich mit einem Quellenoperanden
eines „Vergleiche"-Befehls verbunden
ist, würde
zum Beispiel bei beiden Ausführungskanälen derselbe
Wert verwendet werden. In ähnlicher
Weise wird das Wort in den Bytes 5–6 von R2 für die Kanäle 1 und 5 der SIMD-Ausführungsmaschine repliziert
usw. Zusätzlich
kann der Wert eines vertikalen Schritts in einem Befehl codiert
sein, und gemäß einigen
Ausführungsformen
kann ein negativer vertikaler Schritt beschrieben werden.
-
Gemäß einigen
Ausführungsformen
könnte
ein vertikaler Schritt als eine Anzahl von Datenelementen in einer
Registerdatei (anstatt einer Anzahl von Registerzeilen) definiert
werden. Zum Beispiel veranschaulicht 12 eine
Bereichsbeschreibung gemäß einigen
Ausführungsformen
mit einem vertikalen Schritt von einem Datenelement (einem Wort).
Somit weist die erste „Zeile" der Anordnung, die
durch den Bereich definiert ist, vier Wörter von R2.3 bis R2.10 auf.
Die zweite Zeile ist um ein einziges Wort versetzt und überspannt
R2.5 bis R2.12. Eine solche Implementierung könnte zum Beispiel mit einem
gleitenden Fenster für
eine Filteroperation verbunden sein.
-
13 veranschaulicht
eine Bereichsbeschreibung gemäß einigen
Ausführungsformen,
bei der sowohl der horizontale als auch der vertikale Schritt Null
sind. Als ein Ergebnis werden alle acht Ausführungskanäle auf einen einzigen Ort in
der Registerdatei 1320 (z.B. die Bytes 3–4 von R2)
abgebildet. Wenn der Bereich einem Maschinencodebefehl zugewiesen
wird, kann daher der einzelne Wert in den Bytes 3–4 von R2
von allen acht Ausführungskanälen verwendet
werden.
-
Es
sei angemerkt, daß unterschiedliche
Typen der Beschreibungen für
unterschiedliche Befehle zur Verfügung gestellt werden können. Zum
Beispiel kann ein erster Befehl einen Zielbereich als eine 4 × 4-Anordnung
definieren, während
der nächste
Befehl einen Bereich als eine 1 × 16-Anordnung definiert. Darüberhinaus
können
unterschiedliche Typen von Bereichen für einen einzelnen Befehl geschrieben
werden.
-
Man
betrachte zum Beispiel die Registerdatei 1420, die in 14 veranschaulicht
ist, welche acht Register mit zweiunddreißig Byte hat (R0 bis R7, jeweils
mit 256 Bit). Man bemerke, daß bei
dieser Veranschaulichung jedes Register so gezeigt ist, daß es zwei „Zeilen" hat, und Beispielwerte
sind an jedem Ort eines Bereiches gezeigt.
-
In
diesem Beispiel werden Bereiche für einen Operanden innerhalb
eines Befehls wie folgt beschrieben:
RegDatei RegNum.TeilRegNum<VertSchritt; Breite,
HorzSchritt>:Typ
wobei
RegDatei den Namensraum für
die Registerdatei 1420 identifiziert, RegNum auf eine Register
in der Registerdatei 1420 zeigt (z.B. R0 bis R7), TeilRegNum
eine Byte-Versetzung vom Beginn des Registers 1, VertSchritt einen
vertikalen Schritt beschreibt, Breite die Breite des Bereichs beschreibt,
HorzSchritt einen horizontalen Schritt beschreibt und Typ die Größe jedes
Datenelementes angibt (z.B. „b" für ein Byte
große
und „w" für ein Wort
große
Datenelemente). Gemäß einigen
Ausführungsformen
kann TeilRegNum als eine Anzahl von Datenelementen (anstelle einer
Anzahl von Bytes) beschrieben werden. In ähnlicher Weise könnten VertSchritt,
Breite und HorzSchritt als eine Anzahl von Bytes (anstatt eine Anzahl
von Datenelementen) beschrieben werden.
-
14 veranschaulicht
einen Addierbefehl im Maschinencode, der von acht Kanälen einer
SIMD-Ausführungsmaschine
ausgeführt
wird. Insbesondere wird jedes der acht Bytes, die durch R2.17 < 16; 2, 1 > b (QUELLE1) beschrieben
werden, zu jedem der acht Bytes addiert, die durch R1.14 < 16; 4, 0>: b (QUELLE0) beschrieben
werden. Die acht Ergebnisse werden in jedem der acht Wörter gespeichert,
die durch R5.3 < 18; 4,
3 >: w (ZIEL) beschrieben
werden.
-
QUELLE1
ist zwei Byte breit und daher vier Datenelemente hoch und beginnt
beim Byte 17 von R2 (veranschaulicht in 14 als
das zweite Byte der zweiten Zeile von R2). Der horizontale Schritt
ist Eins. Wird der vertikale Schritt als eine Anzahl von Spalten
aus Datenelementen beschrieben, die eine Zeile des Bereiches von
einer benachbarten Zeile trennen (im Gegensatz zu einer Zeilenversetzung
zwischen Zeilen, wie es in bezug auf 2 diskutiert
worden ist). Das heißt,
der Beginn einer Zeile ist von dem Beginn der nächsten Zeile des Be reichs um
sechzehn Byte versetzt. Insbesondere beginnt die erste Zeile bei
R2.17 und die zweite Zeile des Bereichs beginnt bei R3.1 (wobei
von links nach rechts gezählt
wird, beginnend bei R2.17, und überlaufend
zu dem nächsten
Register, wenn das Ende von R2 erreicht ist). In ähnlicher
Weise beginnt die dritte Zeile bei R3.17.
-
QUELLE0
ist vier Byte breit und daher zwei Datenelemente hoch und beginnt
bei R1.14. Da der horizontale Schritt Null ist, bildet sich der
Wert am Ort R1.14 (z.B. „2", wie in 14 veranschaulicht)
auf die ersten vier Ausführungskanäle ab, und
der Wert am Ort R1.30 (basierend auf dem vertikalen Schritt 16)
bildet sich auf die nächsten
vier Ausführungskanäle ab.
-
ZIEL
ist vier Wörter
breit und daher zwei Datenelemente hoch und beginnt bei R5.3. Der
Ausführungskanal
wird den Wert „1" (das erste Datenelement
des Bereichs QUELLE0) zu dem Wert „2" (das Datenelemente des Bereichs QUELLE1,
das von den ersten vier Ausführungskanälen verwendet
wird) abbilden, und das Ergebnis „3" wird in die Bytes 3 und 4 von R5 gespeichert
(das erste wortgroße
Datenelement des ZIEL-Bereichs).
-
Der
horizontale Schritt von ZIEL ist drei Datenelemente, so daß das nächste Datenelement
das Wort ist, das beim Byte 9 von R5 beginnt (z.B. vom Byte 3 drei
Wörter
versetzt), das Element danach beginnt beim Byte 15 von R5 (zerschnitten über zwei
Zeilen in 14 gezeigt), und das letzte
Element in der ersten Zeile des ZIEL-Bereichs beginnt beim Byte
21 von R5.
-
Der
vertikale Schritt von ZIEL beträgt
achtzehn Datenelemente, so daß das
erste Datenelement der zweiten „Zeile" der ZIEL-Anordnung beim Byte 7 von
R6 beginnt. Das Ergebnis, das an diesem ZIEL-Ort gespeichert ist,
ist „6", was die „3" aus dem fünften Datenelement
des Bereichs QUELLE0 darstellt, die zu der „3" aus dem Bereich QUELLE1 addiert ist,
was für
die Ausführungskanäle 4 bis
7 gilt.
-
Da
auf Information in den Registerdateien in effizienter Weise und
flexibel auf unterschiedlichen Wegen zugegriffen werden kann, kann
die Leistung eines Systems verbessert werden. Zum Beispiel können Maschinencodebefehle
in effektiver Weise in Verbindung mit einem replizierten Skalar,
einem Vektor aus einem replizierten Skalar, einem replizierten Vektor,
einer zweidimensionalen Anordnung, einem gleitenden Fenster und/oder
einer verwandten Liste eindimensionaler Anordnungen verwendet werden.
Als ein Ergebnis können die
Menge der Datenbewegungen, das Packen, Entpacken und/oder Shuffling-Befehle
verringert werden – was
die Leistung einer Anwendung oder eines Algorithmus verbessern kann,
so wie eines, der mit einem Medienkern verbunden ist.
-
Es
sei angemerkt, daß den
Bereichsbeschreibungen in manchen Fällen Einschränkungen
auferlegt werden können.
Zum Beispiel kann der Ursprung eines Teilregisters und/oder ein
vertikaler Schritt für
Quellenoperanden erlaubt sein, jedoch nicht für Zieloperanden. Darüberhinaus
könnten
physikalische Eigenschaften einer Registerdatei Bereichsbeschreibungen
beschränken.
Zum Beispiel könnte
eine relativ große
Registerdatei implementiert werden, indem eingebettete Speicher
mit wahlfreiem Zugriff (RAM – Random
Access Memory) verwendet werden, und die Kosten und die Leistung,
die mit dem eingebetteten RAM verknüpft sind, könnten von der Anzahl von Lese-
und Schreib-Ports abhängen,
die zur Verfügung
gestellt werden. Somit könnte die
Anzahl der Lese- und Schreibpunkte (und die Anordnung der Register
in dem RAM) die Bereichsbeschreibungen beschränken.
-
15 ist
ein Blockschaubild eines Systems 1500 gemäß einigen
Ausführungsformen.
Das System 1500 könnte
zum Beispiel mit einem Mediumprozessor verknüpft sein, der dazu ausgelegt
ist, digitale Fernsehsignale aufzuzeichnen und/oder abzuspielen.
Das System 1500 umfaßt
einen Prozessor 1510, der eine SIMD-Ausführungsmaschine 1520 für n Operanden
gemäß irgendeiner
der hierin beschriebenen Ausführungsformen
hat. Zum Beispiel könnte
die SIMD-Ausführungsmaschine 1520 eine
Registerdatei und eine Befehlsabbildemaschine umfassen, um Operanden
auf einen dynamischen Bereich der Registerdatei, der durch einen
Be fehl definiert ist, abzubilden. Der Prozessor 1500 kann
zum Beispiel mit einem Universalprozessor, einem Digitalsignalprozessor,
einem Medienprozessor, einem Graphikprozessor oder einem Kommunikationsprozessor
verknüpft
sein.
-
Das
System 1500 kann auch eine Befehlsspeichereinheit 1530 umfassen,
um SIMD-Befehle zu speichern, und eine Datenspeichereinheit 1540,
um Daten zu speichern (z.B. Skalare und Vektoren, die mit einem zweidimensionalen
Bild, einem dreidimensionalen Bild und/oder einem sich bewegenden
Bild verknüpft
sind). Die Befehlsspeichereinheit 1530 und die Datenspeichereinheit 1540 können zum
Beispiel RAM-Einheiten aufweisen. Es sei angemerkt, daß die Befehlsspeichereinheit 1530 und/oder
die Datenspeichereinheit 1540 mit getrennten Befehls- und
Daten-Cache-Speichern verknüpft
sein könnten,
einem gemeinsam genutzten Befehls- und Daten-Cache-Speicher, getrennten
Befehls- und Daten-Speichern, hinterlegt durch einen gemeinsam genutzten
Cache-Speicher hinterlegt sind, oder irgendeiner anderen Cache-Hierarchie. Gemäß einigen Ausführungsformen
umfaßt
das System 1500 ein Festplattenlaufwerk (z.B. um Medieninformation
zu speichern und zur Verfügung
zu stellen) und/oder einen nicht flüchtigen Speicher, so wie einen
Flash-Speicher (z.B. um Befehle und Daten zu speichern und zur Verfügung zu
stellen).
-
Das
Folgende veranschaulicht verschiedene zusätzliche Ausführungsformen.
Diese bilden keine Definition aller möglichen Ausführungsformen,
und die Fachleute werden verstehen, daß viele weitere Ausführungsformen
möglich
sind. Weiter, obwohl die folgenden Ausführungsformen aus Gründen der
Klarheit kurz beschrieben sind, werden die Fachleute verstehen,
wie irgendwelche Änderungen,
falls nötig,
an der obigen Beschreibung vorgenommen werden, um diese und andere
Ausführungsformen
und Anwendungen abzudecken.
-
Obwohl
verschiedene Wege des Beschreibens von Quellen- und/oder Zieloperanden
diskutiert worden sind, sei angemerkt, daß Ausführungsformen irgendeine Untermenge
oder Kombination solcher Beschreibungen verwenden können. Zum
Beispiel dürfte
ein Quellenoperand einen vertikalen Schritt haben, während ein
vertikaler Schritt für
einen Zieloperanden nicht erlaubt wäre.
-
Es
sei angemerkt, daß Ausführungsformen
in irgendeiner einer Anzahl unterschiedlicher Wege implementiert
werden können.
Zum Beispiel könnte
der folgende Code die Adressen von Datenelementen berechnen, die
Ausführungskanälen zugewiesen
werden, wenn das Zielregister mit einer Registergrenze mit 256 Bit ausgerichtet
ist:
-
Gemäß einigen
Ausführungsformen
wird ein Registerbereich in einem Befehlswort für jeden der Operanden des Befehls
codiert. Zum Beispiel können
die Registerzahl und die Teilregisterzahl des Ursprungs codiert
werden. In manchen Fällen
kann der Wert in dem Befehlswort bezüglich der tatsächlichen
Beschreibung einen unterschiedlichen Wert darstellen. Zum Beispiel
könnten
drei Bit verwendet werden, um die Breite eines Bereiches zu codieren,
und „011" könnte eine
Breite von acht Elementen darstellen, während „100" eine Breite von sech zehn Elementen
darstellt. Auf diese Weise könnte
ein breiterer Bereich von Beschreibungen verfügbar sein, verglichen mit dem,
daß einfach
der tatsächliche
Wert der Beschreibung in dem Befehlswort codiert würde.
-
Darüberhinaus
sind einige Ausführungsformen
in bezug auf eine SIMD-Ausführungsmaschine
beschrieben worden. Es sei jedoch angemerkt, daß diese Ausführungsformen
anderen Typen von Ausführungsmaschinen
zugewiesen sein können,
so wie Mehrfachbefehl-Mehrfachdaten
(MIMD – Multiple
Instruction, Multiple Data)-Ausführungsmaschinen.
-
Die
hierin beschriebenen mehreren Ausführungsformen dienen lediglich
dem Zwecke der Veranschaulichung. Fachleute werden aus dieser Beschreibung
erkennen, daß weitere
Ausführungsformen
in die Praxis umgesetzt werden können,
mit Modifikationen und Änderungen,
die nur durch die Ansprüche
beschränkt
sind.
-
Zusammenfassung
-
Gemäß einigen
Ausführungsformen
kann ein dynamischer Bereich in einer Registerdatei für einen Operanden
beschrieben werden. Der beschriebene Bereich kann zum Beispiel mehrere
Datenelemente speichern, wobei jedes Datenelement mit einem Ausführungskanal
einer Ausführungsmaschine
verknüpft
ist. Information kann dann in der Registerdatei gemäß dem beschriebenen
Bereich gespeichert und/oder aus dieser wiedergewonnen werden.