DE102016205020A1 - SIMD-Realisierung von Schablonencodes - Google Patents

SIMD-Realisierung von Schablonencodes Download PDF

Info

Publication number
DE102016205020A1
DE102016205020A1 DE102016205020.6A DE102016205020A DE102016205020A1 DE 102016205020 A1 DE102016205020 A1 DE 102016205020A1 DE 102016205020 A DE102016205020 A DE 102016205020A DE 102016205020 A1 DE102016205020 A1 DE 102016205020A1
Authority
DE
Germany
Prior art keywords
vector registers
data
group
vector
registers
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102016205020.6A
Other languages
English (en)
Inventor
Leopold Grinberg
Karen Magerlein
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102016205020A1 publication Critical patent/DE102016205020A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)

Abstract

Realisieren eines 1-D-Schablonencodes über SIMD-Anweisungen auf einem Computer mit Vektorregistern, die N Verarbeitungselemente (Processing Elements, PEs) aufweisen, darunter eine Gruppe von Koeffizientenvektorregistern, eine Gruppe von höchstens N Datenvektorregistern und eine Gruppe von Ergebnisvektorregistern. Die M Schablonenkoeffizienten werden in einem bestimmten Muster in M + N – 1 Koeffizientenvektorregister geladen. Nachfolgende Gruppen von N aufeinanderfolgenden Datenwerten werden empfangen, und jeder Datenwert einer Gruppe wird in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern geladen. Die Ergebnisvektorregister kumulieren Summen von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern. Der Inhalt beliebiger Ergebnisvektorregister, die eine Summe aller Koeffizientenvektorregister-Datenvektorregister-Produkte enthalten, wird ausgegeben, und das Ergebnisregister wird erneut zum Kumulieren verwendet.

