-
Hintergrund
-
Diese Beschreibung bezieht sich auf das Ausführen von Berechnungen für maschinelles Lernen unter Verwendung einer Spezial-Berechnungseinheit.
-
Neuronale Netze sind Modelle zum maschinellen Lernen, die eine oder mehrere Schichten aus Modellen einsetzen, um einen Ausgang, z. B. eine Klassifizierung, für einen empfangene Eingang zu erzeugen. Einige neuronale Netze enthalten eine oder mehrere verdeckte Schichten zusätzlich zu einer Ausgangsschicht. Der Ausgang jeder verdeckten Schicht wird als Eingang für die nächste Schicht in dem Netz, d. h. die nächste verdeckte Schicht oder die Ausgangsschicht des Netzes, verwendet. Jede Schicht des Netzes erzeugt einen Ausgang aus einem empfangenen Eingang in Übereinstimmung mit aktuellen Werten einer jeweiligen Gruppe von Parametern.
-
Einige neuronale Netze enthalten eine oder mehrere Faltungsschichten des neuronalen Netzes. Jede Faltungsschicht des neuronalen Netzes weist eine zugeordnete Menge von Kernen auf. Jeder Kern enthält Werte, die durch ein Modell eines neuronalen Netzes aufgebaut sind, das durch einen Anwender erzeugt ist. In einigen Implementierungen identifizieren Kerne spezielle Bildkonturen, Formen oder Farben. Kerne können als eine Matrixstruktur gewichteter Eingänge repräsentiert sein. Jede Faltungsschicht kann außerdem eine Gruppe von Aktivierungseingängen verarbeiten. Die Gruppe von Aktivierungseingängen kann auch als eine Matrixstruktur repräsentiert sein.
-
Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
-
Zusammenfassung
-
Eine Art zum Berechnen von Faltungsberechnungen erfordert zahlreiche Matrixmultiplikationen in einem vieldimensionalen Raum. Ein Prozessor oder eine Steuervorrichtung einer Berechnungseinheit kann Matrixmultiplikationen durch ein Exhaustionsverfahren berechnen. Beispielsweise kann der Prozessor, obwohl das rechenintensiv und zeitintensiv ist, wiederholt Einzelsummen und Produkte für Faltungsberechnungen berechnen. Der Grad, bis zu dem der Prozessor Berechnungen parallelisiert, ist aufgrund seiner Architektur begrenzt.
-
Ein innovativer Aspekt des Gegenstands, der in dieser Beschreibung beschrieben ist, kann in einem computerimplementierten Verfahren verwirklicht sein. Das Verfahren enthält Empfangen durch eine Berechnungsvorrichtung mehrerer Eingangsaktivierungen, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die zu der Berechnungsvorrichtung extern ist, und Bestimmen durch eine Steuereinheit der Berechnungsvorrichtung, ob jede aus den mehreren Eingangsaktivierungen eines aus einem Nullwert oder einem Nichtnullwert ist. Das Verfahren enthält ferner Speichern wenigstens einer Eingangsaktivierung in einer Speicherbank der Berechnungsvorrichtung, wobei das Speichern der wenigstens einen aus den Eingangsaktivierungen das Erzeugen durch die Steuereinheit eines Index enthält, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind. Das Verfahren umfasst ferner noch Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
In einigen Implementierungen wird der Index basierend auf einer Bitmap erzeugt, die mehrere Bits umfasst und wobei jedes Bit der Bitmap wenigstens eines aus einem Nichtnull-Eingangsaktivierungswert oder einem Null-Eingangsaktivierungswert angibt. In einigen Implementierungen enthält das Verfahren ferner Bereitstellen einer ersten Eingangsaktivierung, die einen Nichtnullwert aufweist, um durch wenigstens eine Einheit eine Berechnung unter Verwendung des Nichtnullwerts auszuführen, und nachfolgend Bereitstellen einer zweiten Eingangsaktivierung, die einen Nullwert aufweist, und Verhindern der Berechnung in wenigstens einer Einheit, die andernfalls unter Verwendung des Nullwerts ausgeführt würde.
-
In einigen Implementierungen findet das Verhindern in Reaktion darauf statt, dass die Steuereinheit bestimmt, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der dem Index nicht zugeordnet ist. In einigen Implementierungen enthält das Verfahren ferner Detektieren durch die Steuereinheit, dass die Eingangsaktivierung von einem Speicheradressenort bereitgestellt ist, der nicht dem Index zugeordnet ist, und in Reaktion auf das Detektieren Bereitstellen eines Steuersignals für wenigstens eine Einheit des Berechnungs-Array, um eine Multiplizieroperation zu verhindern, die dem Null-Eingangsaktivierungswert zugeordnet ist.
-
In einigen Implementierungen umfasst das Verfahren ferner Abbilden durch die Steuereinheit und auf eine erste Einheit eines ersten Abschnitts einer Tensorberechnung, die eine erste Eingangsaktivierung verwendet, und Abbilden auf eine zweite Einheit, die von der ersten Einheit verschieden ist, eines zweiten Abschnitts der Tensorberechnung, die auch die erste Eingangsaktivierung verwendet. In einigen Implementierungen umfasst das Verfahren ferner der Reihe nach Bereitstellen einer einzelnen Eingangsaktivierung auf den Datenbus, wobei auf die einzelne Eingangsaktivierung von Speicheradressenorten, die dem Index zugeordnet sind, zugegriffen und davon ausgewählt wird. In einigen Implementierungen umfasst das Bereitstellen ferner nicht Bereitstellen von Eingangsaktivierungen, die einen Nullwert aufweisen.
-
Ein weiterer innovativer Aspekt des Gegenstands, der in dieser Beschreibung beschrieben ist, kann in einer oder mehreren maschinenlesbaren Speichervorrichtungen verwirklicht sein, die Anweisungen speichern, die durch eine oder mehrere Verarbeitungsvorrichtungen ausführbar sind, um Operationen auszuführen, die Empfangen durch eine Berechnungsvorrichtung von mehreren Eingangsaktivierungen, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die extern zu der Berechnungsvorrichtung ist, und Bestimmen durch eine Steuereinheit des Berechnungsvorrichtung, ob jede aus den mehreren Eingangsaktivierungen eine eines Nullwerts oder eines Nichtnullwerts ist, umfassen. Die Operationen umfassen ferner Speichern wenigstens einer der Eingangsaktivierungen in einer Speicherbank der Berechnungsvorrichtung, wobei das Speichern der wenigstens einen Eingangsaktivierung das Erzeugen durch die Steuereinheit eines Index enthält, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind. Die Operationen umfassen ferner noch Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
Ein weiterer innovativer Aspekt des Gegenstands, der in dieser Beschreibung beschrieben ist, kann in einem elektronischen System verwirklicht sein, das eine Steuereinheit umfasst, die in einer Berechnungsvorrichtung angeordnet ist, wobei die Steuereinheit eine oder mehrere Verarbeitungsvorrichtungen enthält; und eine oder mehrere maschinenlesbare Speichervorrichtungen zum Speichern von Anweisungen umfasst, die durch die eine oder die mehreren Verarbeitungsvorrichtungen ausführbar sind, um Operationen auszuführen, die umfassen: Empfangen durch die Berechnungsvorrichtung von mehreren Eingangsaktivierungen, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die extern zu der Berechnungsvorrichtung ist; und Bestimmen durch die Steuereinheit, ob jede aus den mehreren Eingangsaktivierungen eine aus einem Nullwert oder einem Nichtnullwert ist. Die Operationen umfassen ferner Speichern wenigstens einer der Eingangsaktivierungen in einer Speicherbank der Berechnungsvorrichtung, wobei das Speichern der wenigstens einen Eingangsaktivierung das Erzeugen eines Index enthält, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind. Die Operationen umfassen ferner noch Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
Der Gegenstand, der in dieser Beschreibung beschrieben ist, kann in speziellen Ausführungsformen implementiert sein, um einen oder mehrere der folgenden Vorteile zu realisieren. Aktivierungen, die aus einem ersten Speicher zugreifbar sind, und Gewichte, die aus einem zweiten Speicher zugreifbar sind, in einem einzelnen Berechnungssystem können basierend auf den Speicheradressenwerten, die aus Registern abgerufen werden, durchlaufen werden. Eine Steuereinheit des Berechnungssystems kann Aktivierungsdaten komprimieren durch Speichern von nur Nichtnullwerten in dem ersten Speicher und dadurch Speicherplatz und entsprechende Bandbreite einsparen. Matrixmultiplikationen treten in dem Berechnungssystem teilweise basierend auf primärem Bereitstellen von Nichtnull-Eingangsaktivierungen auf. Außerdem kann, wenn das Berechnungssystem ein Kommunikationsschema verwendet, das primär Nichtnull-Aktivierungswerte enthält, die Berechnungseffizienz durch Eliminieren von Multiplikationen mit Null verbessert oder beschleunigt werden.
-
Andere Implementierungen dieses und anderer Aspekte enthalten entsprechende Systeme, Einrichtungen und Computerprogramme, die konfiguriert sind, die Aktionen der Verfahren, die auf Computerspeichervorrichtungen codiert sind, auszuführen. Ein System aus einem oder mehreren Computern kann so konfiguriert sein mit Hilfe von Software, Firmware oder Hardware oder einer Kombination daraus, die auf dem System installiert ist, die im Betrieb bewirkt, dass das System die Aktionen ausführt. Ein oder mehrere Computerprogramme können so konfiguriert sein, dass sie aufgrund dessen, dass sie Anweisungen aufweisen, die dann, wenn sie durch eine Datenverarbeitungseinrichtung ausführt werden, bewirken, dass die Einrichtung die Aktionen ausführt.
-
Der Gegenstand, der in dieser Beschreibung beschrieben ist, bezieht sich außerdem auf ein Bilderkennungs- und/oder Klassifizierungs-Verfahren/System. Das/die System/e können unter Verwendung der offenbarten Techniken zum Auswerten von Eingabedatenseltenheit, wenn Berechnungseinheiten eines Hardware-Berechnungssystems Eingaben für eine Schicht eines neuronalen Netzes verarbeiten, um Inferenzberechnungen auszuführen, implementiert sein.
-
Die Einzelheiten einer oder mehrerer Ausführungsformen des in dieser Beschreibung beschriebenen Gegenstands sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere potentielle Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen offensichtlich.
-
Kurzbeschreibung der Zeichnungen
-
1 stellt eine Beispiel-Berechnungsstruktur dar, die Aktivierungen und Parameter enthält.
-
2 stellt eine Beispiel-Berechnungsstruktur dar, die Aktivierungen und mehrere Parameterstrukturen für eine Ausgangstiefe größer als eins enthält.
-
3 stellt ein Beispiel-Berechnungssystem zum Zuführen von Eingangsaktivierungen zu einem oder mehreren Parametern dar.
-
4 stellt eine Beispiel-Architektur dar, die eine Speichereinheit enthält, die Eingangsaktivierungen für eine oder mehrere Multiplizierungs-Akkumulierungs-Operatoren (MAC-Operatoren) bereitstellt.
-
5 ist ein Beispiel-Ablaufplan eines Prozesses zum Reduzieren von Parameterberechnungen und Auswerten von Eingabedatenseltenheit.
-
Gleiche Bezugszeichen und Bezeichnungen in den verschiedenen Zeichnungen geben gleiche Elemente an.
-
Ausführliche Beschreibung
-
Der Gegenstand, der in dieser Beschreibung beschrieben ist, bezieht sich auf Reduzieren von Berechnungen, die innerhalb einer Berechnungseinheit oder Kachel eines beispielhaften Hardware-Berechnungssystems eines neuronalen Netzes stattfinden. Im Allgemeinen wird als Teil der Berechnung einer Inferenz eines neuronalen Netzes eine Eingabeaktivierung mit einem Parameter oder Gewichtswert multipliziert, um eine Ausgangsaktivierung zu produzieren. Hier können sich Eingänge und Eingangsaktivierung auf ein Datenelement beziehen, das in einer mehrdimensionalen Datenstruktur wie z. B. einem Tensor, einer Matrix und/oder einem Daten-Array enthalten ist, die allgemein in neuronalen Netzen verwendet werden. Aufgrund der algorithmischen Eigenschaften der Berechnung von Inferenzen für tiefe neuronale Netze ist ein großer Anteil von Eingangsaktivierungen null. Mit anderen Worten führen aktuelle Berechnungseinheiten eine große Anzahl von unnötigen Berechnungen aus, die Multiplizieren einer Zahl (z. B. eines Gewichts) mit null (Eingangsaktivierungswert) enthalten.
-
Diese Beschreibung beschreibt teilweise sowohl ein effizienteres Aktivierungsspeicher- und Kommunikationsschema als auch ein anwendungsspezifisches Architektur-Design für Verarbeitung in tiefen neuronalen Netzen, insbesondere zum Verarbeiten von Faltungsschichten eines neuronalen Netzes. Anders als herkömmliche Hardware-Beschleuniger, die dichte Matrixmultiplikation mit der Zeit ausführen, beschreibt diese Beschreibung eine Architektur, die 1) eine Berechnung nach dem Erkennen von Null-Eingangswerten überspringen oder umgehen kann; und 2) die Speichernutzung in einer Berechnungseinheit durch Speichern komprimierter Eingangsaktivierungen, die nur Nichtnullwerte enthalten, reduzieren kann. Insgesamt ist durch die Lehren dieser Beschreibung die Leistungsfähigkeit einer Berechnungseinheit für Berechnungen von Inferenzen für neuronale Netze verbessert, und es sind Energieeinsparungen durch Überspringen unnötiger Berechnungen realisiert.
-
1 stellt eine Beispiel-Berechnungsstruktur 100 dar, die eine Aktivierungsstruktur 102 und eine Parameterstruktur 104 enthält. Die Aktivierungsstruktur 102 kann eine erste Datenstruktur 102a enthalten, die mehrere Datenelemente enthält, die einer ersten Eingangstiefe (bezeichnet durch die tiefgestellte 0) entsprechen. Ähnlich kann die Aktivierungsstruktur 102 auch eine zweite Datenstruktur 102b enthalten, die mehrere Datenelemente enthält, die einer zweiten Eingangstiefe (bezeichnet durch die tiefgestellte 1) entsprechen. Die mehreren Datenelemente, die in der Datenstruktur 102a und 102b gezeigt sind, sind als a0, b0, c0, d0 bzw. a1, b1, c1, d1 angegeben. Jedes Datenelement (a0, a1, b0, b1, c0, d0 usw.) der Datenstruktur 102a/b ist ein Eingangsaktivierungswert, und jede Eingangstiefe entspricht einer Tiefe eines Eingangs zu einer Schicht eines neuronalen Netzes. In einigen Implementierungen kann eine Schicht eines neuronalen Netzes eine Eingangstiefe von eins aufweisen, während in anderen Implementierungen eine Schicht eines neuronalen Netzes eine Eingangstiefe von mehr als eins aufweisen kann.
-
Die Parameterstruktur 104 kann auf eine ähnliche Weise wie die Aktivierungsstruktur 102 beschrieben werden. Die Parameterstruktur 104 enthält eine erste Datenstruktur 104a und eine zweite Datenstruktur 104b. Jede Datenstruktur 104a/b kann mehrere Datenelemente enthalten, von denen jedes Kern-Werte enthält. Wie in 1 gezeigt ist, sind die mehreren Datenelemente, die der Datenstruktur 104a und 104b entsprechen, als x0, y0, z0 bzw. x1, y1, z1 angegeben.
-
Wie vorstehend diskutiert, erzeugt jede Schicht des neuronalen Netzes einen Ausgang aus einen empfangenen Eingang in Übereinstimmung mit Werten einer jeweiligen Gruppe von Operanden. Wie andere Schichten des neuronalen Netzes kann jede Faltungsschicht eine Gruppe von Aktivierungseingängen, die als eine Matrixstruktur repräsentiert sein kann, verarbeiten. Eine Faltungsschicht eines neuronalen Netzes wird außerdem eine zugeordnete Gruppe von Kernen aufweisen, die Werte enthalten, und die Kerne können ebenfalls als eine Matrixstruktur von Gewichten repräsentiert sein. In 1 kann die Aktivierungsstruktur 102 einer Matrixstruktur entsprechen, die einen oder mehrere Aktivierungseingänge aufweist, und die Parameterstruktur 104 kann einer Matrixstruktur entsprechen, die einen oder mehrere Kerne oder Gewichtsparameter aufweist.
-
Wie nachstehend mit mehr Einzelheiten beschrieben ist, verarbeiten verschiedene Schichten eines neuronalen Netzes Maschinenlerninferenzen durch Ausführen größerer Menge von Berechnungen, die Matrixmultiplikationen enthalten. Berechnungsprozesse, die innerhalb einer Schicht (z. B. einer Faltungsschicht) eines neuronalen Netzes ausgeführt werden, können Multiplizieren einer Eingangsaktivierung (d. h. eines ersten Operanden) mit einem Gewicht (z. B. einem zweiten Operanden) in einem oder mehreren Zyklen und Ausführung einer Akkumulierung der Produkte über viele Zyklen enthalten. Eine Ausgangsaktivierung wird basierend auf den Multiplizier- und Akkumulierungs-Operationen, die auf den zwei Operanden ausgeführt werden, erzeugt.
-
Wie gezeigt stellt Gleichung 106 ein Beispiel einer auf einer Reihe basierenden mathematischen Operation bereit, die ausgeführt werden kann, wenn eine Eingangsaktivierung, die einem speziellen Datenelement der Aktivierungsstruktur 102 zugeordnet ist, mit einem Kern-Wert oder Gewicht/Parameter, das/der einem speziellen Datenelement der Parameterstruktur 104 zugeordnet ist, multipliziert wird. Beispielsweise wird in Gleichung 106, wenn der Index "i" gleich 0 ist, die Eingangsaktivierung, die dem Datenelement a0 der Aktivierungsstruktur 102 zugeordnet ist, mit dem Gewicht/Parameter, das/der dem Datenelement x0 der Parameterstruktur 104 zugeordnet ist, multipliziert. Außerdem werden, weil die Gleichung 106 eine teilweise reihenbasierte Gleichung ist, zusätzliche Multiplizieroperationen zwischen Gruppen von Operanden auftreten, die anderen Datenelementen der Aktivierungsstruktur 102 und der Parameterstruktur 104 entsprechen. In einigen Implementierungen kann eine Multiplikation einer Gruppe von Operanden eine Teilsumme 106a/b für ein/e spezielle/s Ausgangsmerkmal oder -aktivierung produzieren. Somit können, wie in Gleichung 106 gezeigt ist, Teilsummen addiert werden, um ein Ausgangsmerkmal zu produzieren.
-
Neuronale Netze können in einem oder mehreren Hardware-Berechnungssystemen verwirklicht sein, die mehrere Berechnungseinheiten enthalten, die konfiguriert sind, das maschinelle Lernen von Inferenzlast einer Netzschicht zu beschleunigen. Jede Berechnungseinheit ein eine Teilmenge von Berechnungen für eine gegebene Schicht verarbeiten. In einigen Implementierungen kann die Struktur 100 in einer oder mehreren Berechnungseinheiten verwirklicht sein, die jeweils wenigstens zwei Speicherbänke und eine oder mehrere Multiplizier-Akkumulierungs-Zellen (MAC-Zellen), die gemeinsam ein MAC-Array bilden können (nachstehend beschrieben), enthalten.
-
In einem Beispiel speichert eine erste Speicherbank 108 einer Beispiel-Berechnungseinheit Daten, die der Aktivierungsstruktur 102 zugeordnet sind, und kann konfiguriert sein, Eingangsaktivierungswerte zu empfangen und in Speicheradressenorte innerhalb der Speicherbank 108 zu schreiben. Ähnlich speichert eine zweite Speicherbank 110 der Beispiel-Berechnungseinheit Daten, die der Parameterstruktur 104 zugeordnet sind, und kann konfiguriert sein, Gewichtswerte zu empfangen und in Speicheradressenorte innerhalb der Speicherbank 110 zu schreiben. In diesem Beispiel kann jedes Element (z. B. a0, b0, c0, d0) aus den Datenelementen 102a in einer jeweiligen Speicheradresse der ersten Speicherbank 108 gespeichert sein. Ähnlich kann jedes Element (z. B. x0, y0, z0) aus den Datenelementen 104a in einer jeweiligen Speicheradresse des zweiten Speichers 110 gespeichert sein.
-
In einigen Implementierungen sind die erste Speicherbank 108 und die zweite Speicherbank 110 jeweils eine flüchtige Speichereinheit oder -einheiten. In einigen anderen Implementierungen sind die Speicherbank 108 und die Speicherbank 110 jeweils eine nichtflüchtige Speichereinheit oder -einheiten. Die Speicherbänke 108, 110 können auch eine weitere Form eines computerlesbaren Speichermediums sein, wie z. B. eine Diskettenvorrichtung, eine Festplattenvorrichtung, eine Vorrichtung mit einer optischen Platte oder eine Bandvorrichtung, ein Flash-Speicher oder eine ähnliche Feststoffspeichervorrichtung oder ein Array aus Vorrichtungen, das Vorrichtungen in einem Speicherbereichsnetz oder anderen Konfigurationen enthält.
-
Im Allgemeinen kann eine Berechnungseinheit eines Hardware-Berechnungssystems ein oder mehrere Register enthalten, um die Speicheradressenwerte zu verfolgen. Auf die Datenelemente der Matrixstruktur, die der Aktivierungsstruktur 102 entspricht, kann aus der ersten Speicherbank 108 zugriffen werden, während auf Datenelemente der Matrixstruktur, die der Parameterstruktur 104 entspricht, aus der zweiten Speicherbank 110 zugegriffen werden kann. Eine Beispiel-Steuervorrichtung der Berechnungskachel/Berechnungseinheit kann auf Datenelemente der Matrixstrukturen basierend auf Adressenwerten, die aus dem einen oder den mehreren Registern zugreifbar sind, zugreifen oder sie durchlaufen. Eine Beispiel-Berechnungseinheit/-kachel, die eine Beispiel-Steuervorrichtung, eine Aktivierungsstruktur 102, eine Parameterstruktur 102, eine erste Speicherbank 108 und eine zweite Speicherbank 110 enthält, ist nachstehend mit Bezug auf 3 genauer beschrieben.
-
Außerdem sind zusätzliche Einzelheiten und Beschreibungen, die sich auf Hardware-Berechnungssysteme zur Beschleunigung von Tensorberechnungen für neuronale Netze und Matrixmultiplikationen für die Inferenzlast in neuronalen Netzen in der
US-Patentschrift Nr. 15/335,769 mit dem Titel “Neural Network Compute Tile", eingereicht am 27. Oktober 2016, beschrieben. Die gesamte Offenbarung der
US-Patentschrift Nr. 15/335,769 ist hier ausdrücklich durch Bezugnahme vollständig mit aufgenommen.
-
2 stellt eine Beispiel-Berechnungsstruktur 200 dar, eine Aktivierungsstruktur und mehrere Parameterstrukturen für eine Ausgangsmerkmalstiefe größer als eins enthält. In einigen Implementierungen kann ein neuronales Netz mehrere Schichten aufweisen, die Ausgänge produzieren, die mehrere Ausgangsmerkmalstiefen aufweisen. In einigen Implementierungen kann jede Parameterstruktur für eine jeweilige aus den Ausgangstiefen zuständig sein. Somit bildet die Berechnungsstruktur 200 eine skalierbare Berechnungsstruktur ab, in der zusätzliche Parameterstrukturen 104a/b/c hinzugefügt sind, um Berechnungen zu unterstützen, die der Anzahl N von Ausgangstiefen zugeordnet sind. N ist eine Variable und kann einen ganzzahligen Wert annehmen, der im Bereich von beispielsweise 1 bis 5 ist, oder alternativ 1 bis N, abhängig von den Präferenzen oder Notwendigkeit eines Berechnungssystem-Designers.
-
Wie durch den Datenpfad 105 gezeigt ist, können individuelle Eingangsaktivierungswerte für Elemente, die der Datenstruktur 102a zugeordnet sind, jeder Parameterstruktur 104a/b/c zugeführt werden zum Gebrauch in Berechnungen, die durch Multiplizieroperatoren ausgeführt werden, die jeweiligen Parameterstrukturen 104 zugeordnet sind. Jede Parameterstruktur 104 kann dann einen Aktivierungswert, der von ihrem linken Nachbarn empfangen wird, an ihren rechten Nachbarn in Art einer Pipeline weitergeben. Alternativ können durch jede Parameterstruktur 104 Aktivierungen gleichzeitig bereitgestellt und verbraucht werden.
-
Die Matrix 202 kann eine Beispiel-Matrixstruktur repräsentieren, die den Aktivierungen 102 entspricht. Insbesondere kann die Elementzeile 202a der Datenstruktur 102a entsprechen, und die Elementzeile 202b kann der Datenstruktur 102b entsprechen. Im Allgemeinen und als Beispiel wird auf eine erste Parameterstruktur 104 (1) zugegriffen, um Berechnungen auszuführen, die dem Raum 206 zugeordnet sind, und auf eine zweite Parameterstruktur 104 (2) wird zugegriffen, um Berechnungen auszuführen, die dem Raum 208 zugeordnet sind. Obwohl nicht gezeigt, können auch zusätzliche Berechnungen ausführt werden, die der z-Dimension entsprechen. Als ein Beispiel kann die Elementzeile 202a in einer R-Ebene eines RGB-Bilds sein, und die Elementzeile 202b kann in einer G-Ebene desselben RGB-Bilds sein. Eine Beispiel-Faltungsschicht eines neuronalen Netzes produziert typischerweise mehrere Ausgangsmerkmale. Beispiel-Ausgangsmerkmale können ein Ausgangsmerkmal zum Klassifizieren eines Apfels und ein weiteres Ausgangsmerkmal zum Klassifizieren einer Banane enthalten. Hinsichtlich der Datenstrukturen 204 können die Räume 206 und 208 unterschiedliche Ebenen für unterschiedliche Klassifizierungen repräsentieren.
-
3 stellt ein Beispiel-Berechnungssystem 300 zum Zuführen von Eingangsaktivierungen zu einer oder mehreren Parameterstrukturen dar. Das Berechnungssystem 300 enthält im Allgemeinen eine Steuereinheit 302, die ein oder mehrere Steuersignale 310 bereitstellt, um zu bewirken, dass Eingangsaktivierungen für die Aktivierungsstruktur 102 entweder in einer Speicheradresse der Speicherbank 108 gespeichert oder daraus abgerufen werden. Ähnlich stellt die Steuereinheit 302 auch ein oder mehrere Steuersignale 310 bereit, um zu bewirken, dass Gewichte für die Parameterstruktur 104a/b/c entweder in einer Speicheradresse der Speicherbank 110 gespeichert oder daraus abgerufen werden. Das Berechnungssystem 300 enthält ferner eine oder mehrere Multiplizier-Akkumulier-Zelle(n)/Einheit(en) (MAC-Zelle(n)/Einheit(en)) 304, einen Eingangsaktivierungsbus 306 und einen Ausgangsaktivierungsbus 308. Die Steuersignale 310 können beispielsweise bewirken, dass die Speicherbank 108 eine oder mehrere Eingangsaktivierungen auf den Eingangsaktivierungsbus 306 bereitstellt, bewirken, dass die Speicherbank 110 ein oder mehrere Gewichte für die Parameterstruktur 104a/b/c bereitstellt, und/oder bewirken, dass die MAC-Einheit 304 Berechnungen ausführt, die Ausgangsaktivierungen produzieren, die für den Ausgangsaktivierungsbus 308 bereitgestellt werden.
-
Die Steuereinheit 302 kann eine oder mehrere Verarbeitungseinheiten und einen Speicher enthalten. In einigen Ausführungsformen können Verarbeitungseinheiten der Steuereinheit 302 einen oder mehrere Prozessoren (z. B. Mikroprozessoren oder zentrale Verarbeitungseinheiten (CPUs)), Grafikverarbeitungseinheiten (GPUs), anwendungsspezifische integrierte Schaltungen (ASICs) oder eine Kombination unterschiedlicher Prozessoren enthalten. In alternativen Ausführungsformen kann die Steuereinheit 302 andere Speicher- oder Berechnungsbetriebsmittel/-vorrichtungen (z. B. Puffer, Register, Steuerungs-Schaltungsanordnung usw.) enthalten, die zusätzliche Verarbeitungsoptionen zum Ausführen einer oder mehrerer der Bestimmungen und Berechnungen, die in dieser Beschreibung beschrieben sind, bereitstellen.
-
In einigen Implementierungen führen die Verarbeitungseinheit(en) der Steuereinheit 302 programmierte Anweisungen aus, die in dem Speicher gespeichert sind, um zu bewirken, dass die Steuereinheit 3ß2 und das Berechnungssystem 300 eine oder mehrere in dieser Beschreibung beschriebenen Funktionen ausführen. Der Speicher der Steuereinheit 302 kann ein oder mehrere nichttorische maschinenlesbare Speichermedien enthalten. Das nicht-transitorische computerlesbare Speichermedium kann Feststoffspeicher, Magnetplatte und optische Platte, eine tragbare Computerdiskette, einen Direktzugriffsspeicher (RAM), einen Festwertspeicher (ROM), einen löschbaren programmierbaren Festwertspeicher (z. B. EPROM, EEPROM oder Flash-Speicher) oder ein anderes materielles Medium, das zum Speichern von Informationen fähig ist, enthalten.
-
Im Allgemeinen ist das Berechnungssystem 300 eine Beispiel-Berechnungseinheit oder Kachel, die zusätzliche Hardware-Strukturen enthalten kann, um Berechnungen, die mehrdimensionalen Datenstrukturen wie z. B. Tensoren, Matrizen und/oder Daten-Arrays zugeordnet sind, auszuführen. In einigen Implementierungen können Eingangsaktivierungswerte vorab in eine Speicherbank 108 für die Aktivierungsstruktur 102 geladen werden, und Gewichtswerte können vorab in die zweite Speicherbank 110 geladen werden unter Verwendung von Datenwerten, die durch das Berechnungssystem 300 empfangen werden, die an dem Berechnungssystem 300 von einer externen Steuervorrichtung oder einer Steuervorrichtung höherer Ebene, die einem Hardware-Computersystem eines neuronalen Netzes zugeordnet ist, ankommen.
-
Anweisungen, Eingänge oder Eingangsaktivierungen und Gewichte können für das System 300 aus einer externen Quelle, wie z. B. einer externen Eingabe/Ausgabe-Vorrichtung (I/O-Vorrichtung) oder einer Steuervorrichtung höherer Ebene, die einem Hardware-Berechnungssystem eines neuronalen Netzes zugeordnet ist, bereitgestellt werden. In einigen Implementierungen stellen ein oder mehrere Datenbusse Datenkommunikation zwischen der externen Quelle (z. B. einer Steuervorrichtung) und dem/den System(en) 300 bereit. Die Datenbusse werden verwendet, um Anweisungen, Eingänge oder Aktivierungen und Gewichte aus einer Beispiel-I/O-Vorrichtung für jedes aus den mehreren Systemen 300 oder zwischen mehreren Berechungskacheln (z. B. mehreren Systemen 300), die in einem Hardware-Berechnungssystem für ein neuronales Netz enthalten sind, bereitzustellen.
-
Das System 300 kann Anweisungen empfangen, die eine spezielle Berechnungsoperation, die durch das System 300 ausgeführt werden soll, definieren. Außerdem kann die Steuereinheit 302 programmierte Anweisungen ausführen, um beispielsweise einen Datenstrom zu analysieren, der den empfangenen Eingangsaktivierungen zugeordnet ist. Das Analysieren des Eingangsaktivierungs-Datenstroms kann es ermöglichen, dass die Steuereinheit 302 detektiert oder bestimmt, ob ein Wert, der jeder der Eingangsaktivierungen zugeordnet ist, ein Nullwert oder ein Nichtnullwert ist. In einigen Implementierungen analysiert die Steuereinheit 302 einen Beispiel-Eingangsaktivierungs-Datenstrom und bildet jeden detektierten Null-Aktivierungswert und jeden detektierten Nichtnull-Aktivierungswert auf einen Bitvektor oder eine Bitmap 303 ab.
-
Wie in 3 gezeigt ist, kann die Bitmap 303 Binärwerte verwenden, um detektierte Nullwert-Eingangsaktivierungen und detektierte Nichtnullwert-Eingangsaktivierungen abzubilden. Beispielsweise kann der Binärwert von "0" einem detektierten Null-Eingangsaktivierungswert entsprechen, und ein Binärwert von "1" kann einem detektierten Nichtnull-Eingangsaktivierungswert entsprechen. Beispielsweise kann die Bitmap 303 eine 8-Bit-Bitmap sein, in der ungerade nummerierte Bitpositionen, die eine binäre "1" enthalten, Nichtnull-Aktivierungswerten entsprechen und gerade nummerierte Bitpositionen, die eine binäre "0" enthalten, Null-Aktivierungswerten entsprechen.
-
Die Steuereinheit 302 kann bewirken, dass Eingangsaktivierungen in der Speicherbank 108 gespeichert werden. Im Allgemeinen werden Datenwerte, die in der Speicherbank 108 gespeichert sind, typischerweise jeweils in einen entsprechenden Speicheradressenort geschrieben. Auf den Adressenort in der Speicherbank 108 kann dann durch eine Beispiel-Steuervorrichtung (z. B. die Steuereinheit 302) zugegriffen werden, wenn ein Datenwert wie z. B. eine Eingangsaktivierung benötigt wird, um eine spezielle Berechnungsoperation auszuführen. Die Steuereinheit 302 kann die Bitmap 303 verwenden, um einen Index von Speicheradressenorten zu erzeugen, die Nichtnull-Eingangsaktivierungswerte enthalten.
-
In einigen Implementierungen verwendet die Steuereinheit 302 die Bitmap 303, um zu bestimmen, welche Eingangsaktivierungen in die Speicherbank 108 geschrieben werden sollen. Beispielsweise kann die Analyse der Bitmap 303 angeben, dass nur Aktivierungswerte, die den Bitmappositionen 1, 3, 5, 7 (Nichtnullwerten) entsprechen, in Adressenorte in der Speicherbank 108 geschrieben werden sollten. Außerdem können Datenwerte, die den Bitmappositionen 2, 4, 6, 8 (Nullwerten) zugeordnet sind, entweder verworfen oder in Speicheradressenorte geschrieben werden, auf die die Steuereinheit 302 zugreifen kann oder nicht, wenn Aktivierungswerte für den Eingangsbus 306 bereitgestellt werden. Somit kann die Bitmap 303 als eine Basis verwendet werden, um Null-Aktivierungswerte zu komprimieren, wobei Komprimierung auftritt, wenn Nullwert-Eingangsaktivierungen nicht in die Speicheradressenorte geschrieben werden, und dadurch werden die gesamte Speichernutzung reduziert und Adressenorte zum Speichern anderer Datenwerte freigegeben.
-
Die Steuereinheit 302 kann ein oder mehrere Steuersignale 310 für die Speicherbank 180 bereitstellen, um Eingangsaktivierungen aus der Speicherbank 108 auf den Eingangsaktivierungsbus 306 zu laden und die Werte für ein Array aus Berechnungseinheiten, die die MAC 304 enthalten, bereitzustellen. In einigen Implementierungen kann die Bitmap 303 oder der Nichtnull-Speicheradressenindex, der der Bitmap 303 entspricht, durch die Steuereinheit 302 referenziert werden, um zu bestimmen, auf welche Speicheradressenwerte zugegriffen werden sollte, um Nichtnull-Aktivierungswerte bereitzustellen. Die Aktivierungswerte werden durch die Steuereinheit 302 aus der Speicherbank 108 und auf den Datenbus 306 bereitgestellt.
-
In einigen Implementierungen werden die Eingangsaktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index oder der Bitmap 303 zugeordnet ist, bereitgestellt. In anderen Implementierungen kann die Steuereinheit 302 basierend auf der Bitmap 302 oder dem Index detektieren oder bestimmen, ob eine Eingangsaktivierung, die bereitgestellt wird, einen Nullwert aufweist. In Reaktion auf dieses Bestimmen kann die Steuereinheit 302 dann ein Steuersignal für die Einheit oder die MAC 304 in dem Berechnungs-Array bereitstellen, um das Auftreten einer unnötigen Multiplizieroperation (z. B. eines Multiplizierens mit null) zu verhindern, anzuhalten oder auf andere Weise zu unterdrücken. Innerhalb des Berechnungssystems 300 können Energieeinsparungen durch das Bereitstellen eines Null-Aktivierungswerts und nachfolgendes oder gleichzeitiges Deaktivieren einer Berechnungsoperation, die dieser Aktivierung zugeordnet ist, realisiert werden.
-
Wie vorstehend diskutiert enthält der Index alle Speicheradressenorte, die Eingangsaktivierungen mit Nichtnullwerten aufweisen. Der Datenbus 306 ist durch eine oder mehrere Einheiten eines Berechnungs-Arrays zugreifbar. Die Einheiten des Berechnungs-Array können aus dem Datenbus 306 einen oder mehrere Nichtnull-Aktivierungswerte empfangen, um Berechnungen, die sich auf eine Matrixmultiplikation beziehen, basierend auf den empfangenen Aktivierungswerten auszuführen. In einigen Implementierungen wird das Berechnungssystem 300 nur Eingangsaktivierungen aus Speicheradressenorten bereitstellen, die den indexierten Adressen entsprechen. Somit werden keine Null-Aktivierungen für den Eingangsbus 306 bereitgestellt, und somit werden keine Berechnungsoperationen deaktiviert oder ihr Auftreten auf andere Weise verhindert. Wenn das Berechnungssystem 300 dieses Kommunikationsschema verwendet, kann die Berechnungseffizienz durch Eliminierung von Multiplikationen mit Null verbessert oder beschleunigt werden.
-
Für einen gegebenen Berechnungszyklus kann das Berechnungssystem 300 Zugriff auf ein Element der Aktivierungsstruktur 102 und der Parameterstruktur 104 erfordern, um Multiplikationsoperationen, die Inferenzberechnungen für eine Schicht eines neuronalen Netzes zugeordnet sind, auszuführen. Wie vorstehend erwähnt können spezielle Speicheradressenwerte für die Speicherbank 108 und die Speicherbank 110 Elementen der Aktivierungsstruktur 102 bzw. der Parameterstruktur 104 entsprechen.
-
Für einen Zyklus, in dem Berechnungen ausgeführt werden, wird die Steuereinheit 302 einen Eingangsaktivierungswert nach dem anderen bereitstellen, und das Array aus Berechnungseinheiten, das die MAC-Zelle 304 enthält, wird eine Aktivierung mit einem Gewicht multiplizieren, um unterschiedliche Ausgangsaktivierungen für eine gegebene Eingangsaktivierung zu produzieren. Jedes Element (vorstehend als eine Parameterstruktur beschrieben) oder jede MAC-Zelle des Array aus Berechnungseinheiten kann für unterschiedliche Ausgangstiefen einer Schicht eines neuronalen Netzes zuständig sein. Im Allgemeinen kann die Steuereinheit, wann immer die Steuereinheit 302 einen Null-Aktivierungswert detektiert, entweder: 1) diesen Aktivierungswert nicht in der Speicherbank 108 speichern; 2) den Aktivierungswert nicht bereitstellen, oder 3) den Wert bereitstellen und ein Steuersignal für eine spezielle Berechnungseinheit bereitstellen, um zu bewirken, dass die Einheit eine Multiplizieroperation, die diesem Null-Aktivierungswert entspricht, nicht ausführt.
-
Das Array aus Berechnungseinheiten wird vollständig durch die Steuereinheit 302 gesteuert, die basierend auf der Detektion eines Null-Aktivierungswerts bestimmen kann, wann eine Notwendigkeit vorhanden ist, eine spezielle Berechnung zu überspringen oder zu verhindern. Somit gibt es keinen Bedarf für zusätzliche komplexe Hardware-Strukturen innerhalb des Array aus Berechnungseinheiten, um eine spezielle Berechnung zu überspringen. Darüber hinaus können Eingangsaktivierungswerte bei ihrem Eintreffen an dem Berechnungssystem 300 zum Speichern in der Speicherbank 180 analysiert werden. In Reaktion auf das Analysieren der Eingangsaktivierungen kann die Steuereinheit 302 eine Anweisung ausführen, um effizient Aktivierungsdaten durch Speichern von nur Nichtnullwerten in dem Speicher 108 zu komprimieren, und dadurch werden Speicherplatz und entsprechende Bandbreite eingespart.
-
Wenn das Berechnungssystem 300 Eingangsaktivierungen und Gewichte empfängt, kann die Steuereinheit 302 beispielsweise eine oder mehrere Direktspeicherzugriffsoperationen ausführen. Die Ausführung dieser Speicherzugriffsoperationen enthält Speichern von Eingangsaktivierungen, die Dimensionselementen der Aktivierungsstruktur 102 entsprechen, in Adressenorten der Speicherbank 108. Ähnlich kann die Steuereinheit 302 außerdem in Adressenorten der Speicherbank 110 Parameter, die Dimensionselementen der Parameterstruktur 104 entsprechen, speichern. Zusätzlich zu der Bitmap 303 kann die Steuereinheit 302 ferner ein oder mehrere Adressenregister enthalten, die die Speicheradressen halten, aus denen eine spezielle Eingangsaktivierung (die z. B. einen Nullwert oder einen Nichtnullwert aufweist) geholt wird. Außerdem werden das eine oder die mehreren Register auch die Speicheradressen speichern, aus denen ein entsprechendes Gewicht geholt wird, um mit der speziellen Eingangsaktivierung multipliziert zu werden.
-
Wie vorstehend diskutiert identifiziert die Steuereinheit Speicheradressen für Nichtnull-Aktivierungswerte teilweise basierend auf der Bitmap 303. In einigen Implementierungen liest die Steuereinheit 302 die Bitmap 303 und bestimmt beispielsweise wenigstens zwei Speicheradressen, die Nichtnull-Aktivierungswerte aufweisen. Falls die Steuereinheit 302 konfiguriert ist, Null-Aktivierungswerte bereitzustellen und nachfolgend die Berechnungen dafür zu überspringen oder zu deaktivieren, dann kann die Steuereinheit 302 auch wenigstens eine Speicheradresse bestimmen, die einen Null-Aktivierungswert aufweist. In dieser Implementierung kann die Steuereinheit 302 die vorstehend genannten Register referenzieren, um ein entsprechendes Gewicht (und eine Speicheradresse) für die erste Eingangsaktivierung zu bestimmen und um ein entsprechendes Gewicht (und eine Speicheradresse) für die zweite Eingangsaktivierung zu bestimmen.
-
Wie vorstehen erwähnt hält die Steuereinheit 302 ein oder mehrere Adressenregister im Speicher. Somit, um jede potentielle Fehlausrichtung der Operanden (Eingangsaktivierung und Gewicht) zu vermindern oder zu verhindern, kann bei der Detektion des Nullwert-Eingangsaktivierung die Steuereinheit 302 die entsprechende Berechnungseinheit deaktivieren, das Laden eines speziellen Gewichts überspringen und das geeignete entsprechende Gewicht (und die Speicheradresse) für die nächste Nichtnull-Eingangsaktivierung abrufen, um das Berechnen von Ausgangsaktivierungen für eine gegebene Schicht eines neuronalen Netzes wiederaufzunehmen.
-
In einigen Implementierungen werden die auf einer ersten Schicht eines neuronalen Netzes berechneten Ausgangsaktivierungen als Eingangsaktivierungen für eine nächste zweite Schicht in dem Netz verwendet, z. B. eine nächste verdeckte Schicht oder die Ausgangsschicht des Netzes. Im Allgemeinen erzeugt jede Schicht des Netzes einen Ausgang aus einem empfangenen Eingang in Übereinstimmung mit aktuellen Werten einer jeweiligen Gruppe von Parametern. In einigen Fällen kann die Steuereinheit 302 programmierte Anweisungen (d. h. Ausgangslogik) ausführen, um Datenströme zu analysieren, die Ausgangsaktivierungen zugeordnet sind, die für den Ausgangsaktivierungsbus 308 bereitgestellt sind. Das Analysieren des Ausgangsaktivierungsdatenstroms kann es ermöglichen, dass die Steuereinheit 302 detektiert oder bestimmt, ob ein Wert, der jeder der Ausgangsaktivierungen zugeordnet ist, ein Nullwert oder ein Nichtnullwert ist. Die Steuereinheit 302 kann einen Beispiel-Ausgangsaktivierungsdatenstrom analysieren und jeden detektierten Nichtnull-Aktivierungswert auf die Bitmap 305 abbilden. Abgebildete Nichtnull-Aktivierungswerte in der Bitmap 305 können verwendet werden, um nur Nichtnullwerte als Eingangsaktivierungen für ein nachfolgendes Berechnungssystem 300 zuzuführen, das für Berechnungen zuständig ist, die der nächsten zweiten Schicht in dem Netz zugeordnet sind.
-
In alternativen Implementierungen können einige Berechnungsoperationen vorhanden sein, in denen eine einzelne Nichtnull-Eingangsaktivierung als ein Operand für mehrere Multiplizieroperationen verwendet wird, die eine Vielzahl von Gewichten für ein gegebenes Dimensionselement der Parameterstruktur 104 abdeckt (d. h. eine "x"- oder "y"-Dimension iterieren). Beispielsweise wenn die Steuereinheit 302 bewirkt, dass die Speicherbank 108 eine erste Eingangsaktivierung (z. B. einen Nichtnullwert) bereitstellt, empfängt die Parameterstruktur 104a die Aktivierung, und ein entsprechendes Gewicht an einer gegebenen Adresse wird ebenfalls in die Parameterstruktur 104a geladen. Die Parameterstruktur 104a wird fortfahren, eine spezielle Anzahl von Teilsummen (z. B. bezeichnet durch die Variable "K"), die die erste Eingangsaktivierung betrifft, über K Berechnungszyklen zu aktualisieren. Als ein Ergebnis wird für diese K Zyklen die Parameterstruktur 104a keine zusätzlichen Eingangsaktivierungen empfangen. Die Steuereinheit 302 kann dann ein Steuersignal für die Speicherbank 108 bereitstellen, um zu bewirken, dass die nächste Eingangsaktivierung für den Eingangsaktivierungsbus 306 bereitgestellt wird.
-
4 stellt eine Beispielarchitektur dar, die eine Speicherbank 108 enthält, die Aktivierungen 404 über den Eingangsbus 306 für einen oder mehrere Multiplizier-Akkumulier-Operatoren (MAC-Operatoren) bereitstellt. Ein Schieberegister 404 kann eine Schiebefunktionalität bereitstellen, wodurch Aktivierungen 404 eine nach der anderen auf den Eingangsbus 306 zum Empfang durch einen oder mehrere MAC-Operatoren in einer MAC-Zelle 304 ausgesendet werden. Wie gezeigt kann in einer Implementierung die Aktivierung 406 einen Aktivierungswert von null aufweisen und kann deshalb nicht durch eine MAC-Zelle 304 verbraucht werden.
-
Im Allgemeinen sind MAC-Zellen 304, die MAC-Operatoren umfassen, als Berechnungseinheiten definiert, die eine Teilsumme berechnen, und sind in einigen Implementierungen konfiguriert, eine Teilsummen-Dateneinheit in den Ausgangsbus 308 zu schreiben. Wie gezeigt können die Zellen 304 aus einem oder mehreren MAC-Operatoren bestehen. In einer Implementierung ist die Anzahl von MAC-Operatoren in der MAC-Zelle 304 als die Ausgabebreite der Zelle bezeichnet. Als ein Beispiel bezieht sich eine Doppelausgabezelle auf eine Zelle mit zwei MAC-Operatoren, die die Multiplikation von zwei Aktivierungswerten (aus der Speicherbank 108) mit zwei Parametern (aus der Speicherbank 110) berechnen und eine Addition zwischen den Ergebnissen der zwei Multiplizierer und der aktuellen Teilsumme ausführen können.
-
Wie vorstehend beschrieben ist der Eingangsbus 306 ein Kommunikationsbus, der Eingangsaktivierungen für MAC-Operatoren der Lineareinheit (d. h. des MAC-Array 304) bereitstellt. In einigen Implementierungen wird derselbe Eingang durch alle MAC-Operatoren gemeinsam verwendet. Die Breite des Eingangsbusses 306 muss groß genug sein, um die Eingangsaktivierungen für die entsprechende Anzahl von Zellen für ein gegebenes MAC-Array 304 zuzuführen. Das folgende Beispiel wird betrachtet, um die Struktur des Eingangsbusses 306 darzustellen. Wenn die Anzahl von Zellen in der Lineareinheit gleich vier ist und die Aktivierungsbreite gleich acht Bits ist, kann der Eingangsbus 306 konfiguriert sein, bis zu vier Eingangsaktivierungen in jedem Zyklus bereitzustellen. In diesem Beispiel wird jede Zelle in dem MAC-Array 304 nur auf eine aus den vier bereitgestellten Aktivierungen zugreifen.
-
In einigen Beispielen können Anweisungsdaten 312 angeben, dass Zellen des MAC-Array 304 Berechnungen unter Verwendung derselben Eingangsaktivierung ausführen müssen. Das kann als Zout-Partitionierung innerhalb einer Zelle des MAC-Array 304 bezeichnet werden. Ähnlich tritt Zin-Partitionierung innerhalb einer Zelle auf, wenn Zellen des MAC-Array 304 unterschiedliche Aktivierungen benötigen, um Berechnungen auszuführen. In dem vorherigen Fall wird die einzige Eingangsaktivierung viermal repliziert, und vier Aktivierungen, die aus der Speicherbank 108 gelesen werden, werden über vier Zyklen bereitgestellt. In dem letzteren Fall ist ein Lesen der Speicherbank 108 in jedem Zyklus erforderlich.
-
5 ist ein Beispielablaufplan eines Prozesses zum Reduzieren von Parameterberechnungen und Auswerten von Eingangsdatenseltenheit. Bei Block 502 empfängt das Berechnungssystem 300 Eingangsaktivierungen, die entweder einen Null-Aktivierungswert oder einen Nichtnull-Aktivierungswert aufweisen. Wie vorstehend diskutiert kann in einigen Implementierungen das Berechnungssystem 300 Eingangsaktivierungen von einer Host-Schnittstellenvorrichtung oder einer Steuereinheit höherer Ebene eines Beispiel-Hardware-Systems eines neuronalen Netzes empfangen.
-
Bei Block 504 bestimmt die Steuereinheit 302, ob jede aus den Eingangsaktivierungen ein Nullwert oder ein Nichtnullwert ist. In einigen Implementierungen analysiert die Steuereinheit 302 einen Eingangsaktivierungsdatenstrom und bildet jeden detektierten Nullwert und Nichtnullwert auf die Bitmap 303 ab, die Binärwerte enthält, die Null-Eingangsaktivierungswerten ("0") und Nichtnull-Eingangsaktivierungswerten ("1") entsprechen.
-
Bei Block 506 speichert die Steuereinheit 302 die empfangenen Eingangsaktivierungen in der Speicherbank 108. Das Speichern der Eingangsaktivierung kann enthalten, dass die Steuereinheit 302 einen Index eines oder mehrerer Adressenorte, die Eingangsaktivierungen aufweisen, die Nichtnullwerte enthalten, erzeugt. In einigen Implementierungen wird der Index basierend auf der Bitmap 303 erzeugt. Beispielsweise kann, weil jedes Bit der Bitmap 303 entweder einen Nichtnull-Aktivierungswert oder einen Null-Aktivierungswert angibt, die Bitmap 303 durch die Steuereinheit 302 referenziert werden, um einen Index von Speicheradressenorten, die Nichtnullwerte aufweisen, zu erzeugen, wenn die Eingangsaktivierungen in die Speicherbank 108 geschrieben werden.
-
Bei Block 508 stellt die Steuereinheit 302 aus der Speicherbank 108 wenigstens eine Eingangsaktivierung auf den Datenbus 306 bereit. In einigen Implementierungen werden die Eingangsaktivierungen wenigstens teilweise aus einem Speicheradressenort bereitgestellt, der in dem Index identifiziert ist. Wie vorstehend diskutiert identifiziert der Index alle Speicheradressenorte, die Eingangsaktivierungen mit Nichtnullwerten speichern. Der Datenbus 306 ist durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar. Die Einheiten des Berechnungs-Array können aus dem Datenbus 306 einen oder mehrere Nichtnull-Aktivierungswerte empfangen, um Berechnungen auszuführen, die sich auf eine Matrixmultiplikation beziehen. In einigen Implementierungen wird das Berechnungssystem 300 nur Eingangsaktivierungen aus Speicheradressen bereitstellen, die den indexierten Adressen entsprechen. Wenn das Berechnungssystem 300 dieses Kommunikationsschema verwendet, kann die Berechnungseffizienz durch Eliminierung von Multiplikationen mit Null verbessert werden.
-
Bei Block 510 detektiert die Steuereinheit in Implementierungen, in denen alle Aktivierungswerte statt nur Eingangsaktivierungen aus indexierten Adressen bereitgestellt werden, dass eine Eingangsaktivierung aus einer Speicheradresse bereitgestellt ist, die nicht einer der indexierten Adressen zugeordnet ist, die Nichtnull-Aktivierungswerte enthalten. In Reaktion auf diesen Schritt zum Detektieren kann die Steuereinheit 302 dann ein Steuersignal für wenigstens eine Einheit des Berechnungs-Array bereitstellen, um eine Multiplizieroperation, die dem Nulleingang zugeordnet ist, zu verhindern. Wenn das Berechnungssystem 300 dieses Kommunikationsschema verwendet, können Energieeinsparungen durch Verhindern unnötiger oder unwirtschaftlicher Berechnungen, die keine nützlichen Ergebnisse liefern (z. B. nützliche Ergebnisse enthalten das Berechnen einer Teilsumme oder Ausgangsaktivierung), realisiert werden.
-
Ausführungsformen der Gegenstands und der funktionalen Operationen, die in dieser Beschreibung beschrieben sind, können in einer digitalen elektronischen Schaltungsanordnung oder in materiell ausgeführter Computer-Software oder Firmware, in Computer-Hardware, die die Strukturen, die in dieser Beschreibung offenbart sind, und ihre strukturellen Äquivalente enthalten, oder in Kombinationen aus einem oder mehreren daraus implementiert sein. Ausführungsformen des Gegenstands, der in dieser Beschreibung beschrieben ist, können als ein oder mehrere Computerprogramme implementiert sein, d. h. ein oder mehrere Module aus Computerprogrammanweisungen, die auf einem materiellen nichttransitorischen Programmträger zur Ausführung durch eine oder zur Steuerung des Betriebs einer Datenverarbeitungsvorrichtung codiert sind. Alternativ oder zusätzlich können die Programmanweisungen auf einem künstlich erzeugten verbreiteten Signal codiert sein, z. B. einem maschinenerzeugten elektrischen, optischen oder elektromagnetischen Signal, das erzeugt wird, um Informationen zur Übertragung zu geeigneten Empfängereinrichtungen zur Ausführung durch eine Datenverarbeitungseinrichtung zu codieren. Das Computerspeichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Speichervorrichtung für Direktzugriff oder seriellen Zugriff oder eine Kombination aus einem oder mehreren daraus sein.
-
Die Prozesse und Logikabläufe, die in dieser Beschreibung beschrieben sind, können durch einen oder mehrere programmierbare Computer ausgeführt werden, die ein oder mehrere Computerprogramme ablaufen lassen, um Funktionen durch Arbeiten auf Eingabedaten und Erzeugen von Ausgabe(n) auszuführen. Die Prozesse und Logikabläufe können auch durch eine Spezial-Logikschaltungsanordnung, z. B. ein FPGA (feldprogrammierbares Gatter-Array), eine ASIC (anwendungsspezifische integrierte Schaltung), eine GPGPU (Allzweck-Grafikverarbeitungseinheit) oder eine andere Verarbeitungseinheit ausgeführt werden, und die Einrichtung kann auch als diese implementiert sein.
-
Computer, die für die Ausführung eines Computerprogramms geeignet sind, enthalten als Beispiel und können auf Allzweck- oder Spezial-Mikroprozessoren oder beiden oder irgendeiner anderen Art von zentraler Verarbeitungseinheit basieren. Allgemein wird eine zentrale Verarbeitungseinheit Anweisungen und Daten von einem Festwertspeicher oder einem Direktzugriffsspeicher oder beiden empfangen. Die wesentlichen Elemente eines Computers sind eine zentrale Verarbeitungseinheit zum Ausführen oder Ablaufen von Anweisungen und eine oder mehrere Speichervorrichtungen zum Speichern von Anweisungen und Daten. Allgemein wird ein Computer auch eine oder mehrere Massenspeichervorrichtungen zum Speichern von Daten, z. B. magnetische, magnetooptische Platten oder optische Platten, enthalten oder betriebstechnisch damit gekoppelt sein, um Daten von ihnen zu empfangen, zu ihnen zu übertragen oder beides. Ein Computer muss jedoch solche Vorrichtungen nicht aufweisen.
-
Computerlesbare Medien, die zum Speicher von Computerprogrammanweisungen und Daten geeignet sind, enthalten alle Formen von nichtflüchtigem Speicher, Medien und Speichervorrichtungen, die als Beispiel Halbleiterspeichervorrichtungen, z. B. EPROM, EEPROM und Flash-Speichervorrichtungen enthalten; Magnetplatten, z. B. interne Festplatten oder herausnehmbare Platten. Der Prozessor und der Speicher können durch eine Spezial-Logikschaltungsanordnung ergänzt oder darin integriert sein.
-
Obwohl diese Beschreibung viele spezifische Einzelheiten der Implementierung beinhaltet, sollten diese nicht als Einschränkungen für den Schutzbereich irgendeiner Erfindung oder dessen, das beansprucht sein kann, gedeutet werden, sondern vielmehr als Beschreibungen der Merkmale, die für spezielle Ausführungsformen spezieller Erfindungen spezifisch sein können. Spezielle Merkmale, die in dieser Beschreibung im Kontext getrennter Ausführungsformen beschrieben sind, können auch in Kombination in einer einzigen Ausführungsform implementiert sein. Umgekehrt können verschiedene Merkmale, die im Kontext einer einzigen Ausführungsform beschrieben sind, auch in mehreren Ausführungsformen getrennt oder in irgendeiner geeigneten Unterkombination implementiert sein. Außerdem können, obwohl Merkmale vorstehend als in speziellen Kombinationen arbeitend beschrieben und anfangs sogar als solche beansprucht sind, ein oder mehrere Merkmale aus einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgenommen sein, und die beanspruchte Kombination kann sich auf eine Unterkombination oder eine Variation einer Unterkombination richten.
-
Ähnlich sollte, obwohl Operationen in den Zeichnungen in einer speziellen Reihenfolge abgebildet sind, das nicht so verstanden werden, dass es erforderlich ist, dass solche Operationen in der speziellen gezeigten Reihenfolge oder in sequentieller Reihenfolge ausgeführt werden oder dass alle dargestellten Operationen ausgeführt werden, um wünschenswerte Ergebnisse zu erreichen. Unter speziellen Umständen können Multitasking und Parallelverarbeitung vorteilhaft sein. Außerdem sollte die Trennung verschiedener Systemmodule und Komponenten in den vorstehend beschriebenen Ausführungsformen nicht so verstanden werden, dass eine solche Trennung in allen Ausführungsformen erforderlich ist, und es sollte verstanden werden, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen gemeinsam in einem einzigen Software-Produkt integriert oder in mehrere Software-Produkte paketiert sein können.
-
Weitere Implementierungen sind in den folgenden Beispielen zusammengefasst:
Beispiel 1: Computerimplementiertes Verfahren, das umfasst: Empfangen mehrerer Eingangsaktivierungen durch eine Berechnungsvorrichtung, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die extern zu der Berechnungsvorrichtung ist; Bestimmen durch eine Steuereinheit der Berechnungsvorrichtung, ob jede aus den mehreren Eingangsaktivierungen einen aus einem Nullwert oder einem Nichtnullwert aufweist; Speichern wenigstens einer aus den Eingangsaktivierungen in einer Speicherbank der Berechnungsvorrichtung; Erzeugen durch die Steuereinheit eines Index, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind; und Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
Beispiel 2: Verfahren nach Beispiel 1, wobei der Index basierend auf einer Bitmap, die mehrere Bits umfasst, erzeugt wird und wobei jedes Bit der Bitmap wenigstens eines aus einem Nichtnull-Eingangsaktivierungswert oder einem Null-Eingangsaktivierungswert angibt.
-
Beispiel 3: Verfahren nach Beispiel 1 oder 2, das ferner Bereitstellen einer ersten Eingangsaktivierung, die einen Nichtnullwert aufweist, um durch wenigstens eine Einheit eine Berechnung unter Verwendung des Nichtnullwerts auszuführen, und nachfolgend Bereitstellen einer zweiten Eingangsaktivierung, die einen Nullwert aufweist, und Verhindern in wenigstens einer Einheit der Berechnung, die andernfalls unter Verwendung des Nullwerts ausgeführt würde, enthält.
-
Beispiel 4: Verfahren nach Beispiel 3, wobei das Verhindern in Reaktion darauf stattfindet, dass die Steuereinheit bestimmt, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der dem Index nicht zugeordnet ist.
-
Beispiel 5: Verfahren nach Beispiel 4, das ferner Detektieren durch die Steuereinheit, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der nicht dem Index zugeordnet ist, und in Reaktion auf das Detektieren Bereitstellen eines Steuersignals für wenigstens eine Einheit des Berechnungs-Array, um eine Multiplizieroperation, die dem Null-Eingangsaktivierungswert zugeordnet ist, zu verhindern, enthält.
-
Beispiel 6: Verfahren nach einem der Beispiele 1 bis 5, wobei das Verfahren ferner Abbilden durch die Steuereinheit und auf eine erste Einheit eines ersten Abschnitts einer Tensorberechnung, die eine erste Eingangsaktivierung verwendet, und Abbilden auf eine zweite Einheit, die von der ersten Einheit verschieden ist, eines zweiten Abschnitts der Tensorberechnung, die auch die erste Eingangsaktivierung verwendet, umfasst.
-
Beispiel 7: Verfahren nach einem der Beispiele 1 bis 6, das ferner der Reihe nach Bereitstellen einer einzelnen Eingangsaktivierung auf den Datenbus umfasst, wobei auf die einzelne Eingangsaktivierung aus Speicheradressenorten, die dem Index zugeordnet sind, zugegriffen und ausgewählt wird.
-
Beispiel 8: Verfahren nach einem der Beispiele 1 bis 7, wobei das Bereitstellen ferner das nicht Bereitstellen von Eingangsaktivierungen, die einen Nullwert aufweisen, umfasst.
-
Beispiel 9: Eine oder mehrere maschinenlesbare Speichervorrichtungen, die Anweisungen speichern, die durch die eine oder die mehreren Verarbeitungsvorrichtungen ausführbar sind, um Operationen auszuführen, die umfassen: Empfangen durch eine Berechnungsvorrichtung von mehreren Eingangsaktivierungen, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die extern zu der Berechnungsvorrichtung ist; Bestimmen durch eine Steuereinheit der Berechnungsvorrichtung, ob jede aus den mehreren Eingangsaktivierungen einen aus einem Nullwert oder einem Nichtnullwert aufweist; Speichern wenigstens eine aus den Eingangsaktivierungen in einer Speicherbank der Berechnungsvorrichtung; Erzeugen durch die Steuereinheit eines Index, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind; und Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
Beispiel 10: Maschinenlesbare Speichervorrichtungen nach Beispiel 9, wobei der Index basierend auf einer Bitmap, die mehrere Bits umfasst, erzeugt wird und wobei jedes Bit der Bitmap wenigstens eines aus einem Nichtnull-Eingangsaktivierungswert oder einem Null-Eingangsaktivierungswert angibt.
-
Beispiel 11: Maschinenlesbare Speichervorrichtungen nach Beispiel 9 oder 10, die ferner Bereitstellen einer ersten Eingangsaktivierung, die einen Nichtnullwert aufweist, um durch wenigstens eine Einheit eine Berechnung unter Verwendung des Nichtnullwerts auszuführen, und nachfolgend Bereitstellen einer zweiten Eingangsaktivierung, die einen Nullwert aufweist, und Verhindern in wenigstens einer Einheit der Berechnung, die andernfalls unter Verwendung des Nullwerts ausgeführt würde, enthält.
-
Beispiel 12: Maschinenlesbare Speichervorrichtungen nach Beispiel 11, wobei das Verhindern in Reaktion darauf stattfindet, dass die Steuereinheit bestimmt, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der dem Index nicht zugeordnet ist.
-
Beispiel 13: Maschinenlesbare Speichervorrichtungen nach Beispiel 12, die ferner Detektieren durch die Steuereinheit, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der nicht dem Index zugeordnet ist, und in Reaktion auf das Detektieren Bereitstellen eines Steuersignals für wenigstens eine Einheit des Berechnungs-Array, um eine Multiplizieroperation zu verhindern, die dem Null-Eingangsaktivierungswert zugeordnet ist, enthält.
-
Beispiel 14: Maschinenlesbare Speichervorrichtungen nach einem der Beispiele 9 bis 13, wobei die Operationen ferner Abbilden durch die Steuereinheit und auf eine erste Einheit eines ersten Abschnitts einer Tensorberechnung, die eine erste Eingangsaktivierung verwendet, und Abbilden auf eine zweite Einheit, die von der ersten Einheit verschieden ist, eines zweiten Abschnitts der Tensorberechnung, die auch die erste Eingangsaktivierung verwendet, umfassen.
-
Beispiel 15: Elektronisches System, das umfasst: eine Steuereinheit, die in einer Berechnungsvorrichtung angeordnet ist, wobei die Steuereinheit eine oder mehrere Verarbeitungsvorrichtungen enthält; und eine oder mehrere maschinenlesbare Speichervorrichtungen zum Speichern von Anweisungen, die durch die eine oder die mehreren Verarbeitungsvorrichtungen ausführbar sind, um Operationen auszuführen, die umfassen: Empfangen durch die Berechnungsvorrichtung von mehreren Eingangsaktivierungen, wobei die Eingangsaktivierungen wenigstens teilweise aus einer Quelle bereitgestellt werden, die extern zu der Berechnungsvorrichtung ist; Bestimmen durch die Steuereinheit, ob jede aus den mehreren Eingangsaktivierungen eines aus einem Nullwert oder einem Nichtnullwert aufweist; Speichern wenigstens einer aus den Eingangsaktivierungen in einer Speicherbank der Berechnungsvorrichtung; Erzeugen durch die Steuereinheit eines Index, der einen oder mehrere Speicheradressenorte umfasst, die Eingangsaktivierungswerte aufweisen, die Nichtnullwerte sind; und Bereitstellen durch die Steuereinheit und aus der Speicherbank wenigstens einer Eingangsaktivierung auf einen Datenbus, der durch eine oder mehrere Einheiten eines Berechnungs-Array zugreifbar ist, wobei die Aktivierungen wenigstens teilweise aus einem Speicheradressenort, der dem Index zugeordnet ist, bereitgestellt werden.
-
Beispiel 16: Elektronisches System nach Beispiel 15, wobei der Index basierend auf einer Bitmap, die mehrere Bits umfasst, erzeugt wird und wobei jedes Bit der Bitmap wenigstens eines aus einem Nichtnull-Eingangsaktivierungswert oder einem Null-Eingangsaktivierungswert angibt.
-
Beispiel 17: Elektronisches System nach Beispiel 15 oder 16, das ferner Bereitstellen einer ersten Eingangsaktivierung, die einen Nichtnullwert aufweist, um durch wenigstens eine Einheit eine Berechnung unter Verwendung des Nichtnullwerts auszuführen, und nachfolgend Bereitstellen einer zweiten Eingangsaktivierung, die einen Nullwert aufweist, und Verhindern in wenigstens einer Einheit der Berechnung, die andernfalls unter Verwendung des Nullwerts ausgeführt würde, enthält.
-
Beispiel 18: Elektronisches System nach Beispiel 17, wobei das Verhindern in Reaktion darauf stattfindet, dass die Steuereinheit bestimmt, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der dem Index nicht zugeordnet ist.
-
Beispiel 19: Elektronisches System nach Beispiel 17, das ferner Detektieren durch die Steuereinheit, dass die Eingangsaktivierung aus einem Speicheradressenort bereitgestellt ist, der nicht dem Index zugeordnet ist, und in Reaktion auf das Detektieren Bereitstellen eines Steuersignals für wenigstens eine Einheit des Berechnungs-Array, um eine Multiplizieroperation zu verhindern, die dem Null-Eingangsaktivierungswert zugeordnet ist, enthält.
-
Beispiel 20: Elektronisches System nach einem der Beispiele 15 bis 19, wobei die Operationen ferner Abbilden durch die Steuereinheit und auf eine erste Einheit eines ersten Abschnitts einer Tensorberechnung, die eine erste Eingangsaktivierung verwendet, und Abbilden auf eine zweite Einheit, die von der ersten Einheit verschieden ist, eines zweiten Abschnitts der Tensorberechnung, die auch die erste Eingangsaktivierung verwendet, umfassen.
-
Spezielle Ausführungsformen des Gegenstands sind beschrieben worden. Andere Ausführungsformen sind innerhalb des Schutzbereichs der folgenden Ansprüche. Beispielsweise können die Aktionen, die in den Ansprüchen vorgetragen sind, in einer anderen Reihenfolge ausgeführt werden und immer noch wünschenswerte Ergebnisse erreichen. Als ein Beispiel erfordern die in den begleitenden Figuren abgebildeten Prozesse nicht notwendigerweise die spezielle gezeigte Reihenfolge oder sequentielle Reihenfolge, um wünschenswerte Ergebnisse zu erreichen. In speziellen Implementierungen können Multitasking und Parallelverarbeitung vorteilhaft sein.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- US 15/335769 [0033, 0033]