-
HINTERGRUND
-
Die vorliegende Erfindung betrifft allgemein das Gebiet von Matrizenberechnungen auf einem Computer und insbesondere das Durchführen von Matrizenberechnungen unter Verwendung von SIMD-Operationen (SMID = Single Instruction Multiple Data).
-
KURZDARSTELLUNG
-
Ausführungsformen der vorliegenden Erfindung offenbaren ein mittels Computer realisiertes Verfahren, Computerprogrammprodukt und System zum Realisieren eines 1-D-Schablonencodes über SIMD-Anweisungen auf einem Computer, der eine Mehrzahl von Vektorregistern mit jeweils einer Anzahl N von Verarbeitungselementen (Processing Elements, PEs) enthält, wobei die Mehrzahl von Vektorregistern eine Gruppe von Vektorregistern enthält, die zur Speicherung von Schablonenkoeffizienten verwendet werden, eine Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, und eine Gruppe von Vektorregistern, die zur Speicherung von Ergebnissen verwendet werden. Eine Anzahl M von geordneten Schablonenkoeffizienten wird empfangen. Schablonenkoeffizienten werden in M + N – 1 aufeinanderfolgende Koeffizientenvektorregister geladen, sodass die ersten PEs der ersten M Koeffizientenvektorregister die M Schablonenkoeffizienten in Reihe enthalten und die verbleibenden N – 1 PEs der ersten Koeffizientenvektorregister und die ersten PEs der N – 1 Koeffizientenvektorregister, die auf die ersten M Koeffizientenvektorregister folgen, Nullen enthalten. Nachfolgende PEs der M + N – 2 Koeffizientenvektorregister, die nach dem ersten Koeffizientenvektorregister folgen, enthalten den Wert, der in der vorhergehenden PE des vorhergehenden Koeffizientenvektorregisters gespeichert ist. Mindestens M + N – 1 Datenwerte werden empfangen. Bei aufeinanderfolgenden Gruppen von N aufeinanderfolgenden Datenwerten wird jeder Datenwert der Gruppe in alle PEs eines Datenvektorregisters geladen. In einem Ergebnisvektorregister wird eine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern kumuliert, die die aufeinanderfolgenden Datenwerte enthalten. Der Inhalt jedes Ergebnisvektorregisters, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält, wird ausgegeben, und das Ergebnisregister wird erneut zum Kumulieren verwendet.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1A ist eine Darstellung einer 1-D-Schablone gemäß einer Ausführungsform der vorliegenden Erfindung.
-
1B ist eine Darstellung einer 2-D-Schablone gemäß einer Ausführungsform der vorliegenden Erfindung.
-
2 veranschaulicht eine Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung.
-
3A zeigt eine Datenverarbeitungsumgebung gemäß einer Ausführungsform der vorliegenden Erfindung.
-
3B ist ein Blockschema eines Vektorregisters in der Datenverarbeitungsumgebung von 3A gemäß einer Ausführungsform der vorliegenden Erfindung.
-
4A veranschaulicht eine zweite Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung.
-
4B veranschaulicht eine dritte Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung.
-
5 veranschaulicht das Speichern von Blöcken, die in der Matrix von 4A vorliegen, in Vektorregistern gemäß einer Ausführungsform der vorliegenden Erfindung.
-
6 veranschaulicht das Kopieren und Replizieren einer Abfolge von Datenwerten in Vektorregister gemäß einer Ausführungsform der vorliegenden Erfindung.
-
7 veranschaulicht Koeffizientenvektorregister, Datenvektorregister und Rechte-Hand-Vektorregister für eine Schablonencodematrix-Vektor-Multiplikationsoperation gemäß einer Ausführungsform der vorliegenden Erfindung.
-
Die 8A und 8B sind ein Flussdiagramm, in dem die Operationsschritte einer Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung abgebildet sind.
-
Die 8C, 8D und 8F sind weitere Flussdiagramme, in denen die Operationsschritte einer Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung abgebildet sind.
-
Die 8C, 8E und 8F sind weitere Flussdiagramme, in denen die Operationsschritte einer Schablonencodematrix-Vektor-Multiplikation gemäß einer Ausführungsform der vorliegenden Erfindung abgebildet sind.
-
9 ist ein Funktionsblockschema, das eine Datenverarbeitungsumgebung gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Ausführungsformen der vorliegenden Erfindung sind auf das Verbessern der Geschwindigkeit und Funktionsfähigkeit von Schablonencodes in Datenverarbeitungsumgebungen gerichtet, die SIMD-Anweisungen über Vektorregister unterstützen.
-
Ein Raster ist eine Gruppe von Punkten, die normalerweise physische Positionen oder Zeiten darstellen, an denen eine Funktion abgetastet wird. Normalerweise weist ein Raster gleichmäßige Abstände auf, sodass die Rasterpunkte bei einer Dimension (1-D) als xi = a + iΔx geschrieben werden können, wobei xi der i-te Rasterpunkt ist, i die ganzzahlige Ordnungszahl des Rasterpunktes ist, a der Ursprungsrasterpunkt ist und Δx der Abstand bzw. das Intervall zwischen Rasterpunkten ist. Bei zwei Dimensionen (2-D) kann ein rechteckiges Raster von Punkten verwendet werden. In diesem Fall können die Rasterpunkte die Form (xi, yj) = (a – iΔx, b + jΔy)yj aufweisen, wobei yj ähnlich wie x1 oben definiert ist. Raster höherer Dimensionen können in einer analogen Weise definiert sein.
-
Bei vielen wissenschaftlichen Anwendungen, die physische Systeme modellieren, zum Beispiel seismische Bildgebung, können in einem festen Muster, das als Schablone bezeichnet wird, Operationen über jeden Rasterpunkt und seine benachbarten Punkte durchgeführt werden, um Ausgangswerte zu berechnen. Bei einer Schablonenoperation ist der an einem vorgegebenen Punkt einer Schablone berechnete Wert eine feststehende lineare Kombination der Werte an den Rasterpunkten der Schablone. Die Konstanten in dieser feststehenden linearen Kombination werden als Schablonenkoeffizienten bezeichnet. Ein Schablonencode besteht aus einer Abfolge von Schablonenoperationen mit normalerweise derselben Schablone und denselben Schablonenkoeffizienten. Beispielsweise wird, nachdem bei einem 1-D-Schablonencode eine Schablonenoperation durchgeführt wurde, die Schablone normalerweise zum nächsten Rasterpunkt verschoben, und die Operation wird erneut durchgeführt usw., bis alle interessierenden Rasterpunkte verarbeitet wurden. Normalerweise werden Schablonenoperationen nur an Rasterpunkten durchgeführt, bei denen die gesamte Schablone auf dem Raster liegt. In diesem Fall ist die Anzahl von Ausgangswerten um eins minus Anzahl der Schablonenkoeffizienten kleiner als die Angabe von Eingangswerten.
-
Beispielsweise können Finite-Differenzen-Schemata als Schablonencodes realisiert werden, um in 1-D angenäherte Ableitungen an gleichmäßig voneinander entfernten Punkten zu berechnen. Normalerweise sind die Schablonenkoeffizienten in diesem Fall symmetrisch: C
–j = C
j, j = 1, ..., K. In diesem Fall kann eine typische Schablonenoperation, die eine Ableitung f
(n) am Rasterpunkt x
i = a + iΔx berechnet, wie folgt formuliert werden:
wobei f
i-K, ..., f
i+K Werte einer Funktion f an Rasterpunkten x
i-K, ..., x
i+K darstellt.
-
Im Allgemeinen kann eine Schablonenoperation mit M Schablonenkoeffizienten
die auf eine Abfolge von Datenwerten
angewendet werden, ausgedrückt werden als
-
-
Wenn das Raster zwei oder mehr Dimensionen aufweist, kann eine mehrdimensionale Schablone genutzt werden. Zu Beispielen mehrdimensionaler Schablonen gehören eine Fünf-Punkt-Schablone, die üblicherweise verwendet wird, um die Laplace-Gleichung in 2-D zu diskretisieren, oder eine 25-Punkt-Schablone in 3-D, die bei der seismischen Bildgebung verwendet wird. Mehrdimensionale Schablonen können als Kombinationen von 1-D-Schablonen realisiert werden.
-
Die Anwendung eines 1-D-Schablonencodes kann als Matrix-Vektor-Multiplikation Au = b betrachtet werden, bei der jede Zeile in der Matrix A einer Schablonenoperation entspricht, wobei die Schablonenkoeffizienten als Einträge in der Zeile auftreten und Einträge in sonstigen Zeilen null sind. Jeder Eintrag bi im Ergebnisvektor bzw. Rechte-Hand-Vektor (Right-hand side vector, RHS-Vektor) b entspricht einem Ausgangswert, der erhalten wird, indem die Schablonenoperation, die durch die Zeile i von A angegeben ist, mit einer Abfolge von Datenwerten durchgeführt wird, die als Einträge in u auftreten. Bei typischen Beispielen ist die Matrix A, die einem 1-D-Schablonencode entspricht, eine obere Dreiecksmatrix mit Bändern und weist konstante Diagonalen auf. Für den Fachmann wird klar sein, dass das Darstellen eines Schablonencodes als Matrix-Vektor-Multiplikation lediglich eine begriffliche Hilfe ist, um die Aufgaben logisch zu organisieren, die beim Anwenden eines Schablonencodes auf eine Abfolge von Datenwerten durchgeführt werden; sie setzt keinerlei bestimmte physische Struktur der Daten voraus. Insbesondere müssen die Daten im Speicher nicht fortlaufend vorliegen oder ausgerichtet sein, können eine beliebige Breite aufweisen und können in beliebiger Reihenfolge gelesen werden.
-
Der Begriff Single Instruction Multiple Data (SIMD) bezeichnet eine Art der Parallelverarbeitung von Daten. SIMD-Anweisungen stellen eine Möglichkeit bereit, um eine Operation gleichzeitig an mehreren Datenwerten durchzuführen. Computer, die SIMD-Anweisungen unterstützen, weisen in der Regel mehrere Vektorregister auf, die jeweils zwei oder mehr Verarbeitungselemente (PEs) enthalten, die an den einzelnen Datenwerten, die in den PEs gespeichert sind, gleichzeitig dieselbe Operation durchführen. Beispielsweise könnte eine SIMD-Anweisung den Inhalt zweier Vektorregister multiplizieren, indem die einzelnen Datenwerte in entsprechenden PEs gleichzeitig miteinander multipliziert werden.
-
Im Folgenden werden Ausführungsformen der vorliegenden Erfindung unter Bezugnahme auf die beigefügten Zeichnungen ausführlich beschrieben.
-
1A ist eine Darstellung einer 1-D-Schablone
100 gemäß einer Ausführungsform der vorliegenden Erfindung. Die 1-D-Schablone
100 ist eine 5-Punkt-Schablone, die Rasterpunkte x – 2h
102 bis x + 2h
110 enthält, die mit dem Abstand h gleichmäßig voneinander entfernt sind. Die Schablone ist am Rasterpunkt x
106 zentriert. Die Rasterpunkte x – 2h
102 bis x + 2h
110 gehören zu jeweiligen Schablonenkoeffizienten C
–2, C
–1, C
0, C
1, C
2 (nicht dargestellt). In Verbindung mit den Schablonenkoeffizienten C
–2, C
–1, C
0, C
1, C
2, kann die 1-D-Schablone
100 verwendet werden, um eine Schablonenoperation durchzuführen. Beispielsweise kann die Schablonenoperation am Mittelpunkt x
106 gemäß der folgenden Formel einen neuen Wert berechnen:
wobei f(x – 2h), f(x – h), f(x), f(x + h) und f(x + 2) Datenwerte darstellen, die zu den Rasterpunkten x – 2h
102, x – h
104, x
106, x + h
108 bzw. x + 2h
110 gehören. Die Schablone kann anschließend zu einem benachbarten Rasterpunkt wie beispielsweise x + h
108 verschoben (d. h. auf diesen Rasterpunkt zentriert) werden, und die Schablonenoperation wird wiederholt. Wie oben erwähnt, kann die wiederholte Ausführung einer Schablonenoperation und Verschiebung der Schablone mit einer vorgegebenen Schablone und einer feststehenden Gruppe von Schablonenkoeffizienten als Schablonencode bezeichnet werden.
-
1B ist eine Darstellung einer 2-D-Schablone
112 gemäß einer Ausführungsform der vorliegenden Erfindung. Die 2-D-Schablone
112 ist eine 9-Punkt-Schablone, die analog zur 1-D-Schablone
100 von
1A definiert ist, die Rasterpunkte (x – 2Δx, y)
118 bis (x + 2Δx, y)
126 und (x, y – 2Δy)
114 bis (x, y + 2Δy)
130 enthält. Bei diesem Beispiel beträgt der Abstand zwischen Rasterpunkten in der x-Richtung Δx, der sich vom Abstand Δy in der y-Richtung unterscheiden kann. In Verbindung mit einer Gruppe von Schablonenkoeffizienten C
i,j, i, j = –2, –1, 0, 1, 2 kann die Schablone
112 verwendet werden, um eine 2-D-Schablonenoperation durchzuführen. Beispielsweise kann die Schablonenoperation am Mittelpunkt (x, y)
122 gemäß der folgenden Formel einen Wert berechnen:
wobei
Datenwerte darstellen, die zu den Rasterpunkten
-
Die auf der Schablone 112 beruhende Schablonenoperation kann unter Verwendung einer Kombination aus zwei 1-D-Schablonen, einer in der x-Richtung unter Einbeziehung der Rasterpunkte (x – 2Δx, y) 118, (x – Δx, y) 120, (x, y) 122, (x + Δx, y) 124 und (x + 2Δx, y) 126 und einer in der y-Richtung unter Einbeziehung der Rasterpunkte (x, y – 2Δy) 130, (x, y – Δy) 128, (x, y) 122, (x, y + Δy) 116 und (x, y + 2Δy) 114 realisiert werden. Im Allgemeinen können Schablonenoperationen höherer Dimensionen als Kombinationen von 1-D-Schablonen realisiert werden.
-
Wie oben erwähnt, kann die Anwendung eines 1-D-Schablonencodes als Matrix-Vektor-Multiplikation dargestellt werden. 2 veranschaulicht eine Matrix-Vektor-Multiplikation 200, die eine beispielhafte Realisierungsform eines 1-D-Schablonencodes darstellen kann. Die Schablonencodematrix-Vektor-Multiplikation 200 enthält eine Schablonencodematrix 202, einen Datenvektor u 210 mit Einträgen u0, u1, ... und einen Rechte-Hand-Vektor (RHS-Vektor) b 212 mit Einträgen b0, b1, .... Die erste Zeile 206 der Schablonencodematrix 202 enthält als Einträge Schablonenkoeffizienten C–2, C–1, C0, C1, C2 204 an den fünf am weitesten links stehenden Positionen, gefolgt von Nullen an den übrigen Zeilenpositionen. Jede folgende Zeile von 202 enthält dieselben Schablonenkoeffizienten 204, die in Bezug auf die vorherige Zeile um eine Spaltenposition nach rechts verschoben sind, wobei alle sonstigen Einträge null sind. Zum Beispiel weist die zweite Zeile 208 der Schablonencodematrix 202 die Einträge 0, C–2, C–1, C0, C1, C2, auf, gefolgt von Nullen. Der RHS-Vektor b 212 ist das Ergebnis des Multiplizierens des Datenvektors u 210 mit der Schablonencodematrix 202. Jedes Element des RHS-Vektors b 212 ist gleich dem inneren Produkt der entsprechenden Zeile der Schablonencodematrix 202 mit dem Datenvektor u 210.
-
Der RHS-Vektor b
212 von
2 stellt das Ergebnis des Anwendens eines Schablonencodes mit Schablonenkoeffizienten C
–2, C
–1, C
0, C
1, C
2 204 auf aufeinanderfolgende Datenwerte u
0, u
1, ... dar, die als Elemente im Datenvektor u
210 vorkommen. Beispielsweise ist unter Bezugnahme auf die Zeile
206 in der Schablonencodematrix
202 der Wert b
0 an der ersten Position des RHS-Vektors b
212 gemäß den Standardregeln der Matrix-Vektor-Multiplikation gleich C
–2u
0, C
–1u
1, C
0u
2, C
1u
3, C
2u
4. Die Datenwerte u
5, u
6, ..., die mit Nullen in der Zeile
206 multipliziert werden, tragen nichts zu b
0 bei und können außer Acht gelassen werden. Zeile
208 entspricht dem Anwenden der Schablonenoperation nach dem Verschieben der Schablone auf den nächsten Rasterpunkt und ergibt
-
Wie oben erwähnt, ist bei der Standarddarstellung eines allgemeinen Matrix-Vektor-Produktes jedes Element des RHS-Vektors ein inneres Produkt einer Zeile der Matrix mit dem Datenvektor. Bei einer alternativen Darstellung der Matrix-Vektor-Multiplikation wird die Formulierung des äußeren Produkts des Matrix-Vektor-Produkts Au = b im Gegensatz zum Berechnen jedes Elements b
i von b als inneres Produkt aus der Zeile i der Matrix A mit u, b gemäß der folgenden Gleichung als lineare Kombination von Spalten von A berechnet, skaliert durch Elemente von u:
wobei u
0, u
1, ... die aufeinanderfolgenden Elemente von u und A
0, A
1, ... die aufeinanderfolgenden Elemente von A sind.
-
3A ist ein Funktionsblockschema einer beispielhaften Datenverarbeitungsumgebung 300, in der die vorliegende Erfindung realisiert werden kann. Die Datenverarbeitungsumgebung 300 enthält eine Datenverarbeitungseinheit 302, die ferner einen Speicher 304, eine Vektor-Lade-/Speichereinheit 306, ein Array aus zwei oder mehr Vektorregistern 308 und Gleitkommaeinheiten (Floating Point Units, FPUs) 310 enthält. Die Datenverarbeitungseinheit 302 kann gemäß einer Ausführungsform der Erfindung zum Beispiel ein Notebook-Computer, ein Tablet-Computer, ein Netbook-Computer, ein Personal Computer (PC) oder ein Desktop-Computer sein. Eine Datenverarbeitungseinheit 302 kann allgemein eine beliebige programmierbare elektronische Einheit sein, die in der Lage ist, eine Funktionalität zu unterstützen, die von einer oder mehreren Ausführungsformen der Erfindung benötigt wird. Eine Datenverarbeitungseinheit 302 kann interne oder externe Hardwarekomponenten enthalten, die in 9 abgebildet sind und nachstehend unter Bezugnahme auf diese Figur ausführlicher beschrieben werden.
-
3B stellt ein typisches Vektorregister 312 bildlich dar, das im Vektorregisterarray 308 enthalten sein kann. Normalerweise enthält das Vektorregisterarray 308 eine Mehrzahl von Vektorregistern 312. Ein Vektorregister 312 enthält zwei oder mehr Verarbeitungselemente (PEs) 314. Bei diesem Beispiel enthält das Vektorregister 312 vier PEs 314. Jede PE 314 kann normalerweise einen Gleitkommawert (32 Bit) oder einen Wert mit doppelter Genauigkeit (64 Bit) speichern.
-
Bei einer beispielhaften Ausführungsform kann das Vektorregisterarray 308 zusammen mit den FPUs 310 SIMD-Anweisungen realisieren. Beispielsweise kann die Vektor-Lade-/Speichereinheit 306 Datenwerte aus dem Speicher 304 zeitgleich in alle PEs 314 eines Vektorregisters 312 laden. Die FPUs 310 können anschließend dieselbe Operation an allen Datenwerten in den PEs 314 des Vektorregisters 312 gleichzeitig durchführen.
-
Gemäß einer Ausführungsform der vorliegenden Erfindung führen ein System und ein Verfahren die Schablonencodematrix-Vektor-Multiplikation 200 wirksam durch, die die Anwendung eines auf der Schablone 100 beruhenden Schablonencodes in der Datenverarbeitungsumgebung 300 über SIMD-Operationen verkörpert, die das Vektorregisterarray 308 nutzen.
-
Wie erwähnt, können SIMD-Anweisungen gleichzeitig an allen PEs 314 in einem oder mehreren Vektorregistern 312 im Vektorregisterarray 308 Operationen durchführen. Bei einer beispielhaften Ausführungsform der Erfindung könnte eine SIMD-Anweisung ein Vektorregister 312 laden, indem Datenwerte gleichzeitig in seine vier PEs 314 geladen werden. Ein bestimmtes Beispiel, das mit vec_splat bezeichnet ist, lädt und repliziert einen einzelnen Wert in alle vier PEs 314 eines Vektorregisters. Eine weitere beispielhafte SIMD-Anweisung, die mit vec_mul bezeichnet ist, multipliziert zwei Vektorregister im Vektorregisterarray 308 miteinander, indem die Inhalte ihrer vier PEs elementweise gleichzeitig multipliziert werden. In ähnlicher Weise multipliziert eine SIMD-Anweisung, die mit vec_madd bezeichnet ist, die Inhalte der zwei Vektorregister im Vektorregisterarray 308 wie bei vec_mul und addiert das Ergebnis elementweise zum Inhalt eines dritten Vektorregisters im Vektorregisterarray 308.
-
4A stellt die Schablonencodematrix-Vektor-Multiplikation 200 wie in Bezug auf 2 beschrieben dar und enthält ferner B1 400, B2 402, eine Blockspalte 0 404 und eine Blockspalte 0 406. Gemäß einer Ausführungsform der Erfindung, bei der die Vektorregister 312 vier PEs 314 aufweisen (siehe 3), ist die Schablonencodematrix 202 in Blöcke der Größe 4 × 4 aufgeteilt, wie zum Beispiel B1 400 und B2 402, während der Datenvektor u 210 und der RHS-Vektor b 212 in Segmente der Länge 4 unterteilt sind, wie zum Beispiel S0 408. Bei dieser beispielhaften Ausführungsform weist die Schablonencodematrix 202 konstante Blockdiagonalen auf, die Kopien von lediglich zwei unterschiedlichen von null verschiedenen Blöcken B1 400, B2 402 zeigen, die in einem feststehenden Muster auf der Matrixdiagonalen wiederholt werden. Jede aufeinanderfolgende Gruppe aus vier Spalten und vier Zeilen wird als Blockspalte bzw. Blockzeile bezeichnet. Zum Beispiel sind die Spalten 0 bis 3 der Schablonencodematrix 202 als Blockspalte 0 404 bezeichnet; die Spalten 4 bis 7 bilden eine Blockspalte 1 usw. In ähnlicher Weise bilden die Zeilen 0 bis 3 der Schablonencodematrix 202 eine Blockzeile 0 406, die Zeilen 4 bis 7 bilden eine Blockzeile 1 usw. Jeder Block entspricht einem Segment von b 212. Beispielsweise entspricht die Blockzeile 0 406 dem Segment S0 408. Der Schnittpunkt einer beliebigen Blockspalte, zum Beispiel der Blockspalte 0 404, mit einer beliebigen Blockzeile, zum Beispiel der Blockzeile 0 406, besteht aus einem einzelnen 4 × 4-Block, der entweder null oder eine Kopie von B1 400, B2 402 ist. Bei diesem Beispiel enthält die Anfangsblockspalte nur einen der beiden unterschiedlichen von null verschiedenen Blöcke B1 400, B2 402 wie auch die Endblockspalte, während die beiden Zwischenblockspalten jeweils beide der von null verschiedenen Blöcke enthalten.
-
Bei anderen Ausführungsformen können Schablonen eine größere Anzahl von Schablonenkoeffizienten aufweisen, und Vektorregister im Vektorregisterarray
308 (
3) können mehr oder weniger als vier PEs
314 pro Vektorregister
312 aufweisen. Wenn eine Schablone M Schablonenkoeffizienten aufweist und N PEs pro Vektorregister vorliegen, beträgt die Anzahl unterschiedlicher von null verschiedener Blöcke, in die die Schablonencodematrix
202 von
2 aufgeteilt werden kann, im Allgemeinen
wobei die kleinste Ganzzahl nicht kleiner als
M + N – 1 / N ist. Wie oben erwähnt, ist die Anzahl von Ausgangswerten im Allgemeinen die Anzahl von Datenwerten minus M – 1. Das heißt, dass die Schablonencodematrix
202 M – 1 weniger Zeilen als Spalten aufweist.
-
Beispielsweise stellt die 4B die Schablonencodematrix-Vektor-Multiplikation 200 (2) bei einer alternativen Ausführungsform dar, bei der Vektorregister im Vektorregisterarray 308 (3) jeweils zwei PEs aufweisen. In diesem Fall ist die Schablonencodematrix 202 in Blöcke der Größe 2 × 2 aufgeteilt, von denen die von null verschiedenen Blöcke Kopien der drei Blöcke B1 410, B2 412 und B3 414 sind, während der Datenvektor u 210 und der RHS-Vektor b 212 in Segmente der Länge 2 unterteilt sind, wie zum Beispiel S0 420. Bei derartigen Ausführungsformen kann die Schablonencodematrix 202 mehrere Anfangs- und Endblockspalten aufweisen, die weniger als die volle Anzahl unterschiedlicher von null verschiedener Blöcke enthalten, und es können erheblich mehr Zwischenblockspalten vorliegen, die Kopien aller unterschiedlichen von null verschiedenen Blöcke enthalten. Zum Beispiel weist die Schablonencodematrix 202 in 4B zwei Anfangs- und zwei Endblockspalten auf, die jeweils einen oder zwei von null verschiedene Blöcke und vier Zwischenblockspalten enthalten. Die erste Blockspalte, Blockspalte 0 416, ist eine Anfangsblockspalte mit einem von null verschiedenen Block, der eine Kopie von B1 410 ist; die nächste Blockspalte enthält eine Kopie von B2 412 und B1 410; die vorletzte Blockspalte enthält eine Kopie von B2 412 und B3 414; und die letzte Spalte enthält einen von null verschiedenen Bock, eine Kopie von B3 414. In 4B enthält darüber hinaus jede Blockzeile der Schablonencodematrix 202, zum Beispiel eine Blockzeile 0 418, drei von null verschiedene Blöcke, die Kopien von B1 410, B2 412 oder B3 414 sind, wobei B1 der erste von null verschiedene Block in der Zeile ist und B3 der letzte von null verschiedene Block in der Zeile ist. Der von null verschiedene Block B2 412 ist weder der erste noch der letzte von null verschiedene Block in einer Blockzeile.
-
Bei einigen Ausführungsformen der Erfindung kann die Anzahl von Zeilen oder Spalten in der Schablonencodematrix 202 nicht gleichmäßig durch die Anzahl von PEs 314 teilbar sein. In diesem Fall kann das oben beschriebene Aufteilen der Schablonencodematrix 202 zu einer letzten Teilblockzeile oder Teilblockspalte führen, die Blöcke enthält, in denen eine oder mehrere Zeilen bzw. Spalten fehlen. Außerdem können einige von null verschiedene Blöcke eine oder mehrere Spalten mit Nullen enthalten.
-
5 veranschaulicht, wie die in Bezug auf 2 beschriebene Schablonencodematrix 202 gemäß einer beispielhaften Ausführungsform zum Zweck der Schablonencodematrix-Vektor-Multiplikation kompakt in Vektorregistern gespeichert werden kann. Bei der in 4A veranschaulichten Ausführungsform enthält die Schablonencodematrix 202 nur Nullen und Kopien von zwei unterschiedlichen von null verschiedenen Blöcken B1 400 und B2 402, die auch in 5 dargestellt sind. Da Null-Blöcke keine Auswirkung auf die Matrix-Vektor-Multiplikation haben, müssen nur von null verschiedene Blöcke gespeichert werden. Wie in 5 veranschaulicht, werden acht Vektorregister CR0 bis CR7 510 bis 516 und 526 bis 532 verwendet, um Schablonenkoeffizienten 204 zu speichern. Beispielsweise enthält das Vektorregister CR4 526 die Schablonenkoeffizienten C2, C1, C0, C–1, die in der ersten Spalte 518 des Blocks B2 402 stehen, in entsprechenden PEs von CR4; und das Vektorregister CR5 528 enthält null und die Schablonenkoeffizienten C2, C1, C0, die in der zweiten Spalte 520 des Blocks B2 402 stehen, in entsprechenden PEs von CR5. Die Spalten 502 bis 508 des Blocks B1 400 werden in den Koeffizientenvektorregistern CR0 bis CR1 510 bis 516 gespeichert, zum Beispiel über SIMD-Vektorladeanweisungen, und die Spalten 518 bis 524 des Blocks B2 402 werden in den Koeffizientenvektorregistern CR4 bis CR7 526 bis 532 gespeichert. Es müssen nur unterschiedliche von null verschiedene Spalten der Blöcke in den Koeffizientenvektorregistern gespeichert werden, und es muss während der Schablonencodematrix-Vektor-Multiplikation kein weiteres Laden oder Speichern von Schablonenkoeffizienten stattfinden.
-
Wenn eine Schablone M Schablonenkoeffizienten aufweist und N PEs pro Vektorregister vorliegen, reichen im Allgemeinen M + N – 1 Koeffizientenvektorregister unter Umständen aus, um die unterschiedlichen von null verschiedenen Spalten der von null verschiedenen Blöcke in der Schablonencodematrix 202 (2) zum Zweck der Schablonencodematrix-Vektor-Multiplikation zu speichern. Zum Beispiel können in 4B bei fünf Schablonenkoeffizienten und zwei PEs pro Vektorregister die unterschiedlichen von null verschiedenen Spalten der von null verschiedenen Blöcke der Schablonencodematrix 202 in sechs Koeffizientenvektorregistern gespeichert werden.
-
Bei anderen Ausführungsformen, bei denen die Schablonencodematrix unter Umständen nicht die Struktur der Schablonencodematrix 202 mit sich wiederholenden Blöcken zeigt, die in 4A dargestellt ist, kann die Schablonencodematrix zum Zweck der Schablonencodematrix-Vektor-Multiplikation in Vektorregistern gespeichert werden, indem jede eindeutige von null verschiedene Spalte in ein getrenntes Koeffizientenvektorregister gespeichert wird, die in einer Blockzeile der Schablonencodematrix steht.
-
6 veranschaulicht die Art, in der gemäß einer Ausführungsform der Erfindung, bei der die Vektorregister
312 jeweils vier PEs
314 (siehe
3) enthalten, eine Abfolge von Datenwerten zum Zweck der Schablonencodematrix-Vektor-Multiplikation in eine Gruppe von Vektorregistern kopiert werden kann. Dies kann durchgeführt werden, um die eine Multiplikation mit Schablonenkoeffizienten zu ermöglichen, die wie in Bezug auf
5 beschrieben in Koeffizientenvektorregister geladen wurden. Das Kopieren kann durch die oben beschriebene SIMD-Anweisung vec_splat durchgeführt werden. Zu jedem Index k = 0, 1, ..., wird ein Element
640 des Datenvektors u
210 (
2) in jede der vier PEs eines ersten Datenvektorregisters DR
0 648 kopiert. Ein Element
42 wird in jede der PEs eines zweiten Datenvektorregisters DR
1 650 kopiert. In ähnlicher Weise werden Elemente
kopiert.
6 zeigt das Ergebnis des Kopierens der ersten vier Datenwerte u
0, ... u
3, die k = 0 entsprechen, in vier Datenvektorregister
648 bis
654 über via vec_splat.
-
7 veranschaulicht eine Anordnung von Vektorregistern 700, die ausreichen, um die Operationen der Schablonencodematrix-Vektor-Multiplikation 200 (2) bei einer beispielhaften Ausführungsform der Erfindung durchzuführen. Wie in 7 dargestellt, wurden Schablonenkoeffizienten C–2 bis C2 gemäß den in Bezug auf 5 beschriebenen Vektoroperationen, bei denen die Spalten des Blocks B1 400 (4A) in den Koeffizientenvektorregistern CR0 bis CR3 510 bis 516 gespeichert werden und die Spalten des Blocks B2 402 in den Koeffizientenvektorregistern CR4 bis CR7 526 bis 532 gespeichert werden, in acht Koeffizientenvektorregistern CR0 bis CR7 510 bis 516 und 526 bis 532 geladen. Die ersten vier Datenwerte u0, u1, u2, u3 des Datenvektors 210 wurden gemäß den in Bezug auf 6 beschriebenen Vektoroperationen geladen und in jede PE in vier Datenvektorregister DR0 bis DR3 648 bis 654 repliziert. Zwei Ergebnisvektorregister bzw. Rechte-Hand-Vektorregister (RHS-Vektorregister) RR0 702 und RR1 704 können verwendet werden, um den RHS-Vektor b 212 gemäß Gleichung (1) oben zu kumulieren, wodurch ein Segment von b 212, zum Beispiel S0 408, in einem einzelnen RHS-Vektorregister, zum Beispiel RR0 702, kumuliert werden kann.
-
Unter Beibehaltung der Formulierung des äußeren Produkts des Matrix-Vektor-Produkts, die oben in Bezug auf die Gleichung (1) beschrieben wurde, geht die Berechnung der Schablonencodematrix-Vektor-Multiplikation 200 (2) bei einer beispielhaften Ausführungsform beginnend bei Blockspalte 0 404 (4A) blockspaltenweise vor. Die Summe in Gleichung (1), die auf die Spalten in einer einzelnen Blockspalte beschränkt ist, wird als Teilsumme bezeichnet, während die Summe oder eine Teilsumme, die auf die Zeilen in einer Blockzeile beschränkt ist, als Komponente bezeichnet wird. Daher umfasst die Teilsumme bei der beispielhaften Ausführungsform, bei der die Vektorregister 312 vier PEs 314 (3) aufweisen, ein einzelnes Segment aus vier Datenwerten. Beispielsweise umfasst die Teilsumme, die der Blockspalte 0 404 entspricht, u0, u1, u2, u3. Eine Komponente einer Teilsumme umfasst in jeder einer Abfolge von vier Schablonenoperationen vier aufeinanderfolgende Ausdrücke, und eine Komponente der Summe in (1) umfasst vier aufeinanderfolgende Schablonenoperationen und bestimmt ein Segment von b 212.
-
Bei einer Ausführungsform der Erfindung können die von null verschiedenen 4 × 4-Blöcke innerhalb einer Blockspalte, bei denen es sich um Kopien von B1 400 und B2 402 handelt, einzeln verarbeitet werden, wie nachfolgend ausführlicher beschrieben wird. Wenn ein von null verschiedener Block der letzte von null verschiedene Block in seiner Blockzeile ist, kann, sobald er verarbeitet wurde und die Komponente der Summe für diese Blockzeile als Segment des RHS-Vektors b 212 gespeichert wurde, das RHS-Vektorregister, das zur Kumulierung dieser Komponente der Summe verwendet wurde, erneut zur Kumulierung einer weiteren Komponente verwendet werden.
-
Bei einer weiteren Ausführungsform der Erfindung, die nachstehend ausführlicher beschrieben wird, können die von null verschiedenen 4 × 4-Blöcke innerhalb einer Blockspalte spaltenweise verarbeitet werden. Zum Beispiel können alle ersten Spalten der von null verschiedenen Blöcke in der Blockspalte verarbeitet und die Komponenten in entsprechenden RHS-Vektorregistern aktualisiert werden; dann alle zweiten Spalten usw. Wenn die letzten Spalten verarbeitet wurden, kann die Teilsumme ausgegeben werden, die dem ersten von null verschiedenen Block entspricht, und die Teilsummen, die den sonstigen von null verschiedenen Blöcken entsprechen, können jeweils in dem RHS-Vektorregister gespeichert werden, das der vorhergehenden Blockzeile entspricht. Auf diese Weise kann in jeder Blockspalte dieselbe Abfolge von RHS-Vektorregistern verwendet werden, und alle Operationen können mit einem einzigen Datenvektorregister durchgeführt werden. Verschachtelte Anweisungen, die unterschiedliche RHS-Vektorregister umfassen, können auf diese Weise außerdem Verzögerungen verhindern, die dadurch entstehen, dass ein Vektorregister noch nicht zur Verfügung steht, um die nächste SIMD-Anweisung durchzuführen.
-
Tabelle 1 veranschaulicht beispielhaften Pseudocode zum Berechnen der Teilsumme
die den Operationen der Schablonencodematrix-Vektor-Multiplikation
200 unter Einbeziehung der Blockspalte 0
404 der Schablonencodematrix
202 entspricht, wobei A
j die Spalte j der Matrix bezeichnet. Wie dargestellt, kann eine Kombination aus SIMD-Anweisungen zur Multiplikation (vec_mul) und Multiplikation-Addition (vec_madd) unter Einbeziehung von CR
0 bis CR
3 510 bis
516, DR
0 bis DR
3 648 bis
654 und RR
0 702 verwendet werden. Da die Blockspalte 0
404 einen einzelnen von null verschiedenen 4 × 4-Block enthält (eine Kopie des Blocks B
1 400), bei dem es sich um den ersten von null verschiedenen Block in seiner Blockzeile handelt, kann die gesamte Teilsumme in einem RHS-Vektorregister, zum Beispiel in RR
0 702, kumuliert werden. Das Vektorregister RR
0 702 empfängt über eine SIMD-Multiplikationsanweisung (Tabelle 1, Zeile 5) das Produkt des Koeffizientenvektorregisters CR
0 510, das die erste Spalte des Blocks B
1 400 enthält, mit dem Datenvektorregister DR
0 648, das u
0 enthält. Über SIMD-Anweisungen zur Multiplikation-Addition (Tabelle 1, Zeilen 6 bis 8) werden die drei Koeffizientenvektorregister, die den restlichen drei Spalten des Blocks B
1 400 entsprechen, anschließend mit den Datenvektorregistern DR
1 bis DR
3 650 bis
654 multipliziert, die u
1, u
2, u
3 enthalten, und zum Inhalt von RR
0 702 addiert. TABELLE 1
PSEUDOCODE | ANMERKUNGEN |
1 DR0 = vec_splat(u[0]) | Die ersten vier Datenwerte werden in vier Datenvektorregister geladen |
2 DR1 = vec_splat(u[1]) |
3 DR2 = vec_splat(u[2]) |
4 DR3 = vec_splat(u[3]) |
5 RR0 = vec_mul(CR0, DR0) | [Block in Zeile 0 verarbeiten] RR0 enthält die Komponente der Summe für Blockzeile 0 |
6 RR0 = vec_madd(CR1, DR1, RR0) |
7 RR0 = vec_madd(CR2, DR2, RR0) |
8 RR0 = vec_madd(CR3, DR3, RR0) |
-
Als weiteres Beispiel veranschaulicht Tabelle 2 Pseudocode zum Berechnen der Teilsumme
die den Operationen der Schablonencodematrix-Vektor-Multiplikation
200 unter Einbeziehung der Blockspalte 1 der Schablonencodematrix
202 entspricht. Die Teilsumme kann wie in Tabelle 2 dargestellt über eine Kombination aus SIMD-Anweisungen zur Multiplikation (vec_mul) und Multiplikation-Addition (vec_madd) unter Einbeziehung von CR
0 bis CR
3 510 bis
516, CR
4 bis CR
7 526 bis
532, DR
0 bis DR
3 648 bis
654, RR
0 702 und
RR1
704 berechnet werden. In diesem Fall umfasst die Teilsumme zwei Komponenten, die den beiden von null verschiedenen 4 × 4-Blöcken entsprechen, die in der Blockspalte 1 vorliegen. Da der erste von null verschiedene Block in der Blockspalte 1 (eine Kopie von B
2 402) nicht der erste von null verschiedene Block in der Blockzeile 0
406 ist, wird die entsprechende Komponente der Teilsumme in der Blockzeile 0
406 zur ersten (und einzigen) Komponente der Teilsumme aus der Blockspalte 0
404 addiert, die in RR
0 702 enthalten ist. Über eine SIMD-Anweisung zur Multiplikation-Addition (Tabelle 2, Zeile 5) wird das Koeffizientenvektorregister CR
4 526, das die erste Spalte des Blocks B
2 402 enthält, mit den Datenvektorregister DR
0 648 multipliziert, das u
4 enthält, und das Produkt wird zum Inhalt des Vektorregisters RR
0 702 addiert. Über SIMD-Anweisungen zur Multiplikation-Addition (Tabelle 2, Zeilen 6 bis 8) werden die drei Koeffizientenvektorregister, die den restlichen drei Spalten des Blocks B
2 402 entsprechen, anschließend mit den Datenvektorregistern DR
1 bis DR
3 650 bis
654 multipliziert, die u
5, u
6, u
7 enthalten, und zum Inhalt von RR
0 702 addiert. Da der erste Block in der Blockspalte 1 auch der letzte von null verschiedene Block in der Blockzeile 0
406 ist, ist die Berechnung der ersten Komponente der oben aufgeführten Teilsumme abgeschlossen, sodass der Inhalt von RR
0 702 in Segment S
0 408 des RHS-Vektors b
212 (Tabelle 2, Zeile 9) gespeichert werden kann. Der zweite von null verschiedene Block in der Blockspalte 1, eine Kopie von B
1 400, kann in ähnlicher Weise wie der erste Block in der Blockspalte 0 verarbeitet werden (Tabelle 2, Zeilen 10 bis 13). Zu beachten ist, dass ein RHS-Vektorregister, zum Beispiel RR
0 702, für beide Komponenten der Teilsumme verwendet werden könnte, da das Verarbeiten des ersten von null verschiedenen Blocks in der Blockspalte 1 abgeschlossen ist, bevor der zweite von null verschiedene Block in der Blockspalte 1 verarbeitet wird, wie in Tabelle 2 dargestellt. Durch das Speichern des Inhalts von RR
1 704 in RR
0 702 (Tabelle 2, Zeile 13) kann die in Tabelle 2 dargestellte Reihenfolge der RHS-Vektorregister aufrechterhalten werden, wenn die nächste Blockspalte verarbeitet wird. TABELLE 2
PSEUDOCODE | ANMERKUNGEN |
1 DR0 = vec_splat(u[4]) | Die nächsten vier Datenwerte werden in vier Datenvektorregister geladen |
2 DR1 = vec_splat(u[5]) |
3 DR2 = vec_splat(u[6]) |
4 DR3 = vec_splat(u[7]) |
5 RR0 = vec_madd(CR4, DR0, RR0) | [Block in Blockzeile 0 verarbeiten] RR0 enthält die Komponente der Summe für Blockzeile 0 |
6 RR0 = vec_madd(CR5, DR1, RR0) |
7 RR0 = vec_madd(CR6, DR2, RR0) |
8 RR0 = vec_madd(CR7, DR3, RR0) |
9 store RR0 into b[0, 1, 2, 3] | Letzter Block in der Blockzeile, daher speichern. Die Berechnung des ersten Segments von b ist jetzt abgeschlossen |
10 RR1 = vec_mul(CR0, DR0) | [Block in Blockzeile 1 verarbeiten] Da RR0 gespeichert wurde, steht es zur Verfügung und könnte anstelle von RR1 für die Blockzeile 1 verwendet werden Zur Einrichtung für die nächste Blockspalte in RR0 speichern |
11 RR1 = vec_madd(CR1, DR1, RR1) |
12 RR1 = vec_madd(CR2, DR2, RR1) |
13 RR0 = vec_madd(CR3, DR3, RR1) |
-
Zu beachten ist, dass die Datenwerte u0, u1, ... nur einmal geladen werden müssen. Sobald eine Blockspalte verarbeitet wurde, werden die in den Datenvektorregistern DR0 bis DR3 648 bis 654 gespeicherten Datenwerte nicht mehr benötigt und können mit der nächsten Gruppe von Datenwerten überschrieben werden. Andere Zwischenblockspalten können in ähnlicher Weise wie die Blockspalte 1 verarbeitet werden, zum Beispiel über eine Schleifenberechnung.
-
Bei anderen Ausführungsformen der Erfindung können Schablonen eine größere Anzahl von Schablonenkoeffizienten aufweisen, und Vektorregister im Vektorregisterarray 308 (3) können eine größere oder kleinere Anzahl von PEs 314 pro Vektorregister 312 aufweisen. In diesem Fall können zusätzliche RHS-Vektorregister erforderlich sein, zum Beispiel RR0 702 und RR1 704. Wie oben erwähnt, kann bei bestimmten Ausführungsformen für jeden von null verschiedenen Block in einer Blockspalte ein RHS-Register erforderlich sein, das jeder Blockzeile entspricht, die zu einem bestimmten Zeitpunkt gerade verarbeitet wird. Die Gesamtanzahl von erforderlichen RHS-Vektorregistern kann um eins verringert werden, wenn der erste von null verschiedene Block in einer Blockspalte der letzte Block in einer Blockzeile ist, und seine Verarbeitung einschließlich des Speicherns des zugehörigen RHS-Vektorregisters abgeschlossen ist, bevor die Verarbeitung des letzten von null verschiedenen Blocks in der Blockspalte begonnen wird. In diesem Fall können der erste und letzte Block in der Blockspalte dasselbe RHS-Vektorregister nutzen.
-
Wie oben erwähnt, kann das in den 4A oder 4B veranschaulichte Aufteilen der Schablonencodematrix 202 in Blöcke bei einigen Ausführungsformen zu einer letzten Teilblockzeile oder Teilblockspalte führen. Diese Teilblockzeilen oder Teilblockspalten können in ähnlicher Weise wie volle Blockzeilen oder Blockspalten verarbeitet werden. Wenn zum Beispiel bei der Endblockspalte eine oder zwei Spalten fehlen, können diese Spalten aus der Teilsumme für die Blockspalte ausgeschlossen werden. In ähnlicher Weise werden die Einträge im RHS-Vektor b 212, die den fehlenden Reihen entsprechen, beim Speichern des zur Endblockzeile gehörenden RHS-Vektorregisters ausgeschlossen, wenn in der Endblockzeile eine oder mehrere Zeilen fehlen. Wenn zum Beispiel die Schablonencodematrix 202, die Schablonencode mit fünf Schablonenkoeffizienten 204 darstellt, die auf 16 Datenwerte im Datenvektor u 210 angewendet werden, in Blöcke der Größe 3 aufgeteilt würde, die drei PEs pro Vektorregister entspricht, würde nach dem Verarbeiten aller vollen Blockspalten eine Spalte zur Verarbeitung übrig bleiben. Wenn der Datenvektor u 210 bei diesem Szenario neun Datenwerte enthält, würde die Schablonencodematrix 202 fünf Zeilen und neun Spalten aufweisen, und jede Blockspalte würde zwei weitere Zeilen aufweisen.
-
8A ist ein Flussdiagramm, in dem die Operationsschritte abgebildet sind, die durch die Datenverarbeitungseinheit 302 (3) beim Ausführen eines Schablonencodes durchgeführt werden, beispielsweise eines, der durch die Schablonencodematrix-Vektor-Multiplikation 200 (2) wiedergegeben ist, wie gemäß einer Ausführungsform der Erfindung in Bezug auf die 4A und 5 beschrieben. Schablonenkoeffizienten werden in eine Gruppe von Koeffizientenvektorregistern geladen (Schritt 802). Zum Beispiel können die Schablonenkoeffizienten 204 in die Koeffizientenvektorregister 510 bis 516 und 526 bis 532 geladen werden, wie in 5 dargestellt. Wie erwähnt, können mehrere Anfangsblockspalten wie beispielsweise die Blockspalte 0 404 weniger als die maximale Anzahl von null verschiedener Blöcke enthalten. Diese Anfangsblockspalten können getrennt behandelt werden (Schritt 804) während Zwischenblockspalten, die jeweils eine volle Gruppe von null verschiedener Blöcke enthalten, in einer Schleifenberechnung verarbeitet werden können (Schritte 806 und 808). Das Verarbeiten einzelner Blöcke in diesen Anfangsblockspalten ist mit dem Verarbeiten von Blöcken in einer Zwischenblockspalte identisch, wie nachstehend beschrieben wird.
-
8B ist ein Flussdiagramm, in dem die Operationsschritte abgebildet sind, die durch die Datenverarbeitungseinheit 302 (3) beim Verarbeiten einer Zwischenblockspalte Schritt 806 von 8A) durchgeführt werden, beispielsweise eines, wie gemäß einer Ausführungsform der Erfindung in Bezug auf die 4A, 5, 6 und 7 beschrieben. Aufeinanderfolgende Datenwerte werden in Datenvektorregister geladen, zum Beispiel in die Datenvektorregister 648 bis 654, und in ihre jeweiligen PEs repliziert (Schritt 812), wie in 6 dargestellt. Dies kann zum Beispiel über SIMD-Anweisungen analog zu den Zeilen 1 bis 4 von Tabelle 1 erreicht werden. In einer Schleifenberechnung wird jeder von null verschiedene Block in der Blockspalte verarbeitet (Schritt 814). Wenn ein von null verschiedener Block der erste von null verschiedene Block in einer Blockzeile ist (Entscheidungsschritt 816, „JA”-Zweig), zum Beispiel B1 400, kann die Kumulierung der entsprechenden Komponente der Teilsumme in einem zur Verfügung stehenden RHS-Vektorregister, zum Beispiel in einem der RHS-Vektorregister 702 bis 704, mit einer SIMD-Anweisung zur Multiplikation beginnen, zum Beispiel zwischen dem Koeffizientenvektorregister von 510 bis 516 und 526 bis 532, das die erste Spalte des Blocks mit dem ersten Datenvektorregister enthält (Schritt 824). Anschließend kann eine Abfolge von SIMD-Anweisungen zur Multiplikation-Addition zwischen dem Koeffizientenregister von 510 bis 516 und 526 bis 532, das die restlichen Spalten des Blocks mit den entsprechenden Datenvektorregistern enthält, zum Inhalt des RHS-Vektorregisters addiert werden (Schritt 826). Wenn ein von null verschiedener Block der letzte von null verschiedene Block in einer Blockzeile ist (Entscheidungsschritt 818, „JA”-Zweig), zum Beispiel B2 402, wird die entsprechend Komponente der Teilsumme zum Beispiel über eine Abfolge von SIMD-Anweisungen zur Multiplikation-Addition zwischen dem Koeffizientenvektorregister von 510 bis 516 und 526 bis 532, die eine Spalte des Blocks und das entsprechende Datenvektorregister von 648 bis 654 enthalten, in ein RHS-Vektorregister kumuliert, das für die aktuelle Blockzeile zugewiesen wurde, zum Beispiel für eine aus 702 bis 704 (Schritt 828). Der Inhalt des RHS-Vektorregisters wird anschließend ausgegeben (Schritt 830), und das RHS-Vektorregister wird verfügbar, um für eine nachfolgende Blockzeile eine Komponente der Summe zu kumulieren. Wenn ein von null verschiedener Block weder der erste noch der letzte von null verschiedene Block in einer Blockzeile ist (Entscheidungsschritte 816, „NEIN”-Zweig, und 818, „NEIN”-Zweig), kann eine Abfolge von SIMD-Anweisungen zur Multiplikation-Addition wie eben beschrieben verwendet werden, die Komponente der Summe in ein RHS-Vektorregister zu kumulieren, das für die aktuelle Blockzeile zugewiesen wurde (Schritt 820). Wenn noch weitere von null verschiedene Blöcke in der aktuellen Blockspalte zur Verarbeitung übrig bleiben (Entscheidungsschritt 822, „NEIN”-Zweig), wird das Verarbeiten von Blockspalten mit einem weiteren von null verschiedenen Block fortgesetzt (Schritt 814). Anderenfalls (Entscheidungsschritt 822, „JA”-Zweig) endet das Verarbeiten von Zwischenblockspalten.
-
Unter Rückkehr zu 8A können verschiedene Endblockspalten wie oben erwähnt weniger als die maximale Anzahl von null verschiedener Blöcke enthalten. Diese können in derselben Weise wie die Anfangsblockspalten getrennt behandelt werden (Schritt 810).
-
8C ist ein Flussdiagramm, in dem die Operationsschritte abgebildet sind, die durch die Datenverarbeitungseinheit 302 (3) beim Ausführen eines allgemeinen Schablonencodes gemäß einer Ausführungsform der Erfindung durchgeführt werden, bei der ein Schablonencode M geordnete Schablonenkoeffizienten aufweist und Vektorregister 312 im Vektorregisterarray 308 N PEs 314 aufweisen. Ein Computerprozessor empfängt die M geordneten Schablonenkoeffizienten (Schritt 832). Die Schablonenkoeffizienten werden in eine Gruppe von M + N – 1 aufeinanderfolgenden Koeffizientenvektorregistern geladen (Schritt 834). Bei bestimmten Ausführungsformen können die aufeinanderfolgenden Koeffizientenregister lediglich logisch aufeinanderfolgend sein. Bei anderen Ausführungsformen können die aufeinanderfolgenden Koeffizientenregister sowohl logisch als auch physisch aufeinanderfolgend sein.
-
8F ist ein Flussdiagramm zur Darstellung des Ladens von M Schablonenkoeffizienten in M + N –1 aufeinanderfolgende Koeffizientenvektorregister (Schritt 834 von 8C) gemäß einer Ausführungsform der Erfindung. Die Schablonenkoeffizienten werden geladen, sodass die ersten PEs 314 (3) der ersten M Koeffizientenvektorregister die M Schablonenkoeffizienten in Reihenfolge enthalten (Schritt 860). Nullen werden in die verbleibenden N – 1 PEs des ersten Koeffizientenvektorregisters und in die ersten PEs der N – 1 Koeffizientenvektorregister geladen, die auf die ersten M Koeffizientenvektorregister folgen (Schritt 862). Die nachfolgenden PEs der M + N – 2 Koeffizientenvektorregister, die nach dem ersten Koeffizientenvektorregister folgen, enthalten den Wert, der in der vorhergehenden PE des vorhergehenden Koeffizientenvektorregisters gespeichert ist (Schritt 864).
-
Unter Rückkehr zu 8C werden mindestens M + N – 1 Datenwerte empfangen (Schritt 836). Falls beliebige nicht verarbeitete Gruppen von N aufeinanderfolgenden Datenwerten verbleiben (Entscheidungsschritt 838, „JA”-Zweig), wird die nächste Gruppe von N aufeinanderfolgenden Datenwerten in Datenvektorregister geladen, und Summen von Produkten aus Koeffizientenvektorregistern mit Datenvektorregistern werden in RHS-Vektorregistern kumuliert (Schritt 840).
-
8D ist ein Flussdiagramm zur Darstellung des Schritts
840 von
8C bei einer Ausführungsform der Erfindung. Insgesamt können
RHS-Register, wobei die kleinste Ganzzahl nicht kleiner als
M – 1 / N ist, und N Datenvektorregister verwendet werden. Jeder Datenwert der nächsten Gruppe von N aufeinanderfolgenden Datenwerten wird in alle N PEs eines entsprechenden Datenvektorregisters geladen (Schritt
844). Eine Summe von Produkten der ersten N Koeffizientenvektorregister mit entsprechenden Datenvektorregistern wird in einem RHS-Vektorregister kumuliert (Schritt
846), wobei das ausgewählte RHS-Vektorregister eines ist, das gegenwärtig nicht zum Kumulieren verwendet wird. Zu jedem sonstigen RHS-Vektorregister, das eine Summe von Produkten eines Datenvektorregisters mit einem Koeffizientenvektorregister enthält, wird eine Summe der N Koeffizientenvektorregister, die auf die in der Summe verwendeten folgen, mit entsprechenden Datenvektorregistern addiert (Schritt
848).
-
Unter Rückkehr zu 8C wird bei jedem RHS-Vektorregister, das eine Summe aller Produkte der M + N – 1 Koeffizientenvektorregister mit entsprechenden Datenvektorregistern enthält, der Inhalt des RHS-Vektorregisters ausgegeben, und das RHS-Vektorregister wird erneut zum Kumulieren verwendet (Schritt 842). Wenn keine Gruppen N aufeinanderfolgender Datenwerte zur Verarbeitung übrig bleiben (Entscheidungsschritt 838, „NEIN”-Zweig), endet die Verarbeitung.
-
8E ist ein Flussdiagramm zur Darstellung des Schritts
840 von
8C bei einer weiteren Ausführungsform der Erfindung. Ein einziges Datenvektorregister und insgesamt
RHS-Register können verwendet werden, wobei die kleinste Ganzzahl nicht kleiner als
M + N – 1 / N ist. Die nächste Gruppe von N aufeinanderfolgenden Datenwerten wird empfangen (Schritt
850). Die N Datenwerte werden verarbeitet. Wenn kein Datenwert der Gruppe von Datenwerten mehr zu verarbeiten ist (Entscheidungsschritt
852, „NEIN”-Zweig), wird die Verarbeitung bei Schritt
842 von
8C fortgesetzt. Wenn ein beliebiger Datenwert der Gruppe von Datenwerten noch zu verarbeiten ist (Entscheidungsschritt
852, „JA”-Zweig) wird der nächste Datenwert in alle N PEs des Datenvektorregisters geladen (Schritt
854). Wenn der Datenwert der erste Datenwert der Gruppe ist, wird das Datenvektorregister mit dem ersten Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister multipliziert, und das Ergebnis wird in einem RHS-Vektorregister gespeichert (Schritt
856). Das ausgewählte RHS-Vektorregister ist eines, das gegenwärtig nicht zum Kumulieren verwendet wird. Bei jedem sonstigen RHS-Vektorregister, das eine Summe von Produkten des Datenvektorregisters mit einem Koeffizientenvektorregister enthält, wird das Datenvektorregister mit dem Koeffizientenvektorregister multipliziert, das auf die in der Summe verwendeten folgt, und das Produkt wird zur Summe addiert (Schritt
858). Die Verarbeitung wird bei Entscheidungsschritt
852 fortgesetzt.
-
Unter Rückkehr zu 8C wird bei jedem RHS-Vektorregister, das eine Summe aller Produkte der M + N – 1 Koeffizientenvektorregister mit entsprechenden Datenvektorregistern enthält, der Inhalt des RHS-Vektorregisters ausgegeben, und das RHS-Vektorregister wird erneut zum Kumulieren verwendet (Schritt 842). Wenn keine Gruppen N aufeinanderfolgender Datenwerte zur Verarbeitung übrig bleiben (Entscheidungsschritt 838, „NEIN”-Zweig), endet die Verarbeitung.
-
Wie oben erwähnt, können Schablonencodes höherer Dimension, zum Beispiel 2-D- oder 3-D-Schablonencodes, realisiert werden, indem zu jeder Schablonenoperation höherer Dimension mehrere 1-D-Schablonenoperationen durchgeführt und die Ergebnisse kombiniert werden.
-
9 stellt ein Blockschema von Komponenten einer Datenverarbeitungseinheit 302 von 3 gemäß einer Ausführungsform der vorliegenden Erfindung dar. Es sollte klar sein, dass die 9 nur zur Veranschaulichung einer Realisierungsform dient und nicht als Einschränkung in Bezug auf die Umgebungen gedacht ist, in denen unterschiedliche Ausführungsformen realisiert werden können. An der abgebildeten Umgebung können viele Abänderungen vorgenommen werden.
-
Die Datenverarbeitungseinheit 302 kann einen oder mehrere Prozessoren 902, einen oder mehrere computerlesbare RAMs 904, einen oder mehrere computerlesbare ROMs 906, ein oder mehrere computerlesbare Speichermedien 908, Einheitentreiber 912, ein Lese/Schreib-Laufwerk oder eine Lese/Schreib-Schnittstelle 914, einen Netzwerkadapter oder eine Netzwerkschnittstelle 916 enthalten, die untereinander alle über ein Datenaustauschnetzwerk 918 verbunden sind. Das Datenaustauschnetzwerk 918 kann mit einer beliebigen Architektur realisiert sein, die auf ein Weiterleiten von Daten und/oder Steuerinformationen zwischen Prozessoren (beispielsweise Mikroprozessoren, Datenaustausch- und Netzwerkprozessoren usw.) ausgelegt ist, mit einem Systemspeicher, Peripherieeinheiten und beliebigen anderen Hardwarekomponenten innerhalb eines Systems.
-
Ein oder mehrere Betriebssysteme 910 und ein oder mehrere Anwendungsprogramme 928, zum Beispiel ein Programm, das einen Schablonencode realisiert, sind auf einem oder mehreren der computerlesbaren Speichermedien 908 gespeichert, um durch einen oder mehrere der jeweiligen RAMs 904 (die normalerweise einen Cache-Speicher enthalten) ausgeführt zu werden. Bei der veranschaulichten Ausführungsform kann jedes der computerlesbaren Speichermedien 908 eine Magnetplattenspeichereinheit einer internen Festplatte, ein CD-ROM, eine DVD, ein Speicherstick, ein Magnetband, eine Magnetplatte, eine optische Platte, eine Halbleiterspeichereinheit wie beispielsweise ein RAM, ein ROM, ein EPROM, ein Flash-Speicher oder eine beliebige andere computerlesbare Speichereinheit sein, die ein Computerprogramm und digitale Informationen speichern kann.
-
Die Datenverarbeitungseinheit 302 kann außerdem ein Lese/Schreib-Laufwerk oder eine Lese/Schreib-Schnittstelle 914 enthalten, um Daten von einem oder mehreren transportablen computerlesbaren Speichermedien 926 zu lesen oder auf diese zu schreiben. Anwendungsprogramme 928 auf der Datenverarbeitungseinheit 302 können auf einem oder mehreren der tragbaren computerlesbaren Speichermedien 926 gespeichert sein, über das jeweilige Lese/Schreib-Laufwerk oder die jeweilige Lese/Schreib-Schnittstelle 914 gelesen und in das jeweilige computerlesbare Speichermedium 908 geladen werden.
-
Die Datenverarbeitungseinheit 302 kann außerdem einen Netzwerkadapter oder eine Netzwerkschnittstelle 916 enthalten, beispielsweise eine TCP/IP-Adapterkarte oder einen Adapter für den drahtlosen Datenaustausch (beispielsweise einen Adapter der 4. Generation für den drahtlosen Datenaustausch, der die OFDMA-Technologie nutzt). Anwendungsprogramme 928 auf der Datenverarbeitungseinheit 302 können von einem externen Computer oder von einer externen Speichereinheit über ein Netzwerk (zum Beispiel über das Internet, ein lokales Netzwerk oder ein anderes Weitverkehrsnetzwerk oder ein drahtloses Netzwerk) und über den Netzwerkadapter oder die Netzwerkschnittstelle 916 auf die Datenverarbeitungseinheit heruntergeladen werden. Von dem Netzwerkadapter oder der Netzwerkschnittstelle 916 können die Programme auf das computerlesbare Speichermedium 908 geladen werden. Das Netzwerk kann Kupferleitungen, Lichtwellenleiter, drahtlose Übertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen.
-
Die Datenverarbeitungseinheit 302 kann außerdem einen Anzeigebildschirm 920, eine Tastatur oder ein Tastenfeld 922 und eine Computermaus oder ein Touchpad 924 enthalten. Einheitentreiber 912 stellen eine Verbindung zum Anzeigebildschirm 920 zwecks Anzeige, zur Tastatur oder zum Tastenfeld 922, zur Computermaus oder zum Touchpad 924 und/oder zum Anzeigebildschirm 920 her, um die druckempfindliche Erfassung der Eingabe alphanumerischer Zeichen und von Benutzerauswahlen zu realisieren. Die Einheitentreiber 912, das Lese/Schreib-Laufwerk oder die Lese/Schreib-Schnittstelle 914 und der Netzwerkadapter oder die Netzwerkschnittstelle 916 können Hardware und Software aufweisen (die auf dem computerlesbaren Speichermedium 908 und/oder im ROM 906 gespeichert ist).
-
Die vorliegende Erfindung kann ein System, ein Verfahren und/oder ein Computerprogrammprodukt sein. Das Computerprogrammprodukt kann ein computerlesbares Speichermedium (oder -medien) mit darauf befindlichen computerlesbaren Programmanweisungen enthalten, um einen Prozessor zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
-
Das computerlesbare Speichermedium kann eine materielle Einheit sein, die Anweisungen zur Verwendung durch eine Anweisungsausführungseinheit aufbewahren und speichern kann. Das computerlesbare Speichermedium kann zum Beispiel, ohne auf diese beschränkt zu sein, eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder eine beliebige geeignete Kombination des Vorstehenden sein. Eine nicht erschöpfende Liste genauerer Beispiele des computerlesbaren Speichermediums enthält Folgendes: eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Nur-Lese-Speicher (ROM), einen löschbaren programmierbaren Nur-Lese-Speicher (EPROM oder Flash-Speicher), einen statischen Direktzugriffsspeicher (SRAM), einen tragbaren Nur-Lese-Speicher in Form einer Compact Disc (CD-ROM), eine Digital Versatile Disc (DVD), einen Speicherstick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder erhöhte Strukturen in einer Vertiefung mit darauf aufgezeichneten Anweisungen oder beliebige geeignete Kombinationen des Vorstehenden. Ein computerlesbares Speichermedium, wie es hierin verwendet wird, ist nicht als flüchtige Signale an sich auszulegen, beispielsweise als Funkwellen oder sich frei ausbreitende elektromagnetische Wellen, als elektromagnetische Wellen, die sich durch einen Hohlleiter oder andere Übertragungsmedien ausbreiten (z. B. Lichtimpulse, die ein Lichtwellenleiterkabel durchlaufen) oder als elektrische Signale, die über ein Kabel übertragen werden.
-
Hierin beschriebene computerlesbare Programmanweisungen können über ein Netzwerk, zum Beispiel das Internet, ein lokales Netzwerk ein Weitverkehrsnetzwerk und/oder ein drahtloses Netzwerk von einem computerlesbaren Speichermedium auf betreffende Datenverarbeitungs-/Verarbeitungseinheiten oder auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenleiter, drahtlose Übertragung, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder eine Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt computerlesbare Programmanweisungen aus dem Netzwerk und leitet die computerlesbaren Programmanweisungen zur Speicherung in einem computerlesbaren Speichermedium innerhalb der betreffenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
-
Computerlesbare Programmanweisungen zum Ausführen von Operationen der vorliegenden Erfindung können Assembleranweisungen, ISA-Anweisungen (ISA = Instruction Set Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, Daten zum Setzen von Zuständen oder entweder Quellcode oder Objektcode sein, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, zu denen eine objektorientierte Programmiersprache wie beispielsweise Smalltalk, C++ oder Ähnliches und herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache „C” oder ähnliche Programmiersprachen gehören. Die computerlesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. Beim letztgenannten Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über eine beliebige Art von Netzwerk verbunden sein, unter anderem über ein lokales Netzwerk (Local Area Network, LAN) oder über ein Weitverkehrsnetzwerk (Wide Area Network, WAN), oder die Verbindung kann zu einem externen Computer hergestellt werden (beispielsweise über das Internet unter Nutzung eines Internet-Dienstanbieters (Internet Service Provider)). Bei einigen Ausführungsformen können elektronische Schaltungen, zu denen beispielsweise programmierbare Logikschaltungen, Field-Programmable Gate Arrays (FPGA) oder programmierbare logische Arrays (PLA) gehören, die computerlesbare Programmanweisungen ausführen, indem Zustandsinformationen der computerlesbaren Programmanweisungen genutzt werden, um die elektronische Schaltung zu personalisieren, sodass Aspekte der vorliegenden Erfindung durchgeführt werden.
-
Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Flussdiagramm-Darstellungen und/oder Blockschemata von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird klar sein, dass jeder Block der Flussdiagramme und/oder der Blockschemata und Kombinationen von Blöcken in den Flussdiagrammen und/oder Blockschemata durch Computerprogrammanweisungen realisiert werden kann bzw. können.
-
Diese Computerprogrammanweisungen können einem Prozessor eines Mehrzweckcomputers, eines Spezialcomputers oder anderer programmierbaren Datenverarbeitungsvorrichtungen bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder anderer programmierbarer Datenverarbeitungsvorrichtungen ausgeführt werden, Mittel schaffen, um die in einem Block bzw. in den Blöcken des Flussdiagramms und/oder des Blockschemas angegebenen Funktionen/Aktionen zu realisieren. Diese Computerprogrammanweisungen können ebenfalls in einem computerlesbaren Medium gespeichert sein, das einen Computer, andere programmierbare Datenverarbeitungsvorrichtungen oder andere Einheiten anweisen kann, in einer bestimmten Weise zu funktionieren, sodass das computerlesbare Medium mit darauf gespeicherten Anweisungen ein Erzeugnis aufweist, das Anweisungen enthält, die die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebene Funktion/Aktion realisieren.
-
Die computerlesbaren Programmanweisungen können auch in einen Computer, in andere programmierbare Datenverarbeitungsvorrichtungen oder in andere Einheiten geladen werden, um zu bewirken, dass auf dem Computer, auf anderen programmierbaren Vorrichtungen oder anderen Einheiten eine Reihe von Arbeitsschritten ausgeführt wird, um einen mittels Computer realisierten Prozess zu schaffen, sodass die Anweisungen, die auf dem Computer, auf anderen programmierbaren Vorrichtungen oder Einheiten ausgeführt werden, die in einem Block bzw. in den Blöcken der Flussdiagramme und/oder der Blockschemata angegebenen Funktionen/Aktionen realisieren.
-
Die Flussdiagramme und Blockschemata in den Figuren veranschaulichen die Architektur, Funktionalität und Wirkungsweise möglicher Realisierungsformen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. Dementsprechend kann jeder Block in den Flussdiagrammen bzw. in den Blockschemata ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Realisierung der angegebenen Logikfunktion bzw. Logikfunktionen aufweist. Bei einigen alternativen Realisierungsformen können die im Block angegebenen Funktionen in einer anderen als in der Reihenfolge ausgeführt werden, die in den Figuren angegeben ist. Beispielsweise können zwei hintereinander aufgeführte Blöcke tatsächlich im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können je nach der damit verbundenen Funktionalität manchmal in umgekehrter Reihenfolge ausgeführt werden. Darüber hinaus ist anzumerken, dass jeder Block der dargestellten Blockschemata und/oder der dargestellten Flussdiagramme sowie Kombinationen von Blöcken in den dargestellten Blockschemata und/oder in dargestellten Flussdiagrammen mithilfe von bestimmten Zwecken dienenden, hardwaregestützten Systemen zur Ausführung der angegebenen Funktionen bzw. Aktionen oder mithilfe von Kombinationen aus bestimmten Zwecken dienender Hardware und Computeranweisungen ausgeführt werden kann bzw. können.
-
Die vorstehende Beschreibung verschiedener Ausführungsformen der vorliegenden Erfindung wurde zur Veranschaulichung und Beschreibung vorgelegt. Sie ist weder als erschöpfend noch als die Erfindung in der exakt offenbarten Form einschränkend gedacht. Viele Abänderungen und Variationen sind möglich. Derartige Abänderungen und Variationen der Erfindung, die einem Fachmann unter Umständen klar sind, sind als in den Schutzbereich der Erfindung fallend gedacht, der in den beigefügten Ansprüchen festgelegt ist.