-
HINTERGRUND
-
Diese Patentschrift bezieht sich auf die Datenverarbeitung neuronaler Netzwerk-Inferenzen in Hardware.
-
Neuronale Netzwerke sind Maschinenlernprogramme, die eine oder mehrere Schichten von Neuronen verwenden, um eine Ausgabe, z. B. eine Klassifizierung für eine empfangene Eingabe zu erzeugen. Einige neuronale Netzwerke umfassen zusätzlich zu einer Außenschicht eine oder mehrere ausgeblendete Schichten. Die Ausgabe jeder ausgeblendeten Schicht wird als Eingabe zur nächsten Schicht im Netzwerk verwendet, z.B. die nächste ausgeblendete Schicht oder die Ausgangsschicht des Netzwerks. Jede Schicht des Netzwerks erzeugt in Übereinstimmung mit aktuellen Werten eines jeweiligen Satzes von Parametern eine Ausgabe von einer empfangenen Eingabe.
-
Ursprünglich berechnen einige neuronale Netzwerksysteme Inferenzen seriell. Das heißt, wenn Inferenzen für mehrere Eingaben berechnet werden, kann das neuronale Netzwerksystem jede Eingabe durch jede der Schichten des neuronalen Netzwerks verarbeiten, um die Ausgabe für die Eingabe zu erzeugen, bevor die nächste Eingabe verarbeitet wird.
-
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 Gegenstandes in Verfahren implementiert werden, jeweils eine neuronale Netzwerkausgabe für jede einer Vielzahl von Eingaben umfassen, wobei das Erzeugen die Verarbeitung jeder Eingabe durch jede einer Vielzahl von neuronalen Netzwerkschichten umfasst, um die jeweilige neuronale Netzwerkausgabe für die Eingabe zu erzeugen, wobei die neuronalen Netzwerkschichten in einer Sequenz angeordnet sind und wobei jede neuronale Netzwerkschicht eine jeweilige Stapelgröße aufweist, wobei das Verfahren für jede der neuronalen Netzwerkschichten umfasst: empfangen einer Vielzahl von Eingaben, die auf der neuronalen Netzwerkschicht zu verarbeiten sind; bilden eines oder mehrerer Eingabesignale von der Vielzahl von Eingaben, wobei jeder Stapel eine Anzahl von Eingaben bis zu der jeweiligen Stapelgröße für die neuronale Netzwerkschicht aufweist; auswählen einer Reihe von einem oder mehreren Stapeln der zu verarbeitenden Eingaben, wobei eine Zählung der Eingaben in der Anzahl der einen oder mehreren Stapeln größer oder gleich der jeweils zugeordneten Stapelgröße einer nachfolgenden Schicht in der Sequenz ist; und verarbeiten der Anzahl von einem oder mehreren Stapeln von Eingaben, um die jeweilige neuronale Netzwerkschichtausgabe zu erzeugen.
-
Implementierungen können eines oder mehrere der folgenden Merkmale beinhalten. Die jeweilige Stapelgröße basiert auf mindestens einem Gewichtswiederverwendungswert, wobei der Gewichtswiederverwendungswert die Anzahl der benötigten Gewichtsdateneingaben für eine Berechnungszeit von Ergebnisdaten anzeigt, die für Gewichtsdateneingaben bei einer Matrixberechnungseinheit länger ist als die Speicherzeit der Gewichtsdateneingaben aus dem Speicher. Wobei der Gewichtswiederverwendungswert mindestens auf einem Taktwert des Speichers für die Gewichtsdateneingaben basiert. Jede Stapelgröße basiert mindestens auf dem Quotienten des Gewichtwiederverwendungswerts mit der Anzahl der Einzelfälle, in denen Gewichtsdateneingaben für die entsprechende Schicht wiederverwendet werden. Die Vielzahl von neuronalen Netzwerkschichten wird an einer Matrix-Recheneinheit verarbeitet, wobei das Verarbeiten mindestens eines Eingabestapels die Berechnung der angehäuften Werte für jede Eingabe umfasst, die die Matrix-Recheneinheit nutzen. Der Gewichtswiederverwendungswert basiert auf einer Anzahl von Arithmetikeinheiten innerhalb der Matrix-Recheneinheit. Jede Eingabe entspricht einer eindeutigen Bildquelle. Bilden eines Stapels aus einer oder mehreren Schichtausgaben zur Verarbeitung an der nachfolgenden Schicht. Erzeugen einer korrespondierenden Inferenz für jede Ausgabe.
-
Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Die spezielle Hardware-Schaltung kann die Berechnung für ein neuronales Netzwerk mit mehreren Schichten durch Wiederverwendung von Gewichtseingaben für eine gegebene Schicht auf mehreren unabhängigen Eingaben effizient durchführen. Die Gewichtseingaben werden insbesondere mehrmals wiederverwendet, sodass eine Berechnungszeit der der Wiedergewinnung der Gewichtseingaben mehrfach größer ist als eine Abrufzeit des Zugriffs auf neue Gewichtseingabe aus dem Speicher, wodurch der Durchsatz in der Schaltung maximiert und ein Abwürgen der Schaltung vermieden wird. Die Schaltung kann die Berechnung effizient durchführen, selbst wenn Gewichtseingaben in jeder Schicht unterschiedlich oft wiederverwendet werden.
-
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 exemplarischen Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzwerks.
-
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 ist ein Flussdiagramm eines exemplarischen Verfahrens, um neuronale Netzwerkberechnungen für mehrere Schichten durchzuführen.
-
6 veranschaulicht ein exemplarisches neuronales Netzwerk mit mehreren Schichten und Stapelgrößen für jede Schicht.
-
Gleiche Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen bezeichnen gleiche Elemente.
-
DETAILLIERTE 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 in einer Reihe mit jeweils einem Gewichtssatz in einer Sequenz angeordnet sein. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe entsprechend den Gewichtssätzen für die Schicht, um eine Ausgabe zu erzeugen. Die Ausgabe kann in der nächsten neuronalen Netzwerkschicht als Eingang verwendet werden.
-
Daher empfängt das neuronale Netzwerk die Eingabe und verarbeitet diese zum Erzeugen der Inferenz in der Sequenz durch jede der neuronalen Netzwerkschichten, wobei die Ausgabe einer Netzwerkschicht als Eingabe für die nächste neuronale Netzwerkschicht vorgesehen ist. Dateneingaben zu einer neuronalen Netzwerkschicht, können z. B. entweder als Eingabe für das neuronale Netzwerk oder als Ausgabesignale 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 einer ausgerichteten Graphenstruktur angeordnet. Das heißt, jede spezielle Schicht kann mehrere Eingaben, mehrere Ausgaben oder beides empfangen. Die Schichten des neuronalen Netzes können auch so angeordnet sein, dass eine Ausgabe einer Schicht als Eingabe in eine vorhergehende Schicht zurückgesendet werden kann.
-
1 ist ein Flussdiagramm eines exemplarischen Prozesses 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 mit einer oder mehreren Schaltungen beschrieben, die das Verfahren 100 ausführen. Das Verfahren 100 kann für jede Schicht des neuronalen Netzwerks ausgeführt werden, um eine Inferenz aus einer empfangenen Eingabe zu berechnen.
-
Das System empfängt für die gegebene Schicht Gewichtseingabesätze (Schritt 102) und Aktivierungseingabesätze (Schritt 104). Die Gewichtseingabesätze und die Aktivierungseingaben können entsprechend der speziellen Hardwareschaltung vom dynamischen Speicher und einem einheitlichen Puffer 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 Gewichtseingabesätze und den Aktivierungseingaben. Das heißt, für einen Satz von Gewichtungen, kann das System jede Gewichtseingabe mit jeder Aktivierungseingabe 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. Die Schichtausgabe 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 die empfangene Eingabe zu erzeugen, wenn eine empfangene Eingabe 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 Konfigurationsinformationen für eine neuronale Netzwerkberechnung umfassen. Die Konfigurationsinformationen können mindestens eine oder mehrere der folgenden umfassen: wie viele Schichten, entsprechende Sätze von Gewichtseingaben für jede Schicht des Modells, einen anfänglichen Satz von Aktivierungseingaben, d.h. die Eingabe für das neuronale Netzwerk, aus der die Interferenz, die entsprechenden Eingabe- und Ausgabegrößen jeder Schicht, einen Schrittwert für die neuronale Netzwerkberechnung und einen Typ der zu verarbeitenden Schicht, z.B. eine Faltungsschicht oder eine vollständig verbundene Schicht, verarbeitet werden sollen.
-
Die Host-Schnittstelle 202 kann die Anweisungen an einen Sequenzer 206 senden, der die Anweisungen in Steuersignale mit niedrigem Pegel umwandelt, die die Schaltung zur Durchführung der neuronalen Netzwerkberechnungen steuern. In einigen Implementierungen regeln die Steuersignale den Datenfluss in der Schaltung, z.B. wie die Gewichtseingabesätze und die Aktivierungseingabesä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. Bei einigen Implementierungen ist der Sequenzer 206 ein Prozessor, der Taktsignale erzeugt. Der Sequenzer 206 kann die Zeitsteuerung der Taktsignale verwenden, um zu gegebener Zeit die Steuersignale an jede Komponente der Schaltung 200 zu übermitteln. Bei einigen anderen Implementierungen übergibt die Host-Schnittstelle 202 von einem externen Prozessor in ein Taktsignal.
-
Die Host-Schnittstelle 202 kann Gewichtseingabesä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. Bei 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 Ausgaben der Vektor-Recheneinheit 214 zu speichern. Das direkte Speicherzugriffsprogramm 204 kann auch die Ausgaben der Vektor-Recheneinheit 214 aus dem einheitlichen Puffer 208 lesen.
-
Der dynamische Speicher 210 und der einheitliche Puffer 208 können die Gewichtseingabesä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 Ausgabevektor verarbeiten und einen Vektor von verarbeiteten Ausgaben zum einheitlichen Puffer 208 speichern. So kann beispielsweise die Vektor-Recheneinheit 214 eine nichtlineare Funktion auf Ausgaben 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 Ausgaben kann als Aktivierungseingabe 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 exemplarische Architektur 300 mit einer Matrix-Recheneinheit. Die Matrix-Recheneinheit ist ein zweidimensionales systolisches Array 306. Das Array 306 beinhaltet 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 Aktivierungseingaben an Zeilen des Arrays 306 und eine Gewichtsabrufschnittstelle 308 sendet Gewichtseingaben an Spalten des Arrays 306. Bei einigen anderen Implementierungen werden jedoch Aktivierungseingaben zu den Spalten übertragen und Gewichtseingaben zu den Zeilen des Arrays 306.
-
Die Wertlader 302 können die Aktivierungseingaben von einem einheitlichen Puffer, z.B. dem einheitlichen Puffer 208 von 2 empfangen. Jeder Wertlader kann eine entsprechende Aktivierungseingabe 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 eine Aktivierungseingabe zur Zelle 314 senden. Der Wertlader kann auch die Aktivierungseingabe an einen benachbarten Wertlader senden und die Aktivierungseingabe kann an einer anderen am weitesten links liegenden Zelle des Arrays 306 verwendet werden. Dies ermöglicht, dass Aktivierungseingaben 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 zu einer obersten 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 Aktivierungseingaben über das gesamte Array 306 entlang einer Dimension, z.B. nach rechts verschieben, während die Gewichtseingaben entlang des gesamten Arrays 306 entlang einer anderen Dimension, z. B. nach unten, verschoben werden können. So kann beispielsweise die Aktivierungseingabe 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 eine gegebene Gewichtseingabe und eine gegebene Aktivierungseingabe verarbeiten. Die kumulierte Ausgabe kann auch an die benachbarte Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergegeben werden. Nachfolgend wird unter Bezugnahme auf 4 eine Einzelzelle beschrieben.
-
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 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.
-
4 zeigt eine exemplarische Architektur 400 einer Zelle innerhalb eines systolischen Arrays, z. B. des systolischen Arrays 306 von 3.
-
Die Zelle kann ein Aktivierungsregister 406 umfassen, das eine Aktivierungseingabe 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 eine Gewichtseingabe speichert. Die Gewichtseingabe 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 kumulierten Wert von 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 kumulierte Wert kann in der unteren benachbarten Zelle für eine Summierung als Operand verwendet werden.
-
Die Zelle kann auch die Gewichtseingabe und die Aktivierungseingabe zur Verarbeitung zu benachbarten Zellen verschieben. So kann beispielsweise das Gewichtsregister 402 die Gewichtseingabe zu einem anderen Gewichtsregister 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.
-
Bei einigen Implementierungen enthält die Zelle auch ein Steuerregister. Das Steuerregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtseingabe oder die Aktivierungseingabe zu benachbarten Zellen verschieben soll. Bei einigen Implementierungen erfordert das Verschieben der Gewichtseingabe oder der Aktivierungseingabe einen oder mehrere Taktzyklen. Das Steuersignal kann weiterhin bestimmen, ob die Aktivierungseingaben oder Gewichtseingaben an die Multiplikationsschaltung 408 übertragen werden, oder ob die Multiplikationsschaltung 408 auf den Aktivierungs- und Gewichtseingaben arbeitet. 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, die Gewichtseingabe innerhalb der Zelle bleibt und nicht zu einer benachbarten Zelle übertragen wird. Die Gewichtseingabe kann daher auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 408 und entsprechende kumulierte Werte können zu einer benachbarten Zelle übertragen werden.
-
Bei einigen Implementierungen wird eine neuronale Netzwerkeingabe durch jede der Schichten des neuronalen Netzwerks verarbeitet, um eine neuronale Netzwerkausgabe für die neuronale Netzwerkeingabe zu erzeugen. Bei einigen Implementierungen verarbeitet die Schaltung jedoch mehrere neuronale Netzwerkeingaben durch die Schichten des neuronalen Netzwerks gleichzeitig, um neuronale Netzwerkausgaben für die Eingaben zu erzeugen, wodurch die Auslastung der Schaltung erhöht wird.
-
Eine Eingabe zu einer bestimmten Schicht des neuronalen Netzwerks kann als ein Satz von Aktivierungseingaben bezeichnet werden. Daher kann eine neuronale Netzwerkeingabe ein Satz von Aktivierungseingaben zu einer ersten Schicht sein. Die erste Schicht kann eine Ausgabe erzeugen, die durch eine zweite Schicht verarbeitet wird und die Ausgabe kann als ein Satz von Aktivierungseingaben zu der zweiten Schicht bezeichnet werden.
-
Bei einigen Implementierungen kann die Schaltung, die einen Satz von Aktivierungseingaben verarbeitet, durch die Aktivierungseingaben von einer ersten Schicht bis zu einer letzten Schicht des neuronalen Netzwerks gesendet werden, um eine Inferenz zu erzeugen, mehrere Sätze von Aktivierungseingaben an einer ersten Schicht verarbeiten, z. B. kumulierte Werte für jeden Satz von Aktivierungseingaben erzeugen, wie oben in 3 beschrieben, dann mehrere Sätze von Aktivierungseingaben an einer zweiten Schicht verarbeiten, und so weiter. Mehrere Sätze von Aktivierungseingaben an einer gegebenen Schicht können eine oder mehrere Eingabestapel bilden. Bei einigen Implementierungen werden, bevor die Schaltung Stapel einer nachfolgenden Schicht verarbeitet, Stapel für eine gegebene Schicht verarbeitet. Die Schaltung kann durch Erzeugen kumulierter Werte einen Stapel für jede Eingabe, der ein unabhängiger Satz von Aktivierungseingaben sein kann, im Stapel verarbeiten.
-
Bei einigen Implementierungen kann, um den Durchsatz während der Berechnungen für eine gegebene neuronale Netzwerkschicht zu maximieren, die Schaltung veranlasst werden mehrere unabhängige Aktivierungseingaben zu verarbeiten, während die Gewichtseingaben für die gegebene neuronale Netzwerkschicht in das systolische Array geladen werden. Das heißt, die Gewichtseingaben können mit mehreren Aktivierungseingaben wiederverwendet werden. Insbesondere verwendet die Schaltung Gewichtseingaben durch Berechnen von kumulierten Werten unter Verwendung der Gewichtseingaben und verschiedener Aktivierungseingaben, z. B. unter Verwendung der Matrix-Recheneinheit 212 von 2. Zur Veranschaulichung können die Aktivierungseingaben aus mehreren unterschiedlichen Bildressourcen oder mehreren Audioproben bestehen. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
-
Die Schaltung hat eine Verarbeitungsgeschwindigkeit und eine Geschwindigkeit, mit der sie auf den Speicher zugreifen kann. Im Allgemeinen ist die Verarbeitungsgeschwindigkeit schneller als die Speicherzugriffsgeschwindigkeit. Durch Wiederverwendung von Gewichten und wodurch die Verarbeitungsgeschwindigkeit der Schaltung genutzt wird, kann die Schaltung die Zellen des systolischen Arrays, die in nachfolgenden Berechnungen verwendet werden sollen, verwenden, während sie parallel Zugriff auf Gewichtseingaben aus dem Speicher hat.
-
Die Schaltung kann für jede Schicht des neuronalen Netzwerks bestimmen, wie oft Gewichte aus einem Gewichtwiederverwendungswert für die Schaltung wiederverwendet werden. Dies kann durch eine Software, die für die Hardware oder durch die Hardware kompiliert ist, auf der Schaltung bestimmt werden. Bei einigen Implementierungen ist der Gewichtswiederverwendungswert die Anzahl, wie oft die Schaltung Gewichtseingaben wiederverwenden kann, bevor eine Berechnungszeit der Wiederverwendung der Gewichtseingaben mit verschiedenen Aktivierungseingaben größer oder gleich einer Abrufzeit des Zugriffs auf neue Gewichtseingaben aus dem Speicher erfolgt. Daher kann der Gewichtswiederverwendungswert angeben, wie oft die Schaltung die Gewichtseingaben wiederverwenden kann, um die Auslastung zu maximieren und die Speicherzugriffswartezeit zu minimieren.
-
Der Gewichtswiederverwendungswert kann auf einem oder mehreren der folgenden Werte basieren: Eine Taktrate des Speichers der die Gewichtseingaben speichert, z. B. den dynamischen Speicher 210 von 2, eine Anzahl von Arithmetikeinheiten innerhalb der Schaltung, z. B. die Innenmatrix-Recheneinheit 212 von 2, und eine Anzahl von Kanälen im Speicher, z. B. einen einheitlichen Puffer 208 und einen dynamischer Speicher 210 von 2. Der Gewichtwiederverwendungswert kann verwendet werden, um eine entsprechende Stapelgröße für jede Schicht des neuronalen Netzwerks zu bestimmen. Die Stapelgröße kann als eine effektive Stapelgröße bezeichnet werden, d.h. eine Stapelgröße die es einer Schicht ermöglicht in einer Weise zu arbeiten, um die effizienteste Menge an Gewichtwiederverwendung zu erzeugen. Die Stapelgröße ist eine Anzahl von Eingaben, die in einer Schicht so verarbeitet werden sollen, dass das systolische Array in der Schaltung maximiert wird. Bei einigen Implementierungen ist eine Stapelgröße die Obergrenze des Gewichtswiederverwendungswerts für eine gegebene Schicht, dividiert durch die Anzahl der Wiederholungen der Gewichtseingaben an der Schicht. Die Anzahl der Wiederholungen der Gewichtseingaben kann direkt der Anzahl von Aktivierungseingaben entsprechen, die in den Zellen eines systolischen Arrays der Schaltung gespeichert sind, wenn eine Akkumulationsberechnung durchgeführt wird. Dies liegt daran, dass die Gewichtseingaben in den Zellen verbleiben können, d.h. während neue Sätze von Aktivierungseingaben geladen werden „pausieren“. Wenn neue Sätze von Aktivierungseingaben geladen werden, wobei die Gewichtseingabe eingefroren ist, kann die Schaltung die Gewichtseingabe wiederverwenden, um die Windungen mit den neuen Sätzen von Aktivierungseingaben zu berechnen. Ein Beispiel wird ferner unten unter Bezugnahme auf 6 beschrieben.
-
5 ist ein Flussdiagramm 500 eines exemplarischen Verfahrens, um neuronale Netzwerkberechnungen für mehrere Schichten durchzuführen. Das Verfahren kann durch eine spezielle Hardware-Schaltung durchgeführt werden, z.B. unter Verwendung des Hosts 202 von 2, oder durch einen oder mehrere Prozessoren, Firmware, Off-Chip-Prozesse oder durch einen anderen Softwareprozess, der zur Steuerung der Schaltung konfiguriert ist.
-
Die Schaltung kann zur Verarbeitung durch die Schicht, während der Verarbeitung an jeder neuronalen Netzwerkschicht, einen Satz von Schichteingaben empfangen. (Schritt 502). Der Satz von Schichteingaben kann aus dem Speicher bestehen, z. B. dem einheitlichen Puffer 208 von 2, oder von einer vorherigen Schicht, d.h. der Satz von Eingaben sind Ausgaben, die von der vorhergehenden Schicht in dem Netzwerk erzeugt wurden, und das Verwenden der Ausgaben als die Menge der Eingaben kann durch den Host 202 verwaltet werden, wie vorstehend unter Bezugnahme auf 2 beschrieben. Jede Eingabe kann ein Satz von Aktivierungseingaben sein und von einer unabhängigen neuronalen Netzwerkeingabe erzeugt werden
-
Das System kann für eine gegebene neuronale Netzwerkschicht aus dem Satz von Eingaben einen oder mehrere Eingabestapel bilden (Schritt 504). Wie oben beschrieben, hat jede neuronale Netzwerkschicht eine zugeordnete Stapelgröße. Jeder an der Schicht gebildete Stapel beinhaltet eine Anzahl von Eingaben, die die Stapelgröße der Schicht nicht überschreitet. Die Stapelgröße für jede neuronale Netzwerkschicht kann als eine Konfiguration des neuronalen Netzwerks bestimmt werden. Bei einigen Implementierungen wird die Stapelgröße für jede neuronale Netzwerkschicht berechnet, wenn für die Ausführung ein neuronales Netzwerkmodell auf der Schaltung kompiliert wird. Da die Stapelgröße für eine gegebene Schicht berechnet werden kann bevor die Verarbeitung an einer Schicht beginnt, kann die Anzahl der Eingabe innerhalb eines Stapels basierend auf der Stapelgröße der gegebenen Schicht gebildet werden.
-
Wenn beispielsweise 24 Bilder von einem neuronalen Netzwerk verarbeitet werden müssen und eine erste Schicht des neuronalen Netzwerks eine Stapelgröße von 8 aufweist, kann die Schaltung 3 Stapel von 8 Bildern bilden, d.h. die 24 Bilder in 3 Stapel von 8 Eingaben aufteilen. Für jeden Stapel kann die Schaltung die 8 verschiedenen Bilder in dem Stapel verarbeiten, indem ein bestimmter Satz von Gewichtseingaben für die Schicht wiederverwendet wird. Die Schaltung kann dann entweder (1) eine oder mehrere Stapel auf einer nachfolgenden Schicht oder (2) unter Verwendung des bestimmten Satzes von Gewichtseingaben einen anderen Satz von 8 verschiedenen Bildressourcen auf der Schicht verarbeiten. Die Schaltung bestimmt, ob auf der Grundlage von Stapelgrößen anderer Schichten in dem neuronalen Netzwerk, mit (1) oder (2) fortgefahren wird, wie nachfolgend unter Bezugnahme 506 auf 6 beschrieben wird.
-
Die Schaltung kann für eine gegebene neuronale Netzwerkschicht eine Anzahl einer oder mehrerer Eingabestapel auswählen, die verarbeitet werden sollen (Schritt 506). Bei einigen Implementierungen ist die Anzahl so gewählt, dass eine Zählung der Eingaben in der Anzahl einer oder mehrerer Stapel größer oder gleich der entsprechenden Stapelgröße einer nachfolgenden Schicht ist. So kann beispielsweise, wenn eine aktuelle Schicht 3 Stapel mit jeweils 5 Eingaben und einer darauffolgenden Schicht als Stapelgröße von 10 verarbeiten muss, die Schaltung 2 der 3 Stapel zur Verarbeitung auswählen. Die 2 ausgewählten Stapel haben insgesamt 10 Eingaben, d.h. 2·5, was gleich zu der entsprechenden Stapelgröße der nachfolgenden Schicht ist, d.h. 10. Bei einigen Implementierungen wird der verbleibende dritte Stapel bei einem nachfolgenden Durchlauf des systolischen Arrays in der Schaltung verarbeitet. Ein weiteres Beispiel wird nachfolgend unter Bezugnahme auf 6 beschrieben.
-
Die Schaltung kann z. B. unter Verwendung eines systolischen Arrays die ausgewählte Anzahl von Eingabestapel verarbeiten, um einen entsprechenden Schichtausgang für jede Eingabe in den ausgewählten Stapeln zu erzeugen (Schritt 508). Die Schaltung kann durch Wiederverwendung von Gewichtseingaben bei der Berechnung von kumulierten Werten für jede Eingabe, jeden ausgewählten Eingabestapel verarbeiten. Wie vorstehend beschrieben, werden die Gewichtseingaben, während neue Sätze von Aktivierungseingaben geladen werden, auf mehrere unabhängige Eingaben angewendet, da die Gewichtseingaben in den Zellen verbleiben können, d.h. „pausieren“.
-
Zur Veranschaulichung kann ein Stapel zwei Eingaben aufweisen – einen Satz von Aktivierungseingaben A1 und einen Satz von Aktivierungseingaben A2. Die Schaltung kann einen Satz von Gewichtseingaben W1 wiederverwenden, indem der Satz W1 auf beide Sätze A1 und A2 angewendet wird, bevor ein Satz W2 von Gewichtseingaben aus dem Speicher abgerufen wird, wobei der Satz W2 ein Gewichtssatz für eine nachfolgende Schicht ist oder, falls die Schicht mehrere Gewichte aufweist, die von einem systolischen Array der Schaltung zu verarbeiten sind, eine nächste Teilmenge von Gewichten für die Schicht. Wenn beispielsweise 8 Stapel mit jeweils 5 Eingaben verarbeitet werden, d.h. insgesamt 40 Eingaben und die Schaltung 4 Stapel zur Verarbeitung auswählt, kann die Schaltung die Eingaben innerhalb der 4 Stapel verarbeiten, d.h. insgesamt 20 Eingaben, um entsprechende Schichtausgaben zu erzeugen, d.h. insgesamt 20 Schichtausgaben. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
-
Nach dem Verarbeiten der ausgewählten Anzahl von Stapeln kann die Schaltung entweder eine zweite Anzahl von Stapeln an der Schicht verarbeiten oder fortfahren, um eine oder mehrere Eingabestapel an einer nachfolgenden Schicht zu verarbeiten. Dies wird ferner weiter unten unter Bezugnahme auf 6 beschrieben.
-
Obwohl dieses Verfahren als Schaltung zur Verarbeitung eines neuronalen Netzwerks beschrieben wurde, kann dieses Verfahren auch auf einem Prozessor, z. B. einer zentralen Verarbeitungseinheit (CPU) oder einem Grafikprozessor (GPU) implementiert werden. So kann beispielsweise, während Gewichte aus dem Speicher abgerufen werden, der Prozessor einen Gewichtswert mehrere Male wiederverwenden, z. B. dynamischer Direktzugriffsspeicher (DRAM).
-
6 veranschaulicht ein Beispiel eines neuronalen Netzwerks 600 mit mehreren Schichten und einer Stapelgröße für jede Schicht. Wie vorstehend beschrieben, ist eine Stapelgröße die Obergrenze des Gewichtswiederverwendungswerts für eine gegebene Schicht, dividiert durch die Anzahl der Wiederholungen der Gewichtseingaben an der Schicht. Die Funktion der Obergrenze kann eine Anzahl verarbeiten und den kleinsten ganzzahligen Wert, der nicht kleiner als die Anzahl selbst ist, zurückgeben. Die Anzahl der Wiederholungen der Gewichtseingaben kann direkt der Anzahl von Aktivierungseingaben entsprechen, die in den Zellen eines systolischen Arrays der Schaltung gespeichert sind. Ein Gewicht-Wiederverwendungswert kann zum Beispiel ein Wert für die Schaltung 1500 sein. Die Schicht 1 602 verarbeitet eine Eingabe von 170 × 170. Jede der 170 × 170 Aktivierungseingaben kann in einer Zelle des systolischen Arrays gespeichert werden. Daher ist die Stapelgröße für die Schicht 1 602 CEIL (1500/(170·170)) = 1. Die Stapelgröße für die Schicht 2 604 CEIL (1500/(28·28)) = 2. Unter Verwendung der gleichen Berechnung haben die Schichten 3–5 606–610 eine Stapelgröße von 8 und die Schicht 6 612 hat eine Stapelgröße von 32. Bei einigen Implementierungen wird die Stapelgröße auf die nächste Potenz von 2 abgerundet.
-
Zur Veranschaulichung hat Schicht 1 eine Stapelgröße von 1 Eingabe und Schicht 2 hat eine Stapelgröße von 2 Eingaben. So kann die Schaltung beispielsweise zehn Eingaben zur Verarbeitung an der Schicht 1 empfangen, z.B. insgesamt 10 verschiedene Bilder.
-
Die Schaltung kann festlegen, dass zwei von zehn Stapeln an der Schicht 1 verarbeitet werden, d.h. für insgesamt 2 Eingaben. Bei einigen Implementierungen legt die Schaltung diese Zahl durch Dividieren der Stapelgröße in Schicht 2 mit der Stapelgröße von Schicht 1 fest, d.h. 2/1 = 2. Durch die Verarbeitung von zwei Stapeln einer Einzeleingabe, kann die Schaltung zwei Eingaben verarbeiten, die einer Stapelgröße der Schicht 2 entspricht, d.h. 2. Um zwei Schichtausgaben von den zwei Eingaben zu erzeugen, kann die Schaltung beide Stapel verarbeiten, z.B. durch Berechnen von zwei Vektoren von kumulierten Werten – einer von jedem Bild. Jede Schichtausgabe kann eine Eingabe für eine nachfolgende Ebene sein. Jede Schaltung kann einen Stapel von zwei Eingaben bilden, z. B. die beiden Vektoren der kumulierten Werte zur Verarbeitung an der Schicht 2. Die Stapel können im einheitlichen Puffer gespeichert werden.
-
Die Schaltung kann festlegen, dass auf Schicht 2 vier Stapel verarbeitet werden sollen. Durch die Verarbeitung von vier Stapeln der Größe zwei, kann die Schaltung acht Eingaben verarbeiten, die einer Stapelgröße der Schicht 3 entspricht, d.h. 8. Um von den acht Eingaben acht Schichtausgaben zu erzeugen, kann die Schaltung vier Stapel verarbeiten. So kann die Schaltung einen Stapel von acht Eingaben für die Verarbeitung an der Schicht 3 bilden.
-
Die Schaltung kann fortfahren, bis die Eingaben an allen Schichten des neuronalen Netzwerks verarbeitet worden sind. Da die Schichten 3–5 beispielsweise eine Stapelgröße von 8 aufweisen, kann die Schaltung festlegen, dass ein Stapel von acht Eingaben an jeder der Schichten 3–5 verarbeitet werden soll. Ebenso kann die Schaltung festlegen, dass vier Stapel mit jeweils acht Eingaben an der Schicht 5 verarbeitet werden sollten, wodurch ein Stapel von 32 Eingaben gebildet wird, der in der Schicht 6 verarbeitet werden kann. Für jede Eingabe kann Schicht 6 einen oder mehrere Schichtausgaben erzeugen, die für Inferenzen verwendet werden können.
-
Bei einigen Implementierungen berechnet die Schaltung ein kleinstes gemeinsames Vielfaches von Stapelgrößen über alle Schichten in dem neuronalen Netzwerk, z. B. unter Verwendung von arithmetischen Schaltungen. Somit kann die Schaltung, bevor die nachfolgenden Schichten verarbeitet werden, eine minimale Anzahl von Eingaben verarbeiten, die gleich oder größer als das kleinste gemeinsame Vielfache an jeder Schicht sind. Mit anderen Worten kann die Schaltung festlegen, ob (1) einen Stapel an einer nachfolgenden Schicht oder (2) einen weiteren Stapel auf einer aktuellen Schicht auf der Grundlage des kleinsten gemeinsamen Vielfachen, verarbeitet. So ist beispielsweise das kleinste gemeinsame Vielfache der Stapelgröße für die Schichten 1–6 602–612, 32. Nach der Verarbeitung eines Stapels an der Schicht 1 kann die Schaltung festlegen, dass die Schicht 1 nur eine Ausgabe erzeugt. Bei einigen Implementierungen berechnet die Schaltung ein kleinstes gemeinsames Vielfaches von Stapelgrößen über alle Schichten in dem neuronalen Netzwerk, z. B. unter Verwendung von arithmetischen Schaltungen. Die Schaltung kann daher festlegen, in Schicht 1 einen anderen Stapel zu verarbeiten, wobei an diesem Punkt insgesamt 2 Ausgaben erzeugt wurden. Die Schaltung kann mit dem Erzeugen von 32 Ausgaben fortfahren, d.h. das kleinste gemeinsame Vielfache wurde an Schicht 1 erzeugt. Somit kann die Schaltung fortfahren, einen Stapel an einer nachfolgenden Schicht zu verarbeiten. Bei einigen Implementierungen wird jede Schichtausgabe in einem einheitlichen Puffer gespeichert, z.B. einem einheitlichen Puffer 208 aus 2.
-
Zur Veranschaulichung kann die Schaltung für die Verarbeitung 32 Stapel auswählen, was 32 Eingaben in Schicht 1 umfasst. Dann kann die Schaltung 16 Stapel mit insgesamt 32 Eingaben in Schicht 2 auswählen und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 3 und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 4 und 4 Stapel für die Verarbeitung von insgesamt 32 Eingaben in Schicht 5 und dann schließlich 1 Stapel für die Verarbeitung von insgesamt 32 Eingaben auf Schicht 6.
-
Bei einigen Implementierungen verarbeitet die Schaltung an einer bestimmten Schicht eine Anzahl von Eingaben, die größer als das kleinste gemeinsame Vielfache auf Basis eines Systemparameters sind, z. B. einen Parameter, der von einem Nutzer zur Verfügung gestellt wird. Bei einigen Implementierungen verarbeitet die Schaltung eine Anzahl von Eingaben, die durch die Stapelgröße der nachfolgenden Schicht teilbar ist. Bei einigen anderen Implementierungen empfängt die Schaltung Anweisungen, um eine große Anzahl von Eingaben zu verarbeiten, und die Schaltung verarbeitet Eingabestapel, um so, bevor mit dem Verfahren zum Erzeugen von Ausgaben einer nachfolgenden Anzahl fortgefahren wird, eine Anzahl von erzeugten Ausgaben in einer bestimmten Schicht zu maximieren. Die Schaltung kann die Anzahl der an der festgelegten Schicht erzeugten Ausgaben einschränken, sodass die Anzahl der erzeugten Ausgaben durch die Stapelgröße einer nachfolgenden Schicht teilbar ist.
-
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 Computer-Software, Firmware in die Hardware implementiert werden, einschließlich der in dieser Spezifikation offenbarten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehrerer von ihnen. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d.h. als ein oder mehrere Module von Computerprogrammanweisungen implementiert werden, die auf einem Computer-Speichermedium für die Durchführung durch oder die Steuerung der Operation des datenverarbeitenden Apparats kodiert werden. Alternativ oder zusätzlich können die Programmanweisungen auf einem erzeugten propagierten Signal, z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal künstlich kodiert werden, das erzeugt wird, um Informationen für die Übertragung auf einen geeigneten Empfängerapparat für die Durchführung durch einen datenverarbeitenden Apparat zu kodieren. 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 oder in ihnen enthalten sein.
-
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 (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder verfahrensorientierter Sprachen, und das Programm kann in jeder beliebigen Form eingesetzt sein, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Benutzung 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 beinhaltet 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 Computern eingerichtet sein oder ausgeführt werden, die einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
-
Die in dieser Spezifikation 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 Sonderzweckschaltung 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 zentrale Recheneinheit für das Durchführen von Operationen gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere 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. Ferner kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Organizer (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 Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Permanentspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetdisketten, z. B. interne Festplatten oder herausnehmbare Disketten; magnetooptische Disketten; 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 Benutzer 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 vom Benutzer 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 des 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 des 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. ein Kommunikationsnetz. So beinhalten beispielsweise Kommunikationsnetzwerke ein lokales Netzwerk („LAN“), ein Fernnetz („WAN“), z.B. das Internet.
-
Das Rechensystem kann Client und Server beinhalten. 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 beinhaltet diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibung 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 Operationen in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anfordernis verstanden werden, dass solche Operationen in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Operationen 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 Systemkomponenten in den vorstehend beschriebenen Ausführungsformen nicht 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 notwendigerweise die gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.