-
HINTERGRUND
-
Diese Spezifikation bezieht sich auf die Datenverarbeitung neuronaler Netzwerk-Inferenzen in Hardware.
-
Neuronale Netzwerke sind Modelle für maschinelles Lernen, die eine oder mehrere Modellebenen verwenden, um für eine empfangene Eingabe eine Ausgabe zu erzeugen, z. B. eine Klassifizierung. Einige neuronale Netzwerke umfassen zusätzlich zu einer Außenschicht eine oder mehrere ausgeblendete Schichten. Die Ausgabe von jeder verborgenen Ebene wird als Eingabe für die nächste Ebene im Netzwerk (d. h. die nächste verborgene Ebene oder die Ausgabeebene des Netzwerks) verwendet. Jede Schicht des Netzwerks erzeugt in Übereinstimmung mit aktuellen Werten eines jeweiligen Satzes von Parametern einen Ausgang von einem empfangenen Eingang.
-
Manche neuronalen Netzwerke enthalten eine oder mehrere Faltungsebenen. Jede Faltungsebene eines neuronalen Netzwerks hat einen zugehörigen Satz Kernel. Jeder Kernel beinhaltet Werte, die von einem durch einen Benutzer erstellten neuronalen Netzwerkmodell festgelegt werden. Bei manchen Ausführungsformen bezeichnen Kernel bestimmte Bildkonturen, Formen oder Farben. Kernel können als Matrixstruktur aus Gewichtseingaben dargestellt werden. Jede Faltungsebene kann auch einen Satz Aktivierungseingaben verarbeiten. Der Satz Aktivierungseingaben kann auch als Matrixstruktur dargestellt werden.
-
Manche bereits vorhandenen Systeme führen Berechnungen für eine gegebene Faltungsebene in Software aus. Die Software kann z. B. jeden Kernel für die Ebene auf den Satz Aktivierungseingaben anwenden. Das heißt für jeden Kernel kann die Software den Kernel, der mehrdimensional dargestellt werden kann, über einen ersten Teil der Aktivierungseingaben legen, der mehrdimensional dargestellt werden kann. Die Software kann dann aus den überlappenden Elementen ein Skalarprodukt berechnen. Das Skalarprodukt kann einer einzelnen Aktivierungseingabe entsprechen, z. B. einem Aktivierungseingabeelement, das in dem überlappten mehrdimensionalen Raum eine Position oben links einnimmt. Mithilfe eines Schiebefenster kann die Software dann z. B. den Kernel so verschieben, dass er sich über einen zweiten Teil der Aktivierungseingaben legt, und ein weiteres Skalarprodukt berechnen, das einer weiteren Aktivierungseingabe entspricht. Die Software kann die Ausführung des Verfahrens solange wiederholen, bis jede Aktivierungseingabe ein entsprechendes Skalarprodukt aufweist. Bei manchen Ausführungsformen werden die Skalarprodukte in eine Aktivierungsfunktion eingegeben, die Aktivierungswerte erzeugt. Die Aktivierungswerte können kombiniert, z. B. zusammengefasst, werden, bevor sie an eine nachfolgende Ebene des neuronalen Netzwerks gesendet werden.
-
Eine Methode zur Durchführung von Faltungsberechnungen erfordert eine Vielzahl von Matrizenmultiplikationen in einem hochdimensionalen Raum. Ein Prozessor kann Matrizenmultiplikationen mithilfe einer Brute-Force-Methode berechnen. Obwohl dies rechen- und zeitaufwändig ist, kann der Prozessor für Faltungsberechnungen z. B. wiederholt einzelne Summen und Produkte berechnen. Das Ausmaß, in dem der Prozessor Berechnungen parallelisiert, wird durch seine Architektur begrenzt.
-
KURZDARSTELLUNG
-
Im Allgemeinen beschreibt diese Spezifikation eine spezielle Hardware-Schaltung, die neuronale Netzwerkinferenzen berechnet.
-
Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstands in einer Schaltung für die Ausführung neuronaler Netzwerkberechnungen für ein neuronales Netzwerk ausgeführt werden, das eine Vielzahl von Ebenen umfasst, wobei die Schaltung umfasst: ein systolisches Array, das eine Vielzahl von Zellen umfasst; eine Gewichtsabrufeinheit, die für jede der Vielzahl von neuronalen Netzwerkebenen konfiguriert ist, um für die neuronale Netzwerkebene eine Vielzahl von Gewichtseingaben an Zellen entlang einer ersten Dimension des systolischen Arrays zu senden; und eine Vielzahl von Gewichtssequenzereinheiten, die jeweils mit einer bestimmten Zelle entlang der ersten Dimension des systolischen Arrays verbunden sind, wobei die Vielzahl der Gewichtssequenzereinheiten für jede der Vielzahl von neuronalen Netzwerkebenen konfiguriert ist, um die Vielzahl von Gewichtseingaben für die neuronale Netzwerkebene im Lauf einer Vielzahl von Taktzyklen an Zellen entlang der zweiten Dimension des systolischen Arrays zu verschieben, wobei jede Gewichtseingabe in einer entsprechenden Zelle entlang der zweiten Dimension gespeichert wird und jede Zelle so konfiguriert ist, dass sie unter Verwendung einer Multiplikationsschaltung ein Produkt aus einer Aktivierungseingabe und einem entsprechenden Gewicht berechnet.
-
Implementierungen können eines oder mehrere der folgenden Elemente beinhalten. Eine Wertsequenzereinheit, die so konfiguriert ist, dass sie für jede der Vielzahl von neuronalen Netzwerkebenen eine Vielzahl von Aktivierungseingaben an Zellen entlang der zweiten Dimension des systolischen Arrays für die neuronale Netzwerkebene sendet. Die erste Dimension des systolischen Arrays entspricht Zeilen des systolischen Arrays, und die zweite Dimension des systolischen Arrays entspricht Spalten des systolischen Arrays. Jede Zelle ist so konfiguriert, dass sie ein Gewichtssteuerungssignal an eine benachbarte Zelle sendet, wobei das Gewichtssteuerungssignal die Schaltung in der benachbarten Zelle dazu bringt, eine Gewichtseingabe für die benachbarte Zelle zu verschieben oder zu laden. Ein Gewichtspfadregister, das so konfiguriert ist, dass es die in die Zelle verschobene Gewichtseingabe speichert; ein Gewichtsregister, das mit dem Gewichtspfadregister gekoppelt ist; ein Gewichtssteuerungsregister, das für die Ermittlung konfiguriert ist, ob die Gewichtseingabe im Gewichtsregister gespeichert werden soll; ein Aktivierungsregister, das zur Speicherung einer Aktivierungseingabe sowie zum Senden der Aktivierungseingabe an ein anderes Aktivierungsregister in einer ersten benachbarten Zelle entlang der ersten Dimension konfiguriert ist; die Multiplikationsschaltung, die mit dem Gewichtsregister und dem Aktivierungsregister verbunden ist, wobei die Multiplikationsschaltung zur Ausgabe eines Produkts aus der Gewichtseingabe und der Aktivierungseingabe konfiguriert ist; eine Summierungsschaltung, die mit der Multiplikationsschaltung verbunden und zum Empfangen des Produkts sowie einer ersten Teilsumme aus einer zweiten benachbarten Zelle entlang der zweiten Dimension konfiguriert ist, wobei die Summierungsschaltung zur Ausgabe einer zweiten Teilsumme aus dem Produkt und der ersten Teilsumme konfiguriert ist; und ein Teilsummenregister, das zum Senden der zweiten Teilsumme an eine andere Summierungsschaltung in einer dritten benachbarten Zelle entlang der zweiten Dimension konfiguriert ist. Jede Gewichtssequenzereinheit umfasst: einen Anhaltezähler, der dem Gewichtssteuerungsregister in der entsprechenden Zelle, die mit der Gewichtssequenzereinheit verbunden ist, entspricht; und eine Dekrementschaltung, die zum Dekrementieren einer Eingabe für die Gewichtssequenzereinheit konfiguriert ist, um eine dekrementierte Ausgabe zu erzeugen und an den Anhaltezähler zu senden. Werte in jedem Anhaltezähler sind identisch, und jede Gewichtssequenzereinheit ist zum Laden einer entsprechenden Gewichtseingabe in die entsprechende bestimmte Zelle des systolischen Arrays konfiguriert, wobei das Laden das Senden der Gewichtseingabe an die Multiplikationsschaltung umfasst. Werte in jedem Anhaltezähler erreichen einen vorgegebenen Wert, um die Vielzahl von Gewichtssequenzereinheiten dazu zu bringen, das Verschieben der Vielzahl von Gewichtseingaben entlang der zweiten Dimension anzuhalten. Das systolische Array ist so konfiguriert, dass es für jede der Vielzahl von neuronalen Netzwerkebenen aus jedem Produkt eine akkumulierte Ausgabe für die neuronale Netzwerkebene erzeugt.
-
Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Durch das Vorabrufen von Gewichten kann ein neuronaler Netzwerkprozessor Berechnungen effizienter ausführen. Der Prozessor kann das Laden von Gewichtseingaben in das systolische Array mithilfe einer Gewichtsabrufeinheit sowie einer Gewichtssequenzereinheit koordinieren und damit den Bedarf nach einer Drahtkopplung einer externen Speichereinheit mit den einzelnen Zellen im systolischen Array eliminieren. Der Prozessor kann anhalten (d. h. „einfrieren”), indem er die Gewichtseingaben verschiebt, um die Ausführung verschiedener Faltungsberechnungen zu synchronisieren.
-
Die Details einer oder mehrerer Ausführungen eines Gegenstands dieser Spezifikation sind in den begleiteten Bildern und der Beschreibung unten veranschaulicht. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes.
-
2 zeigt ein Beispiel eines neuronalen Netzwerkverarbeitungssystems.
-
3 zeigt eine Beispielarchitektur mit einer Matrix-Recheneinheit.
-
4 zeigt eine Beispielarchitektur einer Zelle innerhalb eines systolischen Arrays.
-
5 zeigt eine exemplarische Matrixstruktur mit Raumdimensionen und einer Funktionsdimension.
-
6 zeigt eine exemplarische Darstellung dazu, wie eine Kernel-Matrixstruktur an ein systolisches Array gesendet wird.
-
7 zeigt eine exemplarische Darstellung von Gewichtseingaben in Zellen nach drei Taktzyklen.
-
8 ist eine exemplarische Darstellung dazu, wie Steuerungssignale dafür sorgen, dass Aktivierungseingaben verschoben oder geladen werden. Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Ein neuronales Netzwerk mit mehreren Schichten kann verwendet werden, um Inferenzen zu berechnen. So kann das neuronale Netzwerk beispielsweise bei einer Eingabe, eine Inferenz für die Eingabe berechnen. Insbesondere können die Schichten des neuronalen Netzwerks sind in einer Reihe mit jeweils einem Gewichtssatz in einer Sequenz angeordnet sein. Insbesondere die Schichten des neuronalen Netzes sind mit jeweils einem entsprechenden Satz von Gewichten in einer Sequenz angeordnet. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe entsprechend den Gewichtssätzen für die Schicht, um eine Ausgabe zu erzeugen.
-
Daher empfängt das neuronale Netzwerk die Eingabe und verarbeitet diese zum Erzeugen der Inferenz in der Sequenz durch jede der neuronalen Netzwerkschichten, wobei der Ausgang einer Netzwerkschicht als Eingang für die nächste neuronale Netzwerkschicht vorgesehen ist. Dateneingaben zu einer neuronalen Netzwerkschicht, z. B. können entweder als Eingabe für das neuronale Netzwerk oder als Ausgang der Schicht der darunterliegenden Schicht in der Sequenz zu einer neuronalen Netzwerkschicht als Aktivierungseingaben für die Schicht bezeichnet werden.
-
Bei einigen Implementierungen sind die Schichten des neuronalen Netzwerks in einem gerichteten Graph angeordnet. Das heißt, jede spezielle Schicht kann mehrere Eingänge, mehrere Ausgänge oder beide empfangen. Die Schichten des neuronalen Netzes können auch so angeordnet sein, dass ein Ausgang einer Schicht als Eingang in eine vorhergehende Schicht zurückgesendet werden kann.
-
1 ist ein Flussdiagramm eines Beispielprozesses 100 zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzwerks mithilfe einer speziellen Hardwareschaltung. Der Einfachheit halber wird das Verfahren 100 in Bezug auf ein System beschrieben, mit einer oder mehreren Schaltungen, die das Verfahren 100 ausführen. Das Verfahren 100 kann für jede Schicht des neuronalen Netzwerks ausgeführt werden, um eine Inferenz aus einem empfangenen Eingang zu berechnen.
-
Das System empfängt für die gegebene Schicht Gewichtseingangssätze (Schritt 102) und Aktivierungseingangssätze (Schritt 104). Die Sätze mit Gewichtseingaben und die Sätze mit Aktivierungseingaben können von einem dynamischen Speicher bzw. einem einheitlichen Puffer der speziellen Hardwareschaltung empfangen werden. Bei einigen Implementierungen können sowohl die Gewichtseingaben als auch die Aktivierungseingaben von dem einheitlichen Puffer empfangen werden.
-
Das System erzeugt aus den Gewichtseingaben und den Aktivierungseingaben mithilfe einer Matrixmultiplikationseinheit der speziellen Hardwareschaltung (Schritt 106) kumulierte Werte. Bei einigen Implementierungen sind die kumulierten Werte Punktprodukte der Gewichtseingangssätze und den Aktivierungseingaben. Das heißt, für einen Satz von Gewichtungen, kann das System jede Gewichtseingabe mit jedem Aktivierungseingang multiplizieren und die Produkte zusammenaddieren, um einen kumulierten Wert zu bilden. Dann kann das System Punktprodukte eines anderen Satzes von Gewichtungen mit anderen Sätzen von Aktivierungseingaben berechnen.
-
Das System kann unter Verwendung einer Vektor-Recheneinheit der speziellen Hardware-Schaltung eine Schichtausgabe von den kumulierten Werten (Schritt 108) erzeugen. Bei einigen Implementierungen wendet die Vektor-Recheneinheit eine Aktivierungsfunktion auf die kumulierten Werte an. Der Ausgang der Schicht kann zur Verwendung als eine Eingabe in eine nachfolgende Schicht in dem neuronalen Netzwerk in dem einheitlichen Puffer gespeichert werden oder kann verwendet werden, um die Inferenz zu bestimmen. Das System beendet die Verarbeitung des neuronalen Netzwerks, um die Inferenz für den empfangenen Eingang zu erzeugen, wenn ein empfangener Eingang durch jede Schicht des neuronalen Netzwerks verarbeitet worden ist.
-
2 zeigt ein Beispiel einer speziellen integrierten Schaltung 200 zum Durchführen neuronaler Netzwerkberechnungen. Das System 200 verfügt über eine Host-Schnittstelle 202. Die Host-Schnittstelle 202 kann Anweisungen empfangen, die Parameter für eine neuronale Netzwerkberechnung umfassen. Die Parameter können mindestens eine oder mehrere der folgenden beinhalten: die Anzahl der zu verarbeitenden Ebenen, die entsprechenden Sätze aus Gewichtseingaben für jede Ebene der Ebene, ein Anfangssatz aus Aktivierungseingaben, d. h. die Eingabe für das neuronale Netzwerk, aus der die Inferenz zu berechnen ist, entsprechende Eingabe- und Ausgabegrößen jeder Ebene, eine Schrittgröße für die Berechnung durch das neuronale Netzwerk, und die Art der zu verarbeitenden Ebene, z. B. eine Faltungsebene oder eine vollständig verbundene Ebene.
-
Die Host-Schnittstelle 202 kann die Befehle an einen Sequenzer 206 senden, der die Befehle in Steuerungssignale mit niedrigem Pegel umwandelt, um die Schaltung zur Durchführung der neuronalen Netzwerkberechnungen zu steuern. In einigen Implementierungen regeln die Steuersignale den Datenfluss in der Schaltung, z. B. wie die Gewichtseingangssätze und die Aktivierungseingangssätze durch die Schaltung fließen. Der Sequenzer 206 kann die Steuersignale zu einem einheitlichen Puffer 208, einer Matrix-Recheneinheit 212 und einer Vektor-Recheneinheit 214 senden. Bei einigen Implementierungen sendet der Sequenzer 206 auch Steuersignale an ein direktes Speicherzugriffsprogramm 204 und einen dynamischen Speicher 210. In manchen Implementierungen ist der Sequenzer 206 ein Prozessor, der getaktete Signale erzeugt. Der Sequenzer 206 kann mithilfe einer geeigneten zeitlichen Anordnung der getakteten Signale die Steuerungssignale an die einzelnen Komponenten der Schaltung 200 senden. In einigen anderen Implementierungen leitet die Host-Schnittstelle 202 ein getaktetes Signal von einem externen Prozessor ein.
-
Die Host-Schnittstelle 202 kann Gewichtseingangssätze und den anfänglichen Satz von Aktivierungseingaben an ein direktes Speicherzugriffsprogramm 204 senden. Das direkte Speicherzugriffsprogramm 204 kann die Sätze von Aktivierungseingaben an dem einheitlichen Puffer 208 speichern. Bei einigen Implementierungen speichert der direkte Speicherzugriff die Gewichtungssätze in den dynamischen Speicher 210, der eine Speichereinheit sein kann. In einigen Implementierungen befindet sich der dynamische Speicher außerhalb der Schaltung.
-
Die einheitliche Puffer 208 ist ein Speicherpuffer. Er kann verwendet werden, um den Satz von Aktivierungseingaben von dem direkten Speicherzugriffsprogramm 204 und Ausgängen der Vektor-Recheneinheit 214 zu speichern. Das direkte Speicherzugriffsprogramm 204 kann auch die Ausgänge der Vektor-Recheneinheit 214 aus dem einheitlichen Puffer 208 lesen.
-
Der dynamische Speicher 210 und der einheitliche Puffer 208 können die Gewichtseingangssätze und die Sätze von Aktivierungseingaben jeweils an die Matrix-Recheneinheit 212 senden. Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 eine zweidimensionale systolische Matrix. Die Matrix-Recheneinheit 212 kann auch ein eindimensionales systolisches Array oder eine andere Schaltung sein, die mathematische Operationen durchführen kann (z. B. Multiplikation und Addition). Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 ein Allzweck-Matrixprozessor.
-
Die Matrix-Recheneinheit 212 kann die Gewichtseingaben und die Aktivierungseingaben verarbeiten und einen Ausgangsvektor an die Vektorberechnungseinheit 214 bereitstellen. Bei einigen Implementierungen sendet die Matrix-Recheneinheit den Ausgangsvektor an den einheitlichen Puffer 208, der den Ausgangsvektor an die Vektor-Recheneinheit 214 sendet. Die Vektor-Recheneinheit kann den Ausgangsvektor verarbeiten und einen Vektor von verarbeiteten Ausgängen zum einheitlichen Puffer 208 speichern. So kann beispielsweise die Vektor-Recheneinheit 214 kann eine nichtlineare Funktion auf Ausgänge der Matrix-Recheneinheit, z. B. einen Vektor von kumulierten Werten anwenden, um aktivierte Werte zu erzeugen. Bei einigen Implementierungen erzeugt die Vektor-Recheneinheit 214 normierte Werte, gebündelte Werte oder beides. Der Vektor von verarbeiteten Ausgängen kann als Aktivierungseingang für die Matrix-Recheneinheit 212 verwendet werden, z. B. zur Verwendung in einer nachfolgenden Schicht in dem neuronalen Netzwerk. Die Vektor-Recheneinheit 212 wird nachfolgend unter Bezugnahme auf 3 und 4 näher beschrieben.
-
3 zeigt eine Beispielarchitektur 300 mit einer Matrix-Recheneinheit. Die Matrix-Recheneinheit ein zweidimensionales systolisches Array 306. Das Array 306 enthält mehrere Zellen 304. Bei einigen Implementierungen entspricht eine erste Dimension 320 des systolischen Arrays 306 Spalten von Zellen und eine zweite Dimension 322 des systolischen Arrays 306 entspricht Zeilen von Zellen. Das systolische Array kann mehr Zeilen als Spalten, mehr Spalten als Zeilen oder eine gleiche Anzahl von Spalten und Zeilen aufweisen.
-
In dem dargestellten Beispiel senden die Wertlader 302 Aktivierungseingänge an Zeilen des Arrays 306 und eine Gewichtsabrufschnittstelle 308 sendet Gewichtseingänge an Spalten des Arrays 306. Bei einigen anderen Implementierungen werden jedoch Aktivierungseingänge zu den Spalten übertragen und Gewichtseingänge zu den Zeilen des Arrays 306.
-
Die Wertlader 302 können die Aktivierungseingänge von einem einheitlichen Puffer, z. B. dem einheitlichen Puffer 208 von 2 empfangen. Jeder Wertlader kann einen entsprechenden Aktivierungseingang zu einer am weitesten links liegenden Zelle des Arrays 306 senden. Die am weitesten links liegende Zelle kann eine Zelle entlang einer äußerst linken Spalte des Arrays 306 sein. So kann beispielsweise der Wertlader 312 einen Aktivierungseingang zur Zelle 314 senden. Der Wertlader kann auch den Aktivierungseingang an einen benachbarten Wertlader senden und der Aktivierungseingang kann an einer anderen am weitesten links liegenden Zelle des Arrays 306 verwendet werden. Dies ermöglicht, dass Aktivierungseingänge zur Verwendung in einer anderen bestimmten Zelle des Arrays 306 verschoben werden.
-
Die Gewichtsabrufschnittstelle 308 kann die Gewichtseingabe von einer Speichereinheit, z. B. dem dynamischen Speicher 210 von 2 empfangen. Jede Gewichtsabrufschnittstelle 308 kann eine entsprechende Gewichtseingabe an eine bestimmte oberste Zelle des Arrays 306 senden. Die oberste Zelle kann eine Zelle entlang einer obersten Zeile des Arrays 306 sein. Die Gewichtsabrufschnittstelle 308 kann beispielsweise Gewichtseingaben an die Zellen 314 und 316 übermitteln.
-
Bei einigen Implementierungen kann eine Hostschnittstelle, z. B. die Hostschnittstelle 202 von 2, die Aktivierungseingänge über das gesamte Array 306 entlang einer Dimension, z. B. nach rechts verschieben, während die Gewichtseingänge entlang des gesamten Arrays 306 entlang einer anderen Dimension, z. B. nach unten, verschoben werden können. So kann beispielsweise der Aktivierungseingang an der Zelle 314 über einen Taktzyklus zu einem Aktivierungsregister in der Zelle 316, die rechts von der Zelle 314 liegt, verschieben. In ähnlicher Weise kann die Gewichtseingabe an der Zelle 316 zu einem Gewichtsregister in der Zelle 318 verschoben werden, die unterhalb der Zelle 314 liegt.
-
Um eine kumulierte Ausgabe zu erzeugen, kann bei jedem Taktzyklus jede Zelle einen gegebenen Gewichtseingang und einen gegebenen Aktivierungseingang verarbeiten. Die kumulierte Ausgabe kann auch an die benachbarte Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergegeben werden. Nachfolgend weiter unten wird unter Bezugnahme auf 4 eine Einzelzelle beschrieben. In einigen Implementierungen werden Gewichte und Aktivierungen im Lauf eines gegebenen Taktzyklus in mehr als eine Zelle verschoben, um von einer Faltungsberechnung zu einer anderen zu wechseln.
-
Die kumulierte Ausgabe kann entlang der gleichen Spalte wie die Gewichtseingabe, z. B. in Richtung des Bodens der Spalte in dem Array 306, verschoben werden. Bei einigen Implementierungen kann das Array 306 unterhalb jeder Spalte Akkumulationseinheiten 310 beinhalten, die jede Ausgabe von jeder Spalte speichert und kumuliert, wenn Berechnungen mit Schichten durchgeführt werden, die mehr Aktivierungseingaben als Zeilen aufweisen. Bei In einigen Implementierungen speichert jede Akkumulatoreinheit mehrere parallele Akkumulationen. Dies wird weiter unten unter Bezugnahme auf 6 beschrieben. Die Akkumulatoreinheiten 310 können jede kumulierte Ausgabe kumulieren, um einen endgültigen kumulierten Wert zu erzeugen. Der endgültige kumulierte Wert kann auf eine Vektor-Recheneinheit übertragen werden. Bei einigen anderen Implementierungen übergeben die Akkumulationseinheiten 310 die kumulierten Werte zu der Vektor-Recheneinheit, ohne irgendwelche Ansammlungen auszuführen, wenn Schichten mit weniger Gewichtseingaben verarbeitet werden als Spalten oder Schichten mit weniger Aktivierungseingaben als Zeilen.
-
Während Aktivierungseingaben und Gewichtseingaben durch die Schaltung fließen, kann die Schaltung den Fluss eines Satzes mit Gewichtseingaben „einfrieren” oder anhalten, um eine präzise Berechnung von Akkumulationswerten zu ermöglichen. Das bedeutet, dass die Schaltung den Satz mit Gewichtseingaben anhalten kann, damit sich ein bestimmter Satz von Gewichtseingaben auf einen bestimmten Satz von Aktivierungseingaben anwenden lässt.
-
In einigen Implementierungen konfigurieren Gewichtssequenzer 324, ob Gewichtseingaben in benachbarte Zellen verschoben werden sollen. Ein Gewichtssequenzer 326 kann einen Steuerungswert von einem Host, z. B. Host-Schnittstelle 202 aus 2, oder einem Prozessor empfangen. Jeder Gewichtssequenzer kann den Steuerungswert an eine entsprechende Zelle im Array 306 weiterleiten. Insbesondere kann der Steuerungswert in einem Gewichtssteuerungsregister der Zelle gespeichert werden, zum Beispiel im Gewichtssteuerungsregister 414 aus 4. Der Steuerungswert kann ermitteln, ob Gewichtseingaben entlang einer Dimension des Arrays verschoben bzw. geladen werden sollen; dieser Vorgang wird im Folgenden beschrieben unter Bezugnahme auf 8. Der Gewichtssequenzer kann den Steuerungswert außerdem an einen benachbarten Gewichtssequenzer senden, der das Verschieben oder Laden einer entsprechenden Gewichtseingabe für eine entsprechende Zelle steuern kann.
-
In einigen Implementierungen wird der Steuerungswert als Ganzzahl dargestellt. Jeder Gewichtssequenzer kann ein Anhaltezählerregister beinhalten, das die Ganzzahl speichert. Außerdem kann der Gewichtssequenzer die Ganzzahl dekrementieren, bevor der Steuerungswert im Anhaltezählerregister gespeichert wird. Nach dem Speichern des Steuerungswerts im Anhaltezählerregister kann der Gewichtssequenzer die Ganzzahl an einen benachbarten Gewichtssequenzer und an die entsprechende Zelle senden. Jeder Gewichtssequenzer kann zum Beispiel eine Dekrementschaltung aufweisen, die so konfiguriert ist, dass sie aus dem Steuerungswert eine dekrementierte Ganzzahl erzeugt. Die dekrementierte Ganzzahl kann im Anhaltezählerregister gespeichert werden. Die gespeicherten Steuerungswerte lassen sich verwenden, um eine simultane Verschiebungspause in einer gesamten Spalte des Arrays zu koordinieren; dieser Vorgang wird im Folgenden genauer beschrieben unter Bezugnahme auf 8.
-
In einigen Implementierungen können Entwickler durch das Anhalten von Gewichten in der Schaltung Fehler in der Schaltung beseitigen.
-
Andere Verfahren zum Anhalten von Gewichten sind möglich. Anstatt Werte in den Anhaltezählerregistern an benachbarte Anhaltezählerregister zu übertragen, lässt sich der Steuerungswert zum Beispiel mithilfe eines Baums übermitteln. Das bedeutet, dass sich das Signal an einer bestimmten Zelle an alle benachbarten Zellen und nicht nur an eine benachbarte Zelle übertragen lässt, sodass sich das Signal rasch im gesamten systolischen Array verbreitet. 4 zeigt eine Beispielarchitektur 400 Einer Zelle innerhalb eines systolischen Arrays, z. B. des systolischen Arrays 306 von 3.
-
Die Zelle kann ein Aktivierungsregister 406 umfassen, das einen Aktivierungseingang speichert. Das Aktivierungsregister kann die Aktivierungseingabe von einer linken benachbarten Zelle, d. h. eine benachbarte Zelle, die links von der gegebenen Zelle angeordnet ist, oder von einem einheitlichen Puffer, abhängig von der Position der Zelle, innerhalb des systolischen Arrays empfangen. Die Zelle kann ein Aktivierungsregister 402 umfassen, das einen Gewichtseingang speichert. Der Gewichtseingang kann, abhängig von der Position der Zelle innerhalb des systolischen Arrays, von einer oberen benachbarten Zelle oder von einer Gewichtsabrufschnittstelle übertragen werden. Die Zelle kann auch eine Summe im Register 404 beinhalten Die Summe im Register 404 kann einen akkumulierten Wert aus der obersten benachbarten Zelle speichern. Die Multiplikationsschaltung 408 kann verwendet werden, um die Gewichtseingabe von dem Gewichtsregister 402 mit der Aktivierungseingabe von dem Aktivierungsregister 406 zu multiplizieren. Die Multiplikationsschaltung 408 kann das Produkt an die Summierungsschaltung 410 ausgeben.
-
Die Summierungsschaltung kann das Produkt und den kumulierten Wert aus der Summe im Register 404 summieren, um einen neuen kumulierten Wert zu erzeugen. Die Summierungsschaltung 410 kann dann den neuen kumulierten Wert an eine andere Summe im Register senden, die sich in einer unteren angrenzenden Zelle befindet. Der neue akkumulierte Wert kann in der untersten benachbarten Zelle als Operand für eine Summierung verwendet werden.
-
In einigen Implementierungen beinhaltet die Zelle auch ein allgemeines Steuerungsregister. Das Steuerregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtseingabe oder die Aktivierungseingabe zu benachbarten Zellen verschieben soll. In einigen Implementierungen erfordert das Verschieben der Gewichtseingabe bzw. der Aktivierungseingabe mehr als einen Taktzyklus. Das Steuerungssignal kann ferner ermitteln, ob die Aktivierungseingabe oder Gewichtseingaben an die Multiplikationsschaltung 408 übertragen werden sollen bzw. ob die Multiplikationsschaltung 408 Operationen an den Aktivierungs- und Gewichtseingaben vornehmen soll. Das Steuersignal kann auch an eine oder mehrere benachbarte Zellen geleitet werden, z. B. mithilfe eines Drahtes.
-
Bei einigen Implementierungen werden die Gewichte in ein Gewichtspfadregister 412 verschoben. Das Gewichtspfadregister 412 kann die Gewichtseingabe, z. B. von einer oberen benachbarten Zelle empfangen und die Gewichtseingabe auf das Gewichtsregister 402 auf der Grundlage des Steuersignals übertragen. Das Gewichtsregister 402 kann die Gewichtseingabe statisch speichern, sodass wenn Aktivierungseingaben über mehrere Taktzyklen in die Zelle übertragen werden, z. B. durch das Aktivierungsregister 406 über mehrere Taktzyklen hinweg, bleibt die Gewichtseingabe innerhalb der Zelle und wird nicht zu einer benachbarten Zelle übertragen.
-
Die Gewichtseingabe kann daher auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 408, und entsprechende akkumulierte Werte können zu einer benachbarten Zelle übertragen werden.
-
In einigen Implementierungen steuert das Gewichtssteuerungsregister 414, ob die Gewichtseingabe im Gewichtsregister 402 gespeichert wird. Wenn das Gewichtssteuerungsregister 414 zum Beispiel einen Steuerungswert 0 speichert, kann das Gewichtsregister 402 die vom Gewichtspfadregister 412 gesendete Gewichtseingabe speichern. In einigen Implementierungen wird das Speichern der Gewichtseingabe im Gewichtsregister 402 als Laden der Gewichtseingabe bezeichnet. Sobald die Gewichtseingabe geladen wurde, lässt sich die Gewichtseingabe zur Verarbeitung an Multiplikationsschaltung 408 senden. Wenn das Gewichtssteuerungsregister 414 einen Steuerungswert speichert, der nicht 0 ist, kann das Gewichtsregister 402 die vom Gewichtspfadregister 412 gesendete Gewichtseingabe ignorieren. Der im Gewichtssteuerregister 414 gespeicherte Steuerungswert kann an eine oder mehrere benachbarte Zellen übertragen werden; für eine gegebene Zelle lässt sich der Steuerungswert zum Beispiel an ein Gewichtssteuerungsregister in einer Zelle senden, die sich rechts von der gegebenen Zelle befindet.
-
Die Zelle kann die Gewichtseingabe sowie die Aktivierungseingabe auch in benachbarte Zellen verschieben. Das Gewichtspfadregister 412 kann z. B. die Gewichtseingabe an ein anderes Gewichtspfadregister in der untersten benachbarten Zelle senden. Das Aktivierungsregister 406 kann die Gewichtseingabe zu einem anderen Aktivierungsregister in der rechten benachbarten Zelle senden. Daher können sowohl die Gewichtseingabe als auch die Aktivierungseingabe von anderen Zellen in dem Array bei einem nachfolgenden Taktzyklus wiederverwendet werden
-
5 zeigt eine exemplarische Matrixstruktur 500, die Raumdimensionen und eine Funktionsdimension aufweist. Die Matrixstruktur 500 kann entweder einen Satz von Aktivierungseingaben oder einen Satz von Gewichtseingaben darstellen. Eine Matrixstruktur für einen Satz Aktivierungseingaben wird in dieser Spezifikation als Aktivierungsmatrixstruktur bezeichnet, und eine Matrixstruktur für einen Satz aus Gewichtseingaben als Kernel-Matrixstruktur. Die Matrixstruktur 500 hat drei Dimensionen: zwei Raumdimensionen und eine Funktionsdimension.
-
Bei manchen Ausführungsformen entsprechen die Raumdimensionen einem Raum oder Position eines Satzes Aktivierungseingaben. Wenn das neuronale Netzwerk z. B. ein Bild verarbeitet, das zwei Dimensionen hat, können die Matrixstrukturen zwei Raumdimensionen haben, die Raumkoordinaten, d. h. XY-Koordinaten, des Bildes entsprechen.
-
Die Funktionsdimension entspricht den Funktionen einer Aktivierungseingabe. Jede Funktionsdimension kann Tiefenebenen haben; z. B. hat die Matrixstruktur 500 die Tiefenebenen 502, 504 und 506. Zur Veranschaulichung: Wenn die Matrixstruktur 500 ein 3×3×3-Bild darstellt, das als Satz von Aktivierungseingaben an eine erste Ebene gesendet wird, können die X- und Y-Dimensionen des Bilds (3×3) die Raumdimensionen sein, während die Z-Dimension (3) die Funktionsdimension sein kann, die den Werten R, G, und B entspricht. Das heißt, dass die Tiefenebene 502 einer Funktion mit neun '1'-Aktivierungseingaben entsprechen kann (z. B. Rotwerte), die Tiefenebene 504 einer Funktion mit neun '2'-Aktivierungseingaben entsprechen kann (z. B. Grünwerte) und die Tiefenebene 506 einer Funktion mit neun '3'-Aktivierungseingaben entsprechen kann (z. B. Blauwerte).
-
Obwohl in dem Beispiel in 5 nur drei Tiefenniveaus für die Funktionsdimension abgebildet sind, kann eine gegebene Funktionsdimension eine große Zahl, z. B. Hunderte, von Funktionsdimensionen aufweisen. In ähnlicher Weise kann eine gegebene Matrixstruktur, obwohl nur eine Funktionsdimension abgebildet ist, mehrere Funktionsdimensionen haben. Um mit der Matrixstruktur 500 die Berechnung der Faltungsebene auszuführen, muss das System die Faltungsberechnung in eine zweidimensionale Matrixmultiplikation umwandeln. 6 zeigt eine exemplarische Darstellung dazu, wie eine Matrixstruktur 500 in 5 von einem systolischen Array 606 bei einer gegebenen Faltungsebene verarbeitet wird. Die Matrixstruktur 600 kann ein Satz Aktivierungseingaben sein. Allgemein kann der Prozessor des neuronalen Netzwerks die Aktivierungseingaben (z. B. Elemente in einer Matrixstruktur 600) und Gewichtseingaben (z. B. Kernel A-D 610) an Zeilen bzw. Spalten des Arrays senden. Die Aktivierungs- und Gewichtseingaben können in dem systolischen Array nach rechts bzw. nach unten verschoben werden und müssen eine bestimmte Position erreichen, z. B. ein bestimmtes Register in einer bestimmten Zelle. Sobald festgestellt wird, dass die Eingaben am richtigen Ort sind (z. B. durch Analyse der Steuerungssignale), kann der Prozessor mithilfe der in den Zellen gespeicherten Eingaben Berechnungen durchführen, um die Ausgabe für die jeweilige Ebene zu erzeugen.
-
Der Prozessor des neuronalen Netzwerks „ebnet” die Matrixstruktur 600 ein, bevor er Teile der Struktur 600 an Zeilen des systolischen Arrays sendet, wie oben beschrieben. Das heißt, dass der Prozessor des neuronalen Netzwerks die Tiefenebenen 602 der Matrixstruktur 600 aufspalten kann, z. B. in die Tiefenebenen 602, 604, und 606 aus 6, und jedes Tiefenniveau an eine bestimmte Zelle senden.
-
In einigen Implementierungen wird jede Tiefenebene an eine Zelle in einer anderen Zeile des systolischen Arrays 606 gesendet. Der Prozessor kann z. B. die Aktivierungseingaben aus einer ersten Tiefenebene (z. B. einer Matrix mit neun '1'-Aktivierungseingaben) an eine Zelle ganz links in einer ersten Zeile des systolischen Arrays 606, aus einer zweiten Tiefenebene (z. B. einer Matrix mit neun '2'-Aktivierungseingaben) an eine Zelle ganz links in einer zweiten Zeile und aus einer dritten Tiefenebene (z. B. einer Matrix mit neun '3'-Aktivierungseingaben) an eine Zelle ganz links in einer dritten Zeile usw. senden.
-
Die angegebene Ebene kann mehrere Kernel aufweisen, z. B. Kernel A-D 610. Die Kernel A-D 610 können Matrixstrukturen der Dimension 3×3×10 aufweisen. Der Prozessor kann jede Kernel-Matrixstruktur an eine Zelle in einer bestimmten Spalte des systolischen Arrays 606 senden. Kernel A kann z. B. an eine oberste Zelle in einer ersten Spalte gesendet werden, während Kernel B an eine oberste Zelle in einer zweiten Spalte gesendet werden kann usw.
-
Wenn eine Matrixstruktur an eine Zelle gesendet wird, kann ein erstes Element der Matrix während einem Taktzyklus in der Zelle gespeichert werden. Beim nächsten Taktzyklus kann ein weiteres Element in der Zelle gespeichert werden. Das erste gespeicherte Element kann in eine benachbarte Zelle verschoben werden, wie oben beschrieben unter Bezugnahme auf 4. Das Verschieben von Eingaben kann fortgesetzt werden, bis alle Elemente der Matrixstruktur im systolischen Array 606 gespeichert sind. Sowohl die Aktivierungseingaben als auch die Gewichtseingaben können nach einem oder mehreren Taktzyklen innerhalb der jeweiligen Zelle verschoben werden. Das Verschieben der Eingaben innerhalb des systolischen Arrays wird weiter unten beschrieben unter Bezugnahme auf 7.
-
7 zeigt eine exemplarische Darstellung 700 mit Gewichtseingaben in Zellen eines exemplarischen systolischen 3×3-Arrays im Anschluss an drei Taktzyklen. Jede Zelle kann eine Gewichtseingabe und eine Aktivierungseingabe speichern, wie oben beschrieben unter Bezugnahme auf 5. Gewichtseingaben können an Zellen in bestimmten Spalten des systolischen Arrays für Faltungsberechnungen gesendet werden, wie oben beschrieben unter Bezugnahme auf 7. Zur Veranschaulichung sendet das System eine erste Kernel-Matrixstruktur mit den Gewichtseingaben von 1, 2, und 4 an eine erste Spalte des systolischen Arrays. Das System sendet eine zweite Kernelstruktur mit den Gewichtseingaben von 3, 5, und 7 an eine zweite Spalte. Das System sendet eine dritte Kernelstruktur mit den Gewichten 6, 8, und 10 an eine dritte Spalte. Nach jedem Taktzyklus können die Gewichtseingaben in einer Dimension verschoben werden, z. B. von oben nach unten, während die Aktivierungseingaben in einer anderen Dimension verschoben werden können (nicht abgebildet), z. B. von links nach rechts.
-
Gewichtseingaben können in den Zellen gestaffelt gespeichert werden. Das heißt, dass ein Zustand des systolischen Arrays nach einem ersten Taktzyklus 702 in einer Zelle oben links eine '1' anzeigt. Die '1' stellt die in der Zelle gespeicherte Gewichtseingabe von '1' dar. Beim nächsten Taktzyklus 704 wird die '1' in eine Zelle unterhalb der Zelle oben links verschoben, und eine andere Gewichtseingabe aus dem Kernel, die '2', wird in der Zelle oben links gespeichert, während eine Gewichtseingabe von '3' bei einer obersten Zelle in einer zweiten Spalte gespeichert wird. Bei einem dritten Taktzyklus 706 wird jedes Gewicht erneut verschoben. In der ersten Spalte speichert eine Zelle am Fuß die Gewichtseingabe '1', die Gewichtseingabe '2' wird da gespeichert, wo im vorigen Zyklus die Gewichtseingabe '1' gespeichert wurde, und eine Gewichtseingabe '4' wird in der Zelle ganz oben links gespeichert. Auf ähnliche Weise wird die '3' in der zweiten Spalte nach unten verschoben, und eine Gewichtseingabe '5' wird in der Mitte der obersten Zelle gespeichert. In der dritten Spalte wird eine Gewichtseingabe '6' in der Zelle ganz oben rechts gespeichert.
-
Bei manchen Ausführungsformen wird ein Steuersignal für die Gewichtseingaben, das angibt, ob die Gewichtseingaben verschoben werden sollen, ebenfalls gemeinsam mit den Gewichtseingaben verschoben.
-
Aktivierungseingaben können in ähnlicher Weise in der anderen Dimension verschoben werden, z. B. von links nach rechts.
-
Sind die Aktivierungseingaben und die Gewichtseingaben einmal an Ort und Stelle, kann der Prozessor eine Faltungsberechnung ausführen, z. B. indem er die Multiplikations- und Summenschaltungen innerhalb der Zellen verwendet, um einen Satz Sammelwerte zu erzeugen, die in einer Vektorberechnungseinheit zu verwenden sind.
-
Obwohl das System mit Gewichtseingaben beschrieben wurde, die an Spalten des Arrays gesendet werden, und Aktivierungseingaben, die an Zeilen des Arrays gesendet werden, werden bei manchen Ausführungsformen die Gewichtseingaben an die Zeilen des Arrays und die Aktivierungseingaben an die Spalten des Arrays gesendet.
-
8 ist eine exemplarische Darstellung dazu, wie Steuerungswerte dafür sorgen können, dass Gewichtseingaben verschoben oder geladen werden. Die Steuerungswerte 806 können an einen Host gesendet und von Gewichtssequenzern gespeichert werden, wie oben beschrieben unter Bezugnahme auf 3. Die Werte im Graphen repräsentieren auf einer Pro-Taktzyklus-Basis 802 Steuerungswerte, die in Gewichtssequenzern 808–814 gespeichert sind, welche den Zeilen 1–4 804 eines systolischen Arrays entsprechen.
-
In einigen Implementierungen wird eine Gewichtseingabe des systolischen Arrays in eine benachbarte Zelle verschoben, wenn ein Steuerungswert in einem gegebenen Gewichtssequenzer nicht 0 ist. Wenn der Steuerungswert im gegebenen Gewichtssequenzer 0 ist, kann die Gewichtseingabe in die entsprechende Zelle geladen zur Berechnung eines Produkts mit einer Aktivierungseingabe in der Zelle verwendet werden.
-
Zu Illustrationszwecken kann ein Host ermitteln, ob vier Gewichtseingaben verschoben werden sollen, bevor sie geladen werden. Bei Taktzyklus 0 kann der Host einen Steuerungswert von 5 an Gewichtssequenzer 808 (also den Gewichtssequenzer, der Zeile 1 entspricht) senden. Der Gewichtssequenzer 808 beinhaltet eine Dekrementschaltung, die auf einen Taktzyklus zurückgreift, um anhand des Steuerungswerts von 5 einen Steuerungswert von 4 auszugeben. Daher wird der Steuerungswert von 4 beim folgenden Taktzyklus (d. h. Taktzyklus 1) im Gewichtssequenzer 808 gespeichert.
-
Beim Taktzyklus 1 sendet der Host einen Steuerungswert von 4 an den Gewichtssequenzer 808.
-
Darum speichert der Gewichtssequenzer 808 bei Taktzyklus 2 einen Steuerungswert von 3 (z. B. mit der Dekrementschaltung). Beim Taktzyklus 1 kann der Gewichtssequenzer 808 den Steuerungswert von 4 an Gewichtssequenzer 810 senden. Nachdem der Steuerungswert von 4 von der Dekrementschaltung des Gewichtssequenzer 810 verarbeitet worden ist, kann der Gewichtssequenzer 810 daher bei Taktzyklus 2 einen Steuerungswert von 3 speichern. Gleichermaßen kann der Host Steuerungswerte von 3, 2 und 1 bei Taktzyklen 2, 3 bzw. 4 versenden. Da die Dekrementschaltung in jedem Gewichtssequenzer 808–814 beim Dekrementieren von Steuerungswerten eine Verzögerung verursacht, kann das Dekrementieren von Steuerungswerten 806 in jedem Taktzyklus letztendlich jeden Gewichtssequenzer dazu bringen, den gleichen Steuerungswert zu speichern (d. h. Steuerungswerte von 1 bei Taktzyklus 4 und Steuerungswerte von 0 bei Taktzyklus 5).
-
In einigen Implementierungen – wenn jeder Gewichtssequenzer einen Steuerungswert von 0 ausgibt – hält das systolische Array das Verschieben von Gewichtseingaben an und lädt die Gewichtseingaben in die einzelnen Zellen. Durch das Laden der Gewichtseingaben ermöglicht es das systolische Array also, dass sich die Gewichtseingaben als Operanden in Skalarproduktberechnungen verwenden lassen, wodurch die Verarbeitung einer Ebene in einem neuronalen Netzwerk gestartet wird.
-
In einigen Implementierungen – nach Fertigstellung einer Berechnung und zum Starten einer erneuten Verschiebung von Gewichten – ändert der Host die Steuerungswerte in eine Zahl, die nicht 0 ist (z. B. Senden eine Steuerungswerts von 5 im Taktzyklus 7). Das Verfahren der Verschiebung kann wie oben beschrieben unter Bezugnahme auf Taktzyklus 0 wiederholt werden.
-
In einigen Implementierungen starten die Steuerungswerte bei einem anderen Offset (z. B. 1). Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen funktionalen Operationen können in digitalen elektronischen Schaltungen oder in einer konkret darin verkörperten Computersoftware oder Firmware, in Hardware (einschließlich der in dieser Spezifikation offenbarten Strukturen und ihrer strukturellen Entsprechungen) oder in beliebigen Kombinationen daraus implementiert werden. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme (d. h. als ein oder mehrere Module von Computerprogrammbefehlen) implementiert werden, die auf einem Computer-Speichermedium für die Ausführung durch oder die Steuerung der Operation des datenverarbeitenden Geräts codiert sind. Alternativ oder zusätzlich können die Programmbefehle in einem künstlich erzeugten und übertragenen Signal (z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal) codiert sein, das erzeugt wird, um Informationen für die Übertragung an geeignetes Empfängergerät zur Ausführung durch ein datenverarbeitendes Gerät zu codieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln.
-
Der Begriff „Datenverarbeitungsvorrichtung” umfasst alle Arten von Vorrichtungen, Geräten und Maschinen zum Verarbeiten von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Rechners oder mehrerer Prozessoren oder Rechner. Die Vorrichtung kann spezielle Logikschaltungen umfassen, z. B. ein FPGA (Field Programmable Gate Array-programmierbare Hardware-Logik) oder ein ASIC (anwendungsspezifische integrierte Schaltung). Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Durchführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbankverwaltungssystem, ein Betriebssystem, oder eine Kombination einer oder mehrerer der genannten.
-
Ein Computerprogramm (das auch als Programm, Software, Softwareanwendung, Modul, Softwaremodul, Skript oder Code bezeichnet werden kann) kann in einer beliebigen Form von Programmiersprache verfasst sein (einschließlich kompilierter oder interpretierter Sprachen bzw. funktional reiner, deklarativer oder verfahrensorientierter Sprachen) und in beliebiger Form bereitgestellt werden (z. B. als unabhängiges Programm oder als Modul, als Komponente, als Subroutine oder als eine andere Einheit, die zur Nutzung in einer Rechenumgebung geeignet ist). Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern. Ein Computerprogramm kann auf einem Computer oder mehreren Computer eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
-
Die in dieser Beschreibung dargestellten Prozesse und Logik-Abläufe können durch einen oder mehrere programmierbare Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Funktionen durch das Arbeiten mit Eingabedaten und das Erzeugen von Ausgaben auszuführen. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
-
Computer, die zur Ausführung eines Datenverarbeitungsprogramms geeignet sind, können beispielsweise allgemeine oder spezielle Mikroprozessoren oder beides oder jede andere Art einer Zentraleinheit beinhalten. Ganz allgemein nimmt eine zentrale Recheneinheit Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind eine CPU für das Ausführen von Befehlen und ein oder mehrere Speichergeräte für das Speichern von Befehlen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehr Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen. Jedoch muss ein Computer solche Geräte nicht haben.
-
Außerdem kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Personal Digital Assistant (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger (GPS) oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen. Computerlesbare Medien, die für das Speichern von Computerprogrammbefehlen und -daten geeignet sind, beinhalten alle Formen von nicht flüchtigen Speichern, Medien und Speichergeräten, zum Beispiel Halbleiterspeicher wie EPROM, EEPROM und Flashspeichergeräte; Magnetplatten wie interne Festplatten oder auswechselbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
-
Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Monitor, mit welchem dem Benutzer Informationen angezeigt werden, sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Nutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Darüber hinaus kann ein Computer über das Senden von Dokumenten an und das Empfangen von Dokumenten von einer Einrichtung, die vom Benutzer verwendet wird, mit einem Benutzer interagieren; beispielsweise über das Senden von Webpages an einen Webbrowser auf dem Clientgerät des Benutzers als Antwort auf die vom Webbrowser empfangenen Aufforderungen.
-
Ausführungsformen der in dieser Spezifikation betrachteten Gegenstands können in ein Computersystem implementiert werden, das eine Backend-Komponente (z. B. einen Datenserver), oder eine Middleware-Komponente (z. B. einen Anwendungsserver), oder eine Frontend-Komponente (z. B. einen Client-Computer mit graphischem Benutzerinterface oder Webbrowser) umfasst, worüber der Benutzer mit einer Implementierung der in dieser Spezifikation betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein (z. B. über ein Kommunikationsnetzwerk). So beinhalten beispielsweise Kommunikationsnetzwerke ein lokales Netzwerk („LAN”), ein Fernnetz („WAN”), z. B. das Internet.
-
Das Computersystem kann Clients und Server umfassen. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung zwischen Client und Server entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computern laufen und die eine Client-Server-Beziehung zueinander haben.
-
Zwar enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
-
Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anforderung verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Tätigkeiten ausgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemmodule und -komponenten in den oben beschriebenen Ausführungsformen nicht als in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
-
Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. Die in den Ansprüchen ausgeführten Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden und dennoch gewünschte Ergebnisse erzielen. Die in den beigefügten Figuren dargestellten Verfahren erfordern beispielsweise nicht unbedingt die gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.