DE102020131050A1 - Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken - Google Patents

Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken Download PDF

Info

Publication number
DE102020131050A1
DE102020131050A1 DE102020131050.1A DE102020131050A DE102020131050A1 DE 102020131050 A1 DE102020131050 A1 DE 102020131050A1 DE 102020131050 A DE102020131050 A DE 102020131050A DE 102020131050 A1 DE102020131050 A1 DE 102020131050A1
Authority
DE
Germany
Prior art keywords
neural network
data
convolutional neural
descriptors
layer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102020131050.1A
Other languages
English (en)
Inventor
Debabrata Mohapatra
Arnab Raha
Gautham Chinya
Huichu Liu
Cormac Brick
Lance Hacking
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102020131050A1 publication Critical patent/DE102020131050A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Abstract

Hierin offenbarte, beispielhafte Vorrichtungen enthalten ein Array von Prozessorelementen, wobei das Array Zeilen, die jede eine erste Anzahl von Prozessorelementen aufweisen, und Spalten enthält, die jede eine zweite Anzahl von Prozessorelementen aufweisen. Offenbarte beispielhafte Vorrichtungen enthalten außerdem Konfigurationsregister zum Speichern von Deskriptoren zum Konfigurieren des Arrays zum Implementieren einer Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer von mehreren Tensorverarbeitungsvorlagen entspricht, wobei jeweilige der Prozessorelemente basierend auf den Deskriptoren zum Implementieren der einen der Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfiguriert werden sollen. Offenbarte beispielhafte Vorrichtungen enthalten ferner Speicher zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.