Description

  • 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 = Cj, j = 1, ..., K. In diesem Fall kann eine typische Schablonenoperation, die eine Ableitung f(n) am Rasterpunkt xi = a + iΔx berechnet, wie folgt formuliert werden:
    Figure DE102016205020A1_0002
    wobei fi-K, ..., fi+K Werte einer Funktion f an Rasterpunkten xi-K, ..., xi+K darstellt.
  • Im Allgemeinen kann eine Schablonenoperation mit M Schablonenkoeffizienten
    Figure DE102016205020A1_0003
    die auf eine Abfolge von Datenwerten
    Figure DE102016205020A1_0004
    angewendet werden, ausgedrückt werden als
  • Figure DE102016205020A1_0005
  • 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, C0, C1, C2 (nicht dargestellt). In Verbindung mit den Schablonenkoeffizienten C–2, C–1, C0, C1, C2, 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:
    Figure DE102016205020A1_0006
    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 Ci,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:
    Figure DE102016205020A1_0007
    wobei
    Figure DE102016205020A1_0008
    Figure DE102016205020A1_0009
    Datenwerte darstellen, die zu den Rasterpunkten
    Figure DE102016205020A1_0010
  • 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, C0, C1, C2 204 auf aufeinanderfolgende Datenwerte u0, u1, ... dar, die als Elemente im Datenvektor u 210 vorkommen. Beispielsweise ist unter Bezugnahme auf die Zeile 206 in der Schablonencodematrix 202 der Wert b0 an der ersten Position des RHS-Vektors b 212 gemäß den Standardregeln der Matrix-Vektor-Multiplikation gleich C–2u0, C–1u1, C0u2, C1u3, C2u4. Die Datenwerte u5, u6, ..., die mit Nullen in der Zeile 206 multipliziert werden, tragen nichts zu b0 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
    Figure DE102016205020A1_0011
  • 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 bi 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:
    Figure DE102016205020A1_0012
    wobei u0, u1, ... die aufeinanderfolgenden Elemente von u und A0, A1, ... 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
    Figure DE102016205020A1_0013
    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
    Figure DE102016205020A1_0014
    640 des Datenvektors u 210 (2) in jede der vier PEs eines ersten Datenvektorregisters DR0 648 kopiert. Ein Element
    Figure DE102016205020A1_0015
    42 wird in jede der PEs eines zweiten Datenvektorregisters DR1 650 kopiert. In ähnlicher Weise werden Elemente
    Figure DE102016205020A1_0016
    kopiert. 6 zeigt das Ergebnis des Kopierens der ersten vier Datenwerte u0, ... u3, 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
    Figure DE102016205020A1_0017
    die den Operationen der Schablonencodematrix-Vektor-Multiplikation 200 unter Einbeziehung der Blockspalte 0 404 der Schablonencodematrix 202 entspricht, wobei Aj 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 CR0 bis CR3 510 bis 516, DR0 bis DR3 648 bis 654 und RR0 702 verwendet werden. Da die Blockspalte 0 404 einen einzelnen von null verschiedenen 4 × 4-Block enthält (eine Kopie des Blocks B1 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 RR0 702, kumuliert werden. Das Vektorregister RR0 702 empfängt über eine SIMD-Multiplikationsanweisung (Tabelle 1, Zeile 5) das Produkt des Koeffizientenvektorregisters CR0 510, das die erste Spalte des Blocks B1 400 enthält, mit dem Datenvektorregister DR0 648, das u0 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 B1 400 entsprechen, anschließend mit den Datenvektorregistern DR1 bis DR3 650 bis 654 multipliziert, die u1, u2, u3 enthalten, und zum Inhalt von RR0 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
    Figure DE102016205020A1_0018
    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 CR0 bis CR3 510 bis 516, CR4 bis CR7 526 bis 532, DR0 bis DR3 648 bis 654, RR0 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 B2 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 RR0 702 enthalten ist. Über eine SIMD-Anweisung zur Multiplikation-Addition (Tabelle 2, Zeile 5) wird das Koeffizientenvektorregister CR4 526, das die erste Spalte des Blocks B2 402 enthält, mit den Datenvektorregister DR0 648 multipliziert, das u4 enthält, und das Produkt wird zum Inhalt des Vektorregisters RR0 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 B2 402 entsprechen, anschließend mit den Datenvektorregistern DR1 bis DR3 650 bis 654 multipliziert, die u5, u6, u7 enthalten, und zum Inhalt von RR0 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 RR0 702 in Segment S0 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 B1 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 RR0 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 RR1 704 in RR0 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
    Figure DE102016205020A1_0019
    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
    Figure DE102016205020A1_0020
    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.

Claims (13)

  1. Verfahren 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) aufweist, wobei die Mehrzahl von Vektorregistern eine Gruppe von Vektorregistern aufweist, 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, wobei das Verfahren aufweist: Empfangen einer Anzahl M von geordneten Schablonenkoeffizienten durch einen Prozessor; Laden von Schablonenkoeffizienten in M + N – 1 aufeinanderfolgende Koeffizientenregister der Gruppe von Koeffizientenvektorregistern durch den Prozessor, 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; die nachfolgenden PEs der M + N – 2 Koeffizientenvektorregister, die nach dem ersten Koeffizientenvektorregister folgen, den Wert enthalten, der in der vorhergehenden PE des vorhergehenden Koeffizientenvektorregisters gespeichert ist; Empfangen von mindestens M + N – 1 Datenwerten durch den Prozessor; Verarbeiten aufeinanderfolgender Gruppen von N aufeinanderfolgenden Datenwerten der empfangenen Datenwerte durch: Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern; Kumulieren einer Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern, die die aufeinanderfolgenden Datenwerte enthalten, durch den Prozessor in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern; und Ausgeben des Inhalts jedes Ergebnisvektorregisters, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält, durch den Prozessor, wobei jedes Ergebnisvektorregister, das eine Summe aller Produkte aller Koeffizientenvektorregister mit einem entsprechenden Datenvektorregister enthält, erneut zum Kumulieren verwendet wird.
  2. Verfahren nach Anspruch 1, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, aus N Vektorregistern besteht, und wobei das Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten durch den Prozessor aufweist: Laden jedes aufeinanderfolgenden Datenwertes der Gruppe durch den Prozessor in alle PEs eines entsprechenden Datenvektorregisters der Gruppe von N Datenvektorregistern; und wobei das Kumulieren durch den Prozessor aufweist: Kumulieren einer Summe von Produkten aus Koeffizientenvektorregistern in einer ersten Gruppe von N aufeinanderfolgenden Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern durch den Prozessor in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern; und Addieren einer Summe von Produkten der folgenden Gruppe von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern durch einen Prozessor zu jedem sonstigen Ergebnisvektorregister, das eine kumulierte Summe von Produkten aus Gruppen von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern enthält.
  3. Verfahren nach Anspruch 1, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, aus einem Vektorregister besteht, und wobei das Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten durch den Prozessor aufweist: Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs des Datenvektorregisters; und wobei das Kumulieren durch den Prozessor aufweist: als Reaktion auf ein Feststellen, dass der in das Datenvektorregister geladene Datenwert der erste Datenwert der Gruppe ist, Speichern eines Anfangsprodukts einer Summe von Produkten aus dem ersten Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister durch den Prozessor in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern, das keine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält; und Addieren eines Produkts aus dem nächsten aufeinanderfolgenden Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister durch den Prozessor zu jedem sonstigen Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern, das eine kumulierte Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält.
  4. Verfahren nach Anspruch 1, ferner aufweisend: als Reaktion auf ein Feststellen, dass eine Gruppe von weniger als N aufeinanderfolgenden Datenwerten übrig bleibt, nachdem alle aufeinanderfolgenden Gruppen von N aufeinanderfolgenden Datenwerten verarbeitet wurden: Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern; Kumulieren einer Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern, die die weniger als N aufeinanderfolgenden Datenwerte enthalten, durch den Prozessor in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern; und Ausgeben des Inhalts jedes Ergebnisvektorregisters, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält, durch den Prozessor.
  5. Verfahren nach Anspruch 4, wobei das Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor aufweist: Laden jedes aufeinanderfolgenden Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs eines entsprechenden Datenvektorregisters der Gruppe von Datenvektorregistern, und wobei das Kumulieren durch den Prozessor aufweist: Addieren einer Summe von Produkten einer folgenden Gruppe von weniger als N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern durch einen Prozessor zu einem Ergebnisvektorregister, das eine kumulierte Summe von Produkten aus Gruppen von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern enthält.
  6. Verfahren nach Anspruch 4, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, aus einem Vektorregister besteht, und wobei das Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor aufweist: Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs des Datenvektorregisters; und wobei das Kumulieren durch den Prozessor aufweist: Addieren eines Produkts aus dem nächsten aufeinanderfolgenden Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister durch den Prozessor zu einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern, das eine kumulierte Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält.
  7. Computerprogrammprodukt 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, wobei das Computerprogrammprodukt aufweist: ein oder mehrere computerlesbare Speichermedien und auf dem einen oder den mehreren computerlesbaren Speichermedien gespeicherte Programmanweisungen, wobei die Programmanweisungen aufweisen: Programmanweisungen, um eine Anzahl M von geordneten Schablonenkoeffizienten zu empfangen; Programmanweisungen, um Schablonenkoeffizienten in M + N – 1 aufeinanderfolgende Koeffizientenregister der Gruppe von Koeffizientenvektorregistern zu laden, 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; die nachfolgenden PEs der M + N – 2 Koeffizientenvektorregister, die nach dem ersten Koeffizientenvektorregister folgen, den Wert enthalten, der in der vorhergehenden PE des vorhergehenden Koeffizientenvektorregisters gespeichert ist; Programmanweisungen, um mindestens M + N – 1 Datenwerte zu empfangen; Programmanweisungen, um aufeinanderfolgende Gruppen von N aufeinanderfolgenden Datenwerten der empfangenen Datenwerte zu verarbeiten durch: Programmanweisungen, um jeden Datenwert der Gruppe von N aufeinanderfolgenden Datenwerten in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern zu laden; Programmanweisungen, um eine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern, die die aufeinanderfolgenden Datenwerte enthalten, in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu kumulieren; und Programmanweisungen, um den Inhalt jedes Ergebnisvektorregisters auszugeben, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält, wobei jedes Ergebnisvektorregister, das eine Summe aller Produkte aller Koeffizientenvektorregister mit einem entsprechenden Datenvektorregister enthält, erneut zum Kumulieren verwendet wird.
  8. Computersystem 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, wobei das Computersystem aufweist: einen oder mehrere Computerprozessoren, ein oder mehrere computerlesbare Speichermedien und auf dem einen oder den mehreren der computerlesbaren Speichermedien gespeicherte Programmanweisungen zur Ausführung durch mindestens einen des einen oder der mehreren Prozessoren, wobei die Programmanweisungen aufweisen: Programmanweisungen, um eine Anzahl M von geordneten Schablonenkoeffizienten zu empfangen; Programmanweisungen, um Schablonenkoeffizienten in M + N – 1 aufeinanderfolgende Koeffizientenregister der Gruppe von Koeffizientenvektorregistern zu laden, 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; die nachfolgenden PEs der M + N – 2 Koeffizientenvektorregister, die nach dem ersten Koeffizientenvektorregister folgen, den Wert enthalten, der in der vorhergehenden PE des vorhergehenden Koeffizientenvektorregisters gespeichert ist; Programmanweisungen, um mindestens M + N – 1 Datenwerte zu empfangen; Programmanweisungen, um aufeinanderfolgende Gruppen von N aufeinanderfolgenden Datenwerten der empfangenen Datenwerte zu verarbeiten durch: Programmanweisungen, um jeden Datenwert der Gruppe von N aufeinanderfolgenden Datenwerten in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern zu laden; Programmanweisungen, um eine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern, die die aufeinanderfolgenden Datenwerte enthalten, in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu kumulieren; und Programmanweisungen, um den Inhalt jedes Ergebnisvektorregisters auszugeben, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält, wobei jedes Ergebnisvektorregister, das eine Summe aller Produkte aller Koeffizientenvektorregister mit einem entsprechenden Datenvektorregister enthält, erneut zum Kumulieren verwendet wird.
  9. Computersystem nach Anspruch 8, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, aus N Vektorregistern besteht, und wobei Programmanweisungen zum Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten aufweisen: Programmanweisungen, um jeden aufeinanderfolgenden Datenwert der Gruppe in alle PEs eines entsprechenden Datenvektorregisters der Gruppe von N Datenvektorregistern zu laden; und wobei Programmanweisungen zum Kumulieren aufweisen: Programmanweisungen, um eine Summe von Produkten aus Koeffizientenvektorregistern in einer ersten Gruppe von N aufeinanderfolgenden Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu kumulieren; und Programmanweisungen, um eine Summe von Produkten der folgenden Gruppe von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern zu jedem sonstigen Ergebnisvektorregister zu addieren, das eine kumulierte Summe von Produkten aus Gruppen von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern enthält.
  10. Computersystem nach Anspruch 8, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet wird, aus einem Vektorregister besteht, und wobei Programmanweisungen zum Laden jedes Datenwertes der Gruppe von N aufeinanderfolgenden Datenwerten aufweisen: Programmanweisungen, um jeden Datenwert der Gruppe von N aufeinanderfolgenden Datenwerten in alle PEs des Datenvektorregisters zu laden; und wobei Programmanweisungen zum Kumulieren aufweisen: Programmanweisungen, um als Reaktion auf ein Feststellen, dass der in das Datenvektorregister geladene Datenwert der erste Datenwert der Gruppe ist, ein Anfangsprodukt einer Summe von Produkten aus dem ersten Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu speichern, das keine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält; und Programmanweisungen, um ein Produkt aus dem nächsten aufeinanderfolgenden Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister zu jedem sonstigen Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu addieren, das eine kumulierte Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält.
  11. Computerprogrammprodukt nach Anspruch 8, ferner aufweisend: Programmanweisungen, um als Reaktion auf ein Feststellen, dass eine Gruppe von weniger als N aufeinanderfolgenden Datenwerten übrig bleibt, nachdem alle aufeinanderfolgenden Gruppen von N aufeinanderfolgenden Datenwerten verarbeitet wurden: jeden Datenwert der Gruppe von weniger als N aufeinanderfolgenden Datenwerten in alle PEs eines Datenvektorregisters der Gruppe von Datenvektorregistern zu laden; eine Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit Datenvektorregistern, die die weniger als N aufeinanderfolgenden Datenwerte enthalten, in einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu kumulieren; und den Inhalt jedes Ergebnisvektorregisters auszugeben, das eine Summe der Produkte aller Koeffizientenvektorregister mit einem Datenvektorregister enthält.
  12. Computerprogrammprodukt nach Anspruch 11, wobei Programmanweisungen zum Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten aufweisen: Programmanweisungen, um jeden aufeinanderfolgenden Datenwert der Gruppe von weniger als N aufeinanderfolgenden Datenwerten durch den Prozessor in alle PEs eines entsprechenden Datenvektorregisters der Gruppe von Datenvektorregistern zu laden, und wobei Programmanweisungen zum Kumulieren aufweisen Programmanweisungen, um eine Summe von Produkten einer folgenden Gruppe von weniger als N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern zu einem sonstigen Ergebnisvektorregister zu addieren, das eine kumulierte Summe von Produkten aus Gruppen von N Koeffizientenvektorregistern mit entsprechenden Datenvektorregistern enthält.
  13. Computerprogrammprodukt nach Anspruch 11, wobei die Gruppe von Vektorregistern, die zur Speicherung von Datenwerten verwendet werden, aus einem Vektorregister besteht, und wobei Programmanweisungen zum Laden jedes Datenwertes der Gruppe von weniger als N aufeinanderfolgenden Datenwerten aufweisen: Programmanweisungen, um jeden Datenwert der Gruppe von weniger als N aufeinanderfolgenden Datenwerten in alle PEs des Datenvektorregisters zu laden; und wobei Programmanweisungen zum Kumulieren aufweisen: Programmanweisungen, um ein Produkt aus dem nächsten aufeinanderfolgenden Koeffizientenvektorregister der M + N – 1 aufeinanderfolgenden Koeffizientenvektorregister mit dem Datenvektorregister zu einem Ergebnisvektorregister der Gruppe von Ergebnisvektorregistern zu addieren, das eine kumulierte Summe von Produkten aus aufeinanderfolgenden Koeffizientenvektorregistern mit dem Datenvektorregister enthält.
