-
HINTERGRUND
-
Künstliche neuronale Netzwerke sind Rechensysteme mit einer Architektur, die biologischen neuronalen Netzwerken nachempfunden ist. Künstliche neuronale Netzwerke können anhand von Trainingsdaten trainiert werden, um zu lernen, wie eine bestimmte Rechenaufgabe für eine Anwendung auszuführen ist.
-
Ein Hardwarebeschleuniger, wie z. B. ein Neuronalnetzwerk-Prozessor, kann ein künstliches neuronales Netzwerk implementieren, indem er verschiedene mit dem künstlichen neuronalen Netzwerk verbundene Operationen durchführt. Zu den Operationen können z. B. Rechenoperationen, Speicherzugriffe usw. gehören. Ein Hardwarebeschleuniger umfasst in der Regel Hardwarekomponenten, die speziell für die Durchführung und Beschleunigung dieser Operationen konfiguriert sind. Typischerweise sind diese Hardwarekomponenten durch Befehle programmierbar, um z. B. verschiedene Topologien neuronaler Netzwerke, verschiedene Anwendungen eines neuronalen Netzwerks usw. zu unterstützen.
-
Figurenliste
-
Verschiedene Ausführungsformen der vorliegenden Offenbarung werden in Bezug auf die Zeichnungen beschrieben, in denen:
- 1 ein Beispiel für eine Klassifizierungsvorrichtung veranschaulicht, die die hierin offenbarten Techniken zur Datenverarbeitung verwendet;
- 2A - 2D vereinfachte Blockdiagramme zur Veranschaulichung eines Vorhersagemodells und der Berechnungen, die die hier offengelegten Techniken verwenden, sind, gemäß bestimmten Aspekten der vorliegenden Offenbarung;
- 3 eine beispielhafte Abfolge von Operationen eines neuronalen Netzwerks in einer Datenverarbeitungsumgebung veranschaulicht;
- 4A - 4D einen beispielhaften Neuronalnetzwerk-Prozessor und seine Operationen veranschaulichen, gemäß bestimmten Aspekten der vorliegenden Offenbarung;
- 5A - 5D Beispiele für interne Komponenten des Neuronalnetzwerk-Prozessors von 4A - 4D;
- 6 verschiedene Formen von Befehlsschemaprogrammen gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulicht;
- 7A - 7C Beispiele von Befehlen für verschiedene Speicherzugriffsmodi veranschaulichen, die vom Neuronalnetzwerk-Prozessor der 4A- 4D gesteuert werden, gemäß bestimmten Aspekten der vorliegenden Offenbarung;
- 8A und 8B beispielhafte Verfahren zur Durchführung von Berechnungen mit einem Hardwarebeschleuniger gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulichen;
- 9 ein Blockdiagramm eines Host-Systems umfasst, in dem der Neuronalnetzwerk-Prozessor aus 4A- 4D verwendet werden kann, gemäß bestimmten Aspekten der vorliegenden Offenbarung; und
- 10 ein Diagramm eines Beispielnetzwerks umfasst.
-
DETAILLIERTE BESCHREIBUNG
-
Beispiele der vorliegenden Offenbarung beziehen sich auf Hardwarebeschleuniger und insbesondere auf einen Hardwarebeschleuniger für neuronale Netzwerke mit einem rekonfigurierbaren Befehlssatz.
-
Ein Hardwarebeschleuniger, wie z. B. ein Neuronalnetzwerk-Prozessor, kann ein künstliches neuronales Netzwerk implementieren, indem er verschiedene mit dem künstlichen neuronalen Netzwerk verbundene Operationen durchführt. Die Operationen können Rechenoperationen wie z. B. Faltungsoperationen, Nachbearbeitungsoperationen wie Pooling, Aktivierungsfunktionsverarbeitung usw. sowie Speicherzugriffsoperationen zur Unterstützung dieser Rechenoperationen umfassen. Ein Hardwarebeschleuniger umfasst in der Regel Hardwarekomponenten, die speziell für die Durchführung und/oder Beschleunigung dieser Vorgänge konfiguriert sind. So kann der Hardwarebeschleuniger beispielsweise Schaltungen enthalten, die speziell für die Durchführung bestimmter arithmetischer Operationen (z. B. Faltungsoperationen) ausgelegt sind, Schaltungen, die speziell für die Durchführung bestimmter Pooling-Operationen ausgelegt sind, Schaltungen, die speziell für die Durchführung bestimmter Aktivierungsfunktionsverarbeitungsoperationen ausgelegt sind, Schaltungen, die speziell für die Durchführung von Speicherzugriffsoperationen und Rechenoperationen ausgelegt sind usw.
-
Diese Hardwarekomponenten sind in der Regel durch Befehle programmierbar, um verschiedene Topologien neuronaler Netzwerke und/oder verschiedene Anwendungen eines neuronalen Netzwerks zu unterstützen. Die Befehle können z. B. Angaben zu Eingabedaten und Gewichtungen für eine vom Hardwarebeschleuniger durchzuführende Faltungsoperation, eine Auswahl von Aktivierungsfunktionen und/oder Pooling-Operationen, Speicherzugriffsoperationen zur Steuerung des Datenflusses zwischen verschiedenen Schichten des neuronalen Netzwerks usw. enthalten. Die Hardwarekomponenten können diese Informationen aus den Befehlen extrahieren und die Operationen auf der Grundlage der extrahierten Informationen durchführen.
-
Ein Satz von Befehlen, die von den Hardwarekomponenten unterstützt werden, kann einen Befehlssatz bilden. Der Befehlssatz hat auch ein vordefiniertes Befehlsschema, das die Bit-Offsets und Bitgrößen der Opcodes und der verschiedenen Operanden in jedem Befehl des Befehlssatzes definiert. Der Opcode kann eine bestimmte auszuführende Operation definieren (z. B. eine Faltungsoperation, eine Aktivierungsfunktionsverarbeitung, eine Pooling-Operation, eine Speicherzugriffsoperation usw.) sowie Operanden für diese Operationen (z. B. Eingabedaten und Gewichtungen, Adressen, auf die die Speicherzugriffsoperationen zugreifen sollen, usw.). Die Hardwarekomponenten können die Opcodes und die Operanden aus den Befehlen auf der Grundlage des vordefinierten Befehlsschemas extrahieren und die Operationen auf der Grundlage der extrahierten Opcodes und Operanden durchführen.
-
Die Befehle in einem Befehlssatz können eine Reihe von Operationen definieren, die vom Hardwarebeschleuniger unterstützt werden, und der Befehlssatz kann eine Reihe von Topologien neuronaler Netzwerke und deren Anwendungen definieren, die vom Hardwarebeschleuniger unterstützt werden. Da sich jedoch die Topologien neuronaler Netzwerke und ihre Anwendungen weiterentwickeln, werden möglicherweise neue Operationen benötigt, um diese neuen Topologien und Anwendungen zu unterstützen. Ein Hardwarebeschleuniger, der nur einen festen Satz von Befehlen unterstützt, ist möglicherweise nicht in der Lage, diese neuen Operationen zu unterstützen, und kann die neuen Topologien neuronaler Netzwerke und/oder neuen Anwendungen nicht unterstützen.
-
Beispiele der vorliegenden Offenbarung beziehen sich auf Hardwarebeschleuniger und insbesondere auf einen Hardwarebeschleuniger für neuronale Netzwerke mit einem rekonfigurierbaren Befehlssatz. Der Hardwarebeschleuniger für neuronale Netzwerke umfasst einen programmierbaren Hardware-Befehlsdecoder, eine programmierbare Befehlsschemaabbildungstabelle, eine Hardware-Ausführungsmaschine und einen Controller. Der Hardware-Befehlsdecoder kann so programmiert werden, dass er ein erstes Mapping zwischen einer Vielzahl von Opcodes und einer Vielzahl von Definitionen von Bit-Längen und Bit-Offsets der Opcodes speichert. Die Befehlsschemaabbildungstabelle kann so programmiert werden, dass sie eine zweite Abbildung zwischen einer Vielzahl von Opcodes und einer Vielzahl von Definitionen von Bit-Offsets und Bit-Längen von Operanden der Befehle einschließlich der Opcodes speichert. Das Steuergerät kann jeweils einen ersten Befehl an den Hardware-Befehlsdecoder und die Ausführungsmaschine weiterleiten. Der Hardware-Befehlsdecoder kann einen ersten Opcode aus dem ersten Befehl auf der Grundlage der ersten Abbildung finden und den ersten Opcode an die Befehlsschemaabbildungstabelle ausgeben. Die Befehlsschemaabbildungstabelle kann auf der Grundlage des zweiten Mappings und des ersten Opcodes eine erste Definition von Bite-Offsets und Bit-Längen von Operanden an die Ausführungsmaschine ausgeben. Die Ausführungsmaschine kann auf der Grundlage der ersten Definition einen ersten Operanden aus dem ersten Befehl extrahieren und eine Operation auf der Grundlage des ersten Operanden durchführen.
-
Sowohl der Hardware-Befehlsdecoder als auch die Befehlsschemaabbildungstabelle können auf der Grundlage eines Befehlsschemaprogramms programmiert werden. Das Befehlsschema-Programm kann einen vom Hardwarebeschleuniger zu unterstützenden Befehlssatz definieren und die Bit-Offsets und Bit-Längen eines Opcodes und eines oder mehrerer Operanden jedes Befehls im Befehlssatz festlegen. Die Opcodes des Befehlssatzes können die gleiche Bit-Länge oder unterschiedliche Bit-Längen unter den Befehlen haben. Zum Beispiel können einige der Opcodes eine Bit-Länge von einem Byte oder weniger haben, während einige der Opcodes eine Bit-Länge von mehr als einem Byte haben können. Außerdem können sich einige der Opcodes über zwei oder mehr Bytes eines Befehls erstrecken. Außerdem können die Bit-Offsets und Bit-Längen der Operanden bei den einzelnen Befehlen unterschiedlich sein. Solche Anordnungen können Flexibilität bei der Zuweisung von Opcodes und Operanden für verschiedene Befehle zur Unterstützung verschiedener Operationen bieten, was wiederum die Anzahl der vom Hardwarebeschleuniger unterstützten Befehle und Operationen erhöhen kann.
-
Die im Hardware-Befehlsdecoder und in der Befehlsschemaabbildungstabelle gespeicherten Definitionen von Opcodes und Operanden können einem vom Hardwarebeschleuniger unterstützten Befehlssatz entsprechen. Um den Hardwarebeschleuniger in die Lage zu versetzen, Operationen zu unterstützen, die nicht im Befehlssatz definiert sind, können der Hardware-Befehlsdecoder und die Befehlsschemaabbildungstabelle gemäß einem zweiten Befehlsschemaprogramm programmiert werden, um eine andere Definition von Opcodes und Operanden zu speichern.
-
Der Hardwarebeschleuniger kann mehrere Ausführungseinheiten enthalten, um verschiedene Arten von Operationen eines neuronalen Netzwerks durchzuführen. Die Ausführungsmaschinen können beispielsweise ein systolisches Array zur Durchführung arithmetischer Operationen zur Erzeugung von Teilsummen (z. B. von Gewichtungsdatenprodukten), einen Summationspuffer zur Akkumulation der Teilsummen aus dem systolischen Array, eine Poolingmaschine zur Durchführung von Poolingoperationen, eine Aktivierungsfunktionsmaschine zur Durchführung von Aktivierungsfunktionsverarbeitungsoperationen usw. umfassen. Auf der Grundlage des Opcodes kann der Hardwarebeschleuniger eine Anweisung sowie die Definition von Operanden an eine Zielausführungsmaschine weiterleiten, die dann die Operanden aus der Anweisung extrahieren und eine Berechnungsoperation auf der Grundlage der Operanden durchführen kann. Die Operanden können z. B. eine Konfiguration der arithmetischen Operationen (z. B. einen Typ der Eingabedaten, eine Genauigkeit der arithmetischen Operation usw.), eine Konfiguration einer Nachbearbeitungsoperation (z. B. eine Auswahl einer Pooling-Operation, eine Auswahl einer Aktivierungsfunktion usw.) oder andere Konfigurationen angeben. Die im Hardware-Befehlsdecoder und in der Befehlsschemaabbildungstabelle gespeicherten Definitionen von Opcodes und Operanden können somit eine Reihe von Konfigurationen für arithmetische Operationen und eine Reihe von Nachverarbeitungsoperationen definieren, die vom Hardwarebeschleuniger unterstützt werden.
-
Der Hardwarebeschleuniger kann auch einen On-Chip-Speicher enthalten, um temporäre Daten für die Ausführungsmaschinen zu speichern. Jeder Ausführungseinheit kann eine Speicherzugriffsschaltung zugewiesen werden, um auf den Speicher zuzugreifen. Die Speicherzugriffsschaltung kann auf der Grundlage des von der Ausführungsmaschine empfangenen Befehls Speicherzugriffsoperationen durchführen. Der Befehl kann Operanden enthalten, die eine von der Ausführungsmaschine auszuführende Rechenoperation angeben, sowie einen spezifischen Speicherzugriffsmodus, der eine bestimmte Abfolge von Speicherzugriffsoperationen definiert, die von der Speichersteuerung der Ausführungsmaschine zur Unterstützung der Rechenoperation auszuführen sind. Die Folge von Speicherzugriffsoperationen kann beispielsweise den Zugriff auf im Speicher gespeicherte Eingabedaten umfassen, um einen Strom von Eingabedaten für das systolische Array, die Aktivierungsfunktionsmaschine und/oder die Poolingmaschine zu erzeugen, um die Ausgabedaten von dem systolischen Array, der Aktivierungsmaschine und/oder der Poolingmaschine im Speicher zu speichern usw.
-
Der Speicherzugriffsschaltkreis des Hardwarebeschleunigers kann verschiedene Sequenzen von Speicherzugriffsoperationen für verschiedene Berechnungsoperationen unterstützen. Beispielsweise kann die Speicherzugriffsschaltung durch die Befehle so programmiert werden, dass sie Eingabedaten liest, die in einem Tensor einer bestimmten Dimensionalität organisiert sind (z. B. eindimensionaler Vektor, mehrdimensionale Matrizen usw.), und die Daten an das systolische Array weiterleitet, um eine Faltungsoperation durchzuführen. Je nach Dimensionalität der Eingabedaten kann der Befehl Operanden für eine einzelne Dimension oder für jede der mehreren Dimensionen enthalten. Die Operanden können z. B. einen Schrittparameter auf der Grundlage einer Schrittweite der Faltungsoperation, einen Parameter für die Anzahl der Elemente zur Festlegung der Anzahl der Eingabedatenelemente, die dem systolischen Array zugeführt werden müssen, usw. umfassen. In einem Fall, in dem das systolische Array eine Faltungsoperation an mehrdimensionalen Eingabedaten durchführen soll, kann der Befehl Operanden enthalten, die eine Schrittgröße und eine Anzahl von Elementen für jede Dimension der mehreren Dimensionen definieren. Die Speicherzugriffsschaltung kann so ausgelegt sein, dass sie Speicherzugriffsoperationen bis zu einer bestimmten maximalen Dimensionalität (z. B. 4D) verarbeiten kann. Die Befehle können Operanden für diese maximale Dimensionalität oder eine niedrigere Dimensionalität (z. B. 1D, 2D, 3D usw.) enthalten, um die Speicherzugriffsschaltung so zu steuern, dass sie dem systolischen Array Eingabedaten entsprechend der Dimensionalität der Eingabedaten abruft/bereitstellt.
-
Außerdem kann die Speicherzugriffsschaltung durch die Befehle so programmiert werden, dass sie einen Schreibvorgang in den Speicher nur dann durchführt, wenn eine vorher festgelegte Bedingung erfüllt ist. Die Berechnungsoperation kann beispielsweise die Summation von Datenelementen einer bestimmten Dimension des Tensors als Teil einer Tensorreduktionsoperation umfassen, um die Summe der Datenelemente über die Dimensionen eines Tensors zu berechnen. Eine Anweisung kann festlegen, dass die Speicherzugriffsschaltung des Summationspuffers die Summe der Datenelemente des Vektors/der Matrix in den Speicher schreiben soll. Eine andere Anweisung kann festlegen, dass der Speicherzugriffsschaltkreis jede vom systolischen Array empfangene Teilsumme als Teil einer Akkumulationsoperation in den Speicher schreiben soll.
-
Die Dimensionalität der aus dem Speicher zu lesenden Eingabedaten sowie die Bedingungen für die Speicherung der Ausgabedaten im Speicher können in einem bestimmten Befehlssatz für ein bestimmtes neuronales Netz/eine bestimmte Anwendung festgelegt werden. Der Hardware-Befehlsdecoder und die Befehlsschemaabbildungstabelle können auf der Grundlage eines ersten Befehlsschemaprogramms so programmiert werden, dass sie Speicherzugriffsoperationen für Eingabedaten einer bestimmten Dimensionalität (z. B. 1D) und/oder für eine bestimmte Bedingung der Speicherung von Ausgabedaten (z. B. Speicherung nur der Summe des 1D-Vektors) für ein bestimmtes neuronales Netzwerk und/oder eine bestimmte Anwendung unterstützen. Der Hardware-Befehlsdecoder und die Befehlsschemaabbildungstabelle können dann auf der Grundlage eines zweiten Befehlsschemaprogramms programmiert werden, um Speicherzugriffsoperationen für Eingabedaten einer anderen Dimensionalität (z. B. 2D, 3D, 4D usw.) und/oder für eine andere Bedingung der Speicherung von Ausgabedaten (z. B. Speicherung verschiedener Teilsummen als Teil einer Akkumulationsoperation) für ein anderes neuronales Netzwerk und/oder eine andere Anwendung zu unterstützen.
-
Beispiele der vorliegenden Offenbarung können die Anzahl der von einem Hardwarebeschleuniger unterstützten Befehle erhöhen. Insbesondere sind die vom Hardwarebeschleuniger unterstützten Befehle nicht mehr auf die Definitionen der Befehle beschränkt, die derzeit im Hardware-Befehlsdecoder und in der Befehlsschemaabbildungstabelle gespeichert sind, sondern können durch Programmierung des Hardware-Befehlsdecoders und der Befehlsschemaabbildungstabelle mit einem anderen Befehlsschemaprogramm erweitert werden. Zusammen mit der Flexibilität der Opcodes und Operanden mit variablen Bit-Längen und/oder Bit-Offsets sowie der Möglichkeit, verschiedene Speicherzugriffsmodi auszuwählen, kann die Leistungsfähigkeit des Hardwarebeschleunigers so erweitert werden, dass der Hardwarebeschleuniger neue Operationen im Zusammenhang mit neuen Topologien neuronaler Netzwerke und/oder neuen Anwendungen unterstützen kann. Diese Fähigkeit kann ohne Änderung der Konstruktion des Beschleunigers erweitert werden.
-
In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Erklärungszwecken werden spezifische Konfigurationen und Details angegeben, um ein gründliches Verständnis der Beispiele zu ermöglichen. Für den Fachmann ist es jedoch auch offensichtlich, dass das Beispiel ohne die spezifischen Details ausgeführt werden kann. Weiterhin können bekannte Merkmale weggelassen oder vereinfacht werden, um die beschriebenen Ausführungsformen nicht zu verdecken.
-
1 veranschaulicht ein Beispiel für eine Klassifizierungsvorrichtung 100, die die hierin offenbarten Techniken zur Datenverarbeitung verwendet. Bei der Klassifizierungsvorrichtung 100 kann es sich beispielsweise um eine Computervorrichtung handeln, die eine Softwareanwendung 102 und ein Vorhersagemodell 103 betreibt, um in einer Datensequenz enthaltene Informationen vorherzusagen und eine vorbestimmte Funktion auf der Grundlage der Vorhersage auszuführen. Die Klassifizierungsvorrichtung 100 kann z. B. Teil eines Bilderkennungsdienstes sein, der bestimmte Objekte (z. B. Text, eine Person usw.) aus einem Bild identifizieren soll. Es versteht sich, dass der Bilderkennungsdienst lediglich als veranschaulichendes Beispiel dient und dass die hier offenbarten Techniken auch für andere Datenverarbeitungsanwendungen verwendet werden können, z. B. für textbasierte Datenverarbeitung (z. B. Verarbeitung von Suchanfragen), Audiodatenverarbeitung usw. Darüber hinaus kann die Klassifizierungsvorrichtung 100 eine Reihe von verschiedenen Vorhersagemodellen betreiben, um verschiedene Eingabedaten zu verarbeiten, entweder parallel oder zu verschiedenen Zeiten.
-
In einigen Beispielen kann der Bilderkennungsdienst in einem Multi-Tenant-Rechendienstsystem bereitgestellt werden. Das Multi-Tenant-Rechendienstsystem kann typischerweise eine Vielzahl von Servern umfassen, die Daten hosten und von mehreren Kunden oder Organisationen genutzt werden können, um Instanzen auszuführen, wie z. B. Instanzen virtueller Maschinen oder Bare-Metal-Instanzen (z. B. Betriebssysteme, die direkt auf der Server-Hardware laufen). In den meisten Fällen, wie z. B. bei Bare-Metal- oder virtuellen Maschineninstanzen, kann ein Multi-Tenant-Rechendienstsystem einem Kunden zugewiesen werden, wenn der Kunde sie benötigt, und außer Betrieb genommen werden, wenn sie nicht mehr benötigt werden, so dass die Ressourcen anderen Kunden neu zugewiesen werden können. In der vorliegenden Offenbarung können die Begriffe „Tenant“ und „Kunde“ austauschbar verwendet werden, obwohl diese Begriffe nicht notwendigerweise das Bestehen einer bestimmten Geschäftsvereinbarung implizieren. Der Begriff „Instanz“ kann sich z. B. auf eine Instanz beziehen, die direkt auf der Serverhardware oder als virtuelle Maschine ausgeführt wird. Unterschiedliche Typen von Instanzen entsprechen im Allgemeinen unterschiedlichen Hardwarefunktionen und/oder Anordnungen von Hardware (z. B. unterschiedliche Mengen an verfügbarem Speicher und/oder Verarbeitungshardware). Im Beispiel von 1 kann das Multi-Tenant-Rechendienstsystem den Bilderkennungsdienst bereitstellen, wenn der Kunde ihn benötigt, und der Dienst wird außer Betrieb genommen, wenn er nicht mehr benötigt wird, so dass die Ressourcen, die den Bilderkennungsdienst unterstützen (z. B. der Zugriff auf die Softwareanwendung 102 und die zugrunde liegenden Hardwareressourcen für die Verarbeitung der Softwareanwendung 102), anderen Kunden neu zugewiesen werden können. Verschiedene Kunden (oder ein Kunde) können die Anwendung 102 auffordern, die Verarbeitung verschiedener Eingabedaten unter Verwendung desselben oder verschiedener Vorhersagemodelle einschließlich des Vorhersagemodells 103 durchzuführen.
-
Im Beispiel von 1 kann die Softwareanwendung 102 Pixeldaten eines Bildes 104 von einem Benutzer empfangen. Das Bild 104 kann ein Pixel-Array enthalten. Die Softwareanwendung 102 kann eine Analyse der Pixeldaten durchführen und ein oder mehrere Objekte 106 vorhersagen, die im Bild 104 dargestellt sind. Die Analyse kann z. B. den Vergleich der Pixeldaten mit einem Satz vorgegebener Merkmalsdaten beinhalten. Die vorgegebenen Merkmalsdaten können Daten enthalten, die einem Satz vorgegebener visueller Bildmerkmale zugeordnet sind, wie z. B. einem Nasenobjekt, einem Mundobjekt usw. Die vorbestimmten Merkmalsdaten können auch Daten enthalten, die mit nicht-visuellen Bildmerkmalen oder einer Kombination aus visuellen und nicht-visuellen Bildmerkmalen verbunden sind. Wie im Folgenden näher erläutert wird, kann die Softwareanwendung 102 das Vorhersagemodell 103 verwenden, um einen Satz von Bewertungen auf der Grundlage der Pixeldaten des Bildes 104 zu berechnen. Der Satz von Bewertungen kann z. B. die Wahrscheinlichkeit darstellen, dass Bild 104 die durch die Merkmalsdaten dargestellten Bildmerkmale enthält. Die Softwareanwendung 102 kann dann auf der Grundlage der Bewertungen weitere Informationen über den Inhalt des Bildes 104 ermitteln. Beispielsweise kann die Softwareanwendung 102 auf der Grundlage der Bewertungen feststellen, dass das Bild 104 ein Bild von z. B. einem Panda, einer Katze oder anderen Objekten ist.
-
Das Vorhersagemodell 103 kann in Form eines künstlichen neuronalen Netzwerks vorliegen. Das künstliche neuronale Netzwerk kann eine Vielzahl von Verarbeitungsknoten enthalten, wobei jeder Verarbeitungsknoten so konfiguriert ist, dass er einen Teil der Eingabepixeldaten verarbeitet oder die Zwischenausgaben von anderen Verarbeitungsknoten weiterverarbeitet. 1 veranschaulicht ein Beispiel für ein Vorhersagemodell 103, das die hierin offenbarten Techniken verwendet. In 1 kann das Vorhersagemodell 103 ein mehrschichtiges neuronales Netzwerk sein, wie z. B. ein Deep Neural Network (DNN), ein Convolutional Neural Network (CNN), usw. Das Vorhersagemodell 103 kann eine Eingabeschicht 207, einen Satz von Zwischenschichten, einschließlich der Zwischenschichten 209 und 211, und eine Ausgabeschicht (in 2A). Es versteht sich, dass das Vorhersagemodell 103 auch andere verschiedene Typen von neuronalen Netzwerken enthalten kann, z. B. Long Short Memory (LSTM), Multilayer Perception (MTP), Multiscale Densenet (MSDNET) usw.
-
Schicht 207 kann Pixeldaten verarbeiten, die verschiedene Teile des Bildes 104 darstellen. Zum Beispiel kann im Beispiel von 2A die Schicht 207 die Pixeldaten des Bildes 204 verarbeiten. Jeder Verarbeitungsknoten der Schicht 207 hat die Aufgabe, einen Pixelwert (z. B. x0, x1, x2, ... xn) zu empfangen, der einem vorbestimmten Pixel innerhalb des Bildes 104 entspricht, und eine oder mehrere Gewichtungen mit dem empfangenen Pixelwert an die Schicht 209 zu übertragen. In einem Fall, in dem das Vorhersagemodell 203 ein DNN ist, kann jedem Verarbeitungsknoten der Schicht 207 ein Satz von Gewichtungen zugewiesen werden, die auf der Grundlage einer Matrix W1 definiert sind. Jeder Verarbeitungsknoten der Schicht 207 kann den empfangenen Pixelwert und die zugewiesenen Gewichtungen an jeden Verarbeitungsknoten der Schicht 209 senden. In einem Fall, in dem das Vorhersagemodell 103 ein CNN ist, können Gruppen der Verarbeitungsknoten der Schicht 207 einen Satz von Gewichtungen gemeinsam nutzen, und jede Gruppe kann den Satz von Gewichtungen und die von der Gruppe von Verarbeitungsknoten empfangenen Pixelwerte an einen einzelnen Verarbeitungsknoten der Schicht 209 senden. Verschiedene Neuronalnetzwerkmodelle können unterschiedliche Topologien enthalten (z. B. eine unterschiedliche Anzahl von Schichten, unterschiedliche Verbindungen zwischen den Schichten usw.) und/oder einen unterschiedlichen Satz von Gewichtungen für jede Schicht enthalten.
-
Schicht 209 kann die skalierten Ausgaben von Schicht 207 verarbeiten, um einen Satz von Zwischenausgaben zu erzeugen. Angenommen, der Verarbeitungsknoten 210a der Schicht 209 ist mit n Verarbeitungsknoten in der Schicht 207 verbunden, so kann der Verarbeitungsknoten 210a eine Summe der skalierten Ausgaben, die er von der Schicht 207 erhält, basierend auf der folgenden Gleichung erzeugen:
-
-
Hier stellt sum210a eine Zwischenausgabe dar, die vom Verarbeitungsknoten 210a erzeugt wird. W1i × xi stellt eine Skalierung eines bestimmten Pixelwerts (z. B. xo) mit der zugehörigen Gewichtung (z. B. W10) durch einen Verarbeitungsknoten der Schicht 207 dar. In einem Fall, in dem das Vorhersagemodell 103 ein DNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Summe basierend auf der Skalierung der Pixelwerte von jedem Verarbeitungsknoten der Schicht 207 erzeugen und dann eine Summe (z. B. Sum210a) durch Summation der skalierten Pixelwerte erzeugen. Die Summe kann auch ein Punktprodukt zwischen einem Eingabevektor, der eine Anzahl von Elementen (z. B. Pixelwerte) umfasst, und einem Gewichtungsvektor (z. B. W1) darstellen. In einigen Beispielen kann den skalierten Ausgaben auch eine Vorspannung hinzugefügt werden, um die Zwischenausgabe zu erzeugen.
-
In einem Fall, in dem das Vorhersagemodell 103 ein CNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Zwischenausgabe basierend auf der Skalierung der Pixelwerte aus einer Gruppe von Verarbeitungsknoten der Schichten 207 erzeugen. Die Zwischenausgabe kann ein Faltungsergebnis zwischen einer Gruppe von Pixelwerten und einem Filter mit den Gewichtungswerten darstellen. 2B zeigt ein Beispiel für eine Faltungsoperation, die Schicht 209 durchführen kann. In 2B kann Filter 230 ein zweidimensionales Array von Gewichtungen enthalten. Die Gewichtungen im Filter 230 können eine räumliche Verteilung von Pixeln für bestimmte zu erkennende Merkmale aus dem Bild darstellen. Das zweidimensionale Array kann eine Höhe von R Zeilen und eine Breite von S Spalten haben und ist typischerweise kleiner als ein Eingabebild mit einer Höhe von H Pixel und einer Breite von W Pixel. Jede Gewichtung kann auf ein Pixel in einem rechteckigen Block von Pixelwerten mit den gleichen R-Zeilen und S-Spalten abgebildet werden. Ein Verarbeitungsknoten der Schicht 209 (z. B. Verarbeitungsknoten 210a) kann von einer Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 240 von Pixelwerten empfangen, die einem ersten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, der einer ersten Schrittposition des Filters 230 entspricht, und eine Faltungsausgabe 242 auf der Grundlage einer Summation von Multiplikationsergebnissen zwischen jeder Gewichtung des Filters 230 und jedem entsprechenden Pixel in der Gruppe 240 gemäß Gleichung 1 erzeugen, um ein Punktprodukt zwischen einer durch das Filter 230 dargestellten Matrix und einer durch die Gruppe 240 dargestellten Matrix zu erzeugen. Ein anderer Verarbeitungsknoten der Schicht 209 kann auch von einer anderen Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 244 von Pixelwerten empfangen, die einem zweiten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, das einer zweiten Schrittposition des Filters 230 entspricht, und eine Faltungsausgabe 246 erzeugen, die auf einer Summation von Multiplikationsergebnissen zwischen jeder Gewichtung des Filters 230 und jedem entsprechenden Pixel in der Gruppe 244 gemäß Gleichung 1 basiert, um ein Punktprodukt zwischen der Matrix des Filters 230 und einer durch die Gruppe 240 dargestellten Matrix zu erzeugen. In einigen Beispielen kann jede Faltungsausgabe in 2B (z. B. Faltungsausgabe 242, Faltungsausgabe 346, usw.) der Ausgabe eines Verarbeitungsknotens der Schicht 209 entsprechen. In einigen Beispielen können die Pixeldaten im Eingabebild als Eingabemerkmalskarte bezeichnet werden, um anzuzeigen, dass die Pixel von demselben Filter (oder denselben Filtersätzen) verarbeitet werden, der/die bestimmten Merkmalen entspricht/entsprechen. Die Faltungsausgaben können als Ausgabemerkmalskarte bezeichnet werden, um anzuzeigen, dass die Ausgabe das Ergebnis der Verarbeitung einer Eingabemerkmalskarte mit dem Filter ist.
-
Wie in 2B gezeigt, können die Faltungsoperationen in einem Schiebefenster so angeordnet werden, dass der zweite rechteckige Block den ersten rechteckigen Block im Eingabebild überlappt oder anderweitig benachbart ist. Zum Beispiel kann im Beispiel von 2B D ein Schrittweitenabstand (in Pixeln) des Schiebefensters für jede Faltungsoperation sein, so dass der Block von Pixeln, der der Gruppe 244 entspricht, in einem Abstand D (in Form von Pixeln) von dem Block von Pixeln, der der Gruppe 240 entspricht, liegen kann, und der nächste Block von Pixeln kann auch in demselben Abstand D von der Gruppe 244 liegen. Andere Verarbeitungsknoten der Schicht 209 können auch Gruppen von Pixeln empfangen, die anderen rechteckigen Blöcken entsprechen, und andere Zwischenausgaben erzeugen. Die Faltungsausgaben können Teil eines Faltungsausgaben-Arrays sein. Das Array der Faltungsausgaben kann eine kleinere Höhe und eine kleinere Breite haben als das Eingabebild. Rechteckige Blöcke der Faltungsausgaben können weiter gruppiert werden, und Faltungsoperationen können auf Schicht 211 zwischen den Gruppen von Faltungsausgaben und einem weiteren Satz von Filtergewichten durchgeführt werden, um einen weiteren Satz von Faltungsausgaben zu erzeugen.
-
In einigen Beispielen können die Faltungsoperationen zwischen mehreren Bildern und mehreren Filtern durchgeführt werden. Zum Beispiel kann unter Bezugnahme auf 2C ein Satz von C Filtern 260 einer Anzahl (C) von Bildern 270 entsprechen, und Faltungsoperationen können zwischen jedem Filter des Filtersatzes 260 und Pixelblöcken auf dem entsprechenden Bild der Bilder 270 durchgeführt werden. Jedes der Bilder 270 kann einem Eingabekanal entsprechen. Die Faltungsergebnisse für jedes Filter-Bild-Paar können wie folgt summiert werden, um eine Faltungsausgabe zu erzeugen:
-
-
Hier werden die Bilder (oder Pixelmatrizen) gefaltet. Xc eD+r,fD+s kann sich auf den Wert eines Pixels in einem Bild mit dem Index c innerhalb der Anzahl (C) der Bilder 270 beziehen, mit einer Zeilenkoordinate von eD+r und einer Spaltenkoordinate von fD+s. Im weiteren Verlauf der Offenbarung können die Koordinaten des Elements Xc eD+r,fD+s in der Form (eD+r, fD+s) dargestellt werden. Der Index c kann einen bestimmten Eingabekanal bezeichnen. D ist der Schiebefenster-Schrittweitenabstand, während e und f der Position des Datenelements in der Faltungsausgabematrix entsprechen, die auch einem bestimmten Schiebefenster entsprechen kann. Außerdem entsprechen r und s einer bestimmten Position innerhalb des Schiebefensters. Ein Pixel an einem Ort (r, s) und eines Bildes mit dem Index c kann auch einer Gewichtung Wc r,s in einem entsprechenden Filter mit demselben Index c am selben Ort (r, s) entsprechen. Gleichung 2 zeigt, dass zur Berechnung des Faltungsergebnisses Oe,f jedes Pixel innerhalb eines Schiebefensters (indiziert durch (e,f)) mit einer entsprechenden Gewichtung multipliziert werden kann Wc r,s. Eine Teilsumme der Multiplikationsprodukte innerhalb jedes Schiebefensters für jedes Bild innerhalb der Bildmenge kann berechnet werden. Dann kann eine Summe der Teilsummen für alle Bilder der Bildmenge berechnet werden.
-
Darüber hinaus können in einigen Beispielen mehrere Filtersätze verwendet werden, um Faltungsoperationen mit einer Bildmenge durchzuführen, um eine Menge von Faltungsausgabe-Arrays zu erzeugen, wobei jedes Faltungsausgabe-Array einem Filtersatz entspricht. Jeder Filtersatz kann einem Ausgabekanal entsprechen. Beispielsweise können die mehreren Filtersätze mehreren Merkmalen entsprechen, die aus der Bildmenge zu erkennen sind, und jedes Faltungsausgabe-Array kann den Erkennungsergebnissen für jedes Merkmal aus der Bildmenge entsprechen. Wenn zum Beispiel M Filtersätze auf C Bilder angewendet werden, um M Faltungsausgabe-Arrays zu erzeugen, kann Gleichung 2 wie folgt aktualisiert werden:
-
-
Hier haben Faltungsausgabe Oe,f m und die Gewichtung Wc,m r,s einen Index m, der einer der M Filtersätzen entspricht. Der Index m kann einen bestimmten Ausgabekanal bezeichnen.
-
2D veranschaulicht ein Beispiel von C Sätzen von Eingabedatensätzen (mit C = 3), die mit M Filtersätzen (mit M = 2) gefaltet werden. Jeder Satz von Eingabedaten entspricht den Einträgen eines Pixel-Arrays. Jeder der M Filtersätze umfasst einen Satz von C Filtern, die den C Sätzen von Eingabepixel-Arrays entsprechen. Die Faltungsoperationen erzeugen M Sätze von Ausgabedatenelementen, wobei jeder Satz von Ausgabedatenelementen einem Faltungsausgabe-Array entspricht. Jedes Faltungsausgabe-Array entspricht der Faltung eines Satzes (von M Sätzen) von Filtern mit den Eingabepixel-Arrays. Zum Beispiel kann O0,0 0 durch eine Summe des Punktprodukts zwischen der Pixelgruppe 282 und dem Filter-Array 284, des Punktprodukts zwischen der Pixelgruppe 286 und dem Filter-Array 288 und des Punktprodukts zwischen der Pixelgruppe 289 und dem Filter-Array 292 erzeugt werden.
-
Unter Bezugnahme auf 2A kann ein Verarbeitungsknoten der Schicht 209 so konfiguriert sein, dass er die Faltungsausgabeelemente eines Faltungsausgabe-Arrays erzeugt, und eine Menge M von Verarbeitungsknoten der Schicht 209 kann einer Menge M von Faltungsausgabe-Arrays entsprechen. Der Verarbeitungsknoten der Schicht 209 kann auch jede Faltungsausgabe mit einer Aktivierungsfunktion verarbeiten, um eine Aktivierungsausgabe zu erzeugen. Die Aktivierungsfunktion kann die Faltungsausgabe in eine Entscheidung übersetzen, ob die Faltungsausgabe an die Zwischenschicht 211 weitergeleitet werden soll, um die Klassifizierungsentscheidung zu beeinflussen (analog zum Feuern eines biologischen Neurons). Ein Beispiel für die Aktivierungsfunktion kann eine gleichgerichtete lineare Einheit (ReLU) sein, die gemäß der folgenden Gleichung definiert ist:
-
-
Zusätzlich zu ReLU können auch andere Formen von Aktivierungsfunktionen verwendet werden, z. B. eine Softplus-Funktion (die eine glatte Annäherung an eine ReLU-Funktion sein kann), eine hyperbolische Tangensfunktion (tanh), eine Arcustangensfunktion (arctan), eine Sigmoidfunktion, eine Gaußfunktion usw.
-
Ein Verarbeitungsknoten der Schicht 209 (z. B. Verarbeitungsknoten 210a) kann die Summe mit der ReLU-Funktion verarbeiten, um eine erste Ausgabe der Schicht 209 basierend auf der folgenden Gleichung zu erzeugen:
-
-
Die Schicht 211 kann die skalierten Zwischenausgaben der Schicht 209 weiterverarbeiten, indem sie z. B. zusätzliche Faltungsoperationen auf der Grundlage verschiedener Filtersätze durchführt. Die Ausgaben von jedem Verarbeitungsknoten der Schicht 211 können an andere höhere Zwischenschichten oder an eine Ausgabeschicht (in 2A). Die Ausgabeschicht kann einen Ausgabevektor bilden, der z. B. eine Wahrscheinlichkeit darstellt, dass bestimmte Merkmale in Bild 104 enthalten sind, und/oder eine Wahrscheinlichkeit, dass Bild 204 ein Bild eines Pandas enthält. Beispielsweise kann der Ausgabevektor mit einem Referenzvektor verglichen werden, der einem Nasenobjekt eines Pandas zugeordnet ist, oder mit einem Referenzvektor, der einem Panda zugeordnet ist. Anhand des Vergleichsergebnisses kann entschieden werden, ob Bild 104 ein Bild eines Pandas ist.
-
3 veranschaulicht eine Beispielsequenz 300 für die Implementierung einer Operation eines neuronalen Netzwerks in einer Rechenumgebung. Wie in 3 gezeigt, kann die Sequenz 300 mit Schritt 302 beginnen, in dem Eingabedaten und Gewichtungen für eine Schicht des neuronalen Netzwerks aus einem Speicher geholt werden. Zu den Eingabedaten können z. B. Pixelwerte für ein Bild, Audiodaten usw. oder Ausgabedaten der vorherigen Schicht des neuronalen Netzwerks gehören. In Schritt 304 können arithmetische Operationen auf der Grundlage der Eingabedaten und der Gewichtungen durchgeführt werden, um Zwischenausgaben zu erzeugen. Die arithmetischen Operationen können z. B. Additionen und Multiplikationen umfassen, wie oben in den Gleichungen 1-3 beschrieben. Die arithmetischen Operationen können z. B. von einem systolischen Array eines Hardwarebeschleunigers, einem Allzweck-Hardware-Prozessor usw. durchgeführt werden. In Schritt 306 können Nachbearbeitungsoperationen an den Zwischenausgaben durchgeführt werden, um die endgültigen Ausgaben der neuronalen Netzschicht zu erzeugen. Die Nachbearbeitungsoperationen können z. B. Pooling-Operationen, Aktivierungsfunktionsverarbeitung usw. umfassen, wie oben in den Gleichungen 4 und 5 beschrieben. In Schritt 308 können die endgültigen Ausgaben im Speicher als endgültige Ausgabe gespeichert werden, die die Gesamtausgabe des neuronalen Netzwerks oder als Eingaben für die nächste Schicht des neuronalen Netzwerks darstellen kann.
-
Jeder der Schritte 302, 304, 306 und 308 kann unterschiedliche Operationen für unterschiedliche Topologien neuronaler Netzwerke und/oder unterschiedliche Anwendungen beinhalten. Insbesondere können in Schritt 302 Eingabedaten und Gewichtungen, die in Tensoren unterschiedlicher Dimensionalität (z. B. 1D, 2D, 3D, 4D usw.), Größe usw. organisiert sind, abgerufen werden. So kann beispielsweise eine Audioverarbeitungsanwendung auf eindimensionale Eingabedaten zugreifen (z. B. eine Zeitreihe von Audiosignalen), während eine Bildverarbeitungsanwendung auf mehrdimensionale Eingabedaten zugreifen kann (z. B. zweidimensionale Bilder mit verschiedenen Spektralkanälen). Außerdem können die arithmetischen Operationen in Schritt 304 variieren. So kann beispielsweise ein neuronales Faltungsnetzwerk (CNN) eine Faltungsoperation wie in den Gleichungen 3 und 4 beschrieben durchführen, während ein vollständig verbundenes neuronales Netzwerk dies nicht tut. Verschiedene Faltungsoperationen (z. B. eine transponierte Faltungsoperation, eine dilatierte Faltungsoperation usw.) können ebenfalls implementiert werden. Darüber hinaus können auch andere Arten von arithmetischen Operationen durchgeführt werden, z. B. eine Tensorreduktionsoperation, um die Summe der Datenelemente über die Dimensionen eines Tensors zu berechnen. Verschiedene Nachbearbeitungsoperationen, wie z. B. verschiedene Aktivierungsfunktionen, verschiedene Pooling-Operationen usw., können in Schritt 306 für verschiedene Topologien neuronaler Netzwerke und/oder verschiedene Anwendungen implementiert werden. Schließlich kann die Speicherung der Ausgabedaten im Speicher in Schritt 308 verschiedene Arten von Schreibvorgängen für verschiedene Anwendungen beinhalten. Bei einigen Anwendungen kann es beispielsweise erforderlich sein, dass die Ausgaben erst nach Abschluss der arithmetischen Operationen in Schritt 304 in den Speicher geschrieben werden, während bei anderen Anwendungen die Teilsummen in den Speicher geschrieben und aktualisiert werden müssen, während die arithmetischen Operationen in Schritt 304 noch im Gange sind.
-
In der Computerumgebung kann jeder der Schritte 302, 304, 306 und 308 durch einen oder mehrere Befehle dargestellt werden, die ausgeführt werden, um die Operation des neuronalen Netzwerks durchzuführen. Die Befehle können für jeden der Schritte 302, 304, 306 und 308 unterschiedliche Operationen darstellen. Zum Beispiel kann das Lesen des Speichers für unterschiedliche Dimensionen und Größen von Eingabedaten und Gewichtungen durch unterschiedliche Befehle dargestellt werden. Darüber hinaus können verschiedene Befehle verschiedene arithmetische Operationen in Schritt 304, verschiedene Nachbearbeitungsoperationen in Schritt 306 und verschiedene Arten von Schreiboperationen in Schritt 308 darstellen. Um verschiedene Topologien neuronaler Netzwerke für verschiedene Anwendungen zu implementieren, muss die Computerumgebung möglicherweise eine große Anzahl von Befehlen unterstützen, um die verschiedenen Operationen in jedem der Schritte 302, 304, 306 und 308 abzudecken.
-
4A ist ein Blockdiagramm, das ein Beispiel für eine integrierte Schaltung zeigt, die so konfiguriert werden kann, dass sie verschiedene Arten von Operationen eines neuronalen Netzwerks durchführt. Das Beispiel von 4A veranschaulicht einen Beschleuniger 402. In verschiedenen Beispielen kann der Beschleuniger 402 für einen Satz von Eingabedaten (z. B. Eingabedaten 450) Berechnungen unter Verwendung von Berechnungsschaltungen ausführen, die ein Verarbeitungsmaschinen-Array 410 und eine Nachverarbeitungsmaschine 415 umfassen, die eine Aktivierungsmaschine 416 und/oder eine Poolingmaschine 418 enthält. In einigen Beispielen kann der Beispiel-Beschleuniger 402 eine integrierte Schaltkreiskomponente eines Prozessors sein, wie z. B. ein Neuronalnetzwerk-Prozessor. Der Prozessor kann weitere integrierte Schaltkreiskomponenten haben, einschließlich zusätzlicher Beschleunigungsmaschinen. Der Beschleuniger 402 kann einen Controller 422 enthalten, der die Operationen der Berechnungsschaltungen einschließlich des Verarbeitungsmaschinen-Arrays 410 und der Nachverarbeitungsmaschine 415 steuert.
-
In verschiedenen Implementierungen kann das Speicher-Subsystem 404 mehrere Speicherbänke 414 enthalten. In diesen Implementierungen kann jede Speicherbank 414 unabhängig zugänglich sein, was bedeutet, dass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängig ist. Ebenso hat das Schreiben in eine Speicherbank keinen Einfluss auf das Schreiben in eine andere Speicherbank bzw. schränkt dieses nicht ein. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und geschrieben werden. Es können verschiedene Techniken verwendet werden, um unabhängig voneinander zugängliche Speicherbänke 414 zu haben. Zum Beispiel kann jede Speicherbank eine physikalisch getrennte Speicherkomponente sein, die einen Adressraum hat, der getrennt und unabhängig von den Adressräumen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal und mindestens einen separaten Schreibkanal haben, die gleichzeitig verwendet werden können. In diesen Beispielen kann das Speicher-Subsystem 404 den gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speicher-Subsystem 404 eine Arbitrierungslogik enthalten, so dass die Arbitrierung zwischen z. B. den Ausgaben mehrerer Speicherbänke 414 dazu führen kann, dass die Ausgabe von mehr als einer Speicherbank verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank, obwohl sie global vom Speicher-Subsystem 404 verwaltet wird, unabhängig von den anderen betrieben werden.
-
Die Tatsache, dass die Speicherbänke 414 unabhängig voneinander zugänglich sind, kann die Effizienz des Beschleunigers 402 erhöhen. Beispielsweise können Werte gleichzeitig gelesen und jeder Zeile des Verarbeitungsmaschinen-Arrays 410 zur Verfügung gestellt werden, so dass das gesamte Verarbeitungsmaschinen-Array 410 in einem Taktzyklus in Gebrauch sein kann. Als weiteres Beispiel können die Speicherbänke 414 zur gleichen Zeit gelesen werden, in der die von dem Verarbeitungsmaschinen-Array 410 berechneten Ergebnisse in das Speicher-Subsystem 404 geschrieben werden. Im Gegensatz dazu kann ein einzelner Speicher möglicherweise nur ein Lesen oder Schreiben zur gleichen Zeit bedienen. Bei einem einzelnen Speicher können z. B. mehrere Taktzyklen erforderlich sein, um Eingabedaten für jede Zeile des Verarbeitungsmaschinen-Arrays 410 zu lesen, bevor das Verarbeitungsmaschinen-Array 410 gestartet werden kann.
-
In verschiedenen Implementierungen kann das Speicher-Subsystem 404 so konfiguriert werden, dass es gleichzeitig mehrere Clients bedient, einschließlich des Verarbeitungsmaschinen-Arrays 410, der Aktivierungsmaschine 416, der Poolingmaschine 418 und aller externen Clients, die über eine Kommunikationsstruktur 420 auf das Speicher-Subsystem 404 zugreifen. In einigen Implementierungen kann die Fähigkeit, mehrere Clients zu bedienen, bedeuten, dass das Speicher-Subsystem 404 mindestens so viele Speicherbänke hat, wie es Clients gibt. In einigen Fällen kann jede Zeile des Verarbeitungsmaschinen-Arrays 410 als ein separater Client zählen. In manchen Fällen kann jede Spalte des Verarbeitungsmaschinen-Arrays 410 ein Ergebnis ausgeben, so dass jede Spalte als separater Schreibclient zählen kann. In einigen Fällen kann die Ausgabe vom Verarbeitungsmaschinen-Array 410 in die Speicherbänke 414 geschrieben werden, die dann anschließend Eingabedaten für das Verarbeitungsmaschinen-Array 410 bereitstellen können. Als weiteres Beispiel können die Aktivierungsmaschine 416 und die Poolingmaschine 418 mehrere Ausführungskanäle enthalten, von denen jeder ein separater Speicher-Client sein kann. Die Speicherbänke 414 können z. B. mit statischem Direktzugriffsspeicher (SRAM) realisiert werden.
-
In verschiedenen Implementierungen kann das Speicher-Subsystem 404 Steuerlogik enthalten. Die Steuerlogik kann z. B. die Adressräume jeder der Speicherbänke 414 verfolgen, Speicherbänke 414 zum Lesen oder Schreiben identifizieren und/oder Daten zwischen den Speicherbänken 414 bewegen. In einigen Implementierungen können die Speicherbänke 414 mit bestimmten Clients fest verdrahtet werden. Zum Beispiel kann ein Satz von Speicherbänken 414 fest verdrahtet werden, um Werte für die Zeilen des Verarbeitungsmaschinen-Arrays 410 bereitzustellen, wobei eine Speicherbank jede Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet werden, um Werte von Spalten des Verarbeitungsmaschinen-Arrays 410 zu empfangen, wobei eine Speicherbank Daten für jede Spalte empfängt.
-
Das Verarbeitungsmaschinen-Array 410 ist die Berechnungsmatrix des Beispielbeschleunigers 402. Das Verarbeitungsmaschinen-Array 410 kann z. B. parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungsmaschinen-Array 410 umfasst mehrere Verarbeitungsmaschinen 411, die in Zeilen und Spalten angeordnet sind, so dass die von einer Verarbeitungsmaschine 411 ausgegebenen Ergebnisse direkt in eine andere Verarbeitungsmaschine 411 eingegeben werden können. Verarbeitungsmaschinen 411, die sich nicht an den Außenkanten des Verarbeitungsmaschinen-Arrays 410 befinden, können daher Daten zur Bearbeitung von anderen Verarbeitungsmaschinen 411 und nicht vom Speicher-Subsystem 404 erhalten.
-
In verschiedenen Beispielen kann das Verarbeitungsmaschinen-Array 410 ein systolisches Array umfassen und eine systolische Ausführung verwenden, bei der die Daten in regelmäßigen Abständen aus verschiedenen Richtungen bei jeder Verarbeitungsmaschine 411 eintreffen. In einigen Beispielen können die Eingabedaten von links in das Verarbeitungsmaschinen-Array 410 fließen und die Gewichtungswerte können oben geladen werden. In einigen Beispielen können Gewichtungen und Eingabedaten von links und Teilsummen von oben nach unten fließen. In diesen und anderen Beispielen bewegt sich eine Multiplikations- und Akkumulationsoperation als diagonale Wellenfront durch das Verarbeitungsmaschinen-Array 410, wobei sich die Daten nach rechts und unten über das Array bewegen. Steuersignale können gleichzeitig mit den Gewichtungen links eingegeben werden und mit der Berechnung quer und abwärts fließen.
-
In verschiedenen Implementierungen bestimmt die Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 die Rechenkapazität des Verarbeitungsmaschinen-Arrays 410, und die Anzahl der Zeilen bestimmt die erforderliche Speicherbandbreite zum Erreichen einer maximalen Auslastung des Verarbeitungsmaschinen-Arrays 410. Das Verarbeitungsmaschinen-Array 410 kann z. B. 64 Spalten und 428 Zeilen oder eine andere Anzahl von Spalten und Zeilen haben.
-
Ein Beispiel für eine Verarbeitungsmaschine 411 ist in 4 in einem Beispieldiagramm dargestellt. Wie in diesem Beispiel dargestellt, kann eine Verarbeitungsmaschine 411 eine Multiplikator-Akkumulator-Schaltung enthalten. Eingaben von links können z. B. Eingabedaten i und einen Gewichtungswert w enthalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenausgaben entnommen wird, und der Gewichtungswert aus einem Satz von Gewichtungswerten stammt, die eine Schicht des neuronalen Netzwerks mit der nächsten verbinden. Ein Satz von Eingabedaten kann z. B. ein Bild sein, das zum Identifizieren oder zur Objekterkennung eingereicht wird, ein Audioclip, der für die Spracherkennung bereitgestellt wird, eine Textfolge für die Verarbeitung natürlicher Sprache oder die maschinelle Übersetzung, oder der aktuelle Zustand eines Spiels, der analysiert werden muss, um den nächsten Zug zu bestimmen, unter anderem. In einigen Beispielen werden die Eingabedaten und der Gewichtungswert nach rechts ausgegeben, zur Eingabe in die nächste Verarbeitungsmaschine 411.
-
Im dargestellten Beispiel kann eine Eingabe von oben eine Teilsumme, p_in, enthalten, die entweder von einer anderen Verarbeitungsmaschine 411 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungsmaschinen-Array 410 bereitgestellt wird. Beim Starten einer Berechnung für einen neuen Satz von Eingabedaten kann die oberste Zeile des Verarbeitungsmaschinen-Arrays 410 einen festen Wert für p_in erhalten, z. B. Null. Wie in diesem Beispiel dargestellt, werden i und w miteinander multipliziert und das Ergebnis wird mit p_in summiert, um eine neue Teilsumme, p_out, zu erzeugen, die in eine andere Verarbeitungsmaschine 411 eingegeben werden kann. Verschiedene andere Implementierungen der Verarbeitungsmaschine 411 sind möglich.
-
Die Ausgaben der letzten Zeile im Verarbeitungsmaschinen-Array 410 können im Summationspuffer 412 zwischengespeichert werden. Bei den Ergebnissen kann es sich um Zwischenausgaben handeln, die in die Speicherbänke 414 geschrieben werden können, um sie dem Verarbeitungsmaschinen-Array 410 für weitere Berechnungen zur Verfügung zu stellen. Alternativ können die Ergebnisse Endergebnisse sein, die, nachdem sie in die Speicherbänke 414 geschrieben wurden, über die Kommunikationsstruktur 420 aus dem Speicher-Subsystem 404 gelesen werden können, um vom System ausgegeben zu werden.
-
In einigen Implementierungen umfasst der Beschleuniger 402 eine Nachbearbeitungsmaschine 415, die eine Aktivierungsmaschine 416 und eine Poolingmaschine 418 umfassen kann. In diesen Implementierungen kann die Aktivierungsmaschine 416 die Ergebnisse aus dem Verarbeitungsmaschinen-Array 410 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Bei einem neuronalen Faltungsnetzwerk können z. B. die Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann die Akkumulation von Ergebnissen aus einer oder mehreren Spalten im Verarbeitungsmaschinen-Array 410 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten im neuronalen Netzwerk zu erzeugen. In einigen Beispielen kann die Aktivierungsmaschine 416 umgangen werden.
-
In verschiedenen Beispielen kann die Aktivierungsmaschine 416 mehrere separate Ausführungskanäle enthalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungsmaschinen-Arrays 410 entsprechen und eine Operation an den Ausgaben einer Spalte ausführen, deren Ergebnis im Speicher-Subsystem 404 gespeichert werden kann. In diesen Beispielen kann die Aktivierungsmaschine 416 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig ausgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal ausführen kann, sind u. a. Exponentiale, Quadrate, Quadratwurzeln, Identitäten, Binärschritte, Bipolarschritte, Sigmoidale und Rampen.
-
In einigen Implementierungen umfasst der Beschleuniger 402 eine Poolingmaschine 418. Pooling ist das Zusammenfassen von Ausgaben der Spalten des Verarbeitungsmaschinen-Arrays 410. Das Zusammenfassen kann z. B. die Berechnung eines Maximalwerts, eines Minimalwerts, eines Mittelwerts, eines Medianwerts, einer Summation, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination umfassen. In verschiedenen Beispielen kann die Poolingmaschine 418 mehrere Ausführungskanäle enthalten, die auf Werte aus entsprechenden Spalten des Verarbeitungsmaschinen-Arrays 410 arbeiten können. In diesen Beispielen kann die Poolingmaschine 418 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 ist. In verschiedenen Beispielen können die Ausführungskanäle der Poolingmaschine 418 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Poolingmaschine 418 umgangen werden.
-
Hierin können die Aktivierungsmaschine 416 und die Poolingmaschine 418 gemeinsam als Ausführungsmaschinen bezeichnet werden. Das Verarbeitungsmaschinen-Array 410 ist ein weiteres Beispiel für eine Ausführungsmaschine. Ein weiteres Beispiel für eine Ausführungsmaschine ist eine Direct Memory Access (DMA)-Maschine, die sich außerhalb des Beschleunigers 402 befinden kann.
-
Eingabedaten 450 können über die Kommunikationsstruktur 420 ankommen. Die Kommunikationsstruktur 420 kann den Beschleuniger 402 mit anderen Komponenten eines Prozessors verbinden, z. B. mit einer DMA-Maschine, die Eingabedaten 450 von einer Eingabe-/Ausgabevorrichtung (E/A), einem Speicherlaufwerk oder einer Netzwerkschnittstelle erhalten kann. Die Eingabedaten 450 können z. B. eindimensionale Daten sein, wie eine Zeichenkette oder eine numerische Sequenz, oder zweidimensionale Daten, wie ein Array von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte über die Zeit für ein Audiosignal. In einigen Beispielen können die Eingabedaten 450 dreidimensional sein, wie es z. B. bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder Virtual-Reality-Daten der Fall sein kann. In einigen Implementierungen kann das Speicher-Subsystem 404 einen separaten Puffer für die Eingabedaten 450 enthalten. In einigen Implementierungen können die Eingabedaten 450 in den Speicherbänken 414 gespeichert werden, wenn der Beschleuniger 402 die Eingabedaten 450 empfängt.
-
In einigen Beispielen kann der Beschleuniger 402 eine Maschine zur Verarbeitung neuronaler Netzwerke implementieren. In diesen Beispielen kann Beschleuniger 402 für einen Satz von Eingabedaten 450 ein neuronales Netzwerk ausführen, um eine Aufgabe durchzuführen, für die das neuronale Netzwerk trainiert wurde. Das Ausführen eines neuronalen Netzwerks auf einem Satz von Eingabedaten kann als Schlussfolgerung oder Durchführen von Schlussfolgerung bezeichnet werden.
-
Die Gewichtungen für das neuronale Netzwerk können im Speicher-Subsystem 404 gespeichert werden, zusammen mit den Eingabedaten 450, auf denen das neuronale Netzwerk arbeiten wird. Die Adressen der Gewichtungen und Eingabedaten 450 im Speicher-Subsystem 404 können auf den Koordinaten der Gewichtungen und Eingabedaten 450 in einem Gewichtungsdaten-Array bzw. einem Eingabedaten-Array basieren oder darauf abgebildet werden, so dass die Gewichtung und die Eingabedaten auf der Grundlage von aus ihren Koordinaten abgeleiteten Adressen abgerufen werden können. Das neuronale Netzwerk kann auch Befehle enthalten, die vom Controller 422 ausgeführt werden können, um das Verarbeitungsmaschinen-Array 410 dahingehend zu steuern, verschiedene Berechnungen mit den Gewichtungen und den Eingabedaten durchzuführen. Die Befehle können von einem Compiler generiert und auch im Speicher-Subsystem 404, in den Speicherbänken 414 oder in einem separaten Befehlspuffer gespeichert werden. Das Verarbeitungsmaschinen-Array 410 kann Zwischenausgaben ausgeben, die die Ausgaben der einzelnen Schichten des neuronalen Netzwerks darstellen. In einigen Fällen kann die Aktivierungsmaschine 416 und/oder die Poolingmaschine 418 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzwerks gefordert werden. Der Beschleuniger 402 kann die Zwischenausgaben im Speicher-Subsystem 404 speichern, um sie in das Verarbeitungsmaschinen-Array 410 einzugeben, um die Ergebnisse für die nächste Schicht des neuronalen Netzwerks zu berechnen. Das Verarbeitungsmaschinen-Array 410 kann außerdem Endergebnisse aus einer letzten Schicht des neuronalen Netzwerks ausgeben. Die Endergebnisse können im Speicher-Subsystem 404 gespeichert und dann in den Speicher des Host-Prozessors oder an einen anderen Ort kopiert werden.
-
4B und 4C veranschaulichen Beispiele für den Betrieb des Beschleunigers 402. Wie in 4B gezeigt, kann das Speicher-Subsystem 404 in mehreren Reihen organisiert sein, z. B. in den Speicherreihen 425, 426 usw. In einem Beispiel können die Eingabedaten in dreidimensionalen (2D) Matrizen von Bilddaten mit einer ersten Dimension, die durch die Höhe H dargestellt wird, einer zweiten Dimension, die durch die Breite W dargestellt wird, und einer dritten Dimension, die durch den Kanal C dargestellt wird, organisiert werden. Im Beispiel von 4B kann jede Speicherzeile zweidimensionale (2D) Eingabedatenelemente (über die Höhe H und das Gewicht W) eines bestimmten Eingabekanals C speichern. Das Speicher-Subsystem 404 kann auch Eingabedaten mit höherer Dimensionalität speichern, z. B. 4D-Matrizen. In einem Beispiel kann das Speicher-Subsystem 404 Eingabedaten, die zu verschiedenen vierten Dimensionen gehören, zu verschiedenen Zeiten in jeder Zeile und/oder an verschiedenen Stellen innerhalb jeder Zeile speichern. Das Speicher-Subsystem 404 kann Eingabedaten verschiedener vierter Dimensionen nacheinander abrufen. Beispielsweise kann das Speicher-Subsystem 404 zunächst dreidimensionale Eingabedaten einer bestimmten vierten Dimension (z. B. verschiedene Kanäle C in verschiedenen Zeilen) in das Verarbeitungsmaschinen-Array 410 holen, gefolgt von Eingabedaten einer anderen vierten Dimension usw.
-
Eine Speicherzugriffsschaltung (z. B. Speicherzugriffsschaltung 427), die Teil des Verarbeitungsmaschinen-Arrays 410 sein kann, kann so gesteuert werden, dass sie die Eingabedatenelemente auf der Grundlage eines Satzes von Speicherabrufparametern 430 einschließlich einer Startadresse, eines Schritts und einer Anzahl von Elementen sequentiell in das Verarbeitungsmaschinen-Array 410 holt. Der Parameter „Startadresse“ kann die Position des ersten aus der Speicherzeile zu lesenden Eingabedatenelements definieren, der Parameter „Schritt“ kann eine Anzahl von Eingabedatenelementen definieren, die zwischen den abgerufenen Eingabedatenelementen übersprungen werden, was dem Schrittabstand (Parameter D in Gleichungen 1-3) einer Faltungsoperation entsprechen kann, während der Parameter „Anzahl der abzurufenden Elemente“ eine Gesamtzahl von abzurufenden Eingabedatenelementen definieren kann. Da die Eingabedatenelemente in einem zusammenhängenden Raum gespeichert werden, kann die Zugriffsschaltung 427 die Adressen der abzurufenden Eingabedatenelemente bestimmen und den Zähler auf der Grundlage dieses Schritts aktualisieren. Beispielsweise kann die Zugriffsschaltung 427 damit beginnen, das erste Eingabedatenelement von der Startadresse abzurufen, einen auf dem Schritt basierenden Adressoffset zur Startadresse hinzufügen, um das nächste Eingabedatenelement abzurufen, während eine Anzahl von Eingabedatenelementen übersprungen wird, und dies wiederholen, bis die Anzahl der Abrufelemente erreicht ist.
-
Wie unten beschrieben, können die Parameter 430 einen Schrittparameter und einen Parameter für die Anzahl der Abrufelemente für jede Dimension der im Teilspeicher 404 gespeicherten Eingabedaten umfassen. Speicherabrufparameter 430 können in einen Befehl an das Verarbeitungsmaschinen-Array 410 aufgenommen werden, um einen Satz von Teilsummen zu berechnen. Der Befehl kann von einem Compiler generiert und vom Controller 422 an das Verarbeitungsmaschinen-Array 410 weitergeleitet werden, das einen Decoder enthält (in 4B nicht dargestellt), um die Speicherabrufparameter 430 aus dem Befehl zu extrahieren.
-
Die Verarbeitungsmaschinen 411 des Verarbeitungsmaschinen-Arrays 410 können in Zeilen, wie z. B. Zeile 431, und Spalten, wie z. B. Spalte 432, organisiert werden. In einem Beisiel kann jede Reihe von Verarbeitungsmaschinen 411 einem Eingabekanal (C) zugeordnet sein und kann nacheinander Eingabedatenelemente aus einer Speicherreihe des Speichersystems 404 empfangen, die dem Eingabekanal zugeordnet ist, während jede Spalte von Verarbeitungsmaschinen 411 einem Ausgabekanal (Parameter m in Gleichung 3) zugeordnet werden kann. Eingabedatenelemente werden in einem zusammenhängenden Adressraum und in einer Reihenfolge gespeichert, die auf ihren Koordinaten im Eingabedaten-Array basiert. Jede Verarbeitungsmaschine 411 kann ein Gewichtungsdatenelement für einen Eingabekanal und einen Ausgabekanal, dem die Verarbeitungsmaschine zugeordnet ist, speichern. Jede Spalte der Verarbeitungsmotoren 411. Unter Bezugnahme auf 4A und 4B kann eine Verarbeitungsmaschine 411 innerhalb einer Maschine Eingabedatenelemente eines Eingabekanals empfangen (z. B. Eingabedaten i von 4A), sie mit der gespeicherten Gewichtung multiplizieren (z. B. Gewichtungsdaten w aus 4A), um ein Produkt zu erzeugen, das Produkt zur eingegebenen Teilsumme p_in addieren, um die neue Teilsumme p_out zu erzeugen, und die neue Teilsumme p_out an die Verarbeitungsmaschine 411 unterhalb derselben Spalte übergeben. Die unterste Verarbeitungsmaschine 411 einer Spalte kann eine Teilsumme erzeugen, die eine Summe von Produkten zwischen den in der Spalte der Verarbeitungsmaschinen 411 gespeicherten Gewichtungsdatenelementen und den von der Speicherunterstation 404 empfangenen Eingabedatenelementen verschiedener Eingabekanäle darstellt.
-
In einem Fall, in dem die Speicherabrufparameter 430 angeben, dass die Startadresse am äußersten rechten Eingabedatenelement jeder Zeile liegt, ein Schritt von eins (was in diesem Beispiel ein Überspringen anzeigen kann), und eine bestimmte Anzahl von Eingabedatenelementen abgerufen werden soll, kann die Spalte 432 der Verarbeitungsmaschinen 411 in einer ersten Iteration eine erste Teilsumme auf der Grundlage der gespeicherten Gewichtungsdatenelemente und der Eingabedatenelemente, die vom Speicher-Subsystem 404 bereitgestellt werden, wie folgt erzeugen:
-
-
In einer zweiten Iteration kann die Spalte 432 der Verarbeitungsmaschine 411 eine zweite Teilsumme auf der Grundlage der gespeicherten Gewichtungsdatenelemente und der vom Speicher-Subsystem 404 bereitgestellten Eingabedatenelemente wie folgt erzeugen:
-
Jede Spalte der Verarbeitungsmaschinen 411 kann die in den Iterationen erzeugten Teilsummen an einen Spaltensummationspuffer liefern, wie die Spaltensummationspuffer 442, 443 usw., die beide Teil des Summationspuffers 412 sind. Die Teilsummen werden auf der Grundlage von Gewichtungsdatenelementen an denselben Koordinaten verschiedener Filter-Arrays erzeugt, die mit verschiedenen Eingabe- und Ausgabekanälen verbunden sind, und die Teilsummen entsprechen verschiedenen Ausgabedatenelementen.
-
Jeder Spaltensummationspuffer kann die von jeder Spalte der Verarbeitungsmaschinen 411 empfangenen Teilsummen so lange akkumulieren, bis die arithmetischen Operationen an allen Eingabedatenelementen abgeschlossen sind. Die akkumulierten Teilsummen können z. B. Oe,f m der Gleichung 3 entsprechen. 4C zeigt beispielhaft die internen Komponenten eines Spaltensummationspuffers, wie die Spaltensummationspuffer 442 und 443. Wie in 4C gezeigt, enthält jeder der Spaltensummationspuffer eine Anzahl von Einträgen, wie z. B. E0,0, E0,1, E0,2, usw. Jeder Eintrag kann Koordinaten haben, die den Koordinaten einer Ausgabekachel zugeordnet sind, die einen Bereich eines Ausgabe-Arrays darstellen kann. Jeder Eintrag hat einen Addierer (in 4C nicht dargestellt), die es dem Eintrag ermöglicht, eine empfangene Teilsumme zur gespeicherten Teilsumme zu addieren, um eine kumulierte Teilsumme zu bilden. Der Eintrag kann dann die kumulierte Teilsumme speichern. Die Operationen in den Spaltensummationspuffern 442 und 443 können durch einen Satz von Pufferschreibparametern 452 gesteuert werden, die einen Zieloffset, einen Schritt und eine Anzahl von Schreibelementen enthalten. Der Parameter Zieloffset kann den Eintrag angeben, zu dem die erste Teilsumme (der ersten Iteration) addiert werden soll.
-
Nach der Berechnung der Teilsummen aus einem ersten Satz von Gewichtungsdatenelementen (gleiche Koordinaten in ihren jeweiligen Filter-Arrays, aber unterschiedliche Eingabe- und Ausgabekanäle) kann die Verarbeitungsmaschine 410 einen neuen Satz von Gewichtungsdatenelementen mit anderen Koordinaten laden und die Berechnungen der Teilsummen wiederholen. Die neuen Teilsummen können zu den im Summationspuffer 412 gespeicherten Teilsummen addiert werden, die aus dem ersten Satz von Gewichtungsdatenelementen berechnet wurden. Die Berechnungen und Akkumulierungen der Teilsummen können für den Rest der Gewichtungsdatenelemente fortgesetzt werden, um die Ausgabedatenelemente der Ausgabekachel zu erzeugen.
-
Nachdem die Datenelemente der Ausgabekachel generiert wurden, kann der Summationspuffer 412 die Datenelemente der Ausgabekachel an die Nachbearbeitungsmaschine 415 weiterleiten, die die Aktivierungsfunktionsmaschine 416 und die Poolingmaschine 418 umfasst, um die Ausgabedatenelemente nachzubearbeiten und die nachbearbeiteten Ausgaben zurück in das Speicher-Subsystem 404 zu schreiben. Die von der Nachbearbeitungsmaschine 415 durchgeführten Nachbearbeitungsvorgänge können programmierbar sein. In einigen Beispielen kann die Nachbearbeitungsmaschine 415 so programmiert werden, dass sie die Ausgabedatenelemente entweder an die Aktivierungsfunktionsmaschine 416 oder die Poolingmaschine 418 weiterleitet, um die Nachverarbeitung durchzuführen. In einigen Beispielen kann die Nachverarbeitungsmaschine 415 so programmiert werden, dass sie die Ausgabedatenelemente an eine der Aktivierungsfunktionsmaschine 416 oder Poolingmaschine 418 weiterleitet, um eine Nachverarbeitungsoperation der ersten Phase durchzuführen, die nachverarbeiteten Ausgaben der ersten Phase zurück in den Summationspuffer 412 schreibt, die nachverarbeiteten Ausgaben der ersten Phase aus dem Summationspuffer 412 an eine andere Aktivierungsfunktionsmaschine 416 oder Poolingmaschine 418 weiterleitet, um eine Nachverarbeitungsoperation der zweiten Phase durchzuführen, und dann die nachverarbeiteten Ausgaben der zweiten Phase zurück in das Speicher-Subsystem 404 schreibt.
-
4D zeigt ein Beispiel für die internen Komponenten des Nachbearbeitungsprogramms 415. Wie in 4D gezeigt, umfasst die Nachverarbeitungsmaschine 415 umfasst neben der Aktivierungsfunktionsmaschine 416 und der Poolingmaschine 418 auch eine Schaltung für den Zugriff auf den Summationspuffer 462 und eine Schaltung für den Zugriff auf das Speicher-Subsystem 464. Die Summationspuffer-Zugriffsschaltung 462 ermöglicht Lese- und Schreibzugriffe des Summationspuffers 412 auf die Aktivierungsfunktionsmaschine 416 und die Poolingmaschine 418, während die Speicher-Subsystem-Zugriffsschaltung 464 Lese- und Schreibzugriffe des Speicher-Subsystems 404 auf die Aktivierungsfunktionsmaschine 416 und die Poolingmaschine 418 ermöglicht. Die Zugriffsschaltung 462 für den Summationspuffer und die Zugriffsschaltung 464 für das Speicher-Subsystem sind jeweils durch Pufferschreibparameter 468 und Speicherschreibparameter 470 programmierbar. Beide Parameter 468 und 470 können von einem Compiler generiert und vom Controller 422 an die Nachbearbeitungsmaschine 416 weitergeleitet werden, die einen Decoder enthält (in 4D nicht dargestellt), um die Parameter aus dem Befehl zu extrahieren.
-
Jeder der Pufferschreibparameter 468 und der Speicherschreibparameter 470 kann eine Startadresse oder einen Zieloffset, einen Schritt zur Angabe einer Anzahl von nachverarbeiteten Elementen, die zwischen jedem geschriebenen Element übersprungen werden sollen, eine Anzahl von Elementen, die in das Puffer-/Speicher-Subsystem geschrieben werden sollen, und eine Bedingung für die Durchführung eines Schreibvorgangs in das Summationspuffer-/Speicher-Subsystem enthalten. Die Parameter können eine Folge von Schreibvorgängen definieren, um die Anzahl der Elemente in verschiedene Speicherplätze des Puffers/Speichers zu schreiben. Die Bedingung für die Durchführung einer Schreiboperation kann auf die Poolingmaschine 418 angewendet werden, die eine Summation von Ausgabedatenelementen einer bestimmten Dimension als Teil einer Tensorreduktionsoperation durchführen kann, und die Schreibbedingung kann angeben, ob die Poolingmaschine 418 die endgültige Ausgabe der Summationsoperation im Summationspuffer 412 oder im Speicher-Subsystem 404 speichert oder die Teilsummen der während der Summationsoperation erzeugten Ausgabedatenelemente als Teil einer Akkumulationsoperation in den Summationspuffer 412 oder das Speicher-Subsystem 404 schreibt. In einem Fall, in dem die Ausgabedatenelemente aus mehreren Dimensionen bestehen, können die Pufferschreibparameter 468 und die Speicherschreibparameter 470 die Schrittgröße, die Anzahl der Elemente und die Schreibbedingung für jede Dimension für jede Dimension enthalten. Vom Speicher-Subsystem 404 können die nachbearbeiteten Ausgabedaten an die Kommunikationsstruktur 420 gesendet und/oder als Eingabedaten für eine nachfolgende Verarbeitung einer Schicht des neuronalen Netzwerks an das Verarbeitungsmaschinen-Array 410 übertragen werden.
-
5A - 5E zeigen weitere Beispiele für interne Komponenten eines Verarbeitungsschaltkreises 500, wie z. B. das Verarbeitungsmaschinen-Array 410 und die Nachverarbeitungsmaschine 415. Wie in 5A enthält die Verarbeitungsschaltung 500 einen programmierbaren Hardware-Befehlsdecoder 502, eine programmierbare Befehlsschemaabbildungstabelle 504, eine Hardware-Ausführungsmaschine 506, eine Speicherzugriffsschaltung 508 und einen Controller 509. Die Hardware-Ausführungsmaschine 506 kann z. B. die Verarbeitungsmaschinen 411, die Aktivierungsfunktionsmaschine 416, die Poolingmaschine 418 usw. umfassen. Die Speicherzugriffsschaltung 508 kann z. B. die Speicherzugriffsschaltung 427 von 4B, Summationspuffer-Zugriffsschaltung 462, Speicher-Subsystem-Zugriffsschaltung 464 usw. umfassen. Sowohl die Hardware-Ausführungsmaschine 506 als auch die Speicherzugriffsschaltung 508 enthalten außerdem eine Operandenextraktionsschaltung 510 (z. B. 510a in der Hardware-Ausführungsmaschine 506, 510b in der Speicherzugriffsschaltung 508).
-
Die Verarbeitungsschaltung 500 kann einen Befehl 520 empfangen, der einen Opcode 522 enthalten kann, der den Befehl 520 und/oder die von der Hardware-Ausführungsmaschine 506 auszuführenden Operationen eindeutig identifizieren kann. Der Befehl 520 kann auch einen oder mehrere Operanden 524 enthalten, die Konfigurationsparameter zur Konfiguration der Operationen in der Hardware-Ausführungsmaschine 506 und der Speicherzugriffsschaltung 508 enthalten können. Die Operanden können beispielsweise die Eingabedatentypen für die Verarbeitungsmaschinen 411, die Genauigkeit der arithmetischen Operationen in den Verarbeitungsmaschinen 411, den Typ der von der Aktivierungsfunktionsmaschine 416 zu verwendenden Aktivierungsfunktion, eine von der Poolingmaschine 418 durchzuführende Pooling-Operation usw. definieren. Zu den Operanden können beispielsweise Speicherabrufparameter 430 gehören, um die Speicherzugriffsschaltung 427 von 4B, Pufferschreibparameter 468 und Speicherschreibparameter 470 von 4C usw., um die Speicherzugriffsschaltung 508 so zu konfigurieren, dass sie eine bestimmte Abfolge von Zugriffsoperationen auf einen Speicher (z. B. das Speicher-Subsystem 414) durchführt, um die Operationen der Hardware-Ausführungsmaschine 506 zu unterstützen. Die Folge von Zugriffsoperationen kann beispielsweise eine Folge von Lese-/Schreiboperationen zum Abrufen/Speichern eines Satzes von Eingabedatenelementen umfassen (z. B. ab einer bestimmten Zieladresse, Überspringen einer Anzahl von Eingabedatenelementen zwischen jedem gelesenen oder geschriebenen Datenelement usw.). Die Abfolge der Speicherzugriffsoperationen kann beispielsweise auch die Durchführung von Schreiboperationen im Speicher/Puffer umfassen, wenn eine bestimmte Bedingung erfüllt ist, z. B. wenn eine Summationsoperation abgeschlossen ist oder wenn während der Summationsoperation eine Teilsumme gebildet wird. Die Speicherzugriffsoperationen können durchgeführt werden, um die mit dem Befehl 520 verbundenen Operationen der Hardware-Ausführungsmaschine 506 zu unterstützen. In einigen Beispielen kann ein Befehl sowohl Lese- als auch Schreibzugriffsoperationen definieren, wenn die Ausführung des Befehls in der Hardware-Ausführungsmaschine 506 sowohl Lese- als auch Schreibzugriffsoperationen aus einem Speicher erfordert.
-
Die Steuereinheit 509 kann den Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 steuern, um den Befehl 520 zu dekodieren und das Dekodierungsergebnis an die Speicherzugriffsschaltung 508 und die Hardware-Ausführungsmaschine 506 zu übermitteln, damit beide Operanden 524 aus dem Befehl 520 extrahieren können. 5B und 5C zeigen beispielhafte interne Komponenten des Hardware-Befehlsdecoders 502 bzw. der programmierbaren Befehlsschemaabbildungstabelle 504. Im Einzelnen, unter Bezugnahme auf 5B kann der Hardware-Befehlsdecoder 502 Speichervorrichtungen (z. B. Register) enthalten, die so programmiert sind, dass sie eine Vielzahl von Opcodes 542 speichern, zu denen auch der Opcode 522 gehören kann. Der Hardware-Befehlsdecoder 502 kann im Befehl 520 nach einem Opcode suchen, der mit einem der mehreren Opcodes übereinstimmt, und den übereinstimmenden Opcode ausgeben (z. B. Opcode 522). Der Hardware-Befehlsdecoder 502 kann eine Reihe von Bytekomparatoren enthalten, darunter 540a, 540b, 540n usw., um die Suche durchzuführen. Um die Suche durchzuführen, kann der Befehl 520 in eine Vielzahl von Bytes 543 (z. B. 543a, 543b, 543n) unterteilt werden, wobei jedes Byte in einen der Bytekomparatoren 540 eingespeist wird, um es mit jedem der Vielzahl von Opcodes 542 zu vergleichen und nach einem passenden Opcode zu suchen. In einem Fall, in dem sich ein Opcode über ein oder mehrere segmentierte Bytes 543 erstreckt, können Teilmengen von Bits jedes Opcodes jedem Bytekomparator zugeführt werden, um nach einer passenden Teilmenge von Bits des Opcodes zu suchen. Der Hardware-Befehlsdecoder 502 umfasst außerdem eine Fusionsschaltung 544, die einen Multiplexer oder andere logische Schaltungen zur Ausgabe des passenden Opcodes enthalten kann. In einem Fall, in dem der Opcode vollständig in einem der segmentierten Bytes enthalten ist, kann die Fusionsschaltung 544 eine Ausgabe von einem der Bytekomparatoren als übereinstimmenden Opcode auswählen, und zwar auf der Grundlage einer Anzeige von diesem Bytekomparator, dass der Opcode in dem von diesem Bytekomparator verarbeiteten Byte gefunden wird. Wenn sich der Opcode über eines oder mehrere der segmentierten Bytes 543 erstreckt, kann die Fusionsschaltung 544 außerdem die Ausgaben der Bytekomparatoren zusammenführen, die anzeigen, dass Teilmengen von Bites des Opcodes in den von diesen Bytekomparatoren verarbeiteten Bytes gefunden werden.
-
Der Controller 509 kann den programmierbaren Hardware-Befehlsdecoder 502 so steuern, dass er den passenden Opcode (z.B. Opcode 522) an die programmierbare Befehlsschema-Zuordnungstabelle 504 weiterleitet, die so programmiert werden kann, dass sie eine Zuordnung zwischen der Vielzahl von Opcodes und einer Vielzahl von Definitionen von Bit-Offsets und Bit-Längen von Operanden der Befehle speichert. 5C veranschaulicht beispielhaft die internen Komponenten der programmierbaren Befehlsschemaabbildungstabelle 504. Wie in 5C gezeigt, kann die programmierbare Befehlsschemaabbildungstabelle 504 Speichervorrichtungen (z. B. Register) enthalten, die so programmiert sind, dass sie eine Abbildung zwischen einer Vielzahl von Opcodes 542 und einer Vielzahl von Definitionen 554 speichern. Jede Definition kann den Bit-Offset und die Bit-Länge von einem oder mehreren Operanden festlegen. Einige der durch eine Teilmenge der Definition 554 (z. B. Definition 554a) definierten Operanden können auf die Hardware-Ausführungsmaschine 506 ausgerichtet sein, während einige der durch eine andere Teilmenge der Definition 554 (z. B. Definition 554b) definierten Operanden auf die Speicherzugriffsschaltung 508 ausgerichtet sein können. Unter Bezugnahme auf 5A kann die programmierbare Befehlsschemaabbildungstabelle 504 einen Opcode vom programmierbaren Hardware-Befehlsdecoder 502 (z. B. Opcode 522) empfangen und eine Definition 554 bestimmen, die dem Opcode 522 zugeordnet ist. Controller 509 kann auch eine Teilmenge der Definition 554 (z. B. Definition 554a) identifizieren, die für die Hardware-Ausführungsmaschine 506 bestimmt ist, und eine andere Teilmenge der Definition 554 (z. B. Definition 554b), die für die Speicherzugriffsschaltung 508 bestimmt ist. Controller 509 kann dann die programmierbare Befehlsschemaabbildungstabelle 504 steuern, um die Definition 544b an die Operandenextraktionsschaltung 510a der Speicherzugriffsschaltung 508 und die Definition 544a an die Operandenextraktionsschaltung 510b der Hardware-Ausführungsmaschine 506 weiterzuleiten. Auf der Grundlage der empfangenen Definitionen können die Operandenextraktionsschaltung 510a und die Operandenextraktionsschaltung 510b die jeweiligen Teilmengen von Operanden 524 für die Speicherzugriffsschaltung 508 und die Hardware-Ausführungsmaschine 506 extrahieren.
-
Die in dem programmierbaren Hardware-Befehlsdecoder 502 und der programmierbaren Befehlsschemaabbildungstabelle 504 gespeicherte Vielzahl von Opcodes kann einen Befehlssatz darstellen, der derzeit sowohl von der Verarbeitungsschaltung 500 als auch vom Beschleuniger 402 unterstützt wird. In einigen Beispielen können die Opcodes bei mindestens einer Teilmenge der Befehle unterschiedliche Bit-Längen aufweisen. Zum Beispiel können einige der Opcodes eine Bit-Länge von einem Byte oder weniger haben, während einige der Opcodes eine Bit-Länge von mehr als einem Byte haben können. Auch die Bitpositionen und Bit-Längen der Operanden sowie die Anzahl der Operanden können bei den einzelnen Befehlen variieren. Die Flexibilität bei den Längen und Positionen von Opcodes und Operanden ermöglicht es, eine große Anzahl von Befehlen zu definieren und vom Beschleuniger 402 zu unterstützen. Infolgedessen kann eine größere Vielfalt von Operationen in den Befehlen kodiert werden, um verschiedene Topologien neuronaler Netzwerke und/oder Anwendungen zu unterstützen, was die Fähigkeiten des Beschleunigers 402 erweitern kann.
-
Andererseits müssen der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 nicht alle Opcodes und Operandendefinitionen der vom Beschleuniger 402 unterstützten Befehle speichern. Stattdessen können der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 durch ein Befehlsschemaprogramm so programmiert werden, dass sie nur eine Teilmenge der Opcodes und Definitionen speichern. Die Teilmenge kann von der Verarbeitungsschaltung 500 (und dem Beschleuniger 402) als ein derzeit vom Beschleuniger 402 unterstützter Befehlssatz verwendet werden. Die mit der Untergruppe der Opcodes und Definitionen verbundenen Befehle können die Verarbeitungsschaltung 500 so steuern, dass sie Operationen für ein bestimmtes neuronales Netzwerk und/oder eine bestimmte Anwendung durchführt, z. B. den Zugriff auf Eingabedaten einer bestimmten Dimensionalität, die Durchführung einer bestimmten Gruppe von Pooling-Operationen, die Verwendung einer bestimmten Gruppe von Aktivierungsfunktionen usw. Nachdem die Operationen für dieses neuronale Netzwerk und/oder diese Anwendung abgeschlossen sind, können der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 durch ein Befehlsschemaprogramm programmiert werden, um ein anderes Befehlsschemaprogramm zu speichern, um eine andere Teilmenge der Opcodes und Definitionen zu speichern, um dem Beschleuniger 402 einen anderen Befehlssatz bereitzustellen. Mit solchen Anordnungen kann die Anzahl der in dem programmierbaren Hardware-Befehlsdecoder 502 und der programmierbaren Befehlsschemaabbildungstabelle 504 gespeicherten Opcodes und Definitionen reduziert werden, was nicht nur die erforderliche Speicherkapazität der Speichervorrichtungen, die die Opcodes und die Definitionen speichern, verringern kann, sondern auch die Suchgeschwindigkeit für die Opcodes und Definitionen erhöhen kann, um den Dekodierungsvorgang zu beschleunigen.
-
Die Suchgeschwindigkeit für die Opcodes und Definitionen in der programmierbaren Befehlsschemaabbildungstabelle 504 kann durch andere Techniken weiter verbessert werden, z. B. durch den Einsatz eines inhaltsadressierbaren Speichers (CAM), der die eingegebenen Suchdaten mit einer Tabelle gespeicherter Daten vergleichen und die Adresse der übereinstimmenden Daten zurückgeben kann. 5D veranschaulicht ein Beispiel für die interne Struktur der programmierbaren Befehlsschemaabbildungstabelle 504. Wie in 5D gezeigt, kann die programmierbare Befehlsschemaabbildungstabelle 504 einen CAM 560 enthalten. Im CAM 560 kann jeder Opcode mit einer Adresse 564 verknüpft werden, die wiederum mit einer Definition verbunden ist. Um eine Definition auf der Basis eines Opcodes nachzuschlagen, kann der CAM 560 nach einem Eingabe-Opcode (z.B. Opcode 522) suchen. Anhand des passenden Opcodes kann dann eine entsprechende Adresse und Definition gefunden werden. Im Vergleich zu einer herkömmlichen Speichervorrichtung, die den Zugriff nur auf der Grundlage der Adresse erlaubt, ermöglichen die Anordnungen von 5D, dass Opcodes und Definitionen viel schneller gesucht und abgerufen werden, was den Dekodiervorgang weiter beschleunigen kann.
-
Wie oben beschrieben, können der Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 auf der Grundlage eines Befehlsschemaprogramms programmiert werden, um die Opcodes und Definitionen zu speichern. Das Befehlsschemaprogramm kann in Form von Bitströmen vorliegen, die aus einem Befehlsschemadokument generiert werden können.
-
6 veranschaulicht ein Beispiel eines Befehlsschemadokuments 600, das einen Opcode („Opcode_1“) für einen Befehl X sowie die Bit-Offsets und Bit-Längen jedes Operanden von Befehl X auflistet, wie z. B. den Eingabedatentyp („input_data_type“), einen Schrittparameter und einen Parameter für die Anzahl der Elemente für jede Dimension der Eingabedaten (z. B. step_x, step_y, step_z, num_element_x, num_element_y, num_element_z usw.) usw. Ein Bitstrom eines Befehlsschemaprogramms, der die Bit-Offsets und Bit-Längen der Operanden definiert, kann dann aus dem Befehlsschemadokument 600
z. B. von einem Compiler auf der Grundlage der Schlüsselwörter „bit_offset“ und „bit_length“ erzeugt werden.
-
In einigen Beispielen kann das Befehlsschema 600 aus einem besser lesbaren Befehlsdefinitionsdokument 602 generiert werden, in dem der Opcode und eine sequentielle Reihenfolge der Operanden sowie ein Typ jedes Operanden, der die Bit-Länge jedes Operanden definieren kann, aufgeführt sind. Ein Skript kann verwendet werden, um aus dem Befehlsdefinitionsdokument 602 das Befehlsschemadokument 600 zu generieren, indem beispielsweise der Typ und die Reihenfolge der im Befehlsdefinitionsdokument 602 aufgeführten Operanden nachgeschlagen und die Bit-Offset- und Bit-Längenfelder der Operanden im Befehlsschemadokument 600 ausgefüllt werden. Auf diese Weise können Änderungen an der Befehlsdefinition in dem besser lesbaren Befehlsdefinitionsdokument 602 vorgenommen werden, um die Möglichkeit menschlicher Fehler zu verringern, während die Änderungen automatisch und effizient in das Befehlsschemadokument 600 mit geringem Fehlerrisiko übertragen werden können.
-
7A - 7C zeigen weitere Beispiele von Befehlen für verschiedene Speicherzugriffsarten. Wie in 7A und 7B gezeigt, können zwei verschiedene Befehle (Y und X) Speicherzugriffsoperanden für eine unterschiedliche Dimensionalität der Daten enthalten. 7A zeigt ein Befehlsdefinitionsdokument 702 und das zugehörige Befehlsschemadokument 700 für einen Befehl Y, während 7B ein Befehlsdefinitionsdokument 712 und das zugehörige Befehlsschemadokument 710 für den Befehl X aus 6 zeigt.
-
Wie in 7A gezeigt, enthält der Befehl Y einen Operanden 722 „Mem_access_4D“ für eine Folge von Speicherzugriffsoperationen auf 4D-Daten. Der Operand „Mem_access_4D“ umfasst einen Adressoperanden, einen Schrittoperanden und einen Elementanzahloperanden für jede Dimension der 4D-Daten, wie z. B. step_x und num_element_x für eine erste Dimension, step_y und num_element_y für eine zweite Dimension, step_z und num_element_z für eine dritte Dimension sowie step_t und num_element_t für eine vierte Dimension. Der Befehl kann auch eine oder mehrere Adressen enthalten, die den Startpunkt für den Zugriff auf die 4D-Daten festlegen. Die Parameter address, steps und num_element können ein Muster für den Zugriff auf einen Speicher (z. B. Speicher-Subsystem 404, Summationspuffer 412) für jede Dimension definieren. So kann beispielsweise der Parameter „step_x“ eine Anzahl von Datenelementen festlegen, die zwischen zwei zugegriffenen Datenelementen entlang der x-Dimension übersprungen werden sollen, während der Parameter „num_element_x“ eine Anzahl von Datenelementen festlegen kann, auf die entlang der x-Dimension zugegriffen werden soll. Darüber hinaus kann der Parameter „step_y“ eine Anzahl von Datenelementen festlegen, die zwischen zwei zugegriffenen Datenelementen entlang der x-Dimension übersprungen werden (z. B. eine Zeile eines zweidimensionalen Tensors), während „num_element_y“ eine Anzahl von Datenelementen festlegen kann, auf die entlang der y-Dimension zugegriffen wird. Der Parameter „step_y“ kann auf den Parametern „step_x“ und „num_element_x“ basieren, um festzulegen, mit welchem Datenelement eine neue Zeile beginnen soll, während das Element „num_element_y“ eine Anzahl von Zeilen im zweidimensionalen Tensor festlegen kann. Der Parameter „step_z“ kann eine Anzahl von Kanälen definieren, die zwischen jedem der zweidimensionalen Tensoren übersprungen werden (z. B. durch Überspringen von Zeilen des Speicher-Subsystems 404), während der Parameter „num_element_z“ eine Gesamtzahl von Kanälen definieren kann (z. B. eine Gesamtzahl zweidimensionaler Tensoren). Schließlich kann der Parameter „step_t“ Gruppen von dreidimensionalen Tensoren definieren, die zwischen zwei Gruppen von dreidimensionalen Tensoren, auf die zugegriffen wird, übersprungen werden sollen (z. B. auf der Grundlage der Bestimmung eines Adress-Offsets zwischen verschiedenen Speicherplätzen des Speicher-Subsystems 404, die die Gruppen von dreidimensionalen Tensoren speichern), während der Parameter „num_element_t“ eine Gesamtzahl von Gruppen dreidimensionaler Tensoren definieren kann, auf die zugegriffen werden soll. Die Bit-Offsets und Bit-Längen der Mem_access_4D-Operanden sind im Befehlsschema-Dokument 700 aufgeführt. Nach Extraktion der Mem_access_4D-Operanden durch die Operandenextraktionsschaltung 510a kann die Speicherzugriffsschaltung 508 eine Folge von Speicherzugriffsoperationen durchführen, um einen Satz von 4D-Daten auf der Grundlage der Schritt- und num_element-Operanden für jede Dimension zu erhalten.
-
Andererseits enthält in 7B die Anweisung X einen Operanden 732 mit der Bezeichnung „Mem_access_3D“ wie in 6 für eine Folge von Speicherzugriffsoperationen für 3D-Daten. Der Operand „Mem_access_3D“ umfasst einen Schrittoperanden und einen Elementanzahloperanden für jede Dimension der 3D-Daten, z. B. step_x und num_element_x für die erste Dimension, step_y und num_element_y für die zweite Dimension und step_z und num_element_z für die dritte Dimension. Darüber hinaus, wie in 7B gezeigt, können im entsprechenden Befehlsschema-Dokument 710 die Operanden step_t und num_element_t 734 für die vierte Dimension mit Nullwerten gefüllt werden. Basierend auf der Erkennung der Nullwerte in den Bit-Längen und Bit-Offsets kann der Controller 509 das Senden der Bit-Längen und Bit-Offsets der step_t und num_element_t Operanden 734 an die Speicherzugriffsschaltung 508 überspringen.
-
7C zeigt ein Beispiel für einen Summationsbefehl, der von einem programmierbaren Hardware-Befehlsdecoder 502 und einer programmierbaren Befehlsschemaabbildungstabelle 504 unterstützt werden kann. Wie im Befehlsdefinitionsdokument 752 von 7C gezeigt, kann ein Summationsbefehl einen Operanden 754 „mem_write_mode“ enthalten, der eine Bedingung definieren kann, die erfüllt sein muss, damit die Speicherzugriffsschaltung 508 einen Schreibvorgang durchführt. Der Summationsbefehl kann beispielsweise von der Poolingmaschine 418 ausgeführt werden, um eine Folge von Schreiboperationen für eine Tensorreduktionsoperation durchzuführen. Wie in einer Anweisungsdatei 756 von 7C gezeigt, hat der Summationsbefehl 762 den mem_write_mode-Operanden 754 auf einen ersten Wert (z. B. einen Nullwert) gesetzt, um anzuzeigen, dass die Poolingmaschine 418 nur die endgültige Ausgabe der Summationsoperation zurück in das Speicher-Subsystem 404 schreibt, während der Summationsbefehl 764 den mem_write_mode-Operanden 754 auf einen zweiten Wert (z.B, einen Wert von eins), um anzuzeigen, dass die Poolingmaschine 418 jede Teilsumme der Summationsoperation in das Speicher-Subsystem 404 schreibt und/oder bei jedem Taktzyklus eine Schreiboperation durchführt, wenn eine Teilsumme in der Poolingmaschine 418 erzeugt wird. Angenommen, die Poolingmaschine 418 empfängt einen Satz von Eingabedaten [1, 2, 3, 4], so kann die Ausführung des Befehls 756 dazu führen, dass die Speicherzugriffsschaltung 508 nur die Summationsausgabe (10) im Speicher-Subsystem 404 speichert, während die Ausführung des Befehls 764 dazu führen kann, dass die Speicherzugriffsschaltung 508 die Teilsummen 1, 3 (aus der Summation von 1 und 2), 6 (aus der Summation von 1, 2 und 3) und 10 im Speicher-Subsystem 404 speichert.
-
8A veranschaulicht ein Verfahren 800 zum Betrieb eines Hardwarebeschleunigers, wie z. B. des Beschleunigers 402 in 4A. Der Beschleuniger 402 kann eine oder mehrere Berechnungsschaltungen umfassen, darunter das Verarbeitungsmaschinen-Array 410, den Summationspuffer 412, die Nachbearbeitungsmaschine 415 usw. Jeder Berechnungsschaltkreis kann Komponenten des Verarbeitungsschaltkreises 500 von 5A umfassen, die Verfahren 800 durchführen können. Die Verarbeitungsschaltung 500 umfasst einen programmierbaren Hardware-Befehlsdecoder 502, eine programmierbare Befehlsschemaabbildungstabelle 504, eine Hardware-Ausführungsmaschine 506, eine Speicherzugriffsschaltung 508 und einen Controller 509. Die Hardware-Ausführungsmaschine 506 kann z. B. die Verarbeitungsmaschinen 411, die Aktivierungsfunktionsmaschine 416, die Poolingmaschine 418 usw. umfassen. Die Speicherzugriffsschaltung 508 kann z. B. die Speicherzugriffsschaltung 427 von 4B, Summationspuffer-Zugriffsschaltung 462, Speicher-Subsystem-Zugriffsschaltung 464 usw. umfassen. Sowohl die Hardware-Ausführungsmaschine 506 als auch die Speicherzugriffsschaltung 508 enthalten außerdem eine Operandenextraktionsschaltung 510 (z. B. 510a in der Hardware-Ausführungsmaschine 506, 510b in der Speicherzugriffsschaltung 508 usw.).
-
Verfahren 800 beginnt mit Schritt 802, in dem die Verarbeitungsschaltung 500 einen Befehl (z. B. Befehl 522) empfängt, der einen ersten Opcode (z. B. Opcode 522) enthält. Der Opcode 522 kann den Befehl 520 und/oder die von der Hardware-Ausführungsmaschine 506 auszuführenden Operationen eindeutig identifizieren. Der Befehl 520 kann auch einen oder mehrere Operanden 524 enthalten, die Konfigurationsparameter zur Konfiguration der Operationen in der Hardware-Ausführungsmaschine 506 und der Speicherzugriffsschaltung 508 enthalten können. Die Operanden können beispielsweise die Eingabedatentypen für die Verarbeitungsmaschinen 411, die Genauigkeit der arithmetischen Operationen in den Verarbeitungsmaschinen 411, den Typ der von der Aktivierungsfunktionsmaschine 416 zu verwendenden Aktivierungsfunktion, die von der Poolingmaschine 418 durchzuführende Poolingoperation usw. festlegen.
-
In Schritt 804 extrahiert der Hardware-Befehlsdecoder 502 den ersten Opcode aus dem Befehl. Der Hardware-Befehlsdecoder 502 kann Speichervorrichtungen (z. B. Register) enthalten, die so programmiert sind, dass sie eine Vielzahl von Opcodes 542 speichern, die den Opcode 522 enthalten können. Der Hardware-Befehlsdecoder 502 kann im Befehl 520 nach einem Opcode suchen, der mit einem der mehreren Opcodes übereinstimmt, und den übereinstimmenden Opcode ausgeben (z. B. Opcode 522). Der Hardware-Befehlsdecoder 502 kann eine Reihe von Bytekomparatoren enthalten, darunter 540a, 540b, 540n usw., um die Suche durchzuführen. Um die Suche durchzuführen, kann der Befehl 520 in eine Vielzahl von Bytes 543 (z. B. 543a, 543b, 543n) unterteilt werden, wobei jedes Byte in einen der Bytekomparatoren 540 eingespeist wird, um es mit jedem der Vielzahl von Opcodes 542 zu vergleichen und nach einem passenden Opcode zu suchen. In einem Fall, in dem sich ein Opcode über ein oder mehrere segmentierte Bytes 543 erstreckt, können Teilmengen von Bits jedes Opcodes jedem Bytekomparator zugeführt werden, um nach einer passenden Teilmenge von Bits des Opcodes zu suchen. Der Hardware-Befehlsdecoder 502 umfasst außerdem eine Fusionsschaltung 544, die einen Multiplexer oder andere logische Schaltungen zur Ausgabe des passenden Opcodes enthalten kann. In einem Fall, in dem der Opcode vollständig in einem der segmentierten Bytes enthalten ist, kann die Fusionsschaltung 544 eine Ausgabe von einem der Bytekomparatoren als übereinstimmenden Opcode auswählen, und zwar auf der Grundlage einer Anzeige von diesem Bytekomparator, dass der Opcode in dem von diesem Bytekomparator verarbeiteten Byte gefunden wird. Außerdem kann die Fusionsschaltung 544 in einem Fall, in dem sich der Opcode über eines oder mehrere der segmentierten Bytes 543 erstreckt, die Ausgaben der Bytekomparatoren zusammenführen, die anzeigen, dass Teilmengen von Bites des Opcodes in den von diesen Bytekomparatoren verarbeiteten Bytes gefunden werden.
-
In Schritt 806 erhält die Steuereinheit 509 aus der Befehlsschemaabbildungstabelle 504, die die Vielzahl von Opcodes auf eine Vielzahl von Definitionen von Operanden in einer Vielzahl von Befehlen abbildet, und auf der Grundlage des ersten Opcodes eine erste Definition eines ersten Operanden. Die programmierbare Befehlsschema-Zuordnungstabelle 504 kann Speichervorrichtungen (z. B. Register) enthalten, die so programmiert sind, dass sie eine Zuordnung zwischen einer Vielzahl von Opcodes 542 und einer Vielzahl von Definitionen 554 speichern. Jede Definition kann den Bit-Offset und die Bit-Länge von einem oder mehreren Operanden festlegen. Einige der durch eine Teilmenge der Definition 554 (z. B. Definition 554a) definierten Operanden können auf die Hardware-Ausführungsmaschine 506 ausgerichtet sein, während einige der durch eine andere Teilmenge der Definition 554 (z. B. Definition 554b) definierten Operanden auf die Speicherzugriffsschaltung 508 ausgerichtet sein können. In einigen Beispielen kann die programmierbare Befehlsschema-Tabelle 504 als inhaltsadressierbarer Speicher (CAM) implementiert werden, um die Geschwindigkeit des Abrufs von Operandendefinitionen auf der Grundlage von Opcodes zu erhöhen.
-
Der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 müssen nicht alle Opcodes und Operandendefinitionen der vom Beschleuniger 402 unterstützten Befehle speichern. Stattdessen können der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 durch ein Befehlsschemaprogramm so programmiert werden, dass sie nur eine Teilmenge der Opcodes und Definitionen speichern. Die Teilmenge kann von der Verarbeitungsschaltung 500 (und dem Beschleuniger 402) als ein derzeit vom Beschleuniger 402 unterstützter Befehlssatz verwendet werden. Die mit der Untergruppe der Opcodes und Definitionen verbundenen Befehle können die Verarbeitungsschaltung 500 so steuern, dass sie Operationen für ein bestimmtes neuronales Netzwerk und/oder eine bestimmte Anwendung durchführt, z. B. den Zugriff auf Eingabedaten einer bestimmten Dimensionalität, die Durchführung einer bestimmten Gruppe von Pooling-Operationen, die Verwendung einer bestimmten Gruppe von Aktivierungsfunktionen usw. Nach Abschluss der Operationen für dieses neuronale Netzwerk und/oder diese Anwendung können der programmierbare Hardware-Befehlsdecoder 502 und die programmierbare Befehlsschemaabbildungstabelle 504 durch ein Befehlsschemaprogramm programmiert werden, um ein anderes Befehlsschemaprogramm zu speichern, um eine andere Teilmenge der Opcodes und Definitionen zu speichern, um dem Beschleuniger 402 einen anderen Befehlssatz bereitzustellen. Mit solchen Anordnungen kann die Anzahl der in dem programmierbaren Hardware-Befehlsdecoder 502 und der programmierbaren Befehlsschemaabbildungstabelle 504 gespeicherten Opcodes und Definitionen reduziert werden, was nicht nur die erforderliche Speicherkapazität der Speichervorrichtungen, die die Opcodes und die Definitionen speichern, verringern kann, sondern auch die Suchgeschwindigkeit für die Opcodes und Definitionen erhöhen kann, um den Dekodierungsvorgang zu beschleunigen.
-
In Schritt 808 leitet die Steuereinheit 509 die Befehle und die erste Definition an eine Hardware-Ausführungsmaschine weiter (z. B. eine der Verarbeitungsmaschinen 411, Aktivierungsfunktionsmaschine 416, Poolingmaschine 418), um die Hardware-Ausführungsmaschine 506 in die Lage zu versetzen, auf der Grundlage der ersten Definition einen Operanden aus dem Befehl zu extrahieren und eine Operation (z. B. eine arithmetische Operation, eine Aktivierungsfunktionsverarbeitung, eine Poolingoperation usw.) auf der Grundlage eines Operanden durchzuführen. Der Controller 509 kann auch den Befehl und eine zweite Definition eines Operanden für einen Speicherzugriffsbefehl an die Speicherzugriffsschaltung 508 weiterleiten, um den Speicherzugriffsbefehl zur Unterstützung der Operation an der Hardware-Ausführungsmaschine 506 durchzuführen.
-
In Schritt 810 kann die Hardware-Ausführungsmaschine den Operanden aus dem Befehl auf der Grundlage der ersten Definition extrahieren und dann in Schritt 812 den Befehl ausführen, indem sie die auf dem Operanden basierende Operation durchführt. Die Operation kann z. B. eine arithmetische Operation auf der Grundlage einer durch den Operanden spezifizierten Genauigkeit, eine Aktivierungsfunktionsverarbeitung unter Verwendung einer durch den Operanden spezifizierten Aktivierungsfunktion, eine durch den Operanden spezifizierte Pooling-Operation usw. umfassen.
-
8B veranschaulicht ein Verfahren 850 zum Betrieb eines Hardwarebeschleunigers, wie z. B. des Beschleunigers 402 in 4A, um eine Speicherzugriffsoperation auf einen Speicher durchzuführen. Der Speicher kann ein On-Chip-Speicher sein, z. B. das Speicher-Subsystem 404, der Summationspuffer 412 usw. Das Verfahren 850 kann von der Speicherzugriffsschaltung 508 der Verarbeitungsschaltung 500 durchgeführt werden.
-
Das Verfahren 850 beginnt mit Schritt 852, in dem die Speicherzugriffsschaltung 508 einen Befehl erhält. Der Befehl kann vom Steuergerät 509 weitergeleitet werden. Der Befehl wird auch durch den Hardware-Befehlsdecoder 502 dekodiert, um einen Opcode zu erhalten, und Operandendefinitionen können auch aus der Befehlsschemaabbildungstabelle 504 in die Speicherzugriffsschaltung 508 geholt werden.
-
In Schritt 854 extrahiert die Speicherzugriffsschaltung 508 aus dem Befehl Informationen, die einen ersten Speicherzugriffsmodus aus einer Vielzahl von Speicherzugriffsmodi angeben, die von der Speicherzugriffsschaltung unterstützt werden. In einigen Beispielen umfassen die mehreren Speicherzugriffsmodi den Zugriff auf unterschiedliche Datendimensionen, wie 1D-, 2D-, 3D- und 4D-Daten. Der Befehl kann auch Operanden/Parameter für jede Dimension von mehreren Datendimensionen enthalten, z. B. eine Anzahl von zu überspringenden Datenelementen, eine Anzahl von Datenelementen, auf die zugegriffen werden soll, usw. Wenn der Speicherzugriffsmodus nur auf eine Teilmenge der mehreren Dimensionen zugreift, können die Parameter der Dimensionen, auf die nicht zugegriffen wird, in der Anweisung mit Null angegeben werden.
-
In einigen Beispielen ist der Befehl mit einer Summationsoperation einer Vielzahl von Datenelementen in der Hardware-Ausführungsmaschine verbunden. In einem Zugriffsmodus kann die Speicherzugriffsschaltung nach Abschluss der Summationsoperation eine Schreiboperation durchführen, um eine Summe der Vielzahl von Datenelementen zu speichern, während in einem anderen Speicherzugriffsmodus die Speicherzugriffsschaltung eine Schreiboperation durchführen kann, um jede Teilsumme der Vielzahl von Datenelementen während der Summationsoperation zu speichern.
-
In Schritt 856 greift die Speicherzugriffsschaltung im ersten Speicherzugriffsmodus auf den Speicher zu, um eine Ausführung des Befehls durch die Hardware-Ausführungsmaschine zu unterstützen. Beispielsweise kann die Speicherzugriffsschaltung auf das Speicher-Subsystem 404 zugreifen, um Eingabedaten in ein systolisches Array zu holen, um Berechnungen auf der Grundlage des Befehls durchzuführen, und kann Ausgabedaten des systolischen Arrays im Summationspuffer 412 speichern.
-
Ausführungsformen der Offenbarung können im Hinblick auf die folgenden Abschnitte beschrieben werden:
- 1. Ein Hardwarebeschleuniger, umfassend:
- einen programmierbaren Hardware-Befehlsdecoder, der so programmiert ist, dass er eine Vielzahl von Opcodes speichert;
- eine programmierbare Befehlsschemaabbildungstabelle, die als inhaltsadressierbarer Speicher (CAM) implementiert und so programmiert ist, dass sie die Vielzahl von Opcodes auf eine Vielzahl von Definitionen von Operanden in einer Vielzahl von Befehlen abbildet;
- eine Hardware-Ausführungsmaschine und
- einen Controller, der so konfiguriert ist, dass er
- einen Befehl empfängt, der einen ersten Opcode aus der Vielzahl von Opcodes enthält;
- den Hardware-Befehlsdecoder steuert, um den ersten Opcode aus dem Befehl zu extrahieren;
- aus der Befehlsschemaabbildungstabelle und basierend auf dem ersten Opcode eine erste Definition eines ersten Operanden erhält und
- den Befehl und die erste Definition an die Hardware-Ausführungsmaschine weiterleitet, um die Hardware-Ausführungsmaschine zu steuern,
- um den ersten Operanden aus dem Befehl basierend auf der ersten Definition zu extrahieren und
- den Befehl basierend auf dem ersten Operanden auszuführen.
- 2. Der Hardwarebeschleuniger nach Abschnitt 1, wobei der Hardware-Befehlsdecoder auf der Grundlage einer Opcode-Programmierdatei programmiert ist, die eine Position und eine Größe von Bits des ersten Opcodes in dem Befehl spezifiziert.
- 3. Der Hardwarebeschleuniger nach Abschnitt 1 oder 2, wobei jede der mehreren Definitionen eine Position und eine Größe von Bits von Operanden in dem jeweiligen Befehl angibt.
- 4. Der Hardwarebeschleuniger nach Abschnitt 3, wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer Befehlsschema-Programmierdatei programmierbar ist, die Bitpositionen und Bitversätze der Operanden in den Befehlen spezifiziert.
- 5. Der Hardwarebeschleuniger nach einem der Abschnitte 1-4, wobei der CAM die Opcodes auf Adressen der Definitionen im CAM abbildet; und
wobei die Abbildung ermöglicht, dass die erste Definition aus dem CAM auf der Grundlage des Opcodes abgerufen wird.
- 6. Ein Hardwarebeschleuniger, umfassend:
- einen Befehlsdecoder;
- eine Befehlsschemaabbildungstabelle;
- eine Hardware-Ausführungsmaschine und
- einen Controller, konfiguriert zum:
- Erhalten eines Befehls;
- Extrahieren eines Opcodes aus dem Befehl mit Hilfe des Befehlsdecoders;
- Erhalten eines Befehlsschemas des Befehls aus der Befehlsschemaabbildungstabelle und auf der Grundlage des Opcodes; und
- Weiterleiten des Befehls und des Befehlsschemas an die Hardware-Ausführungsmaschine, um die Hardware-Ausführungsmaschine in die Lage zu versetzen, einen Operanden aus dem Befehl zu extrahieren und den Befehl auf der Grundlage des Operanden auszuführen.
- 7. Der Hardwarebeschleuniger nach Abschnitt 6, wobei der Hardware-Befehlsdecoder auf der Grundlage einer Opcode-Programmierdatei programmierbar ist, um Bits des Opcodes entweder aus einem einzelnen Byte des Befehls oder aus mehreren Bytes des Befehls zu extrahieren; und
wobei die Opcode-Programmierdatei eine Position und eine Größe der Bits des Opcodes in dem Befehl angibt.
- 8. Der Hardwarebeschleuniger nach Abschnitt 7, wobei die Opcode-Programmierdatei die Positionen und Größen einer Vielzahl von Bitsätzen des Opcodes in einer Vielzahl von Bytes des Befehls spezifiziert; und
wobei der Hardware-Befehlsdecoder auf der Grundlage der Opcode-Programmierdatei programmiert ist, um die mehreren Bitsätze des Opcodes aus den mehreren Bytes des Befehls zu extrahieren und die mehreren Bitsätze zu kombinieren, um den Opcode zu extrahieren.
- 9. Der Hardwarebeschleuniger nach einem der Abschnitte 6 bis 8, wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer Befehlsschema-Programmierdatei programmierbar ist, die Bitpositionen und Bitversätze von Operanden in den Befehlen spezifiziert.
- 10. Der Hardwarebeschleuniger nach Abschnitt 9, wobei die Befehlsschemaabbildungstabelle während der Ausführung einer Befehlsdatei, die einen ersten Befehl und einen zweiten Befehl umfasst, durch die Hardware-Ausführungsmaschine programmierbar ist;
wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer ersten Befehlsschema-Programmierdatei programmiert ist, um ein erstes Befehlsschema für den ersten Befehl für die Hardware-Ausführungsmaschine bereitzustellen; und
wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer zweiten Befehlsschema-Programmierdatei programmiert wird, um der Hardware-Ausführungsmaschine ein zweites Befehlsschema für den zweiten Befehl bereitzustellen.
- 11. Der Hardwarebeschleuniger nach einem der Abschnitte 6-10, wobei die Befehlsschemaabbildungstabelle unter Verwendung eines inhaltsadressierbaren Speichers (CAM) implementiert ist, der die Opcodes auf Adressen einer Vielzahl von Befehlsschemata in dem CAM abbildet und es ermöglicht, das Befehlsschema auf der Grundlage des Opcodes aus dem CAM abzurufen.
- 12. Der Hardwarebeschleuniger nach einem der Abschnitte 6-11,
wobei der Operand ein erster Operand ist; und
wobei der Hardwarebeschleuniger außerdem eine Speicherzugriffsschaltung umfasst;
und
wobei der Controller konfiguriert ist zum:
- Erhalten einer ersten Definition des ersten Operanden und einer zweiten Definition eines zweiten Operanden aus der Befehlsschemaabbildungstabelle und auf der Grundlage des Opcodes; und
- Weiterleiten des Befehls und der zweiten Definition an die Speicherzugriffsschaltung, um die Speicherzugriffsschaltung so zu steuern, dass sie den zweiten Operanden aus dem Befehl extrahiert und eine Speicherzugriffsoperation auf der Grundlage des zweiten Operanden durchführt, um die Ausführung des Befehls durch die Hardware-Ausführungsmaschine zu unterstützen.
- 13. Der Hardwarebeschleuniger nach Abschnitt 12, der außerdem einen On-Chip-Speicher umfasst;
wobei die Hardware-Ausführungsmaschine ein systolisches Array umfasst;
wobei der Opcode das systolische Array steuert, um Berechnungen zur Erzeugung von Zwischenausgaben durchzuführen; und
wobei die Speicherzugriffsoperation Eingangsdatenelemente und Gewichtungselemente aus dem On-Chip-Speicher in das systolische Array holt, um die Berechnungen durchzuführen.
- 14. Der Hardwarebeschleuniger nach Abschnitt 13, wobei der Befehl ein erster Befehl ist;
wobei der Hardwarebeschleuniger außerdem eine Nachbearbeitungsmaschine umfasst;
wobei der Controller konfiguriert ist zum:
- Erhalten eines zweiten Befehls;
- Extrahieren eines zweiten Opcodes aus dem zweiten Befehl mit Hilfe des Befehlsdecoders;
- Erhalten einer dritten Definition eines dritten Operanden und einer vierten Definition eines vierten Operanden aus der Befehlsschemaabbildungstabelle und auf der Grundlage des zweiten Opcodes;
- Weiterleiten des zweiten Befehls und der dritten Definition an die Nachverarbeitungsmaschine, um die Nachverarbeitungsmaschine in die Lage zu versetzen, den dritten Operanden aus dem zweiten Befehl zu extrahieren und eine Nachverarbeitungsoperation an den Zwischenausgaben des systolischen Arrays auf der Grundlage des dritten Operanden durchzuführen, um Ausgaben zu erzeugen; und
- Weiterleiten des zweiten Befehls und der vierten Definition an die Speicherzugriffsschaltung, um die Ausgaben im On-Chip-Speicher zu speichern.
- 15. Der Hardwarebeschleuniger nach Abschnitt 13 oder 14, wobei das systolische Array durch einen ersten Satz von Befehlen programmierbar ist, um die Berechnungen für ein erstes neuronales Netzwerk durchzuführen, und durch einen zweiten Satz von Befehlen programmierbar ist, um die Berechnungen für ein zweites neuronales Netzwerk durchzuführen;
wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer ersten Befehlsschema-Programmierdatei programmiert ist, um dem systolischen Array Befehlsschemata bereitzustellen, um das systolische Array zu steuern, um die Berechnungen für das erste neuronale Netzwerk durchzuführen; und
wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer zweiten Befehlsschema-Programmierdatei programmiert wird, um dem systolischen Array Befehlsschemata zur Verfügung zu stellen, um das systolische Array zu steuern, um die Berechnungen für das zweite neuronale Netzwerk durchzuführen.
- 16. Ein Verfahren zum Betreiben eines Hardwarebeschleunigers, umfassend:
- Empfangen eines Befehls, der einen ersten Opcode enthält;
- Extrahieren des ersten Opcodes aus dem Befehl durch einen Hardware-Befehlsdecoder des Hardwarebeschleunigers, der eine Vielzahl von Opcodes speichert;
- Erhalten einer ersten Definition eines ersten Operanden aus einer Befehlsschemaabbildungstabelle des Hardwarebeschleunigers, die die Vielzahl von Opcodes auf eine Vielzahl von Definitionen von Operanden in einer Vielzahl von Befehlen abbildet, und basierend auf dem ersten Opcode;
- Weiterleiten des Befehls und der ersten Definition an eine Hardware-Ausführungsmaschine des Hardwarebeschleunigers;
- Extrahieren des ersten Operanden aus dem Befehl auf der Grundlage der ersten Definition durch die Hardware-Ausführungsmaschine; und
- Ausführen des Befehls auf der Grundlage des ersten Operanden durch die Hardware-Ausführungsmaschine.
- 17. Das Verfahren nach Abschnitt 16, ferner umfassend:
- Programmieren des Hardware-Befehlsdecoders auf der Grundlage einer Opcode-Programmierdatei, um Bits des Opcodes entweder aus einem einzelnen Byte des Befehls oder aus mehreren Bytes des Befehls zu extrahieren; und
- wobei die Opcode-Programmierdatei eine Position und eine Größe der Bits des Opcodes in dem Befehl angibt.
- 18. Das Verfahren nach Abschnitt 17, wobei die Opcode-Programmierdatei die Positionen und Größen einer Vielzahl von Bitsätzen des Opcodes in einer Vielzahl von Bytes des Befehls spezifiziert; und
wobei der Hardware-Befehlsdecoder auf der Grundlage der Programmierdatei programmiert ist, um die mehreren Bitsätze des Opcodes aus den mehreren Bytes des Befehls zu extrahieren und die mehreren Bitsätze zu kombinieren, um den Opcode zu extrahieren.
- 19. Das Verfahren nach einem der Abschnitte 16 bis 18, ferner umfassend:
- Programmieren der Befehlsschemaabbildungstabelle auf der Grundlage einer Befehlsschema-Programmierdatei, die Bitpositionen und Bit-Offsets von Operanden in den Befehlen angibt.
- 20. Das Verfahren nach Abschnitt 19, ferner umfassend:
- Programmieren der Befehlsschemaabbildungstabelle während der Ausführung einer Befehlsdatei, wobei die Befehlsdatei einen ersten Befehl und einen zweiten Befehl umfasst und von der Hardware-Ausführungsmaschine ausgeführt werden soll,
- wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer ersten Befehlsschema-Programmierdatei programmiert ist, um ein erstes Befehlsschema für den ersten Befehl für die Hardware-Ausführungsmaschine bereitzustellen; und
- wobei die Befehlsschemaabbildungstabelle auf der Grundlage einer zweiten Befehlsschema-Programmierdatei programmiert wird, um der Hardware-Ausführungsmaschine ein zweites Befehlsschema für den zweiten Befehl bereitzustellen.
- 21. Ein Hardwarebeschleuniger, umfassend:
- einen Hardware-Befehlsdecoder, der so programmiert ist, dass er eine Vielzahl von Opcodes speichert;
- eine Befehlsschemaabbildungstabelle, um die Vielzahl von Opcodes auf eine Vielzahl von Definitionen von Operanden in einer Vielzahl von Befehlen abzubilden;
- eine Hardware-Ausführungsmaschine;
- eine Speicherzugriffsschaltung, die programmierbar ist, um auf einen Speicher in einer Vielzahl von Speicherzugriffsmodi zuzugreifen, wobei jeder Speicherzugriffsmodus eine bestimmte Sequenz von Zugriffsoperationen in dem Speicher definiert;
- einen Controller, so konfiguriert, dass er:
- einen Befehl empfängt, der einen ersten Opcode aus der Vielzahl von Opcodes enthält;
- den Hardware-Befehlsdecoder steuert, um den ersten Opcode aus dem Befehl zu extrahieren;
- eine erste Definition eines ersten Operanden und eine zweite Definition eines zweiten Operanden aus der Befehlsschemaabbildungstabelle und auf der Grundlage des ersten Opcodes erhält, wobei der erste Operand eine Berechnungsoperation an der Hardware-Ausführungsmaschine definiert und der zweite Operand einen Speicherzugriffsmodus aus der Vielzahl der Speicherzugriffsmodi an der Speicherzugriffsschaltung einstellt, um die Berechnungsoperation an der Hardware-Ausführungsmaschine zu unterstützen;
- den Befehl und die erste Definition an die Hardware-Ausführungsmaschine weiterleitet, um die Hardware-Ausführungsmaschine zu steuern,
- den ersten Operanden aus dem Befehl basierend auf der ersten Definition extrahiert und
- die Berechnungsoperation auf der Grundlage des ersten Operanden durchführt, und
- die Anweisung und die zweite Definition an die Speicherzugriffsschaltung weiterleitet, um die Speicherzugriffsschaltung zu steuern:
- den ersten Operanden aus dem Befehl basierend auf der ersten Definition extrahiert und
- eine Folge von Speicherzugriffsoperationen im Speicher auf der Grundlage des zweiten Operanden ausführt, um die Rechenoperation in der Hardware-Ausführungsmaschine zu unterstützen.
- 22. Der Hardwarebeschleuniger nach Abschnitt 21, wobei die Speicherzugriffsschaltung so konfiguriert ist, dass sie die Folge von Speicherzugriffsoperationen ausführt, die mindestens eines der folgenden Elemente umfasst: Bereitstellen von Eingabedaten der Berechnungsoperation für die Hardware-Ausführungsmaschine oder Speichern von Ausgabedaten der Berechnungsoperation im Speicher.
- 23. Der Hardwarebeschleuniger nach Abschnitt 21 oder 22, wobei die Vielzahl von Speicherzugriffsmodi einen ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für eindimensionale erste Daten zugreift;
wobei im zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für mehrdimensionale zweite Daten zugreift; und
wobei der Zugriff auf den Speicher für die mehrdimensionalen zweiten Daten eine Folge von Zugriffsoperationen auf den Speicher für Datenelemente der zweiten Daten auf der Grundlage der Dimensionen der Datenelemente umfasst.
- 24. Der Hardwarebeschleuniger nach Abschnitt 23, wobei in dem zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für vierdimensionale (4D) zweite Daten zugreift.
- 25. Der Hardwarebeschleuniger nach einer der Abschnitte 21-24, wobei der Befehl mit einer Summationsoperation einer Vielzahl von Datenelementen in der Hardware-Ausführungsmaschine verbunden ist;
wobei die Vielzahl der Speicherzugriffsmodi einen ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie nach Abschluss der Summationsoperation eine Schreiboperation durchführt, um eine Summe der Vielzahl von Datenelementen zu speichern; und
wobei im zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie eine Schreiboperation durchführt, um jede Teilsumme der Vielzahl von Datenelementen während der Summationsoperation zu speichern.
- 26. Ein Hardwarebeschleuniger, umfassend:
- eine Hardware-Ausführungsmaschine und
- eine Speicherzugriffsschaltung, konfiguriert zum:
- Erhalten eines Befehls;
- Extrahieren von Informationen aus dem Befehl, die einen ersten Speicherzugriffsmodus aus einer Vielzahl von Speicherzugriffsmodi angeben, die von der Speicherzugriffsschaltung unterstützt werden; und
- Zugreifen auf einen Speicher im ersten Speicherzugriffsmodus, um eine Ausführung des Befehls durch die Hardware-Ausführungsmaschine zu unterstützen.
- 27. Der Hardwarebeschleuniger nach Abschnitt 26, wobei der Befehl Folgendes umfasst:
- einen Opcode, der eine Berechnungsoperation in der Hardware-Ausführungsmaschine angibt;
- einen ersten Operanden, der den ersten Speicherzugriffsmodus angibt; und
- zweite Operanden, die Parameter für eine oder mehrere Speicherzugriffsoperationen im ersten Speicherzugriffsmodus angeben.
- 28. Der Hardwarebeschleuniger nach Abschnitt 27, wobei die zweiten Operanden mindestens eines von Folgendem spezifizieren: eine Leseoperation in den Speicher unter dem ersten Speicherzugriffsmodus, um Eingabedaten der Berechnungsoperation an die Hardware-Ausführungsmaschine zu holen, oder eine Schreiboperation in den Speicher unter dem ersten Speicherzugriffsmodus, um Ausgabedaten der Berechnungsoperation zu speichern.
- 29. Der Hardwarebeschleuniger nach Abschnitt 27 oder 28, wobei die Vielzahl von Speicherzugriffsmodi den ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für eindimensionale erste Daten mit einer ersten Dimension zugreift;
wobei im zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für mehrdimensionale zweite Daten mit mehreren Dimensionen zugreift; und
wobei der Zugriff auf den Speicher für die mehrdimensionalen zweiten Daten eine Folge von Zugriffsoperationen auf den Speicher für Datenelemente der zweiten Daten auf der Grundlage der Dimensionen der Datenelemente umfasst.
- 30. Der Hardwarebeschleuniger nach Abschnitt 29, wobei in dem zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie auf den Speicher für vierdimensionale zweite Daten zugreift.
- 31. Der Hardwarebeschleuniger nach Abschnitt 30, wobei die vierdimensionalen zweiten Daten in Gruppen von dreidimensionalen zweiten Daten gespeichert sind, wobei jede Gruppe einer anderen vierten Dimension entspricht; und
wobei die Speicherzugriffsschaltung so programmiert ist, dass sie auf der Grundlage der zweiten Operanden auf eine oder mehrere der Gruppen der dreidimensionalen zweiten Daten zugreift.
- 32. Der Hardwarebeschleuniger nach einem der Abschnitte 29-31, wobei die zweiten Operanden für jede Dimension der mehreren Dimensionen mindestens einen der folgenden Parameter enthalten: einen ersten Parameter, der eine Anzahl der Datenelemente angibt, die zwischen zwei Datenelementen, auf die zugegriffen wird, übersprungen werden sollen, oder einen zweiten Parameter, der eine Gesamtzahl von Datenelementen angibt, auf die zugegriffen werden soll.
- 33. Der Hardwarebeschleuniger nach Abschnitt 32, wobei im ersten Speicherzugriffsmodus der erste Parameter und der zweite Parameter für andere Dimensionen als die erste Dimension Null sind.
- 34. Der Hardwarebeschleuniger nach einem der Abschnitte 27-33, wobei die Berechnungsoperation eine Summationsoperation einer Vielzahl von Elementen in der Hardware-Ausführungsmaschine umfasst;
wobei die Vielzahl der Speicherzugriffsmodi den ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie nach Abschluss der Summationsoperation eine Schreiboperation durchführt, um eine Summe der Vielzahl von Datenelementen zu speichern; und
wobei im zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung so programmiert ist, dass sie eine Schreiboperation durchführt, um jede Teilsumme der Vielzahl von Datenelementen während der Summationsoperation zu speichern.
- 35. Der Hardwarebeschleuniger nach einem der Abschnitte 27-34, der außerdem einen On-Chip-Speicher umfasst;
wobei die Hardware-Ausführungsmaschine ein systolisches Array umfasst;
wobei der Opcode das systolische Array steuert, um Berechnungen zur Erzeugung von Zwischenausgaben durchzuführen; und
wobei die eine oder die mehreren Speicherzugriffsoperationen dem systolischen Array Eingabedatenelemente und Gewichtungselemente aus dem On-Chip-Speicher zuführen, um die Berechnungen durchzuführen.
- 36. Ein Verfahren zum Betreiben eines Hardwarebeschleunigers, umfassend:
- Erhalten eines Befehls;
- Extrahieren von Informationen, die einen ersten Speicherzugriffsmodus aus einer Vielzahl von Speicherzugriffsmodi, die von der Speicherzugriffsschaltung unterstützt werden, anzeigen, durch eine Speicherzugriffsschaltung des Hardwarebeschleunigers und aus dem Befehl; und
- Zugreifen auf einen Speicher im ersten Speicherzugriffsmodus, um eine Ausführung des Befehls durch eine Hardware-Ausführungsmaschine des Hardwarebeschleunigers zu unterstützen.
- 37. Das Verfahren nach Abschnitt 36, wobei der Befehl Folgendes umfasst:
- einen Opcode, der eine Berechnungsoperation in der Hardware-Ausführungsmaschine angibt;
- einen ersten Operanden, der den ersten Speicherzugriffsmodus angibt; und
- zweite Operanden, die Parameter für eine oder mehrere Speicherzugriffsoperationen im ersten Speicherzugriffsmodus angeben.
- 38. Das Verfahren nach Abschnitt 37, wobei die Vielzahl von Speicherzugriffsmodi den ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung auf den Speicher für eindimensionale erste Daten mit einer ersten Dimension zugreift;
wobei im zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung auf den Speicher für mehrdimensionale zweite Daten mit mehreren Dimensionen zugreift; und
wobei der Zugriff auf den Speicher für die mehrdimensionalen zweiten Daten eine Folge von Zugriffsoperationen auf den Speicher für Datenelemente der zweiten Daten auf der Grundlage der Dimensionen der Datenelemente umfasst.
- 39. Das Verfahren nach Abschnitt 38, wobei die zweiten Operanden für jede Dimension der mehreren Dimensionen einen ersten Parameter, der eine Anzahl von Datenelementen angibt, die zwischen zwei zugegriffenen Datenelementen übersprungen werden sollen, und einen zweiten Parameter, der eine Gesamtzahl von Datenelementen angibt, auf die zugegriffen werden soll, enthalten; und
wobei im ersten Speicherzugriffsmodus der erste Parameter und der zweite Parameter für andere Dimensionen als die erste Dimension Null sind.
- 40. Das Verfahren nach einem der Abschnitte 37-39, wobei die Berechnungsoperation eine Summationsoperation einer Vielzahl von Elementen in der Hardware-Ausführungsmaschine umfasst;
wobei die Vielzahl der Speicherzugriffsmodi einen ersten Speicherzugriffsmodus und einen zweiten Speicherzugriffsmodus umfasst;
wobei im ersten Speicherzugriffsmodus die Speicherzugriffsschaltung nach Abschluss der Summationsoperation eine Schreiboperation durchführt, um eine Summe der Vielzahl von Datenelementen zu speichern; und
wobei in dem zweiten Speicherzugriffsmodus die Speicherzugriffsschaltung eine Schreiboperation durchführt, um jede Teilsumme der Vielzahl von Datenelementen während der Summationsoperation zu speichern.
-
9 umfasst ein Blockdiagramm, das ein Beispiel für ein Host-System 900 zeigt, in dem eine Beschleunigungsmaschine 960 verwendet werden kann. Die Beschleunigungsmaschine 960 von 9 ist ein Beispiel für eine Vorrichtung, die einen oder mehrere Beschleuniger enthalten kann, wie in 4A dargestellt. Das beispielhafte Host-System 900 von 9 umfasst die Beschleunigungsmaschine 960, einen Host-Prozessor 972, DRAM 930 oder Prozessorspeicher, E/A-Vorrichtungen 932 und Unterstützungssysteme 974. In verschiedenen Implementierungen kann das Host-System 900 weitere Hardware enthalten, die hier nicht dargestellt ist.
-
Der Host-Prozessor 972 ist eine integrierte Allzweckschaltung, die in der Lage ist, Programmbefehle auszuführen. In einigen Beispielen kann der Host-Prozessor 972 mehrere Rechenkerne enthalten. Ein Multi-Core-Prozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors enthalten. In einigen Beispielen kann das Host-System 900 mehr als einen Host-Prozessor 972 enthalten. In einigen Beispielen können der Host-Prozessor 972 und die Beschleunigungsmaschine 960 ein Chip sein, z. B. ein oder mehrere integrierte Schaltkreise im selben Gehäuse.
-
In verschiedenen Beispielen kann der Host-Prozessor 972 mit anderen Komponenten im Host-System 900 über einen oder mehrere Kommunikationskanäle kommunizieren. Das Host-System 900 kann z. B. einen Host-Prozessor-Bus enthalten, über den der Host-Prozessor 972 z. B. mit dem DRAM 930 kommunizieren kann. Als weiteres Beispiel kann das Host-System 900 einen E/A-Bus enthalten, wie z. B. einen PCI-basierten Bus, über den der Host-Prozessor 972 mit der Beschleunigungsmaschine 960 und/oder den E/A-Vorrichtungen 932 kommunizieren kann. In verschiedenen Beispielen kann das Host-System 900 alternativ oder zusätzlich andere Kommunikationskanäle oder Busse enthalten, wie z. B. serielle Busse, Energiemanagementbusse, Speichergerätebusse usw.
-
In einigen Beispielen können Softwareprogramme, die auf dem Host-Prozessor 972 ausgeführt werden, Eingaben zur Verarbeitung durch die Beschleunigungsmaschine 960 empfangen oder erzeugen. In einigen Beispielen können die Programme ein geeignetes neuronales Netzwerk auswählen, das für eine bestimmte Eingabe ausgeführt wird. Zum Beispiel kann ein Programm für die Sprachübersetzung ein oder mehrere neuronale Netzwerke auswählen, die zur Spracherkennung und/oder maschinellen Übersetzung fähig sind. In diesen und anderen Beispielen können die Programme die Beschleunigungsmaschine 960 mit dem auszuführenden neuronalen Netzwerk konfigurieren und/oder eine neuronale Netzwerkverarbeitungsmaschine auf der Beschleunigungsmaschine 960 auswählen, die zuvor zur Ausführung des gewünschten neuronalen Netzwerks konfiguriert wurde. In einigen Beispielen kann der Host-Prozessor 972, sobald die Beschleunigungsmaschine 960 eine Schlussfolgerung auf Eingabedaten gestartet hat, die Bewegung von Daten (wie z. B. Gewichtungen, Befehle, Zwischenausgaben, Ergebnisse von bedingten Schichten und/oder Endergebnisse) in die oder aus der Beschleunigungsmaschine 960 verwalten.
-
In einigen Beispielen kann ein Softwareprogramm, das die Beschleunigungsmaschine 960 zur Durchführung einer Schlussfolgerung verwendet, das Ergebnis einer bedingten Schicht aus der Beschleunigungsmaschine 960 und/oder aus einem Speicherort, z. B. im DRAM 930, lesen. In diesen Beispielen kann das Programm bestimmen, welche Aktion das neuronale Netzwerk als Nächstes ausführen soll. Das Programm kann z. B. festlegen, dass die Schlussfolgerung abgebrochen wird. Als weiteres Beispiel kann das Programm bestimmen, die Richtung der Schlussfolgerung zu ändern, was von einem Code auf niedrigerer Ebene und/oder dem Prozessor des neuronalen Netzwerks an eine nächste auszuführende Schicht übersetzt werden kann. In diesen und anderen Beispielen kann der Ausführungsablauf des neuronalen Netzwerks per Software koordiniert werden.
-
Der DRAM 930 ist ein Speicher, der vom Host-Prozessor 972 zur Speicherung von Programmcode verwendet wird, den der Host-Prozessor 972 gerade ausführt, sowie von Werten, mit denen gearbeitet wird. In einigen Beispielen können die Daten für ein neuronales Netzwerk (z. B. Gewichtswerte, Befehle und andere Daten) ganz oder teilweise im DRAM 930 gespeichert werden. DRAM ist ein gängiger Begriff für Prozessorspeicher, und obwohl DRAM ein flüchtiger Speicher ist, kann Prozessorspeicher flüchtig und/oder nicht flüchtig sein. Obwohl hier nicht dargestellt, kann das Host-System 900 auch andere flüchtige und nichtflüchtige Speicher für andere Zwecke enthalten. Zum Beispiel kann das Host-System 900 einen Nur-Lese-Speicher (ROM) enthalten, der Boot-Code zum Booten des Host-Systems 900 beim Einschalten und/oder BIOS-Code (Basic Input/Output System) speichert.
-
Obwohl hier nicht dargestellt, kann der DRAM 930 Befehle für verschiedene Programme speichern, die in den Host-Prozessor 972 geladen und von diesem ausgeführt werden können. Der DRAM 930 kann z. B. Befehle für ein Betriebssystem, einen oder mehrere Datenspeicher, ein oder mehrere Anwendungsprogramme, einen oder mehrere Treiber und/oder Dienste zur Implementierung der hierin offenbarten Funktionen speichern.
-
Das Betriebssystem kann den Gesamtbetrieb des Host-Systems 900 verwalten und orchestrieren, wie z. B. das Planen von Aufgaben, das Ausführen von Anwendungen und/oder das Steuern von Peripherievorrichtungen, neben anderen Operationen. In einigen Beispielen kann ein Host-System 900 eine oder mehrere virtuelle Maschinen hosten. In diesen Beispielen kann jede virtuelle Maschine dazu konfiguriert sein, ihr eigenes Betriebssystem auszuführen. Beispiele für Betriebssysteme sind Unix, Linux, Windows, Mac OS, iOS, Android und dergleichen. Das Betriebssystem kann, alternativ oder zusätzlich, auch ein proprietäres Betriebssystem sein.
-
Die Datenspeicher können permanente oder flüchtige Daten enthalten, die vom Betriebssystem, den Anwendungsprogrammen oder den Treibern verwendet und/oder betrieben werden. Beispiele für solche Daten sind Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten und so weiter. Die Informationen in den Datenspeichern können in einigen Beispielen über das/die Netzwerk(e) an die Benutzervorrichtungen übermittelt werden. In einigen Fällen können die Datenspeicher zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber enthalten. Alternativ oder zusätzlich können die Datenspeicher Standard- und/oder proprietäre Softwarebibliotheken und/oder Standard- und/oder proprietäre Application User Interface (API)-Bibliotheken speichern. In den Datenspeichern gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
-
Die Treiber können Programme enthalten, die die Kommunikation zwischen Komponenten im Host-System 900 ermöglichen. So können beispielsweise einige Treiber die Kommunikation zwischen dem Betriebssystem und den Peripherievorrichtungen oder E/A-Vorrichtungen 932 ermöglichen. Alternativ oder zusätzlich können einige Treiber die Kommunikation zwischen den Anwendungsprogrammen und dem Betriebssystem und/oder den Anwendungsprogrammen und Peripherievorrichtungen ermöglichen, die für das Host-System 900 zugänglich sind. In vielen Fällen können die Treiber Treiber enthalten, die eine gut verstandene Funktionalität bieten (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Solid-State-Device-Treiber usw.). In anderen Fällen können die Treiber proprietäre oder spezielle Funktionen bereitstellen.
-
Die E/A-Vorrichtungen 932 können Hardware für den Anschluss an Benutzer-Eingabe- und -Ausgabevorrichtungen umfassen, wie z. B. Tastaturen, Mäuse, Stifte, Tablets, Spracheingabevorrichtungen, Berührungseingabevorrichtungen, Displays oder Monitore, Lautsprecher und Drucker, neben anderen Vorrichtungen. Die E/A-Vorrichtungen 932 können auch Speicherlaufwerke und/oder Netzwerkschnittstellen zum Anschluss an ein Netzwerk 980 enthalten. Beispielsweise kann das Host-System 900 eine Netzwerkschnittstelle verwenden, um mit Speichervorrichtungen, Benutzerterminals, anderen Computervorrichtungen oder Servern und/oder anderen Netzwerken zu kommunizieren, um nur einige Beispiele zu nennen.
-
In verschiedenen Beispielen können eine oder mehrere der E/A-Vorrichtung 932 Speichervorrichtungen sein. In diesen Beispielen umfassen die Speichervorrichtungen nichtflüchtige Speicher und können Programmbefehle und/oder Daten speichern. Beispiele für Speichervorrichtungen umfassen unter anderem Magnetspeicher, optische Platten, Solid-State-Disks, Flash-Speicher und/oder Bandspeicher. Die Speichervorrichtung kann im gleichen Gehäuse wie das Host-System 900 oder in einem externen Gehäuse untergebracht sein. Eine Speichervorrichtung kann fest (z. B. durch Schrauben befestigt) oder abnehmbar sein (z. B. mit einem physischen Lösemechanismus und möglicherweise einem Hot-Plug-Mechanismus).
-
Speichervorrichtungen, der DRAM 930 und jede andere Speicherkomponente im Host-System 900 sind Beispiele für computerlesbare Speichermedien. Computerlesbare Speichermedien sind physikalische Medien, die in der Lage sind, Daten in einem Format zu speichern, das von einer Vorrichtung wie dem Host-Prozessor 972 gelesen werden kann. Die computerlesbaren Speichermedien können nichtflüchtig sein. Nichtflüchtige, computerlesbare Medien können die darauf gespeicherten Daten beibehalten, wenn kein Strom an das Medium angelegt wird. Beispiele für nichtflüchtige, computerlesbare Medien sind u. a. ROM-Vorrichtungen, Magnetplatten, Magnetbänder, optische Platten, Flash-Vorrichtungen und Solid-State-Laufwerke. Wie hierin verwendet schließt der Begriff computerlesbare Speichermedien keine computerlesbaren Kommunikationsmedien ein.
-
In verschiedenen Beispielen können die auf computerlesbaren Speichermedien gespeicherten Daten Programmbefehle, Datenstrukturen, Programmmodule, Bibliotheken, andere Software-Programmkomponenten und/oder andere Daten enthalten, die innerhalb eines Datensignals, wie einer Trägerwelle oder einer anderen Übertragung, übertragen werden können. Die computerlesbaren Speichermedien können zusätzlich oder alternativ Dokumente, Bilder, Video-, Audio- und andere Daten enthalten, die durch die Verwendung eines Softwareprogramms bearbeitet oder manipuliert werden können.
-
In verschiedenen Beispielen können eine oder mehrere der E/A-Vorrichtung 932 PCI-basierte Vorrichtungen sein. In diesen Beispielen enthält eine PCI-basierte E/A-Vorrichtung eine PCI-Schnittstelle zur Kommunikation mit dem Host-System 900. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Busprotokollfamilie zu beschreiben, einschließlich des Original-PCI-Standards, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express(PCIe) oder andere Verbesserungs- oder abgeleitete Protokolle, die auf den hierin beschriebenen PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle für die Verbindung von Vorrichtungen, wie z. B. einer lokalen Peripherievorrichtung mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation definiert und von verschiedenen Anbietern übernommen wurde. Die Anbieter stellen sicher, dass konforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll implementieren, und umgekehrt. Wie hierin verwendet, enthalten PCI-basierte Vorrichtungen auch Vorrichtungen, die über Non-Volatile Memory Express (NVMe) kommunizieren. NVMe ist eine Vorrichtungsschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die an ein Computersystem mit PCIe angeschlossen sind.
-
Eine PCI-basierte Vorrichtung kann eine oder mehrere Funktionen enthalten. Eine „Funktion“ beschreibt die Hardware und/oder Software eines Vorgangs, der von der PCI-basierten Vorrichtung bereitgestellt werden kann. Beispiele für Funktionen sind unter anderem Massenspeichersteuerungen, Netzwerksteuerungen, Displaysteuerungen, Speichersteuerungen, serielle Bus-Controller, Wireless-Controller, Ver- und Entschlüsselungs-Controller. In einigen Fällen kann eine PCI-basierte Vorrichtung mehr als eine Funktion enthalten. So kann beispielsweise eine PCI-basierte Vorrichtung einen Massenspeicher-Controller und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann eine PCI-basierte Vorrichtung zwei Speichersteuerungen bereitstellen, um zwei verschiedene Speicherressourcen zu steuern. In einigen Implementierungen kann eine PCI-basierte Vorrichtung bis zu acht Funktionen haben.
-
In einigen Beispielen kann die PCI-basierte Vorrichtung eine Single-Root-E/A-Virtualisierung (SR-IOV) enthalten. SR-IOV ist eine erweiterte Funktion, die in eine PCI-basierte Vorrichtung integriert werden kann. SR-IOV ermöglicht es, dass eine physische Ressource (z. B. ein einzelner Netzwerk-Schnittstellencontroller) als mehrere virtuelle Ressourcen (z. B. vierundsechzig Netzwerk-Schnittstellencontroller) erscheint. Somit kann eine PCI-basierte Vorrichtung, die eine bestimmte Funktionalität bereitstellt (z. B. eine Netzwerkschnittstellen-Steuerung), für eine Vorrichtung, die die PCI-basierte Vorrichtung verwendet, als mehrere Vorrichtungen mit derselben Funktionalität erscheinen. Die Funktionen einer SR-IOV-fähigen Speicheradaptervorrichtung können als physikalische Funktionen (PFs) oder virtuelle Funktionen (VFs) klassifiziert werden. Physische Funktionen sind vollwertige Funktionen der Vorrichtung, die entdeckt, verwaltet und manipuliert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, mit denen die Speicheradaptervorrichtung konfiguriert oder gesteuert werden kann. Zu den physischen Funktionen gehören der gleiche Konfigurations-Adressraum und Speicher-Adressraum, den eine nicht-virtualisierte Vorrichtung haben würde. Eine physikalische Funktion kann mit einer Reihe von virtuellen Funktionen verbunden sein. Virtuelle Funktionen ähneln physischen Funktionen, sind aber leichte Funktionen, die im Allgemeinen keine Konfigurationsressourcen haben und im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Jede der physischen Funktionen und/oder virtuellen Funktionen kann einem entsprechenden Ausführungs-Thread (wie z. B. einer virtuellen Maschine) zugeordnet werden, der auf einer Hostvorrichtung läuft.
-
In verschiedenen Implementierungen können die Unterstützungssysteme 974 Hardware zur Koordinierung der Operationen der Beschleunigungsmaschine 960 enthalten. Die Unterstützungssysteme 974 können z. B. einen Mikroprozessor enthalten, der die Aktivitäten der Beschleunigungsmaschine 960 koordiniert, einschließlich der Bewegung von Daten auf der Beschleunigungsmaschine 960. In diesem Beispiel kann der Mikroprozessor eine integrierte Schaltung sein, die Mikrocode ausführen kann. Mikrocode ist ein Programmcode, der einer integrierten Schaltung eine gewisse Flexibilität bei den Operationen ermöglicht, die die integrierte Schaltung ausführen kann. Da der Programmcode jedoch einen begrenzten Befehlssatz verwendet, kann der Mikroprozessor begrenztere Fähigkeiten haben als der Host-Prozessor 972. In einigen Beispielen wird das vom Mikroprozessor ausgeführte Programm auf der Hardware des Mikroprozessors oder auf einem nichtflüchtigen Speicherchip im Host-System 900 gespeichert. In einigen Beispielen können der Mikroprozessor und die Beschleunigungsmaschine 960 auf einem Chip sein, wie z. B. ein integrierter Schaltkreis auf demselben Chip und im selben Gehäuse.
-
In einigen Beispielen können die Unterstützungssysteme 974 dafür verantwortlich sein, Befehle vom Host-Prozessor 972 entgegenzunehmen, wenn auf dem Host-Prozessor 972 ausgeführte Programme die Ausführung eines neuronalen Netzwerks anfordern. Beispielsweise kann der Host-Prozessor 972 den Unterstützungssystemen 974 einen Satz von Eingabedaten und eine Aufgabe zur Verfügung stellen, die mit dem Satz von Eingabedaten ausgeführt werden soll. In diesem Beispiel können die Unterstützungssysteme 974 ein neuronales Netzwerk identifizieren, das die Aufgabe ausführen kann, und die Beschleunigungsmaschine 960 so programmieren, dass das neuronale Netzwerk auf dem Satz von Eingabedaten ausgeführt wird. In einigen Beispielen müssen die Unterstützungssysteme 974 nur eine geeignete neuronale Netzwerkverarbeitungsmaschine des neuronalen Netzwerkprozessors auswählen. In einigen Beispielen müssen die Unterstützungssysteme 974 möglicherweise die Daten für das neuronale Netzwerk in die Beschleunigungsmaschine 960 laden, bevor die Beschleunigungsmaschine 960 mit der Ausführung des neuronalen Netzwerks beginnen kann. In diesen und anderen Beispielen können die Unterstützungssysteme 974 weiterhin die Ausgabe der Ausführung des neuronalen Netzwerks empfangen und die Ausgabe zurück an den Host-Prozessor 972 liefern.
-
In einigen Beispielen können die Operationen der Unterstützungssysteme 974 durch den Host-Prozessor 972 abgewickelt werden. In diesen Beispielen werden die Unterstützungssysteme 974 möglicherweise nicht benötigt und können vom Host-System 900 weggelassen werden.
-
In verschiedenen Beispielen kann das Host-System 900 eine beliebige Kombination von Host-Systemen, Prozessorknoten, Speicher-Subsystemen und E/A-Chassis sein, die Benutzervorrichtungen, Dienstanbietercomputer oder Computer von Drittanbietern darstellen.
-
Benutzervorrichtungen können Computervorrichtungen enthalten, um auf eine Anwendung zuzugreifen (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Beispielen kann die Anwendung von einem Rechenzentrums- oder Dienstanbieter gehostet, verwaltet und/oder bereitgestellt werden. Die Anwendung kann es einem Benutzer ermöglichen, mit den Dienstanbietercomputern zu interagieren, um beispielsweise auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung kann eine Computervorrichtung wie beispielsweise ein Mobiltelefon, ein Smartphone, ein Personal Digital Assistant (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein elektronisches Buch (E-Book-Lesevorrichtung), eine Spielkonsole usw. sein. In einigen Beispielen kann (können) die Benutzervorrichtung(en) über ein oder mehrere Netzwerke mit den Dienstanbietercomputern kommunizieren. Darüber hinaus kann die Benutzervorrichtung Teil des verteilten Systems sein, das von dem Dienstanbietercomputer verwaltet, kontrolliert wird oder anderweitig Teil der Dienstanbietercomputer ist (z. B. eine mit den Dienstanbietercomputern integrierte Konsolenvorrichtung).
-
Das Host-System 900 kann auch einen oder mehrere Dienstanbietercomputer darstellen. Ein Dienstanbietercomputer kann eine native Anwendung bereitstellen, die so konfiguriert ist, dass sie auf Benutzervorrichtungen ausgeführt wird, mit denen Benutzer interagieren können. Der Dienstanbietercomputer kann in einigen Beispielen Computerressourcen bereitstellen, wie z. B. Client-Einheiten, Datenspeicher mit niedriger Latenzzeit, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen, elektronisches Content Performance Management und so weiter. Der Dienstanbietercomputer kann auch so betrieben werden, dass sie dem oder den Benutzer(n) Webhosting, Datenbanken, Computeranwendungsentwicklungs- und/oder Implementierungsplattformen, Kombinationen aus dem Vorstehenden oder dergleichen bereitstellen. In einigen Beispielen kann der Dienstanbietercomputer als eine oder mehrere virtuelle Maschinen bereitgestellt werden, die in einer gehosteten Computerumgebung implementiert sind. Die gehostete Computerumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Computerressourcen enthalten. Zu diesen Computerressourcen können Computer-, Netzwerk- und/oder Speichervorrichtungen gehören. Eine gehostete Computerumgebung kann auch als Cloud-Computing-Umgebung bezeichnet werden. Der Dienstanbietercomputer kann einen oder mehrere Server enthalten, die möglicherweise in einem Cluster, als Serverfarm oder als einzelne Server, die nicht miteinander verbunden sind, angeordnet sind, und können die Anwendung und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Computerumgebung konfiguriert werden. In einigen Beispielen kann der Dienstanbietercomputer zusätzlich oder alternativ Computervorrichtungen wie z. B. ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Server-Computer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielkonsole usw. enthalten. In einigen Fällen kann der Dienstanbietercomputer mit einem oder mehreren Computern von Drittanbietern kommunizieren.
-
10 umfasst ein Diagramm eines Beispielnetzwerks 1000, das ein oder mehrere Host-Systeme umfassen kann, wie das in 9. Zum Beispiel umfasst das Beispielnetzwerk 1000 von 10 mehrere Knoten 1002a-1002h, von denen einer oder mehrere ein Host-System sein können, wie in 9 gezeigt. Andere der Knoten 1002a-1002h können andere Computervorrichtungen sein, von denen jede mindestens einen Speicher zum Speichern von Programmbefehle, einen Prozessor zum Ausführen der Befehle und eine Netzwerkschnittstelle zum Verbinden mit dem Netzwerk 1000 enthält.
-
In verschiedenen Beispielen kann das Netzwerk 1000 zur Verarbeitung von Daten verwendet werden. Beispielsweise können Eingabedaten an einem der Knoten 1002a-1002h oder von anderen Netzwerken 1008, mit denen das Netzwerk 1000 kommunizieren kann, empfangen werden. In diesem Beispiel können die Eingabedaten an einen Knoten im Netzwerk 1000 geleitet werden, der eine Beschleunigungsmaschine enthält, damit die Beschleunigungsmaschine darauf arbeitet und ein Ergebnis erzeugt. Das Ergebnis kann dann an den Knoten oder ein anderes Netzwerk übertragen werden, von dem die Eingabedaten empfangen wurden. In verschiedenen Beispielen können Eingabedaten von verschiedenen Quellen gesammelt werden, einschließlich eines oder mehrerer der Knoten 1002a-1002h und/oder Computervorrichtungen, die sich in den anderen Netzwerken 1008 befinden, und die gesammelten Eingabedaten können an ein oder mehrere Host-Systeme im Netzwerk 1000 geleitet werden. Die Ergebnisse aus den Host-Systemen können dann zurück an die Quellen verteilt werden, aus denen die Eingabedaten gesammelt wurden.
-
In verschiedenen Beispielen können einer oder mehrere der Knoten 1002a-1002h für Operationen wie das Sammeln von Eingabedaten für Host-Systeme, die bearbeitet werden sollen, das Verfolgen, welche Host-Systeme ausgelastet sind und welche mehr Arbeit annehmen können, das Bestimmen, ob die Host-Systeme korrekt und/oder möglichst effizient arbeiten, das Überwachen der Netzwerksicherheit und/oder andere Verwaltungsoperationen verantwortlich sein.
-
Im Beispiel von 10 sind die Knoten 1002a-1002h über eine Switched-Architektur mit Punkt-zu-Punkt-Verbindungen miteinander verbunden. Die Switched-Architektur umfasst mehrere Switches 1004a-1004d, die in einem mehrschichtigen Netzwerk wie einem Clos-Netzwerk angeordnet sein können. Eine Netzwerkvorrichtung, die Pakete zwischen LAN-Segmenten (Local Area Network) filtert und weiterleitet, kann als Switch bezeichnet werden. Switches arbeiten im Allgemeinen auf der Datenverbindungsschicht (Schicht 2) und manchmal auf der Netzwerkschicht (Schicht 3) des Open System Interconnect (OSI)-Referenzmodells und können mehrere Paketprotokolle unterstützen. Die Switches 1004a-1004d von 10 können mit mehreren Knoten 1002a-1002h verbunden werden und bieten mehrere Pfade zwischen zwei beliebigen Knoten.
-
Das Netzwerk 1000 kann auch eine oder mehrere Netzwerkvorrichtungen zur Verbindung mit anderen Netzwerken 1008 enthalten, wie z. B. einen Router 1006. Router verwenden Header und Weiterleitungstabellen, um den besten Pfad für die Weiterleitung der Pakete zu bestimmen, und verwenden Protokolle wie das Internet Control Message Protocol (ICMP), um miteinander zu kommunizieren und die beste Route zwischen zwei beliebigen Vorrichtungen zu konfigurieren. Der Router 1006 von 10 kann zur Verbindung mit anderen Netzwerken 1008 wie Subnetzwerken, LANs, Wide Area Networks (WANs) und/oder dem Internet verwendet werden.
-
In einigen Beispielen kann das Netzwerk 1000 ein beliebiges oder eine Kombination von vielen verschiedenen Arten von Netzwerken enthalten, wie beispielsweise Kabelnetzwerke, das Internet, drahtlose Netzwerke, zellulare Netzwerke und andere private und/oder öffentliche Netzwerke. Die zusammengeschalteten Switches 1004a-1004d und Router 1006, falls vorhanden, können als Switch-Fabric 1010, Fabric, Network-Fabric oder einfach als Netzwerk bezeichnet werden. Im Rahmen eines Computernetzwerks können die Begriffe „Fabric“ und „Netzwerk“ hierin austauschbar verwendet werden.
-
Die Knoten 1002a-1002h können eine beliebige Kombination von Host-Systemen, Prozessorknoten, Speicher-Subsystemen und E/A-Chassis sein, die Benutzervorrichtungen, Dienstanbietercomputer oder Computer von Drittanbietern darstellen.
-
Benutzervorrichtungen können Computervorrichtungen enthalten, um auf eine Anwendung 1032 zuzugreifen (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Aspekten kann die Anwendung 1032 von einem Rechenzentrums- oder Dienstanbieter gehostet, verwaltet und/oder bereitgestellt werden. Die Anwendung 1032 kann es den Benutzern ermöglichen, mit den Computern des Dienstanbieters zu interagieren, um beispielsweise auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung(en) kann (können) eine Computervorrichtung wie beispielsweise ein Mobiltelefon, ein Smartphone, ein Personal Digital Assistant (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein elektronisches Buch (E-Book-Lesevorrichtung), eine Spielkonsole usw. sein. In einigen Beispielen kann (können) die Benutzervorrichtung(en) über ein anderes Netzwerk 1008 mit den Dienstanbietercomputern kommunizieren. Darüber hinaus kann (können) die Benutzervorrichtung(en) Teil des verteilten Systems sein, das von den Dienstanbietercomputern verwaltet, kontrolliert wird oder anderweitig Teil der Dienstanbietercomputer ist (z. B. eine mit den Dienstanbietercomputern integrierte Konsolenvorrichtung).
-
Der oder die Knoten von 10 können auch einen oder mehrere Dienstanbietercomputer darstellen. Ein oder mehrere Dienstanbietercomputer können eine native Anwendung bereitstellen, die so konfiguriert ist, dass sie auf den Benutzervorrichtungen ausgeführt wird, mit denen die Benutzer interagieren können. Die Dienstanbietercomputer können in einigen Beispielen Computerressourcen bereitstellen, wie z. B. Client-Einheiten, Datenspeicher mit niedriger Latenzzeit, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen, elektronisches Content Performance Management und so weiter. Der oder die Dienstanbietercomputer können auch so betrieben werden, dass sie dem oder den Benutzer(n) Webhosting, Datenbanken, Computeranwendungsentwicklungs- und/oder Implementierungsplattformen, Kombinationen aus dem Vorstehenden oder dergleichen bereitstellen. In einigen Beispielen können der oder die Dienstanbietercomputer als eine oder mehrere virtuelle Maschinen bereitgestellt werden, die in einer gehosteten Computerumgebung implementiert sind. Die gehostete Computerumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Computerressourcen enthalten. Zu diesen Computerressourcen können Computer-, Netzwerk- und/oder Speichervorrichtungen gehören. Eine gehostete Computerumgebung kann auch als Cloud-Computing-Umgebung bezeichnet werden. Der oder die Dienstanbietercomputer können einen oder mehrere Server enthalten, die möglicherweise in einem Cluster, als Serverfarm oder als einzelne Server, die nicht miteinander verbunden sind, angeordnet sind, und können die Anwendung 1032 und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Computerumgebung konfiguriert werden. In einigen Aspekten können die Dienstanbietercomputer zusätzlich oder alternativ Computervorrichtungen wie z. B. ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Server-Computer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielkonsole usw. enthalten. In einigen Fällen können die Dienstanbietercomputer mit einem oder mehreren Computern von Drittanbietern kommunizieren.
-
In einer Beispielkonfiguration können die Knoten 1002a-1002h mindestens einen Speicher 1018 und eine oder mehrere Verarbeitungseinheiten (oder Prozessoren 1020) enthalten. Der oder die Prozessor(en) 1020 können in Hardware, computerausführbaren Befehlen, Firmware oder Kombinationen davon implementiert sein. Computerausführbare Befehle oder Firmware-Implementierungen des/der Prozessors(en) 1020 können computerausführbare oder maschinenausführbare Befehle enthalten, die in jeder geeigneten Programmiersprache geschrieben sind, um die verschiedenen beschriebenen Funktionen auszuführen.
-
In einigen Fällen kann (können) der oder die Hardware-Prozessor(en) 1020 ein Single-Core-Prozessor oder ein Multi-Core-Prozessor sein. Ein Multi-Core-Prozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors enthalten. In einigen Beispielen können sich die Multi-Core-Prozessoren bestimmte Ressourcen wie Busse und Caches der zweiten oder dritten Ebene teilen. In einigen Fällen kann jeder Kern in einem Single- oder Multi-Core-Prozessor auch mehrere ausführende logische Prozessoren (oder ausführende Threads) enthalten. In einem solchen Kern (z. B. mit mehreren logischen Prozessoren) können auch mehrere Stufen der Ausführungspipeline und auch untergeordnete Caches gemeinsam genutzt werden.
-
Der Speicher 1018 kann Programmanweisungen speichern, die auf dem/den Prozessor(en) 1020 ladbar und ausführbar sind, sowie Daten, die während der Ausführung dieser Programme erzeugt werden. Je nach Konfiguration und Typ der Knoten 1002a-1002h kann der Speicher 1018 flüchtig (z. B. RAM) und/oder nichtflüchtig (z. B. ROM, Flash-Speicher, etc.) sein. Der Speicher 1018 kann ein Betriebssystem 1028, einen oder mehrere Datenspeicher 1030, ein oder mehrere Anwendungsprogramme 1032, einen oder mehrere Treiber 1034 und/oder Dienste zur Implementierung der hierin offenbarten Funktionen enthalten.
-
Das Betriebssystem 1028 kann die Grundfunktionen der Knoten 1002a-1002h unterstützen, wie z. B. die Planung von Aufgaben, das Ausführen von Anwendungen und/oder die Steuerung von Peripherievorrichtungen. In einigen Implementierungen kann ein Dienstanbietercomputer eine oder mehrere virtuelle Maschinen bereitstellen. In diesen Implementierungen kann jede virtuelle Maschine dazu konfiguriert sein, ihr eigenes Betriebssystem auszuführen. Beispiele für Betriebssysteme sind Unix, Linux, Windows, Mac OS, iOS, Android und dergleichen. Das Betriebssystem 1028 kann auch ein proprietäres Betriebssystem sein.
-
Die Datenspeicher 1030 können permanente oder flüchtige Daten enthalten, die vom Betriebssystem 1028, den Anwendungsprogrammen 1032 oder den Treibern 1034 verwendet und/oder betrieben werden. Beispiele für solche Daten sind Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten und so weiter. Die Informationen in den Datenspeichern 1030 können in einigen Implementierungen über das/die Netzwerk(e) 1008 an die Benutzervorrichtungen übermittelt werden. In einigen Fällen können die Datenspeicher 1030 zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber enthalten. Alternativ oder zusätzlich können die Datenspeicher 1030 Standard- und/oder proprietäre Softwarebibliotheken und/oder Standard- und/oder proprietäre Application User Interface (API)-Bibliotheken speichern. In den Datenspeichern 1030 gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
-
Die Treiber 1034 enthalten Programme, die die Kommunikation zwischen Komponenten in einem Knoten ermöglichen. So können beispielsweise einige Treiber 1034 die Kommunikation zwischen dem Betriebssystem 1028 und dem zusätzlichen Speicher 1022, der Netzwerkvorrichtung 1024 und/oder der E/A-Vorrichtung 1026 ermöglichen. Alternativ oder zusätzlich können einige Treiber 1034 die Kommunikation zwischen den Anwendungsprogrammen 1032 und dem Betriebssystem 1028 und/oder den Anwendungsprogrammen 1032 und Peripherievorrichtungen ermöglichen, die für den Dienstanbietercomputer zugänglich sind. In vielen Fällen können die Treiber 1034 Treiber enthalten, die eine gut verstandene Funktionalität bieten (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Solid-State-Device-Treiber). In anderen Fällen können die Treiber 1034 proprietäre oder spezielle Funktionen bereitstellen.
-
Die Dienstanbietercomputer oder -server können auch zusätzlichen Speicher 1022 enthalten, der Wechselspeicher und/oder nicht entfernbaren Speicher enthalten kann. Der zusätzliche Speicher 1022 kann Magnetspeicher, optische Platten, Solid-State-Disks, Flash-Speicher und/oder Bandspeicher enthalten. Der zusätzliche Speicher 1022 kann im gleichen Gehäuse wie die Knoten 1002a-1002h oder in einem externen Gehäuse untergebracht sein. Der Speicher 1018 und/oder der zusätzliche Speicher 1022 und die zugehörigen computerlesbaren Medien können eine nichtflüchtige Speicherung von computerlesbaren Befehlen, Datenstrukturen, Programmmodulen und anderen Daten für die Computervorrichtungen bereitstellen. In einigen Implementierungen kann der Speicher 1018 mehrere verschiedene Speichertypen enthalten, wie beispielsweise SRAM, DRAM oder ROM.
-
Der Speicher 1018 und die zusätzliche Speicherung 1022, sowohl wechselbar als auch nicht wechselbar, sind Beispiele für computerlesbare Speichermedien. So können beispielsweise computerlesbare Speichermedien flüchtige oder nichtflüchtige, entfernbare oder nicht entfernbare Medien enthalten, die in einem Verfahren oder einer Technologie zur Speicherung von Informationen implementiert sind, wobei die Informationen beispielsweise computerlesbare Befehle, Datenstrukturen, Programmodule oder andere Daten enthalten. Der Speicher 1018 und der zusätzliche Speicher 1022 sind Beispiele für Computerspeichermedien. Zusätzliche Arten von Computerspeichermedien, die in den Knoten 1002a-1002h vorhanden sein können, können unter anderem PRAM, SRAM, DRAM, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, DVD oder andere optische Speicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen, Solid-State-Laufwerke oder andere Medien enthalten, die zum Speichern der gewünschten Informationen verwendet werden können und auf die die Knoten 1002a-1002h zugreifen können. Computerlesbare Medien umfassen auch Kombinationen aus einem der oben genannten Medientypen, einschließlich mehrerer Einheiten eines Medientyps.
-
Alternativ oder zusätzlich können computerlesbare Kommunikationsmedien computerlesbare Befehle, Programmmodule oder andere innerhalb eines Datensignals übertragene Daten, wie beispielsweise eine Trägerwelle oder eine andere Übertragung, enthalten. Der hier verwendete Begriff „computerlesbare Speichermedien“ schließt jedoch keine computerlesbaren Kommunikationsmedien ein.
-
Die Knoten 1002a-1002h können auch (eine) E/A-Vorrichtung(en) 1026 enthalten, wie beispielsweise eine Tastatur, eine Maus, einen Stift, eine Spracheingabevorrichtung, eine Touch-Eingabevorrichtung, eine Anzeige, Lautsprecher, einen Drucker und dergleichen. Die Knoten 1002a-1002h können auch einen oder mehrere Kommunikationskanäle 1036 enthalten. Ein Kommunikationskanal 1036 kann ein Medium bereitstellen, über das die verschiedenen Komponenten des/der Knoten 1002a-1002h kommunizieren können. Der oder die Kommunikationskanäle 1036 können die Form eines Busses, eines Rings, einer Schaltanlage oder eines Netzwerks annehmen.
-
Die Knoten 1002a-1002h können auch eine Netzwerkvorrichtung 1024 enthalten, die es den Knoten 1002a-1002h ermöglicht, mit einer gespeicherten Datenbank, einer anderen Computervorrichtung oder einem Server, Benutzerendvorrichtungen und/oder anderen Vorrichtungen im Netzwerk/in den Netzwerken 1000 zu kommunizieren.
-
In einigen Implementierungen ist die Netzwerkvorrichtung 1024 eine Peripherievorrichtung, wie beispielsweise eine PCI-basierte Vorrichtung. In diesen Implementierungen beinhaltet die Netzwerkvorrichtung 1024 eine PCI-Schnittstelle zur Kommunikation mit einer Hostvorrichtung. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Busprotokollfamilie zu beschreiben, einschließlich des Original-PCI-Standards, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express(PCIe) oder andere Verbesserungs- oder abgeleitete Protokolle, die auf den hierin beschriebenen PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle für die Verbindung von Vorrichtungen, wie z. B. einer lokalen Peripherievorrichtung mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation definiert und von verschiedenen Anbietern übernommen wurde. Die Anbieter stellen sicher, dass konforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll implementieren, und umgekehrt. Wie hierin verwendet, enthalten PCI-basierte Vorrichtungen auch Vorrichtungen, die über Non-Volatile Memory Express (NVMe) kommunizieren. NVMe ist eine Vorrichtungsschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die an ein Computersystem mit PCIe angeschlossen sind. So kann beispielsweise das Bus-Schnittstellenmodul NVMe implementieren, und die Netzwerkvorrichtung 1024 kann über eine PCIe-Schnittstelle mit einem Computersystem verbunden werden.
-
Eine PCI-basierte Vorrichtung kann eine oder mehrere Funktionen enthalten. Eine „Funktion“ beschreibt Operationen, die von der Netzwerkvorrichtung 1024 bereitgestellt werden können. Beispiele für Funktionen sind unter anderem Massenspeichersteuerungen, Netzwerksteuerungen, Displaysteuerungen, Speichersteuerungen, serielle Bus-Controller, Wireless-Controller, Ver- und Entschlüsselungs-Controller. In einigen Fällen kann eine PCI-basierte Vorrichtung mehr als eine Funktion enthalten. So kann beispielsweise eine PCI-basierte Vorrichtung einen Massenspeicher-Controller und einen Netzwerkadapter bereitstellen. Als weiteres Beispiel kann eine PCI-basierte Vorrichtung zwei Speichersteuerungen bereitstellen, um zwei verschiedene Speicherressourcen zu steuern. In einigen Implementierungen kann eine PCI-basierte Vorrichtung bis zu acht Funktionen haben.
-
In einigen Implementierungen kann die Netzwerkvorrichtung 1024 eine Single-Root-E/A-Virtualisierung (SR-IOV) enthalten. SR-IOV ist eine erweiterte Funktion, die in eine PCI-basierte Vorrichtung integriert werden kann. SR-IOV ermöglicht es, dass eine physische Ressource (z. B. ein einzelner Netzwerk-Schnittstellencontroller) als mehrere Ressourcen (z. B. vierundsechzig Netzwerk-Schnittstellencontroller) erscheint. Somit kann eine PCI-basierte Vorrichtung, die eine bestimmte Funktionalität bereitstellt (z. B. eine Netzwerkschnittstellen-Steuerung), für eine Vorrichtung, die die PCI-basierte Vorrichtung verwendet, als mehrere Vorrichtungen mit derselben Funktionalität erscheinen. Die Funktionen einer SR-IOV-fähigen Speicheradaptervorrichtung können als physikalische Funktionen (PFs) oder virtuelle Funktionen (VFs) klassifiziert werden. Physische Funktionen sind vollwertige Funktionen der Vorrichtung, die entdeckt, verwaltet und manipuliert werden können. Physische Funktionen verfügen über Konfigurationsressourcen, mit denen die Speicheradaptervorrichtung konfiguriert oder gesteuert werden kann. Zu den physischen Funktionen gehören der gleiche Konfigurations-Adressraum und Speicher-Adressraum, den eine nicht-virtualisierte Vorrichtung haben würde. Eine physikalische Funktion kann mit einer Reihe von virtuellen Funktionen verbunden sein. Virtuelle Funktionen ähneln physischen Funktionen, sind aber leichte Funktionen, die im Allgemeinen keine Konfigurationsressourcen haben und im Allgemeinen durch die Konfiguration ihrer zugrunde liegenden physischen Funktionen gesteuert werden. Jede der physischen Funktionen und/oder virtuellen Funktionen kann einem entsprechenden Ausführungs-Thread (wie z. B. einer virtuellen Maschine) zugeordnet werden, der auf einer Hostvorrichtung läuft.
-
Die hierin beschriebenen Module können Softwaremodule, Hardwaremodule oder eine geeignete Kombination davon sein. Wenn es sich bei den Modulen um Softwaremodule handelt, können die Module auf einem nichtflüchtigen, computerlesbaren Medium verkörpert und von einem Prozessor in einem der hierin beschriebenen Computersysteme verarbeitet werden. Es ist zu beachten, dass die beschriebenen Prozesse und Architekturen entweder in Echtzeit oder in einem asynchronen Modus vor jeder Benutzerinteraktion ausgeführt werden können. Die Module können auf die in den vorausgegangenen Figuren vorgeschlagene Weise konfiguriert werden, und/oder die hierin beschriebenen Funktionen können von einem oder mehreren Modulen bereitgestellt werden, die als separate Module existieren und/oder die hierin beschriebenen Modulfunktionen können auf mehrere Module verteilt werden.
-
Die Beschreibung und die Zeichnungen sind dementsprechend eher veranschaulichend als einschränkend zu verstehen. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Geist und Umfang der Offenbarung abzuweichen, wie sie in den Ansprüchen dargelegt sind.
-
Weitere Variationen liegen im Geist der vorliegenden Offenbarung. Während die offenbarten Techniken für verschiedene Modifikationen und alternative Konstruktionen anfällig sind, sind bestimmte veranschaulichte Beispiele davon in den Zeichnungen gezeigt und wurden oben im Detail beschrieben. Es versteht sich jedoch, dass nicht beabsichtigt ist, die Offenbarung auf die bestimmte Form oder die bestimmten offenbarten Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und Umfang der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
-
Die Verwendung der Begriffe „ein“ und „eine/r“ und „der/die/das“ und ähnlicher Verweise im Zusammenhang mit der Beschreibung der offenbarten Beispiele (insbesondere im Zusammenhang mit den folgenden Ansprüchen) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Begriffe „umfassen“, „haben“, „aufweisen“ und „enthalten“ sind als nicht einschränkende Begriffe zu verstehen (d. h. bedeuten „einschließlich, aber nicht darauf beschränkt“), sofern nicht anders angegeben. Der Begriff „verbunden“ ist so zu verstehen, dass etwas teilweise oder vollständig in etwas enthalten ist, daran angehängt oder zusammengefügt ist, selbst wenn etwas dazwischen liegt. Die Angabe von Wertebereichen hierin soll lediglich als Kurzform dienen, um sich einzeln auf jeden einzelnen Wert zu beziehen, der in den Bereich fällt, sofern hier nichts anderes angegeben ist, und jeder einzelne Wert wird in die Beschreibung aufgenommen, als ob er hier einzeln angegeben wäre. Alle hier beschriebenen Verfahren können in jeder geeigneten Reihenfolge ausgeführt werden, sofern hier nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Verwendung aller hierin bereitgestellten Beispiele oder beispielhaften Ausdrücke (z. B. „wie“) soll lediglich Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Umfangs der Offenbarung dar, sofern nicht anders beansprucht. Keine Sprache in der Beschreibung sollte so ausgelegt werden, dass sie ein nicht beanspruchtes Element anzeigt, das für die Ausübung der Offenbarung wesentlich ist.
-
Eine disjunktive Sprache wie der Ausdruck „mindestens eines von X, Y oder Z“ soll, sofern nicht ausdrücklich anders angegeben, in dem Kontext verstanden werden, der allgemein verwendet wird, um darzustellen, dass ein Artikel, Begriff usw. entweder X, Y oder Z sein kann oder eine beliebige Kombination davon (z. B. X, Y und / oder Z). Somit soll und sollte eine solche disjunktive Sprache nicht generell bedeuten, dass bei bestimmten Beispielen mindestens eines von X, mindestens eines von Y oder mindestens eines von Z vorhanden sein muss.
-
Verschiedene Beispiele der vorliegenden Offenbarung werden hierin beschrieben, einschließlich der den Erfindern bekannten besten Art zum Ausführen der Offenbarung. Variationen dieser Beispiele können für den Fachmann beim Lesen der vorstehenden Beschreibung offensichtlich werden. Die Erfinder erwarten von Fachleuten, dass sie solche Variationen nach Bedarf anwenden, und die Erfinder beabsichtigen, dass die Offenbarung anders als hier spezifisch beschrieben praktiziert wird. Dementsprechend umfasst diese Offenbarung alle Modifikationen und Äquivalente des in den beigefügten Ansprüchen angegebenen Artikels, soweit dies nach geltendem Recht zulässig ist. Darüber hinaus ist jede Kombination der oben beschriebenen Elemente in allen möglichen Variationen davon von der Offenbarung umfasst, es sei denn, es ist hierin anders angegeben oder durch den Kontext klar widersprüchlich.