Description

  • GEBIET DER OFFENBARUNG
  • Diese Offenbarung betrifft im Allgemeinen neuronale Netzwerke und insbesondere konfigurierbare Prozessorelementarrays zum Implementieren von konvolutionellen neuronalen Netzwerken.
  • STAND DER TECHNIK
  • Neuronale Netzwerke wurden und werden weiterhin als die grundlegenden technischen Lösungen in einem weiten Bereich von technischen Gebieten angenommen, wie etwa Gesichtserkennung Spracherkennung, Navigation, Marktforschung usw., um nur einige zu nennen. Von daher ist das Gebiet des neuronalen Networking rasch gewachsen und wächst weiterhin, sowohl hinsichtlich Inferenzalgorithmusentwicklung als auch Hardwareplattformentwicklung zum Implementieren der entstehenden Inferenzalgorithmen. Die Netzwerkschichten von neuronalen Netzwerken, wie etwa konvolutionelle neuronale Deep-Learning-Netzwerke, weisen zahlreiche mögliche Tensorformen auf, deren Dimensionen sich fortlaufend ändern, wenn bestehende neuronale Netzwerkinterferenzalgorithmen überarbeitet und/oder neue neuronale Netzwerkinterferenzalgorithmen entwickelt werden.
  • Figurenliste
    • 1 ist ein Blockdiagramm eines beispielhaften konfigurierbaren Prozessorelementarrays zum Implementieren von konvolutionellen neuronalen Netzwerken gemäß Lehren dieser Offenbarung.
    • 2 stellt einen beispielhaften Tensorvorgang dar, der durch das konfigurierbare Prozessorelementarray von 1 ausgeführt wird.
    • 3 bis 4 stellen beispielhafte Tensorverarbeitungsvorlagen und entsprechende beispielhafte Datenflusszeitpläne dar, die durch die beispielhaften Prozessorelemente ausgeführt werden sollen, welche im konfigurierbaren Prozessorelementarray von 1 enthalten sind.
    • 5 stellt eine beispielhafte Betriebspipeline dar, die durch das konfigurierbare Prozessorelementarray von 1 implementiert wird.
    • 6 ist ein Blockdiagramm eines beispielhaften Prozessorelements, das im konfigurierbaren Prozessorelementarray von 1 enthalten ist.
    • 7 bis 12 stellen beispielhafte Betriebsphasen und beispielhafte Übergänge zwischen Betriebsphasen für das konfigurierbare Prozessorelementarray von 1 dar.
    • 13A bis B stellen eine beispielhafte Hardwarearchitektur zum Unterstützen von externer Teilsummenakkumulation im konfigurierbaren Prozessorelementarray von 1 dar.
    • 14 stellt eine beispielhafte Hardwarearchitektur zum Unterstützen von elementweisen Vorgängen im konfigurierbaren Prozessorelementarray von 1 dar.
    • 15 stellt eine beispielhafte Hardwarearchitektur zum Unterstützen von Maxpool-Vorgängen im konfigurierbaren Prozessorelementarray von 1 dar.
    • 16 bis 19 stellen beispielhafte Datenflusszeitpläne dar, die durch das konfigurierbare Prozessorelementarray von 1 implementiert werden, wenn es gemäß vier entsprechenden beispielhaften Tensorverarbeitungsvorlagen konfiguriert ist.
    • 20 bis 21 stellen beispielhafte Datenpartitionierungs- und - blockvorgangsaspekte des ersten beispielhaften Datenflusszeitplans von 16 dar.
    • 22 bis 25 stellen beispielhafte Sätze von Konfigurationsregisterdeskriptorwerten dar, die zum Konfigurieren des konfigurierbaren Prozessorelementarrays von 1 zum Implementieren der entsprechenden beispielhaften Datenflusszeitpläne von 16 bis 19 benutzt werden sollen.
    • 26 ist ein Ablaufdiagramm, das beispielhafte computerlesbare Anweisungen darstellt, die zum Betreiben des konfigurierbaren Prozessorelementarrays von 1 und/oder 6 ausgeführt werden können.
    • 27 ist ein Blockdiagramm einer beispielhaften Prozessorplattform, die zum Enthalten des beispielhaften konfigurierbaren Prozessorelementarray von 1 und/oder 6 und zum Ausführen der beispielhaften computerlesbaren Anweisungen von 26 zum Betreiben des konfigurierbaren Prozessorelementarrays von 1 und/oder 6 strukturiert ist.
  • Die Figuren sind nicht maßstabsgetreu. Im Allgemeinen werden dieselben Bezugszeichen in der (den) Zeichnung(en) und der beiliegenden schriftlichen Beschreibung durchwegs zur Bezugnahme auf dieselben oder gleichartige Teile, Elemente usw. verwendet.
  • Die Deskriptoren „erste/r/s“, „zweite/r/s“, „dritte/r/s“ usw. werden hierin beim Identifizieren von mehrfachen Elementen oder Komponenten benutzt, auf die sich separat bezogen werden kann. Falls basierend auf dem Gebrauchskontext nicht anderweitig spezifiziert oder nachvollzogen, ist diesen Deskriptoren keine Bedeutung der Vorrangigkeit oder zeitlichen Reihenfolge zuzuschreiben, sondern dienen lediglich als Bezeichnungen zur separaten Bezugnahme auf mehrfache Elemente oder Komponenten zum leichteren Verständnis der offenbarten Beispiele. In manchen Beispielen kann der Deskriptor „erste/r/s“ zur Bezugnahme auf ein Element in der detaillierten Beschreibung verwendet werden, während dasselbe Element in einem Anspruch mit einem anderen Deskriptor, wie etwa „zweite/r/s“ oder „dritte/r/s“, bezeichnet sein kann. In solchen Fällen versteht es sich, dass derartige Deskriptoren lediglich zur leichteren Bezugnahme auf mehrfache Elemente oder Komponenten verwendet werden.
  • DETAILLIERTE BESCHREIBUNG
  • Hierin sind beispielhafte konfigurierbare Prozessorelementarrays zum Implementieren von konvolutionellen neuronalen Netzwerken offenbart. Wie oben angegeben, ist das Gebiet des neuronalen Networking rasch gewachsen und wächst weiterhin, sowohl hinsichtlich Inferenzalgorithmusentwicklung als auch Hardwareplattformentwicklung zum Implementieren der entstehenden Inferenzalgorithmen. Die Netzwerkschichten von neuronalen Netzwerken, wie etwa konvolutionelle neuronale Deep-Learning-Netzwerke, weisen zahlreiche mögliche Tensorformen auf, deren Dimensionen sich fortlaufend ändern, wenn bestehende neuronale Netzwerkinterferenzalgorithmen überarbeitet und/oder neue neuronale Netzwerkinterferenzalgorithmen entwickelt werden. Um der rasanten Evolution von neuronalen Netzwerken entgegenzukommen, müssen die Hardwareplattformen, die zum Implementieren der neuronalen Netzwerke benutzt werden, zum Unterstützen der sich ändernden Dimensionen der Netzwerkschichttensorformen konfigurierbar sein. Ältere neuronale Netzwerkplattformen setzen feldprogrammierbare Gate-Arrays (FPGAs) zum Vorsehen von derartiger Konfigurierbarkeit ein, statt eine anwendungsspezifische integrierte Schaltung (ASIC) einzusetzen, da Neukonfiguration der Netzwerkschichttensorformen in einer ASIC-Implementierung Austauschen der ASIC erfordern kann und ASIC-Gestaltungszyklen lange sein können. Daher können bis zu der Zeit, zu der eine ASIC-basierte Lösung für einen bestimmten Deep-Learning-Inferenzalgorithmus auf den Markt gelangt, die Inferenzalgorithmen sich bereits entwickelt haben, wodurch die ASIC-basierte Lösung überholt ist. FPGAs lassen jedoch die Verarbeitungsleistungsfähigkeit und Energieeffizienz von ASICs vermissen.
  • Im Gegensatz zu derartigen älteren neuronalen Netzwerkhardwareplattformen sehen hierin offenbarte, beispielhafte konfigurierbare Prozessorelementarrays Konfigurierbarkeit ähnlich FPGAs vor, während sie die Energieeffizienz von ASICs beibehalten. Offenbarte beispielhafte konfigurierbare Prozessorelementarrays ermöglichen Konfiguration von verschiedenen Tensorformrechnungen zur Laufzeit, wodurch das sich rasch entwickelnde Gebiet von neuronalen Netzwerkalgorithmen mit Netzwerkschichten mit weit variierenden Tensordimensionen untergebracht sein kann, während die Leistungsfähigkeit und Energieeffizienz beibehalten wird, die durch eine ASIC vorgesehen ist.
  • Offenbarte beispielhafte konfigurierbare Prozessorelementarrays basieren auf Arrays von softwarekonfigurierbaren Prozessorelementen (PEs), hierin außerdem als Verarbeitungselemente oder Primitivkernelmodule bezeichnet, die Konvolutionsrechnungen auf flexible Formen von Tensordaten, wie etwa Filtergewichtungen, Eingabeaktivierungen und/oder Ausgabeaktivierungen, zum Implementieren einer jeweiligen Schicht des neuronalen Netzwerks ausführen können. Wie untenstehend detaillierter offenbart, ist die Mikroarchitektur eines beispielhaften PE, das in einem konfigurierbaren Prozessorelementarray enthalten ist, zur Laufzeit neukonfigurierbar (beispielsweise basierend auf softwareprogrammierbaren Konfigurationsregistern), um aufeinanderfolgende Schichten eines jeweiligen neuronalen Netzwerks zu implementieren oder andere neuronale Netzwerke zu implementieren. In manchen Beispielen nutzt das PE Aktivierungs- und Gewichtungswiederverwendung für Energieeffizienz durch Lokalisieren von gemeinsam benutztem, lokalem Speicher nahe an den Recheneinheiten, die im PE selbst enthalten sind.
  • Wie untenstehend detaillierter offenbart, basiert die Flexibilität eines offenbarten beispielhaften PE zur Unterstützung von variablen Tensorformrechnungen in Hardware auf der Aufgliederung der Tensorrechnungen, die mit einer jeweiligen Schicht des neuronalen Netzwerks assoziiert sind, in einen eines Satzes von möglichen Tensorverarbeitungsvorlagen. Beispiele von derartigen Tensorverarbeitungsvorlagen enthalten u.a. Vektor-Vektor-, Vektor-Matrix- und Matrix-Matrix-Tensorverarbeitungsvorlagen. Wie untenstehend detaillierter offenbart, werden beispielhafte PE basierend auf einem Satz von Konfigurationsdeskriptoren zum Unterstützen einer bestimmten Tensorrechnung in Hardware gesteuert, wobei der Satz von Konfigurationsdeskriptoren zu Beginn der Ausführung der jeweiligen Schicht des neuronalen Netzwerks initialisiert wird. Von daher können hierin offenbarte, beispielhafte PEs als reine Hardwarelösung implementiert werden (beispielsweise über eine ASIC), die Hardwarekonfigurationsregister jedoch Software aussetzt, wodurch ermöglicht ist, dass die Software den Tensordatenfluss für eine jeweilige Netzwerkschicht während der Laufzeit konfiguriert. Daher ermöglichen hierin offenbarte, beispielhafte PEs, und die assoziierte Anordnung der PEs in hierin offenbarten, beispielhaften konfigurierbaren Prozessorelementarrays, dass die flexiblen Datenflüsse von konvolutionellen neuronalen Netzwerkschichten in Hardwarebeschleunigern ohne Leistungsfähigkeitseinbuße, beispielsweise weil sie jegliche Arbeit an einen externen Prozessor oder externe Software abladen müssen, laufen.
  • Hierin offenbarte, beispielhafte konfigurierbare Prozessorelementarrays sehen zahlreiche Vorzüge zum Implementieren von konvolutionellen neuronalen Netzwerken gegenüber älteren Hardwareplattformen vor. Beispielsweise können beispielhafte konfigurierbare Prozessorelementarrays mit ASICs anstelle von FPGAs implementieren und daher verbesserte Leistungsfähigkeit und Leistungsverbrauch in Bezug zu älteren Plattformen aufweisen. Die energieeffiziente Beschaffenheit von hierin offenbarten, beispielhaften konfigurierbaren Prozessorelementarrays kann ferner Benutzung von Maschinenlernbeschleunigern in einer großen Auswahl von Anwendungen ermöglichen, wie etwa Gesichtserkennung, Spracherkennung, Navigation, Marktforschung usw. Die energieeffiziente Beschaffenheit von hierin offenbarten, beispielhaften konfigurierbaren Prozessorelementarrays kann außerdem den Einsatz von Maschinenlernbeschleunigern in Anwendungen, wie etwa Internet-of-Things-Anwendungen (IoT-Anwendungen), Drohnenanwendungen (beispielsweise Anwendungen für unbemannte Fahrzeuge) usw., ermöglichen, die nicht dazu imstande waren, Nutzen aus Maschinenlerntechniken zu ziehen, aufgrund des verhältnismäßig hohen Leistungsverbrauchs, den ältere neuronale Netzwerkhardwareplattformen aufweisen.
  • Unter Bezugnahme auf die Figuren ist ein Blockdiagramm eines beispielhaften konfigurierbaren Prozessorelementarrays 100 zum Implementieren von konvolutionellen neuronalen Netzwerken gemäß Lehren dieser Offenbarung in 1 dargestellt. Das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 enthält beispielhafte PEs 105a bis i, die in einem Array angeordnet sind, das beispielhafte Zeilen 110a bis c und beispielhafte Spalten 115a bis c enthält, wobei jeweilige der Zeilen 110a bis c eine erste Anzahl von PEs aufweisen und jeweilige der Spalten 115a bis c eine zweite Anzahl von PEs aufweisen. Die erste Anzahl von PEs in den Zeilen 110a bis c und die zweite Anzahl von PEs in den Spalten 115a bis c kann dieselbe oder unterschiedlich sein. Im dargestellten Beispiel ist die erste Anzahl von PEs in den Zeilen 110a bis c und die zweite Anzahl von PEs in den Spalten 115a bis c dieselbe und als „N“ in 1 ausgewiesen. Beispielsweise kann N 16 oder ein anderer Wert sein.
  • Das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 enthält außerdem beispielhafte Konfigurationsregister 120, die beispielsweise durch ein oder mehr Hardwareregister, Arrays, Speicher, Datenzellen usw. oder jegliche Kombination(en) davon implementiert sein können. Die Konfigurationsregister 120 konfigurieren das Array von PEs 105a bis i zum Implementieren einer jeweiligen Schicht eines beispielhaften konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan. Im dargestellten Beispiel entspricht der Datenflusszeitplan einer eines Satzes von möglichen Tensorverarbeitungsvorlagen, die durch die PEs 105a bis i unterstützt werden. Wie untenstehend detaillierter offenbart, nehmen die Konfigurationsregister 120 einen Satz von Deskriptoren an, die eines der PEs 105a bis i zum Implementieren von einer der möglichen Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der jeweiligen Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der jeweiligen Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren. Wie untenstehend detaillierter offenbart, können die Konfigurationsregister 120 einen neuen Satz von Deskriptoren zum Neukonfigurieren des Arrays von PEs 105a bis i zum Implementieren einer nachfolgenden Schicht des konvolutionellen neuronalen Netzwerks annehmen. Beispielsweise kann der neue Satz von Deskriptoren derselbe wie der vorherige Satz von Deskriptoren sein, die auf die Konfigurationsregister 120 angewendet werden. Durch Beibehalten derselben Deskriptoren können in derartigen Beispielen die einen der PEs 105a bis i zum Implementieren derselben Tensorverarbeitungsvorlagen wie für die vorherige Netzwerkschicht konfiguriert werden. In anderen Beispielen kann der neue Satz von Deskriptoren vom vorherigen Satz von Deskriptoren, der auf die Konfigurationsregister 120 angewendet wird, abweichen. Durch Benutzen von anderen Deskriptoren können in derartigen Beispielen die einen der PEs 105a bis i zum Implementieren einer anderen der möglichen Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der nachfolgenden Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der nachfolgenden Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfiguriert werden. Von daher sind die Konfigurationsregister 120 ein Beispiel von Mitteln zum Konfigurieren des Arrays von PEs 105a bis i basierend auf mehreren Deskriptoren zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer von mehreren Tensorverarbeitungsvorlagen entspricht. Außerdem sind die PEs 105a bis i Beispiele von Mitteln zum Einwirken, basierend auf einer Tensorverarbeitungsvorlage, auf Eingabeaktivierungsdaten und Filterdaten, die mit einer Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  • Das dargestellte Beispiel von 1 enthält einen beispielhaften Konfigurationslader 122 zum Laden des Satzes von Deskriptoren in die Konfigurationsregister 120. In manchen Beispielen enthält der Konfigurationslader 122 einen Compiler zum Umwandeln einer Beschreibung einer konvolutionellen neuronalen Netzwerkschicht, die durch das konfigurierbare Prozessorelementarray 100 implementiert werden soll, in einen Datenflusszeitplan, der einer ausgewählten eines Satzes von möglichen Tensorverarbeitungsvorlagen entspricht. Der Compiler kann in derartigen Beispielen ein oder mehr Kriterien, wie etwa u.a. Ausführungszeit, Speicherauslastung, Anzahl von zu aktivierenden PEs usw., zum Auswählen der Tensorverarbeitungsvorlage, die zum Konstruieren des Datenflusszeitplans benutzt werden soll, nutzen. Zudem kann der Compiler in derartigen Beispielen dann den resultierenden Datenflusszeitplan in den Satz von Deskriptoren umwandeln, die in die Konfigurationsregister 120 geschrieben werden sollen. In manchen Beispielen ist der Konfigurationslader 122 durch einen oder mehr Prozessoren implementiert, wie etwa der beispielhafte Prozessor 2712, der in der beispielhaften Prozessorplattform 2700 gezeigt ist, welche untenstehend in Verbindung mit 27 besprochen wird. Von daher ist der Konfigurationslader 122 ein Beispiel von Mitteln zum Bestimmen und/oder Schreiben/Laden von Deskriptoren in die Konfigurationsregister 120.
  • Das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 enthält ferner beispielhaften Speicher 125 zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit einer jeweiligen Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, die durch die PEs 105a bis i implementiert wird. Im dargestellten Beispiel ist der Speicher 125 durch Bänke von statischem Direktzugriffsspeicher (SRAM) implementiert. In anderen Beispielen können jedoch andere Anzahlen und/oder Typen von Speicher, und/oder (eine) Kombination(en) davon, zum Implementieren des Speichers 125 benutzt sein. Von daher ist der Speicher ein Beispiel von Mitteln zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit einer jeweiligen Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  • Das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 enthält außerdem eine beispielhafte Tensordatenverteilungseinheit 130 zum Lesen von Daten aus dem Speicher 125 und Schreiben der Daten in die PEs 105a bis i. Die Tensordatenverteilungseinheit 130 nimmt außerdem Daten von den PEs 105a bis i an und speichert die Daten im Speicher 125, basierend auf der Tensorverarbeitungsvorlage, die durch den Satz von Deskriptoren für die jeweilige neuronale Netzwerkschicht, welche durch die PEs 105a bis i implementiert werden soll, konfiguriert wird. Eine beispielhafte Implementierung der Tensordatenverteilungseinheit 130 ist in der US-Patentanmeldung Nr. 16/456,707 , eingereicht am 28. Juni 2019, beschrieben.
  • Die möglichen Tensorverarbeitungsvorlagen sehen verschiedene Weisen zum Aufgliedern eines Gesamttensorvorgangs vor, der durch das konfigurierbare Prozessorelementarray 100 zum Implementieren einer jeweiligen neuronalen Netzwerkschicht ausgeführt werden soll, sodass der Gesamttensorvorgang durch die Kombination von PEs 105a bis i, die im konfigurierbaren Prozessorelementarray 100 erzielt werden kann. Ein derartiger beispielhafter Gesamttensorvorgang 200, der durch das konfigurierbare Prozessorelementarray 100 zum Implementieren einer jeweiligen neuronalen Netzwerkschicht ausgeführt werden soll, ist in 2 dargestellt. Das Beispiel von 2 führt Bezeichnungen zur Verwendung durchwegs in der vorliegenden Offenbarung ein.
  • Der beispielhafte Tensorvorgang 200 entspricht einer neuronalen Netzwerkschicht, in der ein Satz von Eingabedaten 205, auch als Eingabeaktivierungsdaten 205 oder Eingabeaktivierungen 205 bezeichnet, mit einem Satz von Filterkernels 210, auch als Filtergewichtungen 210 oder einfach Gewichtungen 210 bezeichnet, zum Erzeugen eines Satzes von Ausgabedaten 215, auch als Ausgabeaktivierungsdaten 215 oder Ausgabeaktivierungen 215 bezeichnet, gefaltet werden soll. Im dargestellten Beispiel sind die Eingabeaktivierungen 205 in Arrays mit IX Elementen in der X-Dimension, Iy Elementen in der Y-Dimension und Ic verschiedenen Kanälen von Eingabeaktivierungsdaten angeordnet. Die Dimensionen Ix, Iy, und Ic können dieselben oder unterschiedlich sein, und können jegliche(r) Wert(e) sein. Wenn die neuronale Netzwerkschicht, die dem Tensorvorgang 200 entspricht, beispielsweise eine Eingabeschicht (beispielsweise eine erste Schicht) eines neuronalen Bildverarbeitungsnetzwerks ist, können die Ix- und Iy-Dimensionen der Anzahl von Zeilen bzw. Spalten eines Eingabebilds entsprechen, und die Ic-Dimension kann der Anzahl von Kanälen von Bilddaten entsprechen, wie etwa 3 Kanäle für Bilddaten, die im Rot-Blau-Grün-Format (RGB-Format) dargestellt sind. Als anderes Beispiel können, wenn die neuronale Netzwerkschicht, die dem Tensorvorgang 200 entspricht, eine zwischenliegende Schicht (beispielsweise zweite Schicht) des neuronalen Bildverarbeitungsnetzwerks ist, die Ix- und Iy-Dimensionen der Anzahl von Zeilen bzw. Spalten des Bilds, das verarbeitet wird, entsprechen, und die Ic-Dimension kann der Anzahl von verschiedenen Filtern entsprechen, wie etwa 64 Filter oder eine andere Anzahl von Filtern, die mit den Eingabeaktivierungsdaten der vorherigen neuronalen Netzwerkschicht gefaltet sind.
  • Im dargestellten Beispiel werden die Eingabeaktivierungsdaten 205 mit Dimensionen Ix mal Iy mal Ic durch einen Satz von Filtern 210 verarbeitet. Im dargestellten Beispiel sind die Filter 210 in Arrays mit Fx Elementen (beispielsweise Gewichtungen) in der X-Dimension, Fy Elementen (beispielsweise Gewichtungen) in der Y-Dimension und Ic Elementen in der Kanaldimension angeordnet, wobei die Letzteren dieselben wie die Anzahl von Kanälen Ic der Eingabeaktivierungsdaten sind. Beispielsweise können die Fx- und Fy-Dimensionen jede 3 und 3 entsprechen, sodass ein 3-mal-3-Filter 210 mit jedem Eingabeaktivierungsdatenelement und seinen angrenzenden Nachbarn gefaltet ist. Natürlich können die Filter 210 andere Werte für die Fx- und Fy-Dimensionen aufweisen, und die Fx- und Fy-Dimensionen können dieselben sein oder voneinander abweichen.
  • Der beispielhafte Tensorvorgang 200 von 2 beinhaltet Falten von jedem der Filter 210 mit den Eingabeaktivierungsdaten 205 und Summieren (Akkumulieren) der resultierenden Daten über die Kanaldimension (Ic) zum Erzeugen der Ausgabeaktivierungsdaten 215. Beispielsweise wird ein jeweiliges Filter 210a der Filter mit einem jeweiligen Anteil 220 der Eingabeaktivierungsdaten 205 zentriert an einem jeweiligen Eingabeaktivierungsdatenelement 225 gefaltet. Das Ergebnis für jede der Kanaldimensionen wird zum Erzeugen eines Ausgabeaktivierungsdatenelements 230 an einer Arrayposition, die der Arrayposition des Eingabeaktivierungsdatenelements 225 entspricht, wie gezeigt, summiert (beispielsweise entsprechend Akkumulation über die Ic-Dimensionen). Im dargestellten Beispiel erzeugt das Falten von jedem einen der Filter 210 mit den Eingabeaktivierungsdaten 205 die Ausgabeaktivierungsdaten 215, die in Arrays mit Ox Elementen in der X-Dimension, Oy Elementen in der Y-Dimension und Oc verschiedenen Kanälen von Ausgabeaktivierungsdaten angeordnet sind. Die Ox- und Oy-Dimensionen können denselben Wert oder unterschiedliche Werte aufweisen und können dieselben wie die IX- und Iy-Dimensionen sein oder davon abweichen. Die Oc-Dimension kann der Anzahl von verschiedenen Filtern 210 entsprechen, die mit den Eingabeaktivierungsdaten 205 gefaltet werden.
  • Andere Terminologie, die in der vorliegenden Offenbarung verwendet wird, lautet wie folgt. On bezieht sich auf die Batchgröße. Wenn das konfigurierbare Prozessorelementarray 100 beispielsweise ein konvolutionelles neuronales Netzwerk zum Verarbeiten von Bildern implementieren soll, dann bezieht sich On auf die Anzahl von Bildern, die parallel verarbeitet werden sollen. Die Abkürzung „IF“ wird zur Bezugnahme auf Eingabeaktivierungsdaten verwendet, die Abkürzung „FL“ wird zur Bezugnahme auf Filterdaten (beispielsweise Gewichtungen) verwendet, und die Abkürzung „OF“ wird zur Bezugnahme auf Ausgabeaktivierungsdaten verwendet. Zudem wird der Begriff „Psum“ zur Bezugnahme auf ein Teilergebnis im Faltvorgang verwendet und ist untenstehend detaillierter beschrieben.
  • Beispielhafte Tensorverarbeitungsvorlagen 305, 310 und 315 und entsprechende beispielhafte Datenflusszeitpläne 405, 410 und 415, die durch die beispielhaften PEs 105a bis i implementiert werden sollen, welche im konfigurierbaren Prozessorelementarray 100 von 1 enthalten sind, sind in 3 bzw. 4 dargestellt. Die Tensorverarbeitungsvorlage 305 ist ein Beispiel einer Vektor-Vektor-Tensorverarbeitungsvorlage. Die Tensorverarbeitungsvorlage 310 ist ein Beispiel einer Vektor-Matrix-Tensorverarbeitungsvorlage. Die Tensorverarbeitungsvorlage 315 ist ein Beispiel einer Matrix-Matrix-Tensorverarbeitungsvorlage. Der Datenflusszeitplan 405 stellt ein Abbilden eines Abschnitts eines beispielhaften Tensorvorgangs, der eine jeweilige Schicht eines beispielhaften konvolutionellen neuronalen Netzwerks implementiert, auf eines der PEs 105a bis i gemäß der Vektor-Vektor-Tensorverarbeitungsvorlage 305 dar. Der Datenflusszeitplan 410 stellt ein Abbilden eines Abschnitts eines beispielhaften Tensorvorgangs, der eine jeweilige Schicht eines beispielhaften konvolutionellen neuronalen Netzwerks implementiert, auf eines der PEs 105a bis i gemäß der Vektor-Matrix-Tensorverarbeitungsvorlage 310 dar. Der Datenflusszeitplan 415 stellt ein Abbilden eines Abschnitts eines beispielhaften Tensorvorgangs, der eine jeweilige Schicht eines beispielhaften konvolutionellen neuronalen Netzwerks implementiert, auf eines der PEs 105a bis i gemäß der Matrix-Matrix-Tensorverarbeitungsvorlage 315 dar. Andere Tensorverarbeitungsvorlagen, wie etwa eine Skalar-Vektor-Verarbeitungsvorlage, können durch das beispielhafte konfigurierbare Prozessorelementarray 100 unterstützt werden.
  • Die dargestellten Beispiele von 3 und 4 verwenden die Bezeichnung „DTd/j/k“ zum Definieren einer bestimmten Tensorverarbeitungsvorlage. In dieser Bezeichnung bezieht sich „DT“ auf den Datentyp, der „I“ für Eingabeaktivierungsdaten, die durch das PE gemäß der definierten Vorlage verarbeitet werden sollen, oder „O“ für Ausgabeaktivierungsdaten, die durch das PE gemäß der definierten Vorlage erzeugt werden sollen, sein kann. Die Bezeichnung „d“ stellt Dimensionen dar, die entweder „x“, „y“ oder „c“ sein können. Die Bezeichnung „j“ stellt die Anzahl von Elementen des Datentyps „DT“ in der Dimension „d“ dar, die durch ein jeweiliges PE gemäß der definierten Vorlage verarbeitet werden sollen. Die Bezeichnung „k“ stellt die Anzahl von PEs dar, die beim Verarbeiten/Erzeugen der Elemente des Datentyps „DT“ in der Dimension „d“ zum Erbringen der Gesamttensorvorgangsausgabe für die jeweilige neuronale Netzwerkschicht, die gemäß der definierten Vorlage implementiert wird, beteiligt sein sollen. Im dargestellten Beispiel wird die Bezeichnung „k“ auf einen Strich (-) eingestellt, wenn sie sich auf die Vorlage bezieht, die auf einen einzelnen der PEs 105a bis i angewendet wird. Im dargestellten Beispiel wird, wenn ein bestimmter Datentyp und/oder eine bestimmte Dimension ausgelassen ist, vorausgesetzt, dass die Vorlage spezifiziert, dass das PE ein (1) Element dieses Datentyps in dieser Dimension verarbeiten/erzeugen soll.
  • Beispielsweise ist die Tensorverarbeitungsvorlage 305 des dargestellten Beispiels durch die Bezeichnungen „Ox/1/-“, „Oy/1/-“ und „Ic/64/- ‟ definiert, was spezifiziert, dass ein PE, das gemäß dieser Vorlage konfiguriert ist, 64 Elemente von IF-Daten in der Ic-Dimension zum Erzeugen von OF-Daten an einer (1) Position in den Ox- und Oy-Dimensionen verarbeiten soll. Die Tensorverarbeitungsvorlage 310 des dargestellten Beispiels ist durch die Bezeichnungen „Oc/8/-“ und „Ic/8/-“ definiert, was spezifiziert, dass ein PE, das gemäß dieser Vorlage konfiguriert ist, acht (8) Elemente von IF-Daten in der Ic-Dimension zum Erzeugen von OF-Daten an acht (8) Positionen in der Oc-Dimension an einer (1) Position in den Ox- und Oy-Dimensionen verarbeiten soll. Die Tensorverarbeitungsvorlage 315 des dargestellten Beispiels ist durch die Bezeichnungen „Ox/8/-“, „Ic/8/-“ und „Oc/8/-“ definiert, was spezifiziert, dass ein PE, das gemäß dieser Vorlage konfiguriert ist, Elemente von IF-Daten an acht (8) Positionen der Ox-Dimension und acht (8) Positionen der Ic-Dimension zum Erzeugen von OF-Daten an acht (8) Positionen in der Oc-Dimension und einer (1) Position in den Ox- und Oy-Dimensionen verarbeiten soll.
  • Wie durch den beispielhaften Datenflusszeitplan 405 dargestellt, kann die Vektor-Vektor-Tensorverarbeitungsvorlage 310 zum Konfigurieren von jeweiligen der PEs 105a bis i zum Implementieren von Datenflusszeitplänen zum Ausführen von jeweiligen Abschnitten eines Tensorvorgangs benutzt werden, die Multiplizieren eines Vektors mit einem Vektor entsprechen, wie etwa Zeitpläne, die 1 Element von Daten an einer jeweiligen Ox- und Oy-Position durch Akkumulieren einer Anzahl (beispielsweise 64 im Beispiel) von Elementen von gefilterten IF-Daten (beispielsweise den IF-Daten, die mit den entsprechenden FL-Daten multipliziert werden) über die Ic-Dimension an dieser Ox- und Oy-Position errechnen. Wie durch den beispielhaften Datenflusszeitplan 410 dargestellt, kann die Vektor-Matrix-Tensorverarbeitungsvorlage 310 zum Konfigurieren von jeweiligen der PEs 105a bis i zum Implementieren von Datenflusszeitplänen zum Ausführen von jeweiligen Abschnitten eines Tensorvorgangs benutzt werden, die Multiplizieren eines Vektors mit einer Matrix entsprechen, wie etwa Zeitpläne, die eine erste Anzahl (beispielsweise 8 im Beispiel) Elemente von Daten in der Oc-Dimension an einer jeweiligen Ox- und Oy-Position durch Akkumulieren einer zweiten (beispielsweise 8 im Beispiel) von Elementen von IF-Daten über die Ic-Dimension an dieser Ox- und Oy-Position nach dem Filtern mit entsprechenden FL-Daten aus der ersten Anzahl von Filtern errechnen. Wie durch den beispielhaften Datenflusszeitplan 415 dargestellt, kann die Matrix-Matrix-Tensorverarbeitungsvorlage 315 zum Konfigurieren von jeweiligen der PEs 105a bis i zum Implementieren von Datenflusszeitplänen zum Ausführen von jeweiligen Abschnitten eines Tensorvorgangs benutzt werden, die Multiplizieren einer Matrix mit einer Matrix entsprechen, wie etwa Zeitpläne, die eine erste Anzahl (beispielsweise 8 im Beispiel) von Elementen von Daten in der Oc-Dimension an jeder einer zweiten Anzahl (beispielsweise 8 im Beispiel) von Positionen in den OX-Dimensionen, jedoch an derselben Oy-Position, durch Akkumulieren einer dritten Anzahl (beispielsweise 8 im Beispiel) von Elementen von IF-Daten über die Ic-Dimension an diesen Ox-Positionen und der Oy-Position nach dem Filtern mit entsprechenden FL-Daten aus der dritten Anzahl von Filtern errechnen.
  • Nachdem ein bestimmter Datenfluss für eine konvolutionelle neuronale Netzwerkschicht auf eine der möglichen Tensorvorlagen abgebildet wurde, werden die Makroebenenanweisungen, die durch die Bezeichnung „DTd/j/k“ dargestellt sind, in mehrere Mikroanweisungen aufgegliedert (beispielsweise durch einen Compiler), die durch ein jeweiliges PE unter Benutzung einer flexiblen PE-Pipeline ausgeführt werden können. 5 zeigt eine beispielhafte Betriebspipeline 500, die durch PEs im konfigurierbaren Prozessorelementarray 100 von 1 implementiert ist. Die beispielhafte Pipeline 500 stellt die Aufgliederung der Makrogranularitätsanweisungen in mehrfache einfachere Mikroanweisungen, wie etwa Konfigurieren, Laden, Errechnen, Akkumulieren und Leeren, dar. Im dargestellten Beispiel kann derselbe Satz von Mikroanweisungen zum Implementieren von verschiedenen Makroanweisungen benutzt werden. Um dies zu erzielen, variieren die Felder innerhalb der Mikroanweisungen zum Unterbringen der verschiedenen möglichen Tensorverarbeitungsvorlagen (beispielsweise Vektor-Vektor-Tensorverarbeitungsvorlagen, Vektor-Matrix- Tensorverarbeitungsvorlagen, Matrix-Matrix- Tensorverarbeitungsvorlagen, Skalar-Vektor-Tensorverarbeitungsvorlagen usw.).
  • Unter erneuter Bezugnahme auf 1 führt das beispielhafte konfigurierbare Prozessorelementarray 100 Rechnungen auf IF-, FL- und OF-Tensordaten (sowie Psum-Tensordaten, wie unten beschrieben) basierend auf einem Datenflusszeitplan aus, der für eine aktuelle Schicht eines konvolutionellen neuronalen Netzwerks konfiguriert ist, wobei der Datenflusszeitplan in eine der Vektor-Vektor-, Vektor-Matrix-, Matrix-Matrix- oder Skalar-Vektor-Tensorverarbeitungsvorlagen gegossen ist. Wie oben beschrieben, enthält das konfigurierbare Prozessorelementarray 100 die Konfigurationsregister 120 zum Annehmen von konfigurierbaren Deskriptoren, die den Datenfluss entsprechend einer eines Satzes von möglichen Tensorverarbeitungsvorlagen steuern. Das konfigurierbare Prozessorelementarray 100 enthält außerdem das Array von PEs 105a bis i, das als ein NxN Gitter von individuellen PEs 105a bis i angeordnet ist (wobei beispielsweise N = 16 oder ein anderer Wert ist).
  • Das konfigurierbare Prozessorelementarray 100 des dargestellten Beispiels enthält ferner Spaltenpufferspeicher 135a bis c zum Puffern von Daten zwischen den SRAM-Bänken des Speichers 125 und dem lokalen Registerdateispeicher innerhalb der PEs 105a bis i, wobei jeweilige der Spaltenpuffer 135a bis c mit entsprechenden der Spalten 115a bis c der PEs 105a bis i assoziiert sind. Im dargestellten Beispiel enthalten die Speicherpuffer 135a bis c außerdem jeweilige beispielhafte Ausgabedatenprozessoren 138a bis c, die zum Ausführen von Rundungs- und/oder gleichgerichteten linearen Einheitsvorgängen (ReLU-Vorgängen) auf Daten imstande sind, welche von den PEs 105a bis i zum Speichern im Speicher 135 ausgegeben werden. Das konfigurierbare Prozessorelementarray 100 des dargestellten Beispiels enthält beispielhafte dedizierte Busse 140a bis c zum Befördern von IF-, FL- bzw. OF-Tensordaten zwischen dem Array von PEs 105a bis i und den Spaltenpuffer 135a bis c.
  • Wie im dargestellten Beispiel gezeigt, enthalten jeweilige der PEs 105a bis i beispielhafte lokale Registerdateispeicher (RF-Speicher) 145a bis c zum Speichern von IF-, FL- bzw. OF-Tensordaten für dieses PE. Jeweilige der PEs 105a bis i enthalten außerdem eine Multiplizier-und-Akkumuliereinheit (MAC-Einheit) 150 (die pipelinegeleitet sein kann) zum Ausführen von Multiplikations- und Akkumulationsvorgängen auf die IF- und FL-Daten, die durch dieses PE verarbeitet werden sollen, eine beispielhafte elementweise Recheneinheit 155 zum Ausführen von elementweisen Vorgängen auf IF-Daten, die durch dieses PE verarbeitet werden sollen, und eine beispielhafte Max-Pooling-Einheit 160 mit einem beispielhaften Pooler-Register 165 zum Ausführen von Max-Pooling-Vorgängen zum Erzeugen von OF-Tensordaten, die mit diesem PE assoziiert sind. Jeweilige der PEs 105a bis i enthalten ferner (ein) Konfigurationsregister 170 und eine beispielhafte endliche Zustandsmaschine (FSM) 175. Die FSM 175 verwaltet (i) Laden von IF- und FL-Tensordaten aus dem RF-Speicher 145a bis b in die verschiedenen Recheneinheiten 150 bis 160 innerhalb des PE, (ii) Sequenzieren von Rechnung innerhalb einer jeweiligen Recheneinheit 150 bis 160, (iii) Vorsehen von Steuersignalen zur Akkumulation von Teilsummen innerhalb eines PE abhängig von einem konfigurierten Datenflusszeitplan, (iv) Vorsehen von Steuersignalen zum Überführen von Teilsummen-OF-Tensordaten zum und vom PE zur Akkumulation von Teilsummen über verschiedene Prozessiterationen und/oder über PEs hinweg, (v) Extrahieren von fertiggestellten OF-Tensordaten aus dem PE in die SRAM-Puffer des Speichers 135 über die Spaltenpuffer 135a bis c, wobei Rundungs- und/oder ReLU-Vorgänge zum Beschneiden der OF-Tensordaten von einer Größe (beispielsweise 32-Bit-Daten) auf eine andere (beispielsweise kleinere) Größe (beispielsweise 8 Bit) vor dem Speichern in die SRAMs des Speichers 125 zur nächsten Schichtrechnung stattfinden können.
  • Tabelle 1 unten stellt einen Beispielsatz von Deskriptorfeldern zum Unterstützen von flexiblen Datenflusszeitplänen durch Steuern der geeigneten Sequenzierung der verschiedenen Rechenphasen von Eingabetensordaten innerhalb der PEs 105a bis i gemäß einer oder einem Satz von möglichen Tensorverarbeitungsvorlagen dar. Tabelle 1
    Deskriptorfelder Beschreibungen
    Stride Stride-Parameter für eine jeweilige Netzwerkschicht
    IcPF Ic-Partitionsfaktor, zeigt an, wie viele PEs auf demselben Eingabekanal arbeiten
    PEColActv One-Hot-Codierung von aktiven PEs in einer Spalte
    PERowActv One-Hot-Codierung von aktiven PEs in einer Zeile
    OpPEColActv One-Hot-Codierung von aktiven Site-PEs für OF-Extraktion in einer Spalte
    OpPERowActv One-Hot-Codierung von aktiven Site-PEs für OF-Extraktion in einer Zeile
    TotalWrIFRF Gesamtzahl von Eingabeaktivierungstensordaten-Schreibvorgängen in IF-Registerdatei
    TotalWrFLRF Gesamtzahl von Gewichtungstensordaten-Schreibvorgängen in FL-Registerdatei
    StAddrIFRF Startadresse innerhalb IF RF für einen Rechenteilblock
    LenAddrIFRF Gesamtzahl von Punkten innerhalb IF RF, auf die für einen Rechenteilblock zugegriffen wird
    Reset2StartIF Boolescher Wert zum Anzeigen, ob IF RF-Adresse auf Startadresse zurückgesetzt werden muss
    IncCyclIFRF Gesamtzahl von Zyklen, nach denen IF RF-Zugriffsadresse inkrementiert werden muss
    StAddrFLRF Startadresse innerhalb FL RF für einen Rechenteilblock
    LenAddrFLRF Gesamtzahl von Punkten innerhalb FL RF, auf die für einen Rechenteilblock zugegriffen wird
    Reset2StartFL Boolescher Wert zum Anzeigen, ob FL RF-Adresse auf Startadresse zurückgesetzt werden muss
    IncCycFLRF Gesamtzahl von Zyklen, nach denen FL RF-Zugriffadresse inkrementiert werden muss
    StAddrOFRF Startadresse innerhalb OF RF für einen Rechenteilblock
    LenAddrOFRF Gesamtzahl von Punkten innerhalb OF RF, auf die für einen Rechenteilblock zugegriffen wird
    Reset2StartOF Boolescher Wert zum Anzeigen, ob OF RF-Adresse auf Startadresse zurückgesetzt werden muss
    IncCycOFRF Gesamtzahl von Zyklen, nach denen OF RF-Zugriffsadresse inkrementiert werden muss
    BlocksPERF Gesamtzahl von Teilrechenblöcken in RF für eine Makroblockrechenrunde
    NumPEComp Gesamtzahl von Einheitsebenenrechnungen in einer Makroblockrechenrunde
    IcMapDirX Boolescher Wert zum Anzeigen, ob dieselbe Ic über PEs innerhalb einer Zeile hinweg abgebildet ist
    IcMapDirY Boolescher Wert zum Anzeigen, ob dieselbe Ic über PEs innerhalb einer Spalte hinweg abgebildet ist
    NumlncStAddr Anzahl von verschiedenen Startadressen von IFRF beim Verarbeiten von verschiedenen Fx und Fy
    IncStAddrPerBlockIFRF Inkrementieren der Startadresse des IF RF beim Verarbeiten von verschiedenen Fx und Fy (Konvolutionsfilterdimension Fx oder Fy > 1)
    StepIFRF Adresseninkrementierungsschritt beim Zugreifen auf IF RF
    ExtPsum Boolescher Wert zum Anzeigen, ob der Zeitplan externe Psum-Akkumulation erfordert
    OFGenStartNthBlock Gesamtzahl von Makroblockrechnung für einen Erzeugungsblock
    PsumLoadStartNthBlock Gesamtzahl von Makroblockrechnung bis Neuladen von vorher errechneter Psum
    LinesPsumPerLoad Gesamtzahl von Zeilen in einer Psum-Laderunde
    LinesTotalPsum Gesamtzahl von Zeilen, die zum Neuladen von gesamter externer Psum geladen werden sollen
    Relu Boolescher Wert zum Anzeigen, ob ReLU für eine bestimmte Schicht aktiviert werden soll
    ReluThreshold ReLU-Schwellenwert, der benutzt werden soll, falls ReLU für die Schicht aktiviert ist
    EltWise Boolescher Wert zum Anzeigen, ob elementweiser Vorgang für die Schicht ausgeführt werden soll
    Drain2FLSRAM Boolescher Wert zum Anzeigen von Leerung von 2. Operanden zu FL SRAM während Eltwise-Vorgang
    Maxpool Boolescher Wert zum Anzeigen, ob Maxpool-Vorgang für die Schicht aktiviert werden soll
  • Die Deskriptorfelder von Tabelle 1 werden auf jedes der PEs angewendet, die im konfigurierbaren Prozessorelementarray 100 enthalten sind. Von daher ist, obgleich jedes der PEs, das aktiv ist, auf verschiedene Blöcke der Gesamtmenge von IF- und FL-Daten für eine jeweilige Netzwerkschicht einwirkt, das Volumen von Daten, auf die durch jedes der PEs, das aktiv ist, eingewirkt wird, ähnlich.
  • In Tabelle 1 ist das Stride-Deskriptorfeld ein Parameter des konvolutionellen neuronalen Netzwerks. Das IcPF-Deskriptorfeld ist der Ic-Partitionsfaktor, der anzeigt, wie viele PEs an Partitionen der Daten in einer jeweiligen Ic-Dimension arbeiten. Daher zeigt dieses Feld an, wie viele PEs Teilsummen aufweisen, die in der Ic-Dimension akkumuliert werden müssen. Das PEColActv-Deskriptorfeld zeigt an, welche der Spalten 115a bis c der PEs 105a bis i im konfigurierbaren Prozessorelementarray 100 aktiv sind. Das PERowActv-Deskriptorfeld zeigt an, welche Zeilen 110a bis c der PEs 105a bis i im konfigurierbaren Prozessorelementarray 100 aktiv sind. Das OpPEColActv-Deskriptorfeld zeigt an, welche der Spalten 115a bis c die Ausgabe für die aktuelle Netzwerkschicht, die implementiert wird, aufweisen. Das OpPERowActv-Deskriptorfeld zeigt an, welche die Ausgabe für die aktuelle Netzwerkschicht, die implementiert wird, aufweisen. Beispielsweise zeigt das IcPF-Deskriptorfeld es an, wenn die Ic-Dimension über mehrfache PEs 105a bis i hinweg partitioniert ist. In einem derartigen Szenario erzeugen manche der PEs 105a bis i nur Teilsummenbeiträge zu den Ausgabedaten, und die OpPEColActv- und OpPERowActv-Deskriptorfelder zeigen an, welche PEs 105a bis i die finalen Ausgabedaten aufweisen, nachdem die Teilsummen akkumuliert wurden.
  • In Tabelle 1 zeigt das TotalWrIFRF-Deskriptorfeld an, wie viele IF-Datenpunkte in ein PE 105a bis i geschrieben werden sollen. Das TotalWrFLRF-Deskriptorfeld zeigt an, wie viele FL-Datenpunkte in ein PE 105a bis i geschrieben werden sollen. Das TotalWrOFRF-Deskriptorfeld zeigt an, wie viele OF-Datenpunkte in ein PE 105a bis i geschrieben werden sollen.
  • In Tabelle 1 zeigt das StAddrIFRF-Deskriptorfeld die Startadresse des IFRF-Speichers 145a an. Das LenAddrIFRF-Deskriptorfeld zeigt an, auf wie viele IF-Datenpunkte während eines Rechenzyklus zugegriffen werden soll. Betrachten wir beispielsweise die Tensorverarbeitungsvorlage 315, bei der 8 Filterkanäle (FL) vorliegen und jeder Kanal 8 IF-Datenpunkte in einer anderen Ix-Dimension verarbeiten soll. Das LenAddrIFRF-Deskriptorfeld würde anzeigen, dass jede Gruppe von 8 IF-Datenpunkten durch einen anderen Filterkanal verarbeitet würde. Das Reset2StartIF-Deskriptorfeld zeigt an, ob das PE 105a bis i zur Startadresse im IF RF-Speicher 145a zurückgesetzt werden soll, wenn der Wert des LenAddrIFRF-Deskriptorfelds erreicht wird, oder ob das PE 105a bis i weiter durch den IF RF-Speicher 145a inkrementieren soll. Das IncCycIFRF-Deskriptorfeld zeigt die Anzahl von Rechenzyklen an, nach denen die Startadresse des IF RF-Speichers 145a inkrementiert werden soll.
  • Gleicherweise zeigt das StAddrFLRF-Deskriptorfeld die Startadresse des FL RF-Speichers 145b an. Das LenAddrFLRF-Deskriptorfeld zeigt an, auf wie viele FL-Datenpunkte während eines Rechenzyklus zugegriffen werden soll. Das Reset2StartFL-Deskriptorfeld zeigt an, ob das PE 105a bis i zur Startadresse im IF RF-Speicher 145a zurückgesetzt werden soll, wenn der Wert des LenAddrFLRF-Deskriptorfelds erreicht wird, oder ob das PE 105a bis i weiter durch den FL RF-Speicher 145b inkrementieren soll. Das IncCycFLRF-Deskriptorfeld zeigt die Anzahl von Rechenzyklen an, nach denen die Startadresse des FL RF-Speichers 145b inkrementiert werden soll.
  • Gleicherweise zeigt das StAddrOFRF-Deskriptorfeld die Startadresse des OF RF-Speichers 145c an. Das LenAddrOFRF-Deskriptorfeld zeigt an, auf wie viele OF-Datenpunkte während eines Rechenzyklus zugegriffen werden soll. Das Reset2StartOF-Deskriptorfeld zeigt an, ob das PE 105a bis i zur Startadresse im OF RF-Speicher 145c zurückgesetzt werden soll, wenn der Wert des LenAddrOFRF-Deskriptorfelds erreicht wird, oder ob das PE 105a bis i weiter durch den OF RF-Speicher 145c inkrementieren soll. Das IncCycOFRF-Deskriptorfeld zeigt die Anzahl von Rechenzyklen an, nach denen die Startadresse des OF RF-Speichers 145c inkrementiert werden soll.
  • In Tabelle 1 zeigt das BlocksPERF-Deskriptorfeld an, wie viele Blöcke von Rechenarbeit durch ein PE 105a bis i ausgeführt werden, wobei ein Arbeitsblock dem Errechnen von 1 Ausgabepunkt (oder 1 Teilsumme, die mit einem jeweiligen Ausgabepunkt assoziiert ist) entspricht. Das NumPEComp-Deskriptorfeld zeigt an, wie viele Zyklen zum Verarbeiten des Volumens von Daten benötigt werden, die in das PE 105a bis i zum Verarbeiten gemäß der konfigurierten Tensorverarbeitungsvorlage gebracht werden. Beispielsweise nutzt die Vektor-Vektor-Tensorverarbeitungsvorlage 305, die 64 Elemente von IF-Daten in der Ic-Dimension mit 64 Elementen von FL-Daten zum Erzeugen von OF-Daten an 1 Position in der Ox- und Oy-Dimension verarbeiten soll, 64 Zyklen, was den 64 Multiplizieren- und-Akkumulieren-Vorgängen entspricht, die zum Multiplizieren der 64 Elemente von IF-Daten in der Ic-Dimension mit 64 Elementen von FL-Daten und Akkumulieren der Ergebnisse verwendet werden.
  • In Tabelle 1 ist das IcMapDirX-Deskriptorfeld ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob die Partitionierung einer IC-Dimension über die Zeilen 110a bis c der PEs 105a bis i hinweg abgebildet ist. Das IcMapDirY-Deskriptorfeld ist ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob die Partitionierung einer IC-Dimension über die Spalten 115a bis c der PEs 105a bis i hinweg abgebildet ist. Diese Deskriptorfelder zeigen an, wie Teilsummen unter den PEs 105a bis i geteilt werden sollen.
  • In Tabelle 1 werden das NumIncStAddr-Deskriptorfeld, das IncStAddrPerBlockIFRF-Deskriptorfeld und das StepIFRF-Deskriptorfeld zum Spezifizieren benutzt, wie FL-Daten mit den Fx- und Fy-Dimensionen über die IF-Daten zum Erzeugen der OF-Daten verschoben werden sollen.
  • In Tabelle 1 ist das ExtPsum-Deskriptorfeld ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob die konfigurierte Tensorverarbeitungsvorlage Teilsummen beinhaltet. Wenn der Wert Falsch ist, dann kann jedes PE autonom zum Ausgeben eines jeweiligen OF-Datenpunkts arbeiten. Wenn der Wert Wahr ist, dann werden teilsummen zum Erzeugen der OF-Daten benutzt.
  • In Tabelle 1 spezifizieren das OFGenStartNthBlock-Deskriptorfeld und das PsumLoadStartNthBlock-Deskriptorfeld die Anzahl von Malen, die die konfigurierbare Tensorverarbeitungsvorlage zum Erzeugen eines OF-Datenpunkts für die neuronale Netzwerkschicht, die implementiert wird, ausgeführt werden soll, und wann vorher errechnete Teilsummen zur weiteren Akkumulation neu geladen werden sollen. Wenn beispielsweise 256 Ic-Dimensionen in der aktuellen Netzwerkschicht vorliegen und die konfigurierte Tensorverarbeitungsvorlage 64 Ic-Dimensionen verarbeitet, dann soll die konfigurierte Tensorverarbeitungsvorlage 4 Mal ausgeführt werden, um die 256 Ic-Dimensionen alle zum Bestimmen eines OF-Datenpunkts für die neuronale Netzwerkschicht auszuführen.
  • In Tabelle 1 spezifiziert das LinesPsumPerLoad-Deskriptorfeld die Größe (beispielsweise in SRAM-Zeilen) der Psums, die zum Akkumulieren von Teilsummen basierend auf der konfigurierten Tensorverarbeitungsvorlage geladen werden sollen. Das LinesTotalPsum-Deskriptorfeld spezifiziert die Anzahl von Psums, die zum Errechnen eines OF-Datenpunkts geladen werden soll.
  • In Tabelle 1 ist das Relu-Deskriptorfeld ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob der ReLU-Vorgang für die aktuelle neuronale Netzwerkschicht, die implementiert wird, aktiv ist. Das ReluThreshold-Deskriptorfeld spezifiziert die Schwelle, die durch den ReLU-Vorgang benutzt werden soll.
  • In Tabelle 1 ist das EltWise-Deskriptorfeld ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob der elementweise Vorgang für die aktuelle neuronale Netzwerkschicht, die implementiert wird, aktiv ist. Das Drain2FLSRAM-Deskriptorfeld wird mit dem elementweisen Vorgang benutzt.
  • In Tabelle 1 ist das Maxpool-Deskriptorfeld ein Boolescher Wert (beispielsweise Wahr oder Falsch) zum Anzeigen, ob der Maxpool-Vorgang für die aktuelle neuronale Netzwerkschicht, die implementiert wird, aktiv ist.
  • Ein Blockdiagramm einer beispielhaften Implementierung von einem der PEs 105a bis i von 1 ist in 6 dargestellt. Der Einfachheit halber stellt das Blockdiagramm von 6 eine beispielhafte Implementierung des PE 105a dar. Die beispielhafte Implementierung von 6 könnte jedoch zum Implementieren von jeglichem der PEs 105a bis i verwendet werden. Das beispielhafte PE 105a von 6 enthält den Satz von Konfigurationsregistern 170 zum Annehmen von Werten der Deskriptoren, die in Tabelle 1 gezeigt sind und am Anfang jeder Schicht des konvolutionellen neuronalen Netzwerks, die durch das PE 105a verarbeitet wird, aktualisiert werden. Im dargestellten Beispiel wird der Satz von Deskriptorfeldern, die auf die Konfigurationsregister 170 angewendet werden, über den Konfigurationslader 122 zum Implementieren eines Datenflusszeitplans, basierend auf der Tensorverarbeitungsvorlage, zum Verarbeiten der IF- und FL-Tensordaten für eine aktuelle Schicht (L) des konvolutionellen neuronalen Netzwerks, die implementiert wird, programmiert. Beispielsweise wird der Satz von programmierten Deskriptorfeldern durch die FSM 175 zum Ausführen von Datenumleitung während Lade-, Rechen- und Leervorgängen, die auf die Eingabetensordaten ausgeführt werden sollen, benutzt. Von daher sind die Konfigurationsregister 170 in jeweiligen der PEs 105a bis i ein Beispiel von Mitteln zum Konfigurieren des Arrays von PEs 105a bis i basierend auf mehreren Deskriptoren zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer von mehreren Tensorverarbeitungsvorlagen entspricht.
  • Das beispielhafte PE 105a von 6 enthält außerdem die FSM 175. Im dargestellten Beispiel enthält die FSM 175 interne Zähler und Logik zum Erzeugen von (i) Lese- und Schreibsteuersignalen zum Betreiben der IF-, FL- und OF-Registerdateien 145a bis c, (ii) Multiplexersteuersignalen zum Leiten von Daten von den Registerdateien 145a bis c in die geeignete der MAC-Recheneinheit 150, der elementweisen Recheneinheit 155 oder der Max-Pooling-Einheit 160 basierend auf der Vorgangsart (beispielsweise Multiplizieren und Akkumulieren für die MAC-Einheit 150, Vergleich für die Max-Pooling-Einheit 160 usw.), die durch das PE 105a auf die Tensordaten für die aktuelle Schicht des konvolutionellen neuronalen Netzwerks, die implementiert werden soll, ausgeführt werden soll. Im dargestellten Beispiel benutzt die FSM 170 zum Erzeugen der Lese- und Schreibsteuersignale in IF-, FL- und OF-Registerdateien 145a bis c die „StAddr<IF/FL/OF>RF“-, „LenAddr<IF/FL/OF>RF“-, „Reset2Start<IF/FL/OF“-, „IncCyc<IF/FL/OF>RF“-Deskriptorfelder zur Erzeugung von relevanten Steuersignalen. Intern verfolgen Zähler ifcount, wcount und ofcount die Adressen/Indizes für die IF-, FL-, OF-Registerdateien 145a bis c, die abhängig von der Anzahl von Eingabeaktivitäten und -gewichtungen (durch das „LenAddrIF/FL>RF“-Deskriptorfeld), welche zum Errechnen jeden OF-Punkts (oder pSum) während eines Rechenblocks erforderlich sind, entweder inkrementiert oder zurückgesetzt werden. Die Anzahl von Blöcken (durch das „BlocksPERF“-Deskriptorfeld eingestellt) bestimmt die Gesamtanzahl von Punkten (oder pSums), die in die OF-Registerdatei 145c geschrieben werden sollen. Der Datenfluss für eine jeweilige neuronale Netzwerkschicht (ob IF, FL oder OF stationär) wird intern durch die oben genannten Zähler gesteuert, zusammen mit einem Signal, das durch das „Reset2Start<IF/FL/OF>“-Deskriptorfeld erzeugt wird. Das „StAddr<IF/FL/OF>RF“-Deskriptorfeld verfolgt die Startadresse von jeder der Registerdateien 145a bis c für jeden neuen Rechenblock. Diese internen Strukturen und die assoziierte Steuerlogik, die in der FSM 170 enthalten sind, unterstützen flexible Datenflusszeitpläne im PE 105a.
  • Im dargestellten Beispiel von 6 enthält das PE 105a beispielhafte, gemeinsam benutzte Rechenlogik 605, die von der MAC-Recheneinheit 150, der elementweisen Recheneinheit 155 und der Max-Pooling-Recheneinheit 160 zum Erzielen von effizienter Hardwareressourcenwiederverwendung gemeinsam benutzt wird. Die beispielhafte, gemeinsam benutzte Rechenlogik 605 enthält einen beispielhaften Multiplizierer 610, einen beispielhaften Addierer 615 und einen beispielhaften Vergleicher 620, zusammen mit assoziierter beispielhafter Multiplexersteuerlogik 625, 630, 635, 640, 645, 650, 655 und 660 (kollektiv als Multiplexersteuerlogik 625 bis 660 bezeichnet) zum Leiten der geeigneten Tensordaten zu einem oder mehr der Elemente 610 bis 615 zum Implementieren der Verarbeitung der MAC-Recheneinheit 150, der elementweisen Recheneinheit 155 oder der Max-Pooling-Recheneinheit 160. Im dargestellten Beispiel soll die Standardkonfiguration der Multiplexersteuerlogik 625 bis 660 der gemeinsam benutzten Rechenlogik 605 die Max-Pooling-Recheneinheit 160 implementieren. Die Deskriptorfelder „Eltwise“ und „Maxpool“ werden zum Neukonfigurieren der gemeinsam benutzten Rechenlogik 605 zum Implementieren der elementweisen Recheneinheit 155 bzw. der Max-Pool-Recheneinheit 160 benutzt.
  • Das beispielhafte PE 105a von 6 enthält lokalen RF-Speicher 145a bis c. Das dargestellte Beispiel enthält drei RFs 145a bis c zum Speichern von IF-, FL- bzw. OF-Tensordaten. Im dargestellten Beispiel ist jeder der RFs 145a bis c durch eine Gruppe von 1-Lese-1-Schreib-Registern implementiert, die Lesen aus einem Register und Schreiben in ein Register gleichzeitig unterstützen. Im dargestellte Beispiel sind die Tensordaten , die in den IF- und FL RFs 145a bis b gespeichert sind, 8 Bit breit (obgleich andere beispielhafte Implementierungen andere Breiten unterstützen können), und die Tensordaten, die im OF RF 145c gespeichert sind, sind 32 Bit breit (obgleich andere beispielhafte Implementierungen andere Breiten unterstützen können), um ein Teilsummenakkumulationsmerkmal für Datenflusszeitpläne unterzubringen, in denen Eingabekanäle nicht alle in einer/einem Verarbeitungsiteration/-block akkumuliert werden können und Teilsummen daher aus dem PE 105a gebracht und zu einem späteren Zeitpunkt zum Abschließen von finaler OF-Tensordatenrechnung zurückgebracht werden müssen.
  • Am Ausgang des beispielhaften IF RF 145a enthält die beispielhafte Multiplexerlogik 625 einen 1:3-Multiplexer zum Umleiten von IF-Tensordaten zu einer der MAC-Recheneinheit 150, der elementweisen Recheneinheit 155 oder der Max-Pooling-Recheneinheit 160. Am Ausgang des FL RF 145b enthält die beispielhafte Multiplexerlogik 630 einen 1:2-Multiplexer zum Umleiten von Tensordaten zu einer der MAC-Recheneinheit 150 oder der elementweisen Recheneinheit 155, da die Max-Pooling-Recheneinheit 160 nicht auf Daten einwirkt, die im FL RF 145b untergebracht sind. Am Eingang zum OF RF 145c enthält die beispielhafte Multiplexerlogik 635 einen 1:2-Multiplexer auf dem Schreibpfad zum OF RF 145c zum Speichern der Ausgabe von einer der MAC-Recheneinheit 150, der elementweisen Recheneinheit 155 oder der Max-Pooling-Recheneinheit 160. Zusätzlicher Speicher in der Form des Pooler-Registers 165 wird zum Speichern der Zwischenergebnisse der Max-Pooling-Recheneinheit 160 benutzt.
  • Das beispielhafte PE 105a von 6 ist zum Unterstützen sowohl von interner als auch externer Teilsummenakkumulation strukturiert. Das PE 105a kann eine Teilsumme von seinem benachbarten PE entweder in der horizontalen (pSumX) oder der vertikalen Richtung (pSumY) annehmen. In manchen Beispielen kann das PE 105a Teilsummen von anderen PEs in anderen Richtungen nicht annehmen. Die programmierbaren Deskriptorfelder, die auf die Konfigurationsregister 170 angewendet werden, können zum Spezifizieren der Richtung von interner Akkumulation über ein beispielhaftes „accum_dir“-Signal 665 benutzt werden. Ein beispielhaftes „accum_Nbr“-Steuersignal 670 wird zum Identifizieren benutzt, ob die Akkumulation von Teilsummen innerhalb des PE 105a oder über PEs hinweg erfolgt, die das PE 105a und ein zulassendes benachbartes PE enthalten. Für externe Teilsummenakkumulation ist ein Satz von Werten in einem „ext_pSum“-Register 675 gehalten, während der zweite Satz von Werten im OF RF 145c gespeichert ist. Ein beispielhaftes Multiplexersteuersignal „en_ext_pSum“ 680 wird zum Wählen zwischen interner Teilsummenakkumulation und externer Teilsummenakkumulation benutzt.
  • 7 bis 12 stellen beispielhafte Betriebsphasen, die durch das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 unterstützt werden, sowie beispielhafte zulässige Übergänge zwischen den Betriebsphasen dar, die für das konfigurierbare Prozessorelementarray 100 unterstützt werden. Wie im beispielhaften Zustandsübergangsdiagramm 700 von 7 gezeigt, beinhalten beispielhafte Betriebsphasen, die durch das konfigurierbare Prozessorelementarray 100 unterstützt werden, eine beispielhafte Konfigurationsphase 705, eine beispielhafte Ladephase 710, eine beispielhafte Rechenphase 715, eine beispielhafte Akkumulationsphase 720, eine beispielhafte externe Teilsummenakkumulationsphase 725 und eine beispielhafte Abrufphase 730 (auch als eine beispielhafte Leerphase 730) bezeichnet. In der Konfigurationsphase 705, von der ein Beispiel in 8 detaillierter dargestellt ist, werden Deskriptorwerte, die auf die Konfigurationsregister 120 des konfigurierbaren Prozessorelementarrays 100 für die aktuelle neuronale Netzwerkschicht, welche implementiert wird (sowie in manchen Beispielen die nachfolgenden neuronalen Netzwerkschichten), angewendet werden (oder in manchen Beispielen im Speicher 125 gespeichert werden), zu den Konfigurationsregistern 170 der PEs 105a bis i bewegt, und die FSMs 175 der PEs 105a bis i werden basierend auf diesen Deskriptoren konfiguriert. Beispielsweise werden Deskriptorwerte in die Konfigurationsregister 170 von jeweiligen der PEs 105a bis i geladen, die die Rechnung zu einem der möglichen Tensorverarbeitungsvorlagentypen (beispielsweise Vektor-Vektor, Vektor-Matrix, Matrix-Matrix, Skalar-Vektor usw.) leiten.
  • In der Ladephase 710, von der ein Beispiel in 9 detaillierter dargestellt ist, werden Tensordaten aus dem Speicher 125 in die RFs 145a bis c der PEs 105a bis i geladen. Beispielsweise werden IF-, FL- oder OF-Tensordaten aus dem Speicher 125 über die Spaltenpuffer 135a bis c in den lokalen RF-Speicher 145a bis c innerhalb jeweiliger der PEs 105a bis i überführt. In der Rechenphase 715, von der ein Beispiel in 10 detaillierter dargestellt ist, werden arithmetische Vorgänge (beispielsweise eines von MAC, elementweise oder Max-Pool) auf die Tensordaten ausgeführt, die in den RFs 145a bis c von jeweiligen der PEs 105a bis i gespeichert sind. Beispielsweise können jeweilige der PEs 105a bis i MAC-Vorgänge zum Erzeugen von Teilsummen (Psums) oder finalen OF-Daten für die aktuelle neuronale Netzwerkschicht, die implementiert wird, rechnen. Die interne Akkumulationsphase 720 und die externe Teilsummenakkumulationsphase 725, von denen Beispiele jeweils in 12 detaillierter dargestellt sind, sind optionale Phasen, die für einen jeweiligen Datenflusszeitplan, der zum Implementieren der aktuellen Netzwerkschicht L eines konvolutionellen neuronalen Netzwerks konfiguriert ist, existieren können oder nicht. Im dargestellten Beispiel entspricht die interne Akkumulationsphase 720 einer internen Akkumulationsphase, bei der Teilsummen von benachbarten PEs, die auf separate Eingabekanäle derselben OF-Tensordaten einwirken, akkumuliert werden. Die Akkumulationsrichtung ist auf entweder horizontal oder vertikal beschränkt. In der externen Teilsummenakkumulationsphase 725 werden Teilsummen, die zu einem früheren Zeitpunkt errechnet wurden, jedoch aus dem lokalen PE RF 145c ausgelagert werden mussten, in das PE zur Akkumulation zum Erzeugen der finalen OF-Tensorausgabe zurückgebracht. In der Abrufphase 730, von der ein Beispiel in 11 detaillierter dargestellt ist, werden Teilsummen oder finale OF-Tensordaten vom lokalen PE RF 145c von jeweiligen der PEs 105a bis i in die jeweiligen Spaltenpuffer 135a bis c, die diesen PEs 105a bis i entsprechen, zur Bewegung in den Speicher 125 überführt.
  • Zulässige Übergänge zwischen der Konfigurationsphase 705, der Ladephase 710, der Rechenphase 715, der internen Akkumulationsphase 720, der externen Teilsummenakkumulationsphase 725 und der Abrufphase 730 sind durch die gerichteten Linien des Zustandsübergangsdiagramms 700 von 7 dargestellt. Im dargestellten beispielhaften Zustandsübergangsdiagramm 700 sind die Konfigurationsphase 705, die Ladephase 710, die Rechenphase 715 und die Abrufphase 730 zwingend, während die interne Akkumulationsphase 720 und die externe Teilsummenakkumulationsphase 725 vom Datenflusszeitplan, der implementiert wird, abhängig sind. Das beispielhafte Zustandsübergangsdiagramm 700 beginnt mit der Konfigurationsphase 705, in der die Konfigurationsregister 120 des konfigurierbaren Prozessorelementarrays 100 und dann die Konfigurationsregister 170 von jeweiligen der PEs 105a bis i mit den Deskriptorfeldern bestückt werden. Die Verarbeitung geht dann zur Ladephase 710 über, in der IF- und FL-Tensordaten vom Speicher 125 in die PE RFs 145a bis b von jeweiligen der PEs 105a bis i bewegt werden, die für die aktuelle konvolutionelle neuronale Netzwerkschicht, welche implementiert wird, aktiv sind.
  • Im dargestellten Beispiel ist ein Übergang aus der Ladephase 710 zulässig, der ein Übergang in die Rechenphase 715 ist. Von der Rechenphase 715 kann die Verarbeitung zu jeglicher der Ladephase 710, der Rechenphase 715, der Akkumulationsphase 720, der externen Teilsummenakkumulationsphase 725 und der Abrufphase 730 übergehen. Beispielsweise kann die Verarbeitung in der Rechenphase 715 bleiben und Rechnen weiterführen, oder die Verarbeitung kann zur Ladephase 710 zum Laden von neuen UF/FL-Tensordaten in die PEs 105a bis i zurückleiten. Dies ist typischerweise der Fall, wenn keine Ic-Partitionierung im Datenflusszeitplan für die aktuelle neuronale Netzwerkschicht, die implementiert wird, vorliegt. Wenn Ic-Partitionierung im Datenflusszeitplan für die aktuelle neuronale Netzwerkschicht, die implementiert wird, vorliegt, dann geht die Verarbeitung von der Rechenphase 715 zur internen Akkumulationsphase 720 oder zur externen Teilsummenakkumulationsphase 725 über, abhängig davon, ob die gesamte Ic-Verarbeitung unter benachbarten PEs 105a bis i im Datenflusszeitplan für die aktuelle neuronale Netzwerkschicht partitioniert ist oder über verschiedene Verarbeitungsiterationen, die durch dieselben PEs 105a bis i ausgeführt werden, partitioniert ist.
  • Wenn ein finales OF-Ergebnis während einer Rechenphase 715 verfügbar ist, dann geht die Verarbeitung zur Abrufphase 730 über. In der internen Akkumulationsphase 720 kann die Verarbeitung, sobald ein finales OF-Ergebnis verfügbar ist, zur Abrufphase 730 übergehen, oder die Verarbeitung geht, wenn es die letzte interne Akkumulationsrunde vor der externen Akkumulationsphase 725 ist, zur externen Akkumulationsphase 725 über. Von der externen Akkumulationsphase 725 kann die Verarbeitung zur Ladephase 705 zum Abholen von zusätzlichen Teilsummendaten aus dem Speicher 125 übergehen, oder die Verarbeitung kann, sobald ein finales OF-Ergebnis verfügbar ist, zur Abrufphase 730 zum Überführen von OF-Daten zum Speicher 125 übergehen.
  • Beispielhafte Hardwarearchitektur zum Unterstützen von externer Teilsummenakkumulation im beispielhaften konfigurierbaren Prozessorelementarray 100 von 1 ist in 13A bis B dargestellt. In manchen Datenflusszeitplänen ist die Akkumulation der gefilterten Eingabekanäle (Ic) der IF-Tensordaten nicht in einer Prozessiteration abgeschlossen. Stattdessen wird ein Teil eines Eingabekanals in den IF RF 145a eines jeweiligen PE 105a bis i gebracht, und eine errechnete Teilsumme wird aus dem Speicher 125 extrahiert. Diese Teilsumme wird dann zu einem späteren Zeitpunkt zurück in den OF RF 145c des jeweiligen PE 105a bis i gebracht, wenn der Rest der Eingabekanäle akkumuliert wurde. Um die Genauigkeit eines finalen Konvolutionsergebnisses zu bewahren, führt das beispielhafte konfigurierbare Prozessorelementarray 100 keine Rundung oder ReLu auf die Teilsummendaten aus. Beispielsweise weisen die Teilsummendaten, die aus der MAC-Einheit 150 des jeweiligen PE 105a bis i ausgegeben werden, 32-Bit-Genauigkeit (oder eine andere Genauigkeit in anderen Beispielen) auf. Während des Normalbetriebsmodus (beispielsweise unter Nichtbeinhaltung von Teilsummen) weist der Lade- und Leerdatenpfad für jeden Tensordatenpunkt 8-Bit-Genauigkeit (oder eine andere Genauigkeit in anderen Beispielen) auf. Zum Unterstützen der externen Teilsummenakkumulation enthält das konfigurierbare Prozessorelementarray 100 beispielhafte Umgehungsdatenpfade 1305a bis c, die direkten Lese- und Schreibzugriff der Teilsummendaten zwischen den Spaltenpuffern 135a bis c und dem Speicher 125 mit der ursprünglichen Genauigkeit der Teilsummendaten unterstützen, welche im dargestellten Beispiel 32 Bit ist. Zudem teilt im dargestellten Beispiel der Umgehungsdatenpfad für einen jeweiligen Spaltenpuffer, wie etwa der Umgehungsdatenpfad 1305a für den Spaltenpuffer 135a, den 32 Bit breiten Datenpfad in 1-Byte-Stücke zwischen dem Spaltenpuffer 135a und dem Speicher 125 durch Umgehen der OF-Leerungsmultiplexlogik 1310 auf, die zwischen dem Spaltenpuffer 1305a und dem Speicher 125 enthalten ist.
  • Unter erneuter Bezugnahme auf das Beispiel von 1 weist, obwohl die eingegebenen IF- und FL-Tensordaten 8-Bit-Genauigkeit (oder eine andere Genauigkeit in anderen Beispielen) aufweisen, die Ausgabe von MAC innerhalb eines PE 32-Bit-Genauigkeit (oder eine andere, größere Genauigkeit in anderen Beispielen) auf, um Akkumulation und Verhinderung von Genauigkeitsverlust zu berücksichtigen. Da die OF-Tensordaten, die durch eine jeweilige neuronale Netzwerkschicht (L) erzeugt werden, jedoch als die IF-Tensordaten für die nachfolgende neuronale Netzwerkschicht (L+l) dienen, enthält das konfigurierbare Prozessorelementarray 100 die beispielhaften Ausgabedatenprozessoren 138a bis c, die mit den entsprechenden Spaltenpuffern 135a bis c assoziiert sind, zum Ausführen eines Rundungsvorgangs zum Anpassen der Bitgenauigkeit von akkumulierten OF-Tensordatenwerten auf 8 Bit vor dem Schreiben in den Speicher 125. Außerdem führen, wenn ein ReLU-Vorgang durch die jeweilige neuronale Netzwerkschicht ausgeführt werden soll, die Ausgabedatenprozessoren 138a bis c den ReLU-Vorgang aus, was zur Bitgenauigkeitsanpassung zum Erzeugen der finalen OF-Tensordaten führt. Von daher wenden die Ausgabedatenprozessoren 138a bis c entweder Sättigungsrundung oder ReLU auf die 32-Bit-Tensordaten, die aus den entsprechenden Spaltenpuffern 135a bis c ausgegeben werden, vor dem Schreiben der Daten in die SRAM-Puffer an. Die ReLU-Schwelle, die durch die Ausgabedatenprozessoren 138a bis c eingesetzt wird, ist über den „ReluThreshold“-Deskriptor von Tabelle 1 ebenfalls anpassbar.
  • Beispielhafte Hardwarearchitektur zum Unterstützen von elementweisen Vorgängen im beispielhaften konfigurierbaren Prozessorelementarray 100 von 1 ist in 14 dargestellt. Manche neuronalen Residualnetzwerke, wie etwa ResNet, setzen elementweise Vorgänge ein, wie etwa Addition von OF-Tensordatenelementen aus zwei konvolutionellen Schichten des neuronalen Netzwerks. Zum Unterstützen von elementweisen Vorgängen, während Hardwareressourcenwiederverwendung genutzt wird, leitet das konfigurierbare Prozessorelementarray 100 die OF-Tensordatenelemente von zwei verschiedenen Schichten in ein jeweiliges der PEs 105a bis i durch Wiederverwenden des bestehenden Ladepfads und Leerpfads. Beispielsweise leitet das konfigurierbare Prozessorelementarray 100 die OF-Tensordaten aus der ersten der Schichten in den IF RF 145a des jeweiligen PE 105a bis i und leitet die OF-Tensordaten aus der zweiten der Schichten in den FL RF 145b des jeweiligen PE 105a bis i. Daher enthalten die IF und FL RFs 145a bis b die OF-Tensordaten von zwei separaten Schichten. Das programmierbare „Eltwise“-Deskriptorfeld in Tabelle 1 wird auf „Türe“ gestellt, um anzuzeigen, dass elementweiser Vorgang aktiviert ist, und ein Eltwise-Aktivierungssignal wird zum Umgehen des MAC-Vorgangs innerhalb des jeweiligen PE 105a bis i benutzt, das stattdessen einen elementweisen Vorgang (beispielsweise Addition oder Max) der ersten OF-Tensordaten, die im IF RF 145a gespeichert sind, und der zweiten OF-Tensordaten, die im FL RF 145b gespeichert sind, ausführt.
  • Beispielhafte Hardwarearchitektur zum Unterstützen von Maxpool-Vorgängen im beispielhaften konfigurierbaren Prozessorelementarray 100 von 1 ist in 15 dargestellt. Der Maxpool-Vorgang wird in zahlreichen Deep Neural Networks (DNNs) zum Beschneiden der Größe von erzeugten Merkmalskarten weithin benutzt. Zum Unterstützen des Maxpool-Vorgangs benutzt das konfigurierbare Prozessorelementarray 100 ebenfalls die Lade- und Leerpfade wieder, um zu bewirken, dass die OF-Daten, die Maxpool unterzogen werden sollen, im IF RF 145a des jeweiligen PE 105a bis i gespeichert werden. Das Pooler-Register 165 des jeweiligen PE 105a bis i wird zum Verfolgen des aktuellen Maximalwerts benutzt, mit dem nachfolgende OF-Punkte der Schicht, die Maxpool unterzogen werden soll, verglichen werden sollen.
  • 16 bis 25 stellen beispielhafte Anwendungsfälle dar, in denen das konfigurierbare Prozessorelementarray 100 zum Arbeiten gemäß vier (4) verschiedenen Datenflusszeitplänen zum Implementieren von Schichten eines neuronalen Residualnetzwerks, wie etwa ResNet, konfiguriert ist. 16 bis 19 stellen jeweiligen beispielhaften Pseudocode dar, der für die verschiedenen Datenflusszeitpläne repräsentativ ist, die durch das konfigurierbare Prozessorelementarray 100 in diesen Beispielen implementiert werden. Wie untenstehend detaillierter beschrieben, basieren die vier (4) verschiedenen Datenflusszeitpläne, die in den Beispielen dargestellt sind, auf entsprechenden vier (4) verschiedenen Tensorverarbeitungsvorlagen. In den folgenden Beispielen wird vorausgesetzt, dass das Array von PEs 105a bis i, das im konfigurierbaren Prozessorelementarray 100 enthalten ist, NxN = 16 x 16 ist, also 256 PEs 105a bis i insgesamt. Diese und andere beispielhafte Anwendungsfälle können jedoch mit Arrays von PEs 105a bis i mit anderen Dimensionen implementiert sein.
  • 16 stellt beispielhaften Pseudocode für einen ersten beispielhaften Datenflusszeitplan 1600 dar, der IF-Tensordaten und FL-Tensordaten zum Erzeugen von OF-Tensordaten für eine beispielhafte Schicht eines neuronalen Residualnetzwerks verarbeiten soll. Im dargestellten Beispiel von 16 weist das Volumen von IF-Tensordaten, die verarbeitet werden sollen, 56 Elemente in der Ix-Dimension, 56 Elemente in der Iy-Dimension und 64 Elemente in der Ic-Dimension auf, und das Volumen von OF-Tensordaten, die erzeugt werden sollen, weist 56 Elemente in der Ox-Dimension, 56 Elemente in der Oy- und 256 Elemente in der Oc-Dimension auf, entsprechend 256 verschiedenen Filtern (FL-Daten), die auf die IF-Tensordaten angewendet werden sollen. Der beispielhafte Datenflusszeitplan enthält eine beispielhafte innere Verarbeitungsschleife 1605, die 8 Partitionen von 1-Element-Ox-Daten und 2 Partitionen von 32-Element-Ic-Daten auf 16 Zeilen 110a bis c des Arrays von PEs 105a bis i abbildet bzw. 14 Partitionen von 2-Element-Oy-Daten auf 14 Spalten 115a bis c des Arrays von PEs 105a bis i abbildet. Daher nimmt jedes PE 105a bis i im 16 x 14 Abschnitt des Arrays von PEs 105a bis i einen (1) Punkt von Ox, 2 Punkte von Oy und 32 Eingabekanalpunkte (Ic-Punkte) und erzeugt Teilsummen für zwei (2) OF-Punkte, die zu einem (1) Ausgabekanal (Oc) gehören. Daher verarbeitet jedes PE 105a bis i 64 IF-Punkte für 32 verschiedene Ic und 32 FL-Punkte für 32 verschiedene Ic, während sie zwei (2) verschiedene OF-Punkte erzeugen, die zu einem einzelnen Oc gehören. Es ist zu beachten, dass, da der Ic-Partitionsfaktor zwei (2) entlang der PE-Spalten 115a bis c ist, dies bedeutet, dass zwei (2) PEs in benachbarten Zeilen 110a bis c am Erzeugen des finalen OF-Punkts an dieser Position im OF-Ausgabedatenvolumen arbeiten. Daher wird interne Akkumulation der Teilsummen über die zwei (2) PEs 105a bis i in den benachbarten Zeilen 110a bis c zum Erzeugen des finalen OF-Punkts in dieser Position in den OF-Ausgabedaten benutzt. Dies führt zu acht (8) PEs, die finale OF-Punkte innerhalb einer jeweiligen Spalte 115a bis c des Arrays von PEs 105a bis i erzeugen, und 112 PEs 106a bis i insgesamt (8 pro Spalte x 14 Spalten), die die finalen OF-Punkte erzeugen, die aus der inneren Verarbeitungsschleife 1605 resultieren. Daher erzeugt die innere Schleife 1605 ein OF-Datenvolumen mit acht (8) Elementen in der Ox-Dimension, 28 Elementen in der Oy-Dimension und einem (1) Element in der Oc-Dimension. Der beispielhafte Datenflusszeitplan enthält eine beispielhafte äußere Verarbeitungsschleife 1610, die 256 Iterationen in der Oc-Dimension, sieben (7) Iterationen in der Ox-Dimension und zwei (2) Iterationen in der Oy-Dimension ausführt, was das finale OF-Datenvolumen von 56 x 56 x 256 OF-Datenpunkten erbringt. Da IF-Daten durch die äußere Schleife 1610 wiederverwendet werden, ist der Datenfluss 1600 eingabeaktivierungsstationär. Da der Datenfluss Ic-Datenelemente über dieselbe Oc-Dimension akkumuliert, entspricht der Datenfluss 1600 der Vektor-Vektor-Tensorverarbeitungsvorlage.
  • Beispielhafte Datenpartitionierungs- und -blockungsaspekte des beispielhaften Datenflusszeitplans 1600 von 16 sind sichtbar in 20 abgebildet. Beispielhafte Konvolutionsvorgänge, die durch das Array von PEs 105a bis i zum Implementieren des beispielhaften Datenflusszeitplans 1600 von 16 ausgeführt werden, sind sichtbar in 21 abgebildet. 22 stellt beispielhafte Werte der Konfigurationsdeskriptoren von Tabelle 1 dar, die zum Konfigurieren des beispielhaften konfigurierbaren Prozessorelementarrays 100 zum Implementieren des beispielhaften Datenflusszeitplans 1600 von 16 benutzt werden können.
  • 17 stellt einen beispielhaften Pseudocode für einen zweiten beispielhaften Datenflusszeitplan 1700 dar, der IF-Tensordaten und FL-Tensordaten zum Erzeugen von OF-Tensordaten für eine beispielhafte Schicht eines neuronalen Residualnetzwerks verarbeiten soll. Im dargestellten Beispiel von 17 weist das Volumen von IF-Tensordaten, die verarbeitet werden sollen, 28 Elemente in der Ix-Dimension, 28 Elemente in der Iy-Dimension und 128 Elemente in der Ic-Dimension auf, und das Volumen von OF-Tensordaten, die erzeugt werden sollen, weist 28 Elemente in der Ox-Dimension, 28 Elemente in der Oy-Dimension und 512 Elemente in der Oc-Dimension auf, entsprechend 512 verschiedenen Filtern (FL-Daten), die auf die IF-Tensordaten angewendet werden sollen. Der beispielhafte Datenflusszeitplan 1700 enthält eine beispielhafte innere Verarbeitungsschleife 1705, die 16 Partitionen von 8-Element-Oc-Daten und 16 Partitionen von 8-Element-Ic-Daten auf 16 Zeilen 110a bis c bzw. 16 Spalten 115a bis c des Arrays von PEs 105a bis i abbildet. Jedes PE 105a bis i nimmt acht (8) Eingabekanalpunkte (Ic-Punkte) und acht (8) Ausgabekanalpunkte (Oc-Punkte) zum Erzeugen von acht (8) OF-Datenpunkten. Daher wirkt jedes PE 105a bis i auf acht (8) IF-Datenpunkte für acht (8) verschiedene Ic und 64 FL-Punkte, die auf acht (8) verschiedene Ic-Datenpunkte angewendet werden sollen, zum Erzeugen von acht (8) verschiedenen Oc-Datenpunkten ein. Daher erzeugt die innere Schleife 1705 ein OF-Datenvolumen mit einem (1) Element in der Ox-Dimension, einem (1) Element in der Oy-Dimension und 8 x 16 = 128 Elementen in der Oc-Dimension. Der beispielhafte Datenflusszeitplan enthält eine beispielhafte äußere Verarbeitungsschleife 1710, die 28 Iterationen in der Ox-Dimension, 28 Iterationen in der Oy-Dimension und vier (4) Iterationen in der Oc-Dimension ausführt. Da 16 Partitionen von Ic-Daten auf 16 Spalten 115a bis c abbilden, werden die finalen OF-Daten durch Akkumulation entlang der PE-Zeilenrichtung (beispielsweise, PE(i, 15) für i=0 bis 15) bestimmt, und die OF-Datenextraktion erfolgt aus der letzten PE-Spalte 115c. Da FL-Daten durch die äußeren Schleifeniterationen über die Oy- und Ox-Dimensionen wiederverwendet werden, ist der beispielhafte Datenflusszeitplan 1700 gewichtungsstationär. Zudem entspricht, da der Datenfluss 1700 IC-Daten über verschiedene OC-Dimensionen akkumuliert, der Datenfluss 1700 der Vektor-Matrix-Tensorverarbeitungsvorlage. 23 stellt beispielhafte Werte der Konfigurationsdeskriptoren von Tabelle 1 dar, die zum Konfigurieren des beispielhaften konfigurierbaren Prozessorelementarrays 100 zum Implementieren des beispielhaften Datenflusszeitplans 1700 von 17 benutzt werden können.
  • 18 stellt beispielhaften Pseudocode für einen dritten beispielhaften Datenflusszeitplan 1800 dar, der IF-Tensordaten und FL-Tensordaten zum Erzeugen von OF-Tensordaten für eine beispielhafte Schicht eines neuronalen Residualnetzwerks verarbeiten soll. Der beispielhafte Datenfluss 1800 enthält eine beispielhafte innere Verarbeitungsschleife 1805, die zwei (2) Partitionen von 8-Element-Ic-Daten und acht (8) Partitionen von 1-Element-Ox-Daten entlang der Spalten 115a bis c des Arrays von PEs 105a bis i abbildet und 16 Partitionen von 8-Element-Oc-Daten entlang 16 Zeilen 199a bis c des Arrays von PEs 105a bis i abbildet. Daher wirkt jedes PE auf ein 1x7x8 Volumen von OF-Daten durch Verarbeiten eines 7x8 Volumens von IF-Daten und eines 8x8 Volumens von FL-Punkten zum Erzeugen von 56 Teilsummen-OF-Datenpunkten ein. Der beispielhafte Datenfluss 1800 enthält außerdem eine beispielhafte äußere Verarbeitungsschleife 1810, in der, nach jedem Intervall von 32 Iterationen der Ic-Dimension, die Teilsummen in zwei (2) benachbarten PEs 105a bis i entlang der horizontalen Richtung zum Erzeugen eines finalen OF-Datenpunkts intern akkumuliert werden. Da bei jeder Iteration neue IF- und FL-Datenpunkte in die PEs 105a bis i (Ic in der äußeren Schleife) gebracht werden und die Teilsummen innerhalb der PEs 105a bis i stationär sind, ist der Datenflusszeitplan 1800 ausgabeaktivierungsstationär. Außerdem entspricht, da der Datenfluss 1800 Akkumulation über Ic-Datenpunkte von verschiedenen Ox-Dimensionen und verschiedenen OCs-Dimensionen ausführt, der Datenfluss 1800 der Matrix-Matrix-Tensorverarbeitungsvorlage. 24 stellt beispielhafte Werte der Konfigurationsdeskriptoren von Tabelle 1 dar, die zum Konfigurieren des beispielhaften konfigurierbaren Prozessorelementarrays 100 zum Implementieren des beispielhaften Datenflusszeitplans 1800 von 18 benutzt werden können.
  • 19 stellt beispielhaften Pseudocode für einen vierten beispielhaften Datenflusszeitplan 1900 dar, der IF-Tensordaten und FL-Tensordaten zum Erzeugen von OF-Tensordaten für eine beispielhafte Schicht eines neuronalen Residualnetzwerks verarbeiten soll. Der Datenflusszeitplan 1900 ist auf eine neuronale Netzwerkschicht zugeschnitten, die ein 3x3 Filter einsetzt (wohingegen die anderen beispielhaften Datenflüsse 1600 bis 1800 neuronalen Netzwerkschichten entsprechen, die 1x1 Filter einsetzen). Der beispielhafte Datenfluss 1900 enthält eine beispielhafte innere Verarbeitungsschleife 1905, die 14 Partitionen von 4-Element-Oy-Daten entlang der Spalten 115a bis c des Arrays von PEs 105a bis i abbildet und acht (8) Partitionen von 1-Element-Ox-Daten und zwei (2) Partitionen von 16-Element-Oc-Daten entlang der Zeilen 110a bis c des Arrays von PEs 105a bis i abbilden. Daher wirkt jedes PE 105a bis i auf ein 1x4x16 Volumen von OF-Daten ein und verbraucht 18 IF-Datenpunkte (da die Gewichtungsdimension 3x3 ist, beinhaltet das Erzeugen eines 1x4 Volumens von OF-Daten ein 3x6 Volumen von IF-Daten, entsprechend 18 IF-Punkten) und 16 FL-Datenpunkte zum Erzeugen von 64 Teilsummen. Der beispielhafte Datenfluss 1900 enthält außerdem eine beispielhafte äußere Verarbeitungsschleife 1910, in der, wenn alle von neun (9) FL-Datenpunkten (entsprechend dem 3x3 Filter) und die 64 Ic-Datenpunkte innerhalb eines jeweiligen PE 105a bis i akkumuliert wurden, die finalen OF-Punkte erzeugt werden. Da Ic in der äußeren Verarbeitungsschleife 1910 vorliegt, ist der Datenflusszeitplan 1900 ein Beispiel eines ausgabeaktivierungsstationären Zeitplans. Außerdem entspricht, da der Datenfluss 1900 die Filterpunkte einen nach dem anderen einbringt und jede Rechnung Multiplizieren eines Skalars (des Filters) mit mehrfachen Eingabeaktivierungspunkten beinhaltet, der Datenfluss 1900 der Skalar-Vektor-Tensorverarbeitungsvorlage. 25 stellt beispielhafte Werte der Konfigurationsdeskriptoren von Tabelle 1 dar, die zum Konfigurieren des beispielhaften konfigurierbaren Prozessorelementarrays 100 zum Implementieren des beispielhaften Datenflusszeitplans 1900 von 19 benutzt werden können.
  • Während eine beispielhafte Art und Weise des Implementierens des konfigurierbaren Prozessorelementarrays 100 in 1 bis 25 dargestellt ist, können ein oder mehr Elemente, Prozesse und/oder Geräte auf jegliche andere Art und Weise kombiniert, aufgeteilt, umgeordnet, ausgelassen, beseitigt und/oder implementiert werden. Ferner können die beispielhaften PEs 105a bis i, das (die) beispielhafte(n) Konfigurationsregister 120, der beispielhafte Speicher 125, die beispielhafte Tensordatenverteilungseinheit 130, der beispielhafte Spaltenpufferspeicher 135a bis c, die beispielhaften Ausgabedatenprozessoren 138a bis c, die beispielhaften Busse 140a bis c, der beispielhafte RF-Speicher 145a bis c, die beispielhafte MAC-Einheit 150, die beispielhafte elementweise Recheneinheit 155, die beispielhafte Max-Pooling-Einheit 160, das beispielhafte Pooler-Register 165, das (die) beispielhafte(n) Konfigurationsregister 170, die beispielhafte FSM 175, die beispielhafte, gemeinsam benutzte Rechenlogik 605, der beispielhafte Multiplizierer 610, der beispielhafte Addierer 615, der beispielhafte Vergleicher 620, die beispielhafte Multiplexersteuerlogik 625 bis 660, das beispielhafte Register 675 und/oder, allgemeiner, das beispielhafte konfigurierbare Prozessorelementarray 100 von 1 bis 25 durch Hardware, Software, Firmware und/oder jegliche Kombination von Hardware, Software und/oder Firmware implementiert sein. Daher könnte beispielsweise jegliches der beispielhaften PEs 105a bis i, des (der) beispielhaften Konfigurationsregister(s) 120, des beispielhaften Speichers 125, der beispielhaften Tensordatenverteilungseinheit 130, des beispielhaften Spaltenpufferspeichers 135a bis c, der beispielhaften Ausgabedatenprozessoren 138a bis c, der beispielhaften Busse 140a bis c, des beispielhaften RF-Speichers 145a bis c, der beispielhaften MAC-Einheit 150, der beispielhaften elementweisen Recheneinheit 155, der beispielhaften Max-Pooling-Einheit 160, des beispielhaften Pooler-Registers 165, des (der) beispielhaften Konfigurationsregister(s) 170, der beispielhaften FSM 175, der beispielhaften, gemeinsam benutzten Rechenlogik 605, des beispielhaften Multiplizierers 610, des beispielhaften Addierers 615, des beispielhaften Vergleichers 620, der beispielhaften Multiplexersteuerlogik 625 bis 660, des beispielhaften Registers 675 und/oder, allgemeiner, des beispielhaften konfigurierbaren Prozessorelementarrays 100 durch eine(n) oder mehr analoge oder digitale Schaltung(en), logische Schaltungen, programmierbare(n) Prozessor(en), programmierbare Steuerung(en), Grafikverarbeitungseinheit(en) (GPU(s)), digitale(n) Signalprozessor(en) (DSP(s)), anwendungsspezifische integrierte Schaltung(en) (ASIC(s)), programmierbare(s) Logikgerät(e) (PLD(s)) und/oder feldprogrammierbare(s) Logikgerät(e) (FPLD(s)) implementiert sein. Wenn jegliche Vorrichtungs- oder Systemansprüche dieser Patentschrift als eine reine Software- und/oder Firmwareimplementierung abdeckend gelesen werden, ist mindestens eines des beispielhaften konfigurierbaren Prozessorelementarrays 100, der beispielhaften PEs 105a bis i, des (der) beispielhaften Konfigurationsregister(s) 120, des beispielhaften Speichers 125, der beispielhaften Tensordatenverteilungseinheit 130, des beispielhaften Spaltenpufferspeichers 135a bis c, der beispielhaften Ausgabedatenprozessoren 138a bis c, der beispielhaften Busse 140a bis c, des beispielhaften RF-Speichers 145a bis c, der beispielhaften MAC-Einheit 150, der beispielhaften elementweisen Recheneinheit 155, der beispielhaften Max-Pooling-Einheit 160, des beispielhaften Pooler-Registers 165, des (der) beispielhaften Konfigurationsregister(s) 170, der beispielhaften FSM 175, der beispielhaften, gemeinsam benutzten Rechenlogik 605, des beispielhaften Multiplizierers 610, des beispielhaften Addierers 615, des beispielhaften Vergleichers 620, der beispielhaften Multiplexersteuerlogik 625 bis 660 und/oder des beispielhaften Registers 675 hiermit ausdrücklich als ein nichtflüchtiges computerlesbares Speichergerät oder eine Speicherplatte, wie etwa einen Speicher, eine Digital Versatile Disk (DVD), eine Compact Disk (CD), eine Blu-Ray Disk usw., enthaltend definiert, das/die die Software und/oder Firmware enthält. Weiterhin kann das beispielhafte konfigurierbare Prozessorelementarray 100 ein oder mehr Elemente, Prozesse und/oder Geräte zusätzlich zu oder anstelle von jenen, die in 1 bis 25 dargestellt sind, enthalten, und/oder kann mehr als eines von jeglichen oder allen dargestellten Elementen, Prozessen und Geräten enthalten. Wie hierin verwendet, umfasst die Formulierung „in Kommunikation“, einschließlich Variationen davon, direkte Kommunikation und/oder indirekte Kommunikation über eine oder mehr zwischenliegende Komponenten, und erfordert keine direkte physikalische (beispielsweise verdrahtete) Kommunikation und/oder konstante Kommunikation, sondern enthält stattdessen zusätzlich selektive Kommunikation zu periodischen Intervallen, zeitlich geplanten Intervallen, nichtperiodischen Intervallen und/oder einmaligen Ereignissen.
  • Ein Ablaufdiagramm, das beispielhafte Hardwarelogik, maschinenlesbare Anweisungen, hardwareimplementierte Zustandsmaschinen und/oder jegliche Kombination davon zum Implementieren des konfigurierbaren Prozessorelementarrays 100 darstellt, ist in 26 gezeigt. In diesen Beispielen können die maschinenlesbaren Anweisungen ein oder mehr ausführbare Programme oder (ein) Abschnitt(e) eines ausführbaren Programms zur Ausführung durch einen Computerprozessor sein, wie etwa der Prozessor 2712, der in der beispielhaften Prozessorplattform 2700 gezeigt ist, welche untenstehend in Verbindung mit 27 besprochen wird. Das eine oder mehr Programme oder (ein) Abschnitt(e) davon können in Software verkörpert sein, die auf einem nichtflüchtigen computerlesbaren Speichermedium gespeichert ist, wie etwa eine CD-ROM, eine Floppy Disk, eine Festplatte, eine DVD, eine Blu-Ray Disk™ oder ein Speicher, der mit dem Prozessor 2712 assoziiert ist, wobei das gesamte Programm oder Programme und/oder Teile davon jedoch alternativ durch ein anderes Gerät als der Prozessor 2712 ausgeführt werden und/oder in Firmware oder dedizierter Hardware verkörpert sein können. Ferner können, obwohl das (die) beispielhafte(n) Programm(e) unter Bezugnahme auf das Ablaufdiagramm, das in 26 gezeigt ist, beschrieben ist (sind), zahlreiche andere Verfahren zum Implementieren des beispielhaften konfigurierbaren Prozessorelementarrays 100 alternativ benutzt werden. Beispielsweise kann unter Bezugnahme auf das Ablaufdiagramm, das in 26 dargestellt ist, die Reihenfolge der Ausführung der Blöcke geändert werden, und/oder manche der beschriebenen Blöcke können geändert, ausgeschlossen, kombiniert und/oder in mehrfache Blöcke unterteilt werden. Zusätzlich oder alternativ können jegliche oder alle der Blöcke durch eine oder mehr Hardwareschaltungen (beispielsweise diskrete und/oder integrierte analoge und/oder digitale Schaltungen, ein FPGA, eine ASIC, ein Vergleicher, ein Vorgangsverstärker (Op-Amp), eine logische Schaltung usw.) implementiert sein, die zum Ausführen des entsprechenden Vorgangs ohne Ausführen von Software oder Firmware strukturiert sind.
  • Die hierin beschriebenen maschinenlesbaren Anweisungen können in einem oder mehr eines komprimierten Formats, eines verschlüsselten Formats, eines fragmentierten Formats, eines gepackten Formats usw. gespeichert sein. Maschinenlesbare Anweisungen, wie sie hierin beschrieben sind, können als Daten (beispielsweise Abschnitte von Anweisungen, Code, Darstellungen von Code usw.) gespeichert sein, die zum Schaffen, Herstellen und/oder Erzeugen von maschinenlesbaren Anweisungen genutzt werden können. Beispielsweise können die maschinenlesbaren Anweisungen fragmentiert und in einem oder mehr Speichergeräten und/oder Rechengeräten (beispielsweise Server) gespeichert werden. Die maschinenlesbaren Anweisungen können eines oder mehr von Einrichtung, Modifikation, Adaptation, Aktualisieren, Kombinieren, Ergänzen, Konfigurieren, Entschlüsselung, Dekompression, Entpacken, Verteilung, Neuzuweisung usw. erfordern, um sie direkt lesbar und/oder ausführbar durch ein Rechengerät und/oder eine andere Maschine zu machen. Beispielsweise können die maschinenlesbaren Anweisungen in mehrfachen Teilen gespeichert werden, die individuell komprimiert, verschlüsselt und in separaten Rechengeräten gespeichert werden, wobei die Teile, wenn sie entschlüsselt, dekomprimiert und kombiniert sind, einen Satz von ausführbaren Anweisungen ausbilden, die ein Programm wie das hierin beschriebene implementieren. In einem anderen Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert werden, in dem sie durch einen Computer gelesen werden können, erfordern dann jedoch die Hinzufügung einer Bibliothek (beispielsweise einer dynamischen Verknüpfungsbibliothek), eines Softwareentwicklungs-Kits (SDK), einer Anwendungsprogrammierungsschnittstelle (API) usw., um die Anweisungen auf einem bestimmten Rechengerät oder anderem Gerät auszuführen. In einem anderen Beispiel müssen die maschinenlesbaren Anweisungen möglicherweise konfiguriert (beispielsweise Einstellungen gespeichert, Daten eingegeben, Netzwerkadressen aufgezeichnet usw.) werden, bevor die maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) gänzlich oder zum Teil ausgeführt werden können. Daher sollen die offenbarten maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) derartige maschinenlesbare Anweisungen und/oder Programm(e) unabhängig vom bestimmten Format oder Zustand der maschinenlesbaren Anweisungen und/oder Programm(e), wenn sie gespeichert sind oder andernfalls ruhen oder im Transit befindlich sind, einschließen.
  • In einem anderen Beispiel können die maschinenlesbaren Anweisungen in einem Zustand gespeichert werden, in dem sie durch einen Computer gelesen werden können, erfordern dann jedoch die Hinzufügung einer Bibliothek (beispielsweise einer dynamischen Verknüpfungsbibliothek (DLL)), eines Softwareentwicklungs-Kits (SDK), einer Anwendungsprogrammierungsschnittstelle (API) usw., um die Anweisungen auf einem bestimmten Rechengerät oder anderem Gerät auszuführen. In einem anderen Beispiel müssen die maschinenlesbaren Anweisungen möglicherweise konfiguriert (beispielsweise Einstellungen gespeichert, Daten eingegeben, Netzwerkadressen aufgezeichnet usw.) werden, bevor die maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) gänzlich oder zum Teil ausgeführt werden können. Daher sollen die offenbarten maschinenlesbaren Anweisungen und/oder das (die) entsprechende(n) Programm(e) derartige maschinenlesbare Anweisungen und/oder Programm(e) unabhängig vom bestimmten Format oder Zustand der maschinenlesbaren Anweisungen und/oder Programm(e), wenn sie gespeichert sind oder andernfalls ruhen oder im Transit befindlich sind, einschließen.
  • Die hierin beschriebenen maschinenlesbaren Anweisungen können durch jegliche vergangene, gegenwärtige oder zukünftige Anweisungssprache, Skriptsprache, Programmiersprache usw. dargestellt werden. Beispielsweise können die maschinenlesbaren Anweisungen unter Verwendung von jeglicher der folgenden Sprachen dargestellt werden: C, C++, Java, C#, Perl, Python, JavaScript, HyperText Markup Language (HTML), Structured Query Language (SQL), Swift usw.
  • Wie oben angegeben kann der beispielhafte Prozess von 26 unter Verwendung von ausführbaren Anweisungen (beispielsweise computer- und/oder maschinenlesbaren Anweisungen) implementiert werden, die in einem nichtflüchtigen, computer- und/oder maschinenlesbaren Medium gespeichert sind, wie etwa ein Festplattenlaufwerk, ein Flashspeicher, ein Festwertspeicher, eine Compact Disk, eine Digital Versatile Disk, ein Cache, ein Direktzugriffsspeicher und/oder jegliche(s) andere Speichergerät oder Speicherplatte, in dem/der Information über jegliche Zeitdauer (beispielsweise über ausgedehnte Zeitspannen, permanent, für kurze Momente, zum vorübergehenden Puffern und/oder zum Zwischenspeichern von Information) gespeichert wird. Wie hierin verwendet, ist der Begriff nichtflüchtiges computerlesbares Medium ausdrücklich als jegliche Art von maschinenlesbarem Speichergerät und/oder Speicherplatte beinhaltend und Verbreitung von Signalen ausschließend und Übertragungsmedien ausschließend definiert. Außerdem werden die Begriffe „computerlesbar“ und „maschinenlesbar“, wie hierin verwendet, als äquivalent betrachtet, sofern nicht anders angegeben.
  • „Enthalten“ und „umfassen“ (und alle Formen und Zeiten davon) sind hierin als offene Begriffe verwendet. Wann immer ein Anspruch jegliche Form von „enthalten“ oder „umfassen“ (beispielsweise umfasst, enthält, umfassend, enthaltend, aufweisend usw.) als Einleitung oder innerhalb eines Anspruchsvortrags jeglicher Art einsetzt, versteht es sich deshalb, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne aus dem Anwendungsbereich des entsprechenden Anspruchs oder Vortrags zu fallen. Wie hierin verwendet, ist, wenn die Formulierung „mindestens“ als der Übergangsbegriff beispielsweise in einem Oberbegriff eines Anspruchs verwendet wird, diese Formulierung in derselben Art und Weise offen, wie die Begriffe „enthalten“ und „umfassen“ offen sind. Der Begriff „und/oder“, wenn er beispielsweise in einer Form wie etwa „A, B und/oder C“ verwendet ist, bezieht sich auf jegliche Kombination oder Teilsatz von A, B, C, wie etwa: (1) A allein, (2) B allein, (3) C allein, (4) A mit B, (5) A mit C, (6) B mit C und (7) A mit B und mit C. Wie hierin im Kontext des Beschreibens von Strukturen, Komponenten, Elementen, Objekten und/oder Dingen verwendet, soll die Formulierung „mindestens eines von A und B“ auf Implementierungen verweisen, die jegliches von (1) mindestens ein A,(2). mindestens ein B und (3) mindestens ein A und mindestens ein B enthalten. Gleicherweise soll, wie hierin im Kontext des Beschreibens von Strukturen, Komponenten, Elementen, Objekten und/oder Dingen verwendet, die Formulierung „mindestens eines von A oder B“ auf Implementierungen verweisen, die jegliches von (1) mindestens ein A, (2) mindestens ein B und (3) mindestens ein A und mindestens ein B enthalten. Wie hierin im Kontext des Beschreibens der Durchführung oder Ausführung von Prozessen, Anweisungen, Tätigkeiten, Aktivitäten und/oder Schritten verwendet, soll die Formulierung „mindestens eines von A und B“ auf Implementierungen verweisen, die jegliches von (1) mindestens ein A, (2) mindestens ein B und (3) mindestens ein A und mindestens ein B enthalten. Gleicherweise soll, wie hierin im Kontext des Beschreibens der Durchführung oder Ausführung von Prozessen, Anweisungen, Tätigkeiten, Aktivitäten und/oder Schritten verwendet, die Formulierung „mindestens eines von A oder B“ auf Implementierungen verweisen, die jegliches von (1) mindestens ein A, (2) mindestens ein B und (3) mindestens ein A und mindestens ein B enthalten.
  • Wie hierin verwendet, schließen Singularbezugnahmen (beispielsweise „ein/e“, „erste/r/s“, „zweite/r/s“ usw.) eine Vielzahl nicht aus. Der Begriff „eine“ Einheit, wie er hierin verwendet wird, bezieht sich auf eine oder mehr dieser Einheit. Die Begriffe „ein/e“, „ein/e oder mehr“ und „mindestens ein/e“ können hierin austauschbar verwendet sein. Zudem kann eine Vielzahl von Mitteln, Elementen oder Verfahrenstätigkeiten, auch wenn sie individuell aufgelistet sind, durch beispielsweise eine einzelne Einheit oder einen einzelnen Prozessor implementiert werden. Zusätzlich können, auch wenn individuelle Merkmale in verschiedenen Beispielen oder Ansprüchen enthalten sein können, diese möglicherweise kombiniert werden, und die Einbindung in verschiedene Beispiele oder Ansprüche impliziert nicht, dass eine Kombination von Merkmalen nicht durchführbar und/oder vorteilhaft ist.
  • Ein beispielhaftes Programm 2600, das zum Betreiben des beispielhaften konfigurierbaren Prozessorelementarrays 100 von 1 zum Implementieren einer Schicht eines konvolutionellen neuronalen Netzwerks ausgeführt werden kann, ist durch das Ablaufdiagramm dargestellt, das in 26 gezeigt ist. Unter Bezugnahme auf die vorhergehenden Figuren und zugehörigen schriftlichen Beschreibungen, beginnt das beispielhafte Programm 2600 die Ausführung bei Block 2605, wo der Konfigurationslader 122 Anweisungen (beispielsweise einen Compiler, Software usw.) zum Laden von Eingabedaten (IF-Daten) und Filterdaten (FL-Daten), die einem konvolutionellen neuronalen Netzwerk entsprechen, das durch das konfigurierbare Prozessorelementarray 100 implementiert werden soll, in den Speicher 125 des konfigurierbaren Prozessorelementarrays 100 ausführt. Bei Block 2610 führt der Konfigurationslader 122 Anweisungen (beispielsweise einen Compiler, Software usw.) zum Schreiben von Deskriptoren in die Konfigurationsregister 120 zum Konfigurieren des konfigurierbaren Prozessorelementarrays 100 zum Implementieren einer ersten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem jeweiligen Datenflusszeitplan, der einer der möglichen Tensorverarbeitungsvorlagen entspricht, wie oben beschrieben, aus. Von daher entspricht Block 2610 einem Beispiel der oben beschriebenen Konfigurationsphase 705. Bei Block 2615 laden die PEs 105a bis i des konfigurierbaren Prozessorelementarrays 100 die Deskriptorwerte in die entsprechenden Konfigurationsregister 170 der jeweiligen PEs 105a bis i. Von daher entspricht Block 2615 einem Beispiel der oben beschriebenen Ladephase 710. Bei Block 2620 führen die PEs 105a bis i des konfigurierbaren Prozessorelementarrays 100 Rechenvorgänge auf die Eingabedaten und Filterdaten, die der aktuellen neuronalen Netzwerkschicht entsprechen, gemäß den konfigurierten Deskriptoren aus, wie oben beschrieben. Wie oben beschrieben, können die Rechenvorgänge, die bei Block 2620 ausgeführt werden, beispielsweise MAC-Vorgänge, elementweise Vorgänge, Maxpool-Vorgänge, interne Teilsummenakkumulationen, externe Teilsummenakkumulationen usw. enthalten. Von daher entspricht Block 2620 einem Beispiel der Rechenphase 715, der Akkumulationsphase 720 und/oder der externen Teilsummenakkumulationsphase 725, die oben beschrieben sind. Bei Block 2625 speichern die PEs 105a bis i die Ausgabedaten (OF-Daten), die bei Block 2620 für die aktuelle neuronale Netzwerkschicht bestimmt wurden, im Speicher des konfigurierbaren Prozessorelementarrays 100, wie oben beschrieben. Von daher entspricht Block 2625 einem Beispiel der oben beschriebenen Abrufphase 730.
  • Bei Block 2630 führt der Konfigurationslader 122 Anweisungen (beispielsweise einen Compiler, Software usw.) zum Bestimmen aus, ob eine weitere Schicht (beispielsweise eine zweite Schicht) des neuronalen Netzwerks implementiert werden soll. Wenn eine weitere neuronale Netzwerkschicht implementiert werden soll („Ja“ bei Block 2640), leitet die Steuerung zu Block 2610 zurück, wo der Konfigurationslader 122 Anweisungen (beispielsweise einen Compiler, Software usw.) zum Schreiben eines weiteren Satzes von Deskriptoren in die Konfigurationsregister 120 zum Konfigurieren des konfigurierbaren Prozessorelementarrays 100 zum Implementieren der nächsten (beispielsweise zweiten) Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem jeweiligen Datenflusszeitplan, der einer der möglichen Tensorverarbeitungsvorlagen entspricht, ausführt, wie oben beschrieben. Wie oben beschrieben, können die Tensorverarbeitungsvorlage und der resultierende assoziierte Datenflusszeitplan, die durch den Konfigurationslader 122 bei Block 2610 für die nächste (beispielsweise zweite) Schicht des konvolutionellen neuronalen Netzwerks konfiguriert werden, dieselben sein wie die Tensorverarbeitungsvorlage und der resultierende assoziierte Datenflusszeitplan, die während der vorherigen Iteration von Block 2610 für die erste Schicht des konvolutionellen neuronalen Netzwerks konfiguriert wurden, oder davon abweichen. Die Steuerung leitet dann zu Block 2615 und nachfolgenden Blöcken zum Implementieren der nächsten (beispielsweise zweiten) Schicht des konvolutionellen neuronalen Netzwerks weiter.
  • Wenn hingegen keine anderen neuronalen Netzwerkschichten implementiert werden sollen („Nein“ bei Block 2630), dann bewirkt das konfigurierbare Prozessorelementarray 100 bei Block 2635, dass seine PEs 105a bis i jegliche finalen Teilsummenakkumulationen ausführen (siehe beispielsweise die oben beschriebenen, beispielhaften Datenflusszeitpläne 1600 bis 1900), und schreibt dann die finalen Ausgabedaten (OF-Daten) in den Speicher 125 des konfigurierbaren Prozessorelementarrays 100. Das beispielhafte Programm 2600 endet dann.
  • 27 ist ein Blockdiagramm einer beispielhaften Prozessorplattform 2700, die zum Ausführen der Anweisungen von 26 zum Implementieren des konfigurierbaren Prozessorelementarrays 100 von 1 bis 25 strukturiert ist. Die Prozessorplattform 2700 kann beispielsweise ein Server, ein Personal Computer, eine Arbeitsstation, eine selbstlernende Maschine (beispielsweise ein neuronales Netzwerk), ein Mobilgerät (beispielsweise ein zellulares Mobiltelefon, ein Smartphone, ein Tablet wie etwa ein iPad™), ein Personal Digital Assistant (PDA), ein Internetgerät, ein DVD-Spieler, ein CD-Spieler, ein digitaler Videorecorder, ein Blu-Ray-Spieler, eine Spielkonsole, ein Personal-Video-Recorder, eine Set-Top-Box, ein Headset oder anderes tragbares Gerät oder jegliche andere Art von Rechengerät sein.
  • Die Prozessorplattform 2700 des dargestellten Beispiels enthält einen Prozessor 2712. Der Prozessor 2712 des dargestellten Beispiels ist Hardware. Beispielsweise kann der Prozessor 2712 durch eine/n oder mehr integrierte Schaltungen, logische Schaltungen, Mikroprozessoren, GPUs, DSPs oder Steuerungen von jeglicher (jeglichem) erwünschten Familie oder Hersteller implementiert sein. Der Hardwareprozessor 2712 kann ein halbleiterbasiertes (beispielsweise siliziumbasiertes) Gerät sein. Im dargestellten Beispiel implementiert der Hardwareprozessor 2712 den Konfigurationslader 122 von 1.
  • Der Prozessor 2712 des dargestellten Beispiels enthält einen lokalen Speicher 2713 (beispielsweise einen Cache). Der Prozessor 2712 des dargestellten Beispiels ist über eine Verknüpfung 2718 mit einem Hauptspeicher in Kommunikation, der einen flüchtigen Speicher 2714 und einen nichtflüchtigen Speicher 2716 enthält. Die Verknüpfung 2718 kann durch einen Bus, eine oder mehr Punkt-zu-Punkt-Verbindungen usw. oder eine Kombination davon implementiert sein. Der flüchtige Speicher 2714 kann durch Synchronous Dynamic Random Access Memory (SDRAM), Dynamic Random Access Memory (DRAM), RAMBUS® Dynamic Random Access Memory (RDRAM®) und/oder jegliche andere Art von Direktzugriffsspeichergerät implementiert sein. Der nichtflüchtige Speicher 2716 kann durch Flashspeicher und/oder jegliche andere erwünschte Art von Speichergerät implementiert sein. Zugriff auf den Hauptspeicher 2714, 2716 wird durch eine Speichersteuerung gesteuert.
  • Die Prozessorplattform 2700 des dargestellten Beispiels enthält außerdem eine Schnittstellenschaltung 2720. Die Schnittstellenschaltung 2720 kann durch jegliche Art von Schnittstellenstandard implementiert sein, wie etwa eine Ethernet-Schnittstelle, ein Universal Serial Bus (USB), eine Bluetooth®-Schnittstelle, eine Nahfeldkommunikationsschnittstelle (NFC-Schnittstelle) und/oder eine PCI Express-Schnittstelle.
  • Im dargestellten Beispiel sind ein oder mehr Eingabegeräte 2722 mit der Schnittstellenschaltung 2720 verbunden. Das (die) Eingabegerät(e) 2722 ermöglicht (ermöglichen) es einem Benutzer, Daten und/oder Befehle in den Prozessor 2712 einzugeben. Das (die) Eingabegerät(e) kann (können) beispielsweise durch einen Audiosensor, ein Mikrofon, eine Kamera (Standfoto oder Video), eine Tastatur, einen Knopf, eine Maus, einen Berührungsbildschirm, ein Trackpad, einen Trackball, eine Spurleiste (wie etwa ein Isopoint), ein Spracherkennungssystem und/oder jegliche andere Mensch-Maschinen-Schnittstelle implementiert sein. Außerdem können viele Systeme, wie die Prozessorplattform 2700, dem Benutzer ermöglichen, das Computersystem zu steuern und dem Computer Daten unter Verwendung physischer Gesten zu liefern, einschließlich unter anderem Hand- oder Körperbewegungen, Gesichtsausdrücken und Gesichtserkennung.
  • Die Prozessorplattform 2700 enthält ferner das konfigurierbare Prozessorelementarray 100, das mit anderen Elementen der Prozessorplattform 2700 über die Verknüpfung 2718 in Kommunikation ist. Beispielsweise kann das konfigurierbare Prozessorelementarray 100 Eingabe-IF-Daten von einem oder mehr der Eingabegeräte 2722 über die Schnittstellenschaltung 2720 erhalten, Schichten von konvolutionellen neuronalen Netzwerken zum Verarbeiten der Eingabe-IF-Daten implementieren, wie oben beschrieben, und die resultierenden OF-Daten über die Schnittstellenschaltung 2720 an die Ausgabegeräte 2724 ausgeben.
  • Ein oder mehr Ausgabegeräte 2724 sind ebenfalls mit der Schnittstellenschaltung 2720 des dargestellten Beispiels verbunden. Die Ausgabegeräte 2724 können beispielsweise durch Anzeigegeräte (beispielsweise eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhrenanzeige (CRT), eine In-Plane-Switching-Anzeige (IPS-Anzeige), einen Berührungsbildschirm usw.), ein taktiles Ausgabegerät, einen Drucker und/oder Lautsprecher implementiert sein. Die Schnittstellenschaltung 2720 des dargestellten Beispiels enthält daher typischerweise eine Grafiktreiberkarte, einen Grafiktreiberchip und/oder einen Grafiktreiberprozessor.
  • Die Schnittstellenschaltung 2720 des dargestellten Beispiels enthält außerdem ein Kommunikationsgerät, wie etwa einen Sender, einen Empfänger, einen Transceiver, ein Modem, ein lokales Gateway, einen Drahtloszugangspunkt und/oder eine Netzwerkschnittstelle, zum Ermöglichen des Datenaustauschs mit externen Maschinen (beispielsweise Rechengeräten jeglicher Art) über ein Netzwerk 2726. Die Kommunikation kann beispielsweise über eine Ethernet-Verbindung, eine digitale Teilnehmerleitungsverbindung (DSL-Verbindung), eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Line-of-Sight-System, ein zellulares Telefonsystem usw. erfolgen.
  • Die Prozessorplattform 2700 des dargestellten Beispiels enthält außerdem ein oder mehr Massenspeichergeräte 2728 zum Speichern von Software und/oder Daten. Beispiele von derartigen Massenspeichergeräten 2728 beinhalten Diskettenlaufwerke, Festplattenlaufwerke, Compact-Disk-Laufwerke, Blu-Ray-Disk-Laufwerke, Redundant Array of Independent Disks-Systeme (RAID-Systeme) und Digital Versatile Disk-Laufwerke (DVD-Laufwerke). In manchen Beispielen implementiert (implementieren) das (die) Massenspeichergerät(e) 2728 den Speicher 125 des konfigurierbaren Prozessorelementarrays 100. Zusätzlich oder alternativ implementiert in manchen Beispielen der flüchtige Speicher 2714 den Speicher 125 des konfigurierbaren Prozessorelementarrays 100.
  • Die maschinenlesbaren Anweisungen 2732, die den Anweisungen von 26 entsprechen, können im Massenspeichergerät 2728, im flüchtigen Speicher 2714, im nichtflüchtigen Speicher 2716, im lokalen Speicher 2713 und/oder auf einem entnehmbaren, nichtflüchtigen computerlesbaren Speichermedium, wie etwa einer CD oder DVD 2736, gespeichert sein.
  • Aus dem Vorstehenden ist zu erkennen, dass beispielhafte konfigurierbare Prozessorelementarrays zum Implementieren von konvolutionellen neuronalen Netzwerken offenbart sind. Offenbarte konfigurierbare Prozessorelementarrays stellen eine kostengünstige programmierbare Deep Neural Network-Hardwarelösung (DNN-Hardwarelösung) bereit, die flexible Datenflusszeitplanabbildungen aufgrund von Abbilden des Datenflusses für eine jeweilige neuronale Netzwerkschicht auf eine von Vektor-Vektor-, Vektor-Matrix-, Matrix-Matrix- oder Skalar-Vektor-Makroanweisungs-Tensorverarbeitungsvorlagen unterstützt. Offenbarte konfigurierbare Prozessorelementarrays können Flexibilität ähnlich jener eines FPGA vorsehen, während sie die Energieeffizienz eines ASIC-Hardwarebeschleunigers beibehalten. Außerdem sind offenbarte konfigurierbare Prozessorelementarrays nicht auf bestimmte Registerdatei- oder Speichergrößen oder -anordnungen beschränkt, und können daher in einem weiten Bereich von Maschinenlernbeschleunigergestaltungen eingesetzt werden. Zudem können offenbarte konfigurierbare Prozessorelementarrays zum Entwickeln von DNN-Beschleunigern benutzt werden, die Energieeffizienz aus Datenwiederverwendung schöpfen. Offenbarte konfigurierbare Prozessorelementarrays zielen dementsprechend auf eine oder mehr Verbesserung(en) an der Arbeitsweise von Computertechnologie ab.
  • Die vorstehende Offenbarung sieht beispielhafte Lösungen zum Implementieren von konvolutionellen neuronalen Netzwerken mit offenbarten konfigurierbaren Prozessorelementarrays vor. Die folgenden weiteren Beispiele, die Gegenstände wie etwa eine Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks, ein nichtflüchtiges computerlesbares Medium, das Anweisungen enthält, die wenn sie ausgeführt werden, bewirken, dass mindestens ein Prozessor eine Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks konfiguriert, und ein Verfahren zum Konfigurieren einer Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks beinhalten, sind hierin offenbart. Die offenbarten Beispiele können individuell und/oder in einer oder mehr Kombinationen implementiert werden.
  • Beispiel 1 ist eine Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks. Die Vorrichtung von Beispiel 1 enthält ein Array von Prozessorelementen, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen. Die Vorrichtung von Beispiel 1 enthält außerdem Konfigurationsregister zum Speichern einer Vielzahl von Deskriptoren, wobei die Deskriptoren das Array von Prozessorelementen zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren sollen, wobei jeweilige der Prozessorelemente basierend auf den Deskriptoren zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfiguriert werden sollen. Die Vorrichtung von Beispiel 1 enthält ferner Speicher zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  • Beispiel 2 enthält den Gegenstand von Beispiel 1, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und die Konfigurationsregister zum Speichern einer zweiten Vielzahl von Deskriptoren neu konfigurierbar ist, wobei die zweite Vielzahl von Deskriptoren das Array von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Beispiel 3 enthält den Gegenstand von Beispiel 2, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  • Beispiel 4 enthält den Gegenstand von jeglichem der Beispiele 1 bis 3, wobei ein erstes Prozessorelement des Arrays von Prozessorelementen enthält:
    1. (i) eine Eingabeaktivierungsregisterdatei zum Speichern von ersten Eingabeaktivierungsdaten, die durch das erste Prozessorelement verarbeitet werden sollen, (ii) eine Filterregisterdatei zum Speichern von ersten Filterdaten, die durch das erste Prozessorelement verarbeitet werden sollen, (iii) eine Ausgabeaktivierungsregisterdatei zum Speichern von ersten Ausgabeaktivierungsdaten, die durch das erste Prozessorelement basierend auf den ersten Eingabeaktivierungsdaten und den ersten Filterdaten erzeugt werden sollen, und (iv) eine endliche Zustandsmaschine zum Steuern des Betriebs des ersten Prozessorelements zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen.
  • Beispiel 5 enthält den Gegenstand von Beispiel 4, wobei die Konfigurationsregister erste Konfigurationsregister sind und das erste Prozessorelement ferner zweite Konfigurationsregister zum Speichern von mindestens einigen der Deskriptoren enthält, wobei die zweiten Konfigurationsregister die endliche Zustandsmaschine konfigurieren sollen.
  • Beispiel 6 enthält den Gegenstand von Beispiel 4, wobei das erste Prozessorelement ferner enthält: (i) eine Multiplizier-und-Akkumuliereinheit zum Ausführen von Multiplikations- und Akkumulationsvorgängen auf die ersten Eingabeaktivierungsdaten und die ersten Filterdaten, (ii) eine elementweise Recheneinheit zum Ausführen von elementweisen Vorgängen auf die ersten Eingabeaktivierungsdaten, (iii) eine Maxpool-Einheit zum Ausführen eines Maxpool-Vorgangs zum Erzeugen der ersten Ausgabeaktivierungsdaten, und (iv) Steuerlogik, die durch die endliche Zustandsmaschine zum Steuern des Betriebs der Multiplizier- und Akkumuliereinheit, der elementweisen Vorgangseinheit und der Maxpool-Einheit konfigurierbar ist.
  • Beispiel 7 enthält den Gegenstand von Beispiel 6, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  • Beispiel 8 enthält den Gegenstand von jeglichen der Beispiele 1 bis 7 und enthält ferner einen Prozessor zum Ausführen von Computeranweisungen zum Schreiben der Vielzahl von Deskriptoren in die Konfigurationsregister.
  • Beispiel 9 enthält den Gegenstand von Beispiel 8, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und der Prozessor eine zweite Vielzahl von Deskriptoren in die Konfigurationsregister schreiben soll, wobei die zweite Vielzahl von Deskriptoren das Array von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Beispiel 10 ist ein nichtflüchtiges computerlesbares Speichermedium, das computerlesbare Anweisungen aufweist, die, wenn sie ausgeführt werden, mindestens einen Prozessor zu Folgendem veranlassen: (i) Schreiben eines ersten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren eines Arrays von Prozessorelementen zum Implementieren einer ersten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem ersten Datenflusszeitplan, der einer ersten einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen, wobei der erste Satz von Deskriptoren jeweilige der Prozessorelemente zum Implementieren der ersten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll, und (ii) Schreiben eines zweiten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei der zweite Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Implementieren der zweiten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll.
  • Beispiel 11 enthält den Gegenstand von Beispiel 10, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Beispiel 12 enthält den Gegenstand von Beispiel 11, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  • Beispiel 13 enthält den Gegenstand von jeglichen der Beispiele 10 bis 12, wobei die Anweisungen, wenn sie ausgeführt werden, den mindestens einen Prozessor ferner zum Schreiben eines dritten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer dritten Schicht eines konvolutionellen neuronalen Netzwerks veranlassen, wobei der dritte Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Ausführen von mindestens einem von elementweisen Vorgängen oder Maxpool-Vorgängen konfigurieren soll.
  • Beispiel 14 enthält den Gegenstand von Beispiel 10 bis 13, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  • Beispiel 15 ist ein Verfahren zum Implementieren eines konvolutionellen neuronalen Netzwerks. Das Verfahren von Beispiel 15 enthält Schreiben, durch Ausführen einer Anweisung mit mindestens einem Prozessor, eines ersten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren eines Arrays von Prozessorelementen zum Implementieren einer ersten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem ersten Datenflusszeitplan, der einer ersten einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen, wobei der erste Satz von Deskriptoren jeweilige der Prozessorelemente zum Implementieren der ersten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll. Das Verfahren von Beispiel 15 enthält außerdem Schreiben, durch Ausführen einer Anweisung mit mindestens einem Prozessor, eines zweiten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei der zweite Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Implementieren der zweiten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll.
  • Beispiel 16 enthält den Gegenstand von Beispiel 15, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Beispiel 17 enthält den Gegenstand von Beispiel 16, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  • Beispiel 18 enthält den Gegenstand von jeglichem der Beispiele 15 bis 17 und enthält ferner Schreiben eines dritten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer dritten Schicht eines konvolutionellen neuronalen Netzwerks, wobei der dritte Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Ausführen von mindestens einem von elementweisen Vorgängen oder Maxpool-Vorgängen konfigurieren soll.
  • Beispiel 19 enthält den Gegenstand von jeglichem der Beispiele 15 bis 18, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  • Beispiel 20 ist eine Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks. Die Vorrichtung von Beispiel 20 enthält ein Array von Prozessorelementen, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen. Die Vorrichtung von Beispiel 20 enthält außerdem Mittel zum Konfigurieren des Arrays von Prozessorelementen basierend auf einer Vielzahl von Deskriptoren zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei die Deskriptoren jeweilige der Prozessorelemente zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren sollen. Die Vorrichtung von Beispiel 20 enthält ferner Mittel zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  • Beispiel 21 enthält den Gegenstand von Beispiel 20, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und das Konfigurationsmittel das Array von Prozessorelementen basierend auf einer zweiten Vielzahl von Deskriptoren zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Beispiel 22 enthält den Gegenstand von Beispiel 21, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  • Beispiel 23 enthält den Gegenstand von jeglichem der Beispiele 20 bis 22, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  • Beispiel 24 enthält den Gegenstand von jeglichem der Beispiele 20 bis 23 und enthält ferner Mittel zum Laden der Vielzahl von Deskriptoren in das Mittel zum Konfigurieren des Arrays von Prozessorelementen.
  • Beispiel 25 enthält den Gegenstand von Beispiel 24, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und das Mittel zum Laden eine zweite Vielzahl von Deskriptoren in das Mittel zum Konfigurieren zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, laden soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  • Obgleich hierin bestimmte beispielhafte Verfahren, Vorrichtungen und Herstellungsgegenstände offenbart wurden, ist der Schutzumfang dieses Patents nicht darauf beschränkt. Vielmehr deckt dieses Patent alle Verfahren, Vorrichtungen und Herstellungsgegenstände ab, die angemessen unter den Schutzumfang der Ansprüche dieses Patents fallen.
  • 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 16/456707 [0014]