DE102016205020.6A 2015-03-27 2016-03-24 SIMD-Realisierung von Schablonencodes Pending DE102016205020A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/670,684 US9910826B2 (en) 2015-03-27 2015-03-27 SIMD implementation of stencil codes
US14/670,684 2015-03-27

Publications (1)

Publication Number Publication Date
DE102016205020A1 true DE102016205020A1 (de) 2016-09-29

Family

ID=56890321

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102016205020.6A Pending DE102016205020A1 (de) 2015-03-27 2016-03-24 SIMD-Realisierung von Schablonencodes

Country Status (3)

Country Link
US (1) US9910826B2 (de)
CN (1) CN106020775B (de)
DE (1) DE102016205020A1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3388981B1 (de) * 2017-04-13 2021-09-01 Nxp B.V. Faltungsverarbeitungssystem
US10474464B2 (en) * 2017-07-05 2019-11-12 Deep Vision, Inc. Deep vision processor
US10565037B2 (en) * 2017-12-19 2020-02-18 Hewlett Packard Enterprise Development Lp Data update of shared fabric memory in a high performance computing system
US11099844B2 (en) 2019-05-16 2021-08-24 International Business Machines Corporation Vector-based tiled processing with data-sharing neighboring tiles
US11513847B2 (en) 2020-03-24 2022-11-29 Deep Vision Inc. System and method for queuing commands in a deep learning processor
CN117992711A (zh) * 2022-11-02 2024-05-07 华为技术有限公司 进行模板计算的方法和装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4937776A (en) 1988-12-13 1990-06-26 Nippon Sheet Glass Co., Ltd. Matrix-vector multiplication apparatus
US5274832A (en) 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
US5864703A (en) * 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
US7978194B2 (en) 2004-03-02 2011-07-12 Ati Technologies Ulc Method and apparatus for hierarchical Z buffering and stenciling
US7757222B2 (en) 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
EP2013710B8 (de) 2006-03-14 2016-12-07 Transgaming Inc. Vielzwecksoftware-paralleltask-engine
US8413126B2 (en) 2007-06-15 2013-04-02 Cray Inc. Scalar code reduction using shortest path routing
GB2470782B (en) * 2009-06-05 2014-10-22 Advanced Risc Mach Ltd A data processing apparatus and method for handling vector instructions
CN102109978A (zh) * 2011-02-28 2011-06-29 孙瑞琛 一种数据的重排方法及重排装置

Also Published As

Publication number Publication date
CN106020775B (zh) 2018-08-17
US9910826B2 (en) 2018-03-06
CN106020775A (zh) 2016-10-12
US20160283441A1 (en) 2016-09-29

Similar Documents

Publication Publication Date Title
DE102016205020A1 (de) SIMD-Realisierung von Schablonencodes
DE19914210B4 (de) Verfahren und Prozessor für eine gestaffelte Ausführung einer Anweisung
DE102017121257A1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
EP0123921B1 (de) Parallelverknüpfungsschaltung mit verkürztem Übertragsdurchlauf
DE112012005014B4 (de) Verfahren zum Ausführen arithmetischer Operationen unter Verwendung sowohl von großen als auch kleinen Gleitkommawerten und Vorrichtung sowie Computerprogrammprodukt hierfür
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE1956209C3 (de) Multipliziervorrichtung
DE10393918T5 (de) Effiziente Multiplikation kleiner Matrizen durch Verwendung von SIMD-Registern
DE112019002981T5 (de) Parallelberechnungsarchitektur mit rekonfigurierbarer kernebenen- und vektorebenen-parallelität
DE19758079A1 (de) Verfahren und Vorrichtung zur Galoisfeld-Multiplikation
DE2913327C2 (de) Matrix-Multiplizierer
DE4403917C2 (de) Vorrichtung zum Berechnen einer Bit-Besetzungszählung
DE4215094C2 (de) Bildverarbeitungsverfahren und -vorrichtung
DE112020000748T5 (de) Adresserzeugung zur hochleistungsverarbeitung von vektoren
DE10219158B4 (de) Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DD208499A3 (de) Mehrdimensionaler paralleler speicher
DE112019000382T5 (de) GANZZAHLIGER MULTIPLIKATOR MIT MEHRFACHER GENAUIGKEIT DURCH MATRIX-MATRIX-MULTIPLIKATIONEN UNTER VERWENDUNG EINES 16-BIT-FLIEßKOMMA-MULTIPLIKATORS
DE102004030961B4 (de) Verfahren zum Bestimmen einer Matrix von Transmissionskreuzkoeffizienten bei einer optischen Näherungskorrektur von Maskenlayouts
DE112020003328T5 (de) Nichtlinear rückgekoppeltes schieberegister
DE112017005414T5 (de) Umschaltbare topologiemaschine
DE112018004631T5 (de) Arithmetikeinrichtung und an einem Fahrzeug montierte Steuereinrichtung
DE10219161A1 (de) Vorrichtung und Verfahren zum Umrechnen eines Terms
DE1549485C3 (de) Anordnung zur Division binärer Operanden ohne Rückstellung des Restes
EP0629943B1 (de) Multiplizierer für reelle und komplexe Zahlen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

R084 Declaration of willingness to licence