Claims (25)

  1. Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks, die Vorrichtung aufweisend: ein Array von Prozessorelementen, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen; Konfigurationsregister zum Speichern einer Vielzahl von Deskriptoren, wobei die Deskriptoren das Array von Prozessorelementen zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren sollen, wobei jeweilige der Prozessorelemente basierend auf den Deskriptoren zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfiguriert werden sollen; und Speicher zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  2. Vorrichtung nach Anspruch 1, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und die Konfigurationsregister zum Speichern einer zweiten Vielzahl von Deskriptoren neu konfigurierbar sind, wobei die zweite Vielzahl von Deskriptoren das Array von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  3. Vorrichtung nach Anspruch 2, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  4. Vorrichtung nach einem der Ansprüche 1 bis 3, wobei ein erstes Prozessorelement des Arrays von Prozessorelementen enthält: eine Eingabeaktivierungsregisterdatei zum Speichern von ersten Eingabeaktivierungsdaten, die durch das erste Prozessorelement verarbeitet werden sollen; eine Filterregisterdatei zum Speichern von ersten Filterdaten, die durch das erste Prozessorelement verarbeitet werden sollen; eine Ausgabeaktivierungsregisterdatei zum Speichern von ersten Ausgabeaktivierungsdaten, die durch das erste Prozessorelement basierend auf den ersten Eingabeaktivierungsdaten und den ersten Filterdaten erzeugt werden sollen; und eine endliche Zustandsmaschine zum Steuern des Betriebs des ersten Prozessorelements zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen.
  5. Vorrichtung nach Anspruch 4, wobei die Konfigurationsregister erste Konfigurationsregister sind und das erste Prozessorelement ferner zweite Konfigurationsregister zum Speichern von mindestens einigen der Deskriptoren enthält, wobei die zweiten Konfigurationsregister die endliche Zustandsmaschine konfigurieren sollen.
  6. Vorrichtung nach Anspruch 4, wobei das erste Prozessorelement ferner enthält: eine Multiplizier-und-Akkumuliereinheit zum Ausführen von Multiplikations- und Akkumulationsvorgängen auf die ersten Eingabeaktivierungsdaten und die ersten Filterdaten; eine elementweise Recheneinheit zum Ausführen von elementweisen Vorgängen auf die ersten Eingabeaktivierungsdaten; eine Maxpool-Einheit zum Ausführen eines Maxpool-Vorgangs zum Erzeugen der ersten Ausgabeaktivierungsdaten; und Steuerlogik, die durch die endliche Zustandsmaschine zum Steuern des Betriebs der Multiplizier- und Akkumuliereinheit, der elementweisen Vorgangseinheit und der Maxpool-Einheit konfigurierbar ist.
  7. Vorrichtung nach einem der Ansprüche 1 bis 6, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  8. Vorrichtung nach einem der Ansprüche 1 bis 4, ferner enthaltend einen Prozessor zum Ausführen von Computeranweisungen zum Schreiben der Vielzahl von Deskriptoren in die Konfigurationsregister.
  9. Vorrichtung nach Anspruch 8, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und der Prozessor eine zweite Vielzahl von Deskriptoren in die Konfigurationsregister schreiben soll, wobei die zweite Vielzahl von Deskriptoren das Array von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  10. Computerlesbares Speichermedium, das computerlesbare Anweisungen aufweist, die, wenn sie ausgeführt werden, mindestens einen Prozessor zu Folgendem veranlassen: Schreiben eines ersten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren eines Arrays von Prozessorelementen zum Implementieren einer ersten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem ersten Datenflusszeitplan, der einer ersten einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen, wobei der erste Satz von Deskriptoren jeweilige der Prozessorelemente zum Implementieren der ersten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll; und Schreiben eines zweiten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei der zweite Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Implementieren der zweiten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll.
  11. Computerlesbares Medium nach Anspruch 10, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  12. Computerlesbares Medium nach Anspruch 11, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  13. Computerlesbares Medium nach einem der Ansprüche 10 bis 12, wobei die Anweisungen, wenn sie ausgeführt werden, den mindestens einen Prozessor ferner zum Schreiben eines dritten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer dritten Schicht eines konvolutionellen neuronalen Netzwerks veranlassen, wobei der dritte Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Ausführen von mindestens einem von elementweisen Vorgängen oder Maxpool-Vorgängen konfigurieren soll.
  14. Computerlesbares Medium nach einem der Ansprüche 10 bis 13, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  15. Verfahren zum Implementieren eines konvolutionellen neuronalen Netzwerks, das Verfahren aufweisend: Schreiben, mit mindestens einem Prozessor, eines ersten Satzes von Deskriptoren in Konfigurationsregister zum Konfigurieren eines Arrays von Prozessorelementen zum Implementieren einer ersten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem ersten Datenflusszeitplan, der einer ersten einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen, wobei der erste Satz von Deskriptoren jeweilige der Prozessorelemente zum Implementieren der ersten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der ersten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll; und Schreiben, mit dem mindestens einen Prozessor, eines zweiten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht eines konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei der zweite Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Implementieren der zweiten der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der zweiten Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren soll.
  16. Verfahren nach Anspruch 15, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  17. Verfahren nach Anspruch 16, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  18. Verfahren nach einem der Ansprüche 15 bis 17, ferner enthaltend Schreiben eines dritten Satzes von Deskriptoren in die Konfigurationsregister zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer dritten Schicht eines konvolutionellen neuronalen Netzwerks, wobei der dritte Satz von Deskriptoren die jeweiligen der Prozessorelemente zum Ausführen von mindestens einem von elementweisen Vorgängen oder Maxpool-Vorgängen konfigurieren soll.
  19. Verfahren nach einem der Ansprüche 15 bis 18, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  20. Vorrichtung zum Implementieren eines konvolutionellen neuronalen Netzwerks, die Vorrichtung aufweisend: ein Array von Prozessorelementen, wobei das Array Zeilen und Spalten enthält, wobei jeweilige der Zeilen eine erste Anzahl von Prozessorelementen aufweisen, jeweilige der Spalten eine zweite Anzahl von Prozessorelementen aufweisen; Mittel zum Konfigurieren des Arrays von Prozessorelementen basierend auf einer Vielzahl von Deskriptoren zum Implementieren einer Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem Datenflusszeitplan, der einer einer Vielzahl von Tensorverarbeitungsvorlagen entspricht, wobei die Deskriptoren jeweilige der Prozessorelemente zum Implementieren der einen der Vielzahl von Tensorverarbeitungsvorlagen zum Einwirken auf Eingabeaktivierungsdaten und Filterdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, zum Erzeugen von Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind, konfigurieren sollen; und Mittel zum Speichern der Eingabeaktivierungsdaten, der Filterdaten und der Ausgabeaktivierungsdaten, die mit der Schicht des konvolutionellen neuronalen Netzwerks assoziiert sind.
  21. Vorrichtung nach Anspruch 20, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und das Konfigurationsmittel das Array von Prozessorelementen basierend auf einer zweiten Vielzahl von Deskriptoren zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, konfigurieren soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
  22. Vorrichtung nach Anspruch 21, wobei die Vielzahl von Tensorverarbeitungsvorlagen eine Vektor-Vektor-Vorlage, eine Vektor-Matrix-Vorlage und eine Matrix-Matrix-Vorlage enthält.
  23. Vorrichtung nach einem der Ansprüche 20 bis 22, wobei die erste Anzahl gleich der zweiten Anzahl ist.
  24. Vorrichtung nach Anspruch 20, ferner enthaltend Mittel zum Laden der Vielzahl von Deskriptoren in das Mittel zum Konfigurieren des Arrays von Prozessorelementen.
  25. Vorrichtung nach Anspruch 24, wobei die Schicht eine erste Schicht des konvolutionellen neuronalen Netzwerks ist, die Vielzahl von Deskriptoren eine erste Vielzahl von Deskriptoren ist, die eine der Vielzahl von Tensorverarbeitungsvorlagen eine erste der Vielzahl von Tensorverarbeitungsvorlagen ist und das Mittel zum Laden eine zweite Vielzahl von Deskriptoren in das Mittel zum Konfigurieren zum Konfigurieren des Arrays von Prozessorelementen zum Implementieren einer zweiten Schicht des konvolutionellen neuronalen Netzwerks basierend auf einem zweiten Datenflusszeitplan, der einer zweiten der Vielzahl von Tensorverarbeitungsvorlagen entspricht, laden soll, wobei die zweite der Vielzahl von Tensorverarbeitungsvorlagen von der ersten der Vielzahl von Tensorverarbeitungsvorlagen abweicht.
DE102020131050.1A 2019-12-24 2020-11-24 Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken Pending DE102020131050A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/726,709 2019-12-24
US16/726,709 US20200134417A1 (en) 2019-12-24 2019-12-24 Configurable processor element arrays for implementing convolutional neural networks

Publications (1)

Publication Number Publication Date
DE102020131050A1 true DE102020131050A1 (de) 2021-06-24

Family

ID=70326906

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102020131050.1A Pending DE102020131050A1 (de) 2019-12-24 2020-11-24 Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken

Country Status (5)

Country Link
US (1) US20200134417A1 (de)
KR (1) KR20210082058A (de)
CN (1) CN113033765A (de)
DE (1) DE102020131050A1 (de)
TW (1) TW202127324A (de)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US11422781B1 (en) * 2020-02-04 2022-08-23 Xilinx, Inc. Generation of vector codes for tensor convolutions
US11507831B2 (en) * 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US11537860B2 (en) * 2020-03-23 2022-12-27 Arm Limited Neural net work processing
CN112100118B (zh) * 2020-08-05 2021-09-10 中科驭数(北京)科技有限公司 神经网络计算方法、装置和存储介质
US20220114135A1 (en) * 2020-09-21 2022-04-14 Mostafizur Rahman Computer architecture for artificial intelligence and reconfigurable hardware
US11928472B2 (en) 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers
US20220147826A1 (en) * 2020-11-06 2022-05-12 Moffett Technologies Co., Limited Method and system for convolution with workload-balanced activation sparsity
US11922178B2 (en) 2021-06-25 2024-03-05 Intel Corporation Methods and apparatus to load data within a machine learning accelerator
US11494627B1 (en) * 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US20220075659A1 (en) * 2021-11-18 2022-03-10 Intel Corporation Runtime configurable register files for artificial intelligence workloads
US20230177000A1 (en) * 2021-12-07 2023-06-08 Centre For Intelligent Multidimensional Data Analysis Limited Tensor processor and a method for processing tensors
CN114327676A (zh) * 2021-12-28 2022-04-12 北京航天自动控制研究所 一种面向卷积神经网络的高可靠加速器
WO2023129491A1 (en) * 2021-12-31 2023-07-06 Ascenium, Inc. Compute element processing using control word templates
US20230259758A1 (en) * 2022-02-16 2023-08-17 Moffett International Co., Limited Adaptive tensor compute kernel for sparse neural network
CN115600652B (zh) * 2022-11-29 2023-04-07 深圳市唯特视科技有限公司 卷积神经网络处理装置、高速目标探测方法以及设备
CN116702852B (zh) * 2023-08-02 2023-10-20 电子科技大学 基于多阶段事件驱动的动态重构神经网络加速电路及系统

Also Published As

Publication number Publication date
US20200134417A1 (en) 2020-04-30
CN113033765A (zh) 2021-06-25
KR20210082058A (ko) 2021-07-02
TW202127324A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
DE102020131050A1 (de) Konfigurierbare prozessorelementarrays zum implementieren von konvolutionellen neuronalen netzwerken
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
DE102018006735A1 (de) Prozessoren und Verfahren für konfigurierbares Clock-Gating in einem räumlichen Array
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE102018005169A1 (de) Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen
DE102018006889A1 (de) Prozessoren und Verfahren für bevorzugte Auslegung in einem räumlichen Array
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE102015109124B4 (de) Cache-Wegvorhersage
DE112013004770T5 (de) Lese- und -Schreibmaskenaktualisierungsbefehl zur Vektorisierung rekursiver Berechnungen über unabhängige Daten
TWI690896B (zh) 影像處理器、由其執行之方法、及非暫態機器可讀儲存媒體
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE102021128292A1 (de) Skalierbare semantische bildsuche mit deep- template- matching
DE112021002631T5 (de) Bilderzeugung unter verwendung eines oder mehrerer neuronaler netzwerke
DE102019112353A1 (de) Lade/speicher-befehl
CN111105023B (zh) 数据流重构方法及可重构数据流处理器
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102019112352A1 (de) Registerdateien in einem multithread-prozessor
DE112013004800T5 (de) Anweisung zur Bitverschiebung nach links mit Ziehen von Einsen in niedrigwertigere Bit
Que et al. Mapping large LSTMs to FPGAs with weight reuse
CN113449859A (zh) 一种数据处理方法及其装置
US11763131B1 (en) Systems and methods for reducing power consumption of convolution operations for artificial neural networks
DE102021205525A1 (de) Animation von inhalten unter verwendung eines oder mehrerer neuronaler netzwerke
CN117751366A (zh) 神经网络加速器及神经网络加速器的数据处理方法
DE112020005789T5 (de) Hierarchische partitionierung von operatoren