DE112020005799T5 - Effiziente Ausnutzung eines Verarbeitungselementarrays - Google Patents

Effiziente Ausnutzung eines Verarbeitungselementarrays Download PDF

Info

Publication number
DE112020005799T5
DE112020005799T5 DE112020005799.2T DE112020005799T DE112020005799T5 DE 112020005799 T5 DE112020005799 T5 DE 112020005799T5 DE 112020005799 T DE112020005799 T DE 112020005799T DE 112020005799 T5 DE112020005799 T5 DE 112020005799T5
Authority
DE
Germany
Prior art keywords
input
data
filter
neural network
input feature
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
DE112020005799.2T
Other languages
English (en)
Inventor
Jeffrey T. Huynh
Ron Diamant
Hongbin Zheng
Yizhi Liu
Animesh Jain
Yida Wang
Vinod Sharma
Richard John Heaton
Randy Renfu Huang
Sundeep Amirineni
Drazen Borkovic
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.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
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 Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of DE112020005799T5 publication Critical patent/DE112020005799T5/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/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
    • 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/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)
  • Image Processing (AREA)

Abstract

Ein computerimplementiertes Verfahren beinhaltet Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines Verarbeitungselementarrays, wobei das neuronale Netzmodell eine Faltungsoperation an einem Satz von Eingabemerkmalskarten und einem Satz von Filtern beinhaltet. Das Verfahren beinhaltet außerdem Bestimmen, basierend auf dem neuronalen Netzmodell, dass die Faltungsoperation weniger als eine Schwellenwertanzahl von Zeilen in dem Verarbeitungselementarray verwendet, um einen Satz von Filterelementen auf den Satz von Eingabemerkmalskarten anzuwenden, wobei der Satz von Filterelementen ein einzelnes Filterelement in jedem Filter des Satzes von Filtern beinhaltet. Das Verfahren beinhaltet ferner Erzeugen, für die Faltungsoperation und basierend auf dem neuronalen Netzmodell, einer ersten Anweisung und einer zweiten Anweisung zur Ausführung durch entsprechende Zeilen in dem Verarbeitungselementarray, wobei die erste Anweisung und die zweite Anweisung unterschiedliche Filterelemente eines Filters in dem Satz von Filtern verwenden.

Description

  • AUFNAHME DURCH QUERVERWEIS
  • Ein Antragsformular wird gleichzeitig mit dieser Beschreibung als Teil der vorliegenden Anmeldung eingereicht. Jede Anmeldung, deren Vorteil oder Priorität die vorliegende Anmeldung beansprucht, wie im gleichzeitig eingereichten Antragsformular angegeben ist, wird durch Bezugnahme in ihrer Gesamtheit und für alle Zwecke in den vorliegenden Gegenstand mit einbezogen
  • ALLGEMEINER STAND DER TECHNIK
  • Künstliche neuronale Netze sind Rechensysteme mit einer Architektur, die auf biologischen neuronalen Netzen basiert. Künstliche neuronale Netze können mithilfe von Trainingsdaten trainiert werden, um zu lernen, wie eine bestimmte Aufgabe ausgeführt wird, wie etwa Identifizieren oder Klassifizieren von physischen Objekten, Aktivitäten, Figuren usw. anhand von Bildern oder Videos. Ein künstliches neuronales Netz kann mehrere Schichten von Verarbeitungsknoten beinhalten. Jeder Verarbeitungsknoten auf einer Schicht kann Berechnungen an Eingabedaten durchführen, die von Verarbeitungsknoten auf der vorhergehenden Schicht erzeugt wurden, um Ausgabedaten zu erzeugen. Beispielsweise kann ein Verarbeitungsknoten einen Satz von arithmetischen Operationen wie Multiplikationen und Additionen ausführen, um eine Zwischenausgabe zu erzeugen, oder Nachverarbeitungsoperationen an der Zwischenausgabe durchführen. Die Größe der in jeder Schicht verwendeten Daten, wie etwa die Dimensionen der Eingabedaten für jeden Eingabekanal, die Anzahl der Eingabekanäle, die Anzahl der auf die Eingabedaten anzuwendenden Gewichtungen und dergleichen, kann von Schicht zu Schicht variieren. Somit können die Anzahl der Operationen (z. B. Matrixmultiplikationen) und die Größen der Daten, die für jede Operation verwendet werden, die in jeder Schicht durchgeführt wird, von Schicht zu Schicht variieren.
  • Figurenliste
  • Verschiedene Ausführungsformen gemäß der vorliegenden Offenbarung werden unter Bezugnahme auf die Zeichnungen beschrieben, in denen Folgendes gilt:
    • 1 veranschaulicht ein Beispiel eines mehrschichtigen künstlichen neuronalen Netzes;
    • 2 veranschaulicht ein Beispiel eines neuronalen Faltungsnetzes (convolutional neural network - CNN);
    • 3A und 3B veranschaulichen Faltungsoperationen, die an einem Eingabepixelarray durch ein Beispiel einer Faltungsschicht in einem neuronales Faltungsnetz durchgeführt werden;
    • 4A-4E veranschaulichen Beispiele für Faltungs-, nichtlineare Aktivierungs- und Pooling-Operationen, die an einem Beispiel von Eingabepixeldaten durchgeführt werden;
    • 5 veranschaulicht ein Beispiel eines Modells für eine Faltungsschicht eines neuronalen Faltungsnetzes;
    • 6 veranschaulicht ein Beispiel einer Faltungsoperation, die einen Stapel (N = 1) von C Kanälen von Eingabedaten und M Sätzen von C Filtern umfasst;
    • 7 ist ein vereinfachtes Blockdiagramm, das ein Beispiel einer integrierten Schaltungsvorrichtung zum Durchführen von neuronalen Netzoperationen gemäß bestimmten Ausführungsformen veranschaulicht;
    • 8 veranschaulicht ein vereinfachtes Beispiel einer gewichtsstationären Faltung unter Verwendung eines Beispiels einer Rechenmaschine, die ein Verarbeitungselementarray gemäß bestimmten Ausführungsformen beinhaltet;
    • 9A und 9B veranschaulichen ein Beispiel des Ladens mehrerer Filterelemente in ein Verarbeitungselementarray, um das Verarbeitungselementarray effizienter zu nutzen, und des gemeinsamen Nutzens von Eingabedaten durch Zeilen des Verarbeitungselementarrays zur Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen;
    • 10 veranschaulicht ein Beispiel des Replizierens von aus einem Speicher gelesenen Eingabemerkmalskarten zum Senden an mehrere Zeilen eines Verarbeitungselementarrays gemäß bestimmten Ausführungsformen;
    • 11 beinhaltet ein vereinfachtes Blockdiagramm eines Beispiels einer Eingabeauswahlschaltung zum Auswählen von Eingabedaten zur parallelen Verarbeitung durch ein Verarbeitungselementarray unter Verwendung mehrerer Filterelemente gemäß bestimmten Ausführungsformen;
    • 12 veranschaulicht ein weiteres Beispiel des Replizierens von Eingabedaten zur parallelen Verarbeitung durch ein Verarbeitungselementarray unter Verwendung mehrerer Filterelemente gemäß bestimmten Ausführungsformen;
    • 13 veranschaulicht ein Beispiel einer aufgefüllten Eingabemerkmalskarte für eine Faltungsoperation gemäß bestimmten Ausführungsformen;
    • 14 veranschaulicht ein Beispiel für das Laden eines ersten Satzes von Filterelementen in ein Verarbeitungselementarray und das gemeinsame Nutzen eines ersten Satzes von Daten in der Eingabemerkmalskarte von 13 durch Zeilen des Verarbeitungselementarrays zur parallelen Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen;
    • 15 veranschaulicht ein Beispiel für das Laden eines zweiten Satzes von Filterelementen in ein Verarbeitungselementarray und das gemeinsame Nutzen eines zweiten Satzes von Daten in der Eingabemerkmalskarte von 13 durch Zeilen des Verarbeitungselementarrays zur parallelen Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen;
    • 16 veranschaulicht ein Beispiel der Partitionierung von Daten in der Eingabemerkmalskarte von 13 in mehrere kleinere Merkmalskarten für kleinere Matrixmultiplikationen unter Verwendung eines Verarbeitungselementarrays gemäß bestimmten Ausführungsformen;
    • 17A und 17B veranschaulichen ein Beispiel des Ladens mehrerer Filterelemente in ein Verarbeitungselementarray und des gemeinsamen Nutzens von Eingabedaten durch Zeilen des Verarbeitungselementarrays zur parallelen Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen;
    • 18 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum effizienteren Verwenden eines Verarbeitungselementarrays veranschaulicht, während das Übertragen von Daten aus dem Speicher gemäß bestimmten Ausführungsformen reduziert wird;
    • 19 beinhaltet ein Blockdiagramm eines Beispiels eines Hostsystems; und
    • 20 beinhaltet ein Blockdiagramm eines Beispiels einer Beschleunigungsengine.
  • DETAILLIERTE BESCHREIBUNG
  • Hierin offenbarte Techniken beziehen sich im Allgemeinen auf künstliche neuronale Netze und insbesondere auf eine effizientere Nutzung eines Verarbeitungselementarrays, um ein künstliches neuronales Netz umzusetzen, während die Datenübertragung aus dem Speicher reduziert wird. Ein künstliches neuronales Netz kann im Allgemeinen mehrere Verarbeitungsknoten beinhalten, die auf zwei oder mehr Schichten angeordnet sind, wobei Verarbeitungsknoten auf einer einen Schicht mit Verarbeitungsknoten auf einer anderen Schicht verbunden sein können. Jeder Verarbeitungsknoten auf einer Schicht kann einen Strom von Eingabedatenelementen empfangen, jedes Eingabedatenelement mit einer Gewichtung multiplizieren, eine gewichtete Summe der Eingabedatenelemente berechnen und die gewichtete Summe an die nächste Schicht weiterleiten. Die Größe der in jeder Schicht verwendeten Daten, wie etwa die Dimensionen der Eingabedaten für jeden Kanal, die Anzahl der Kanäle, die Anzahl der auf die Eingabedaten anzuwendenden Filter, die Dimensionen jedes Filters und dergleichen, kann von Schicht zu Schicht variieren. Beispielsweise kann in vielen neuronalen Netzen die Anzahl der Kanäle zunehmen, wenn das Netz tiefer wird, während die Größe jedes Kanals abnehmen kann. Somit können die Anzahl der Operationen (z. B. Matrixmultiplikationen) und die Größen der Daten, die für jede Operation verwendet werden, die in jeder Schicht durchgeführt wird, von Schicht zu Schicht variieren. Die zugrunde liegende Hardware zum Umsetzen des neuronalen Netzes, wie etwa eine Grafikverarbeitungseinheit (graphic processing unit - GPU) oder ein Verarbeitungselementarray, kann im Allgemeinen eine bestimmte Anzahl von Verarbeitungselementen (z. B. vorkonfigurierte Anzahlen von Spalten und/oder Zeilen) und begrenzten Speicherplatz und/oder Bandbreite aufweisen. Somit kann für bestimmte Schichten dieselbe zugrunde liegende Hardware nicht vollständig genutzt werden, um die arithmetischen Operationen effizient auszuführen. Beispielsweise kann die Anzahl der Eingabekanäle in der ersten Schicht eines ResNet-50-Netzes drei sein, während die Anzahl der Zeilen in einem Verarbeitungselementarray viel größer sein kann, wie beispielsweise 128. Somit kann die Nutzungsrate des Verarbeitungselementarrays geringer als beispielsweise 3 % sein.
  • Gemäß bestimmten Ausführungsformen kann ein Compiler ein neuronales Netzmodell kompilieren, um Anweisungen zum effizienteren Verwenden eines Verarbeitungselement(PE)-Arraysfür eine Faltungsoperation zu erzeugen, die eine kleine Anzahl von Eingabekanälen verwendet. Der Compiler kann Anweisungen zum Laden mehrerer Filterelemente eines Filters in mehrere Zeilen des PE-Arrays und zum Replizieren von Daten in einer Eingabemerkmalskarte zur Verwendung durch die mehreren Zeilen erzeugen, um die mehreren Filterelemente gleichzeitig auf die Eingabemerkmalskarte anzuwenden. In einigen Ausführungsformen kann die Kompilierung sowohl auf Graphebene als auch auf Tensorebene durchgeführt werden. Auf der Graphebene kann der Compiler eine Faltungsoperation identifizieren, die das PE-Array nicht effizient nutzt, und dem neuronalen Netzmodell Operationen zum Auffüllen einer Eingabemerkmalskarte, die von der Faltungsoperation verwendet wird, hinzufügen, die aufgefüllte Eingabemerkmalskarte in kleinere Partitionen aufteilen, die Faltungsoperation in mehrere kleinere Faltungen aufteilen, die auf den kleineren Partitionen arbeiten, und bestimmte Auffülldaten verwerfen, beispielsweise basierend auf dem Stride der Faltung. Auf der Tensorebene kann der Compiler Anweisungen erzeugen, um mehrere Filterelemente eines Filters in mehrere Zeilen des PE-Arrays zu laden, aus einem Speicher gelesene Eingabedaten für die Verwendung durch die mehreren Zeilen zu replizieren und Ergebnisse zu verwerfen, die unter Verwendung bestimmter Auffülldaten erzeugt wurden.
  • Hierin offenbarte Techniken können die Nutzungsrate eines Hardwaresystems zum Umsetzen eines neuronalen Netzes verbessern, das Faltungsoperationen unter Verwendung einer kleinen Anzahl von Eingabekanälen beinhalten kann. Hierin offenbarte Techniken können auch den Speicherplatz und die Speicherbandbreite verringern, die zum Speichern oder Übertragen der von den mehreren Zeilen des PE-Arrays verwendeten Eingabedaten verwendet werden. Zusätzlich können die hier offenbarten Techniken basierend auf dem neuronalen Netzmodell und dem Hardwaresystem automatisch Operationen identifizieren, die das Hardwaresystem (z. B. das PE-Array) nicht ausreichend auslasten, eine solche Operation in mehrere Unteroperationen aufteilen, die von dem PE-Array parallel durchgeführt werden können, die Eingabedaten in Partitionen zur Verwendung durch die Unteroperationen aufteilen und Anweisungen für eine effiziente Ausführung durch das Hardwaresystem erzeugen, um das neuronale Netz umzusetzen.
  • In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Zwecken der Erläuterung werden konkrete Konfigurationen und Einzelheiten dargelegt, um ein umfassendes Verständnis der Beispiele bereitzustellen. Dem Fachmann ist jedoch außerdem ersichtlich, dass das Beispiel ohne die konkreten Einzelheiten umgesetzt sein kann. Darüber hinaus können hinlänglich bekannte Merkmale weggelassen oder vereinfacht sein, um die beschriebenen Ausführungsformen nicht unverständlich zu machen. Die Figuren und die Beschreibung sollen nicht einschränkend sein. Die Begriffe und Ausdrücke, die in dieser Offenbarung verwendet wurden, werden als Begriffe zur Beschreibung und nicht zur Einschränkung verwendet, und die Verwendung solcher Begriffe und Ausdrücke erfolgt nicht in der Absicht, Äquivalente der gezeigten und beschriebenen Merkmale oder Teile davon auszuschließen. Das Wort „Beispiel“ wird hier in der Bedeutung „als Beispiel, Exemplar oder Veranschaulichung dienend“ verwendet. Eine hierin als „Beispiel“ beschriebene Ausführungsform oder Gestaltung ist nicht unbedingt als bevorzugt oder vorteilhaft gegenüber anderen Ausführungsformen oder Gestaltungen zu verstehen.
  • Künstliche neuronale Netze (auch als „neuronale Netze“ bezeichnet) wurden in der maschinellen Lernforschung und in industriellen Anwendungen verwendet und haben viele bahnbrechende Ergebnisse erzielt, beispielsweise in der Bilderkennung, Spracherkennung, Computervision, Textverarbeitung und dergleichen. Ein künstliches neuronales Netz kann mehrere Verarbeitungsknoten beinhalten, die auf zwei oder mehr Schichten angeordnet sind, wobei Verarbeitungsknoten auf einer einen Schicht mit Verarbeitungsknoten auf einer anderen Schicht verbunden sein können. Die Verarbeitungsknoten können in Schichten unterteilt werden, die beispielsweise eine Eingabeschicht, eine Anzahl von Zwischenschichten (auch als verborgene Schichten bekannt) und eine Ausgabeschicht beinhalten. Jeder Verarbeitungsknoten auf einer Schicht (z. B. einer Eingabeschicht, einer Zwischenschicht usw.) kann einen Strom von Eingabedatenelementen empfangen, jedes Eingabedatenelement mit einer Gewichtung multiplizieren, eine gewichtete Summe der Eingabedatenelemente berechnen und die gewichtete Summe an die nächste Schicht weiterleiten. Ein künstliches neuronales Netz, wie etwa ein neuronales Faltungsnetz, kann Tausende oder mehr von Verarbeitungsknoten und Millionen oder mehr von Gewichtungen und Eingabedatenelementen beinhalten.
  • 1 veranschaulicht ein Beispiel eines mehrschichtigen neuronalen Netzes 100. Das mehrschichtige neuronale Netz 100 kann eine Eingabeschicht 110, eine verborgene (oder Zwischen-)Schicht 120 und eine Ausgabeschicht 130 beinhalten. In vielen Umsetzungen kann das mehrschichtige neuronale Netz 100 zwei oder mehr verborgene Schichten beinhalten und kann als tiefes neuronales Netz bezeichnet werden. Ein neuronales Netz mit einer einzigen verborgenen Schicht kann im Allgemeinen ausreichen, um eine beliebige kontinuierliche Funktion zu modellieren. Ein solches Netz benötigt jedoch möglicherweise eine exponentiell größere Anzahl von Knoten im Vergleich zu einem neuronalen Netz mit mehreren verborgenen Schichten. Es hat sich gezeigt, dass ein tieferes neuronales Netz so trainiert werden kann, dass es viel besser funktioniert als ein vergleichsweise flaches Netz.
  • Die Eingabeschicht 110 kann eine Vielzahl von Eingabeknoten (z. B. Knoten 112, 114 und 116) beinhalten, die Informationen (z. B. Eingabedaten) von der Außenwelt an das Netz bereitstellen können. Die Eingabeknoten können die Informationen an die nächste Schicht weitergeben, und es kann keine Berechnung durch die Eingabeknoten durchgeführt werden. Die verborgene Schicht 120 kann eine Vielzahl von Knoten beinhalten, wie etwa Knoten 122, 124 und 126. Die Knoten in der verborgenen Schicht dürfen keine direkte Verbindung zur Außenwelt aufweisen (daher der Name „verborgen“). Sie können Berechnungen durchführen und Informationen von den Eingabeknoten an die nächsten Schichten (z. B. eine andere verborgene Schicht oder Ausgabeschicht 130) übertragen. Während ein neuronales Feedforward-Netz eine einzelne Eingabeschicht und eine einzelne Ausgabeschicht aufweisen kann, kann es null oder mehrere verborgene Schichten aufweisen. Die Ausgabeschicht 130 kann eine Vielzahl von Ausgabeknoten beinhalten, die für das Berechnen und Übertragen von Informationen von dem Netz an die Außenwelt verantwortlich sind, wie beispielsweise das Erkennen bestimmter Objekte oder Aktivitäten oder das Bestimmen einer Bedingung oder einer Aktion.
  • Wie in 1 gezeigt, kann in einem neuronalen Feedforward-Netz ein Knoten (mit Ausnahme des Bias-Knotens, falls vorhanden) Verbindungen zu allen Knoten (mit Ausnahme des Bias-Knotens, falls vorhanden) in der unmittelbar vorhergehenden Schicht und der unmittelbar nächsten Schicht aufweisen. Somit können die Schichten als vollständig verbundene Schichten bezeichnet werden. Allen Verbindungen zwischen Knoten können Gewichtungen zugeordnet sein, auch wenn nur einige dieser Gewichtungen in 1 gezeigt werden. Für ein komplexes Netz kann es Hunderte oder Tausende von Knoten und Tausende oder Millionen von Verbindungen zwischen den Knoten geben.
  • Wie vorstehend beschrieben, kann ein neuronales Feedforward-Netz null (als Einzelschicht-Perzeptron bezeichnet) oder eine oder mehrere verborgene Schichten (als Mehrschicht-Perzeptron (multi-layer perceptron - MLP) bezeichnet) beinhalten. Obwohl 1 nur eine einzelne verborgene Schicht in dem mehrschichtigen Perzeptron zeigt, kann ein mehrschichtiges Perzeptron eine oder mehrere verborgene Schichten beinhalten (zusätzlich zu einer Eingabeschicht und einer Ausgabeschicht). Ein neuronales Feedforward-Netz mit vielen verborgenen Schichten kann als tiefes neuronales Netz bezeichnet werden. Während ein einschichtiges Perzeptron möglicherweise nur lineare Funktionen lernt, kann ein mehrschichtiges Perzeptron nichtlineare Funktionen lernen.
  • In dem in 1 gezeigten Beispiel kann der Knoten 112 ein Bias-Knoten mit einem Wert von 1 oder ein regulärer Eingabeknoten sein. Die Knoten 114 und 116 können externe Eingaben X1 und X2 annehmen, die je nach Eingabedatensatz numerische Werte sein können. Wie vorstehend erörtert, wird auf der Eingabeschicht 110 keine Berechnung durchgeführt, und somit sind die Ausgaben von den Knoten 112, 114 und 116 auf der Eingabeschicht 110 1, X1 bzw. X2, die in die verborgene Schicht 120 eingespeist werden.
  • In dem in 1 gezeigten Beispiel kann der Knoten 122 ein Bias-Knoten mit einem Wert von 1 oder ein regulärer Netzknoten sein. Die Ausgaben der Knoten 124 und 126 in der verborgenen Schicht 120 können von den Ausgaben der Eingabeschicht 110 (z. B. 1, X1, X2 usw.) und den den Verbindungen 115 zugeordneten Gewichtungen abhängen. Beispielsweise kann der Knoten 124 numerische Eingaben X1 und X2 annehmen und kann Gewichtungen w1 und w2 aufweisen, die diesen Eingaben zugeordnet sind. Zusätzlich kann der Knoten 124 eine andere Eingabe (als Bias bezeichnet) aufweisen, wie etwa 1, mit einer ihr zugeordneten Gewichtung w0. Die Hauptfunktion des Bias besteht darin, jedem Knoten einen trainierbaren konstanten Wert bereitzustellen (zusätzlich zu den normalen Eingaben, die der Knoten empfängt). Der Bias-Wert kann es ermöglichen, die Aktivierungsfunktion nach links oder rechts zu verschieben. Es sei angemerkt, dass, obwohl nur drei Eingaben zum Knoten 124 in 1 gezeigt sind, ein Knoten in verschiedenen Umsetzungen zehn, hundert, tausend oder mehr Eingaben und zugeordnete Gewichtungen beinhalten kann.
  • Die Ausgabe Y von dem Knoten 124 kann berechnet werden durch: Y = ƒ ( w 1 × X 1 + w 2 × X 2 + w 0 × B i a s ) ,
    Figure DE112020005799T5_0001
    wobei die Funktion f eine nichtlineare Funktion sein kann, die häufig als Aktivierungsfunktion bezeichnet wird. Wenn ein Knoten K Eingänge aufweist, kann die Ausgabe des Knotens berechnet werden durch: Y = ƒ ( i = 0 K w i X i ) .
    Figure DE112020005799T5_0002
  • Somit kann die Berechnung auf jeder neuronalen Netzschicht als eine Multiplikation einer Eingabematrix und einer Gewichtungsmatrix und einer Aktivierungsfunktion, die auf die Produkte der Matrixmultiplikation angewendet wird, beschrieben werden. Die Ausgaben von den Knoten auf einer Zwischenschicht können dann in Knoten auf der nächsten Schicht, wie etwa der Ausgabeschicht 130, eingespeist werden.
  • Die Aktivierungsfunktion kann Nichtlinearität in die Ausgabe eines neuralen Netzknotens einbringen. Ein Beispiel für eine Aktivierungsfunktion ist die Sigmoidfunktion σ(x), die eine reellwertige Eingabe in einen Wert zwischen 0 und 1 umwandelt. Ein weiteres Beispiel für eine Aktivierungsfunktion ist die tanh-Funktion, die eine reellwertige Eingabe in einen Wert im Bereich von [-1,1] umwandelt. Ein drittes Beispiel für eine Aktivierungsfunktion ist die Funktion der gleichgerichteten linearen Einheit (ReLU), die eine reellwertige Eingabe nimmt und einen Schwellenwert über null setzt (z. B. negative Werte durch null ersetzt). Eine weitere beispielhafte Aktivierungsfunktion ist die Leaky-ReLU-Funktion.
  • Die Ausgabeschicht 130 in dem in 1 gezeigten Beispiel kann Knoten 132 und 134 beinhalten, die Eingaben von der verborgenen Schicht 120 annehmen und ähnliche Berechnungen durchführen wie die verborgenen Knoten unter Verwendung von Gewichtungen, die den Verbindungen 125 zugeordnet sind. Die Berechnungsergebnisse (Y1 und Y2) sind die Ausgaben des mehrschichtigen Perzeptrons. In einigen Umsetzungen kann in einem MLP zur Klassifizierung eine Softmax-Funktion als Aktivierungsfunktion in der Ausgabeschicht verwendet werden. Die Softmax-Funktion kann einen Vektor von reellwertigen Werten annehmen und ihn auf einen Vektor von Werten zwischen null und eins abbilden, die sich zu eins summieren, beispielsweise für die Objektklassifizierung.
  • Wie vorstehend beschrieben, sind den Verbindungen zwischen Knoten benachbarter Schichten in einem künstlichen neuronalen Netz Gewichtungen zugeordnet, wobei die Gewichtungen bestimmen können, was der Ausgabevektor für einen gegebenen Eingabevektor ist. Ein Lern- oder Trainingsprozess kann diesen Verbindungen geeignete Gewichtungen zuweisen. In einigen Umsetzungen können die Anfangswerte der Gewichtungen zufällig zugewiesen werden. Für jede Eingabe in einem Trainingsdatensatz kann die Ausgabe des künstlichen neuronalen Netzes beobachtet und mit der erwarteten Ausgabe verglichen werden, und der Fehler zwischen der erwarteten Ausgabe und der beobachteten Ausgabe kann zurück zur vorherigen Schicht propagiert werden. Die Gewichtungen können basierend auf dem Fehler entsprechend angepasst werden. Dieser Vorgang wird wiederholt, bis der Ausgabefehler unter einem vorgegebenen Schwellenwert liegt.
  • In vielen Situationen ist die Verwendung des vorstehend beschriebenen neuronalen Feedforward-Netzes für reale Anwendungen, wie etwa die Bildklassifizierung, möglicherweise nicht praktikabel, beispielsweise aufgrund der Größe der Eingabedaten und der Anzahl der zu trainierenden und anzuwendenden Gewichtungen. Eine Möglichkeit, diese Probleme zu überwinden, besteht darin, neuronale Faltungsnetze zu verwenden, die Faltungen unter Verwendung kleinerer Faltungsfilter statt der großen Matrixmultiplikationen, wie vorstehend beschrieben, durchführen. Ein und derselbe Filter kann für viele Stellen über das Bild hinweg verwendet werden, wenn die Faltung durchgeführt wird. Das Lernen eines Satzes von Faltungsfiltern (z. B. 7×7-Matrizen) kann viel einfacher und schneller sein als das Lernen einer großen Gewichtungsmatrix für eine vollständig verbundene Schicht.
  • Ein neuronales Faltungsnetz (ConvNet oder CNN) kann Operationen durchführen, die beispielsweise (1) Faltung; (2) Nichtlinearitäts- (oder Aktivierungs-)Funktion (z. B. ReLU); (3) Pooling oder Sub-Sampling; und (4) Klassifizierung beinhalten. Unterschiedliche CNN können unterschiedliche Kombinationen dieser vier Hauptoperationen sowie andere zusätzliche Operationen aufweisen. Beispielsweise kann ein RESNet-50-Netz Netzschichten beinhalten, die hauptsächlich Faltungsschichten und einige Pooling-Schichten beinhalten, und kann auch Residue-Add-Operationen zum Lernen von Residuen durchführen.
  • 2 veranschaulicht ein Beispiel eines neuronalen Faltungsnetzes (CNN) 200 für die Bild- oder andere Objektklassifizierung. Wie vorstehend beschrieben, kann das CNN 200 vier Arten von Operationen durchführen, beinhaltend Faltung, Nichtlinearitäts-(oder Aktivierungs-)Funktion (z. B. ReLU), Pooling oder Sub-Sampling und Klassifizierung (vollständig verbundene Schicht). Ein zu klassifizierendes Objekt 210, wie etwa ein oder mehrere Eingabebilder oder andere Eingabedatensätze (als Eingabemerkmalskarten bezeichnet), kann durch eine Matrix von Pixelwerten dargestellt werden. Beispielsweise kann das Objekt 210 mehrere Kanäle (z. B. mehrere Eingabemerkmalskarten) beinhalten, wobei jeder Kanal eine bestimmte Komponente des Objekts 210 darstellt. Beispielsweise kann ein Bild von einer Digitalkamera mindestens einen roten Kanal, einen grünen Kanal und einen blauen Kanal aufweisen, wobei jeder Kanal durch eine 2-D-Matrix von Pixeln mit Pixelwerten im Bereich von beispielsweise 0 bis 255 (d. h. 8-Bit) dargestellt werden kann. Ein Graustufenbild kann nur einen Kanal aufweisen. In der folgenden Beschreibung wird die Verarbeitung eines einzelnen Bildkanals unter Verwendung von CNN 200 beschrieben. Andere Kanäle können ähnlich verarbeitet werden.
  • Wie in 2 gezeigt, kann das Objekt 210 (z. B. Eingabebilder) zunächst durch eine erste Faltungsschicht 215 unter Verwendung eines ersten Satzes von Filtern verarbeitet werden, wobei die erste Faltungsschicht 215 eine Faltung zwischen einer Matrix, die das Eingabebild darstellt, und einer Matrix, die jeden Filter im ersten Satz von Filtern darstellt, durchführen kann. Die Faltung kann eine Multimatrixmultiplikation beinhalten. Die erste Faltungsschicht 215 kann auch eine nichtlineare Aktivierungsfunktion (z. B. ReLU) ausführen. Eine Ausgabematrix 220 von der ersten Faltungsschicht 215 kann kleinere Abmessungen als das Eingabebild aufweisen. Die erste Faltungsschicht 215 kann Faltungen an dem Eingabebild unter Verwendung des ersten Satzes von Filtern durchführen, um mehrere Ausgabematrizen 220 zu erzeugen, die als Ausgabemerkmalskarten der ersten Faltungsschicht 215 bezeichnet werden können. Die Anzahl der verwendeten Filter kann als Tiefe der Faltungsschicht bezeichnet werden. In dem in 2 gezeigten Beispiel kann die erste Faltungsschicht 215 eine Tiefe von drei aufweisen. Jede Ausgabematrix 220 (z. B. eine Ausgabemerkmalskarte) kann an eine Pooling-Schicht 225 weitergeleitet werden, wo jede Ausgabematrix 220 Subsampling oder Downsampling unterzogen werden kann, um eine Matrix 230 zu erzeugen.
  • Jede Matrix 230 kann durch eine zweite Faltungsschicht 235 unter Verwendung eines zweiten Satzes von Filtern verarbeitet werden. Eine nichtlineare Aktivierungsfunktion (z. B. ReLU) kann auch durch die zweiten Faltungsschicht 235 wie vorstehend beschrieben durchgeführt werden. Eine Ausgabematrix 240 (z. B. eine Ausgabemerkmalskarte) von der zweiten Faltungsschicht 235 kann kleinere Dimensionen als die Matrix 230 aufweisen. Die zweite Faltungsschicht 235 kann Faltungen an der Matrix 230 unter Verwendung des zweiten Satzes von Filtern durchführen, um mehrere Ausgabematrizen 240 zu erzeugen. In dem in 2 gezeigten Beispiel kann die zweite Faltungsschicht 235 eine Tiefe von sechs aufweisen. Jede Ausgabematrix 240 kann an eine Pooling-Schicht 245 weitergeleitet werden, wo jede Ausgabematrix 240 einem Subsampling oder Downsampling unterzogen werden kann, um eine Matrix 250 zu erzeugen.
  • Die Ausgabematrizen 250 von der Pooling-Schicht 245 können durch eine Abflachungsschicht 255 zu Vektoren abgeflacht und durch eine vollständig verbundene Schicht 260 (z. B. ein mehrschichtiges Perzeptron (MLP)) geleitet werden. Die vollständig verbundene Schicht 260 kann eine Eingabeschicht 270 beinhalten, die den 2-D-Ausgabevektor von der Abflachungsschicht 255 annimmt. Die vollständig verbundene Schicht 260 kann auch eine verborgene Schicht und eine Ausgabeschicht 290 beinhalten. Die vollständig verbundene Schicht 260 kann das Objekt im Eingabebild unter Verwendung von Merkmalskarten oder der Ausgabematrix 250 und beispielsweise einer Softmax-Funktion in eine von mehreren Kategorien klassifizieren. Die Operation der vollständig verbundenen Schicht kann durch Matrixmultiplikationen dargestellt werden. Wenn zum Beispiel M Knoten auf der Eingabeschicht 270 und N Knoten auf der verborgenen Schicht 280 vorhanden sind, können die Gewichtungen der Verbindungen zwischen den M Knoten auf der Eingabeschicht 270 und den N Knoten auf der verborgenen Schicht 280 durch eine Matrix W dargestellt werden, die M×N Elemente beinhaltet, kann die Ausgabe Y der verborgenen Schicht 280 durch Y = X×W bestimmt werden.
  • Die Faltungsoperationen in einem CNN können verwendet werden, um Merkmale aus dem Eingabebild zu extrahieren. Die Faltungsoperationen können die räumliche Beziehung zwischen Pixeln durch Extrahieren von Bildmerkmalen unter Verwendung kleiner Bereiche des Eingabebildes bewahren. Bei einer Faltung kann eine Matrix (als Filter, Kernel oder Merkmalsdetektor bezeichnet) mit einer bestimmten Schrittgröße (als Stride bezeichnet) über das Eingabebild (oder eine Merkmalskarte) gleiten. Für jede Position (oder jeden Schritt) können elementweise Multiplikationen zwischen der Filtermatrix und der überlappenden Matrix im Eingabebild berechnet und summiert werden, um einen endgültigen Wert zu erzeugen, der ein einzelnes Element einer Ausgabematrix (z. B. einer Merkmalskarte) darstellt. Ein Filter kann wirksam sein, um bestimmte Merkmale aus dem ursprünglichen Eingabebild zu erkennen.
  • Die Faltung unter Verwendung eines Filters (oder eines Filtersatzes) über einem Eingabepixelarray kann verwendet werden, um eine Merkmalskarte zu erzeugen, und die Faltung unter Verwendung eines anderen Filters (oder eines anderen Filtersatzes) über demselben Eingabepixelarray kann eine andere Merkmalskarte erzeugen. In der Praxis kann ein CNN die Gewichtung der Filter während des Trainingsprozesses selbsttätig lernen, basierend auf einigen benutzerspezifischen Parametern (die als Hyperparameter bezeichnet werden können), wie etwa der Anzahl von Filtern, der Filtergröße, der Architektur des Netzes usw. Je höher die Anzahl der verwendeten Filter, desto mehr Bildmerkmale können extrahiert werden und desto besser kann das Netz Muster in neuen Bildern erkennen.
  • Die Größen der ausgegebenen Merkmalskarten können basierend auf Parametern bestimmt werden, wie etwa Tiefe, Stride und Nullauffüllung. Wie vorstehend beschrieben, kann die Tiefe der Anzahl von Filtern (oder Sätzen von Filtern) entsprechen, die für die Faltungsoperation verwendet werden. Beispielsweise werden in dem in 2 gezeigten CNN 200 in der ersten Faltungsschicht 215 drei verschiedene Filter verwendet, um Faltungsoperationen an dem Eingabebild durchzuführen, wodurch drei verschiedene Ausgabematrizen (oder Merkmalskarten) 220 erzeugt werden. Stride ist die Anzahl der Pixel, um die die Filtermatrix über das Eingabepixelfeld geschoben wird. Wenn beispielsweise der Stride eins ist, wird die Filtermatrix jeweils um ein Pixel bewegt. Wenn der Stride zwei ist, wird die Filtermatrix um zwei Pixel auf einmal bewegt. Ein größerer Stride kann kleinere Merkmalskarten erzeugen. In einigen Umsetzungen kann die Eingabematrix um den Rand herum mit Nullen aufgefüllt werden, sodass die Filtermatrix auf angrenzende Elemente des Eingabepixelarrays angewendet werden kann. Das Auffüllen mit Nullen kann eine Steuerung der Größe der Merkmalskarten ermöglichen.
  • Wie in 2 gezeigt, kann eine zusätzliche nichtlineare Operation unter Verwendung einer Aktivierungsfunktion (z. B. ReLU) nach jeder Faltungsoperation verwendet werden. ReLU ist eine elementweise Operation, die alle negativen Pixelwerte in der Merkmalskarte durch null ersetzt. Der Zweck der ReLU-Operation besteht darin, Nichtlinearität in das CNN einzubringen. Andere vorstehend beschriebene nichtlineare Funktionen, wie etwa die Tanh- oder Sigmoid-Funktion, können ebenfalls verwendet werden, aber es hat sich herausgestellt, dass ReLU in vielen Situationen bessere Ergebnisse erbringt.
  • Räumliches Pooling (auch als Subsampling oder Downsampling bezeichnet) kann die Dimensionen jeder Merkmalskarte reduzieren, während die wichtigsten Informationen beibehalten werden. Insbesondere kann das Pooling die Merkmalsdimensionen kleiner und handhabbarer machen und die Anzahl von Parametern und Berechnungen im Netz reduzieren. Räumliches Pooling kann auf verschiedene Arten durchgeführt werden, wie etwa Max-Pooling, Mittelwert-Pooling, Summen-Pooling usw. Beim Max-Pooling kann das größte Element in jeder räumlichen Nachbarschaft (z. B. einem 2×2-Fenster) verwendet werden, um die räumliche Nachbarschaft darzustellen. Anstatt das größte Element zu nehmen, kann der Mittelwert (für Mittelwert-Pooling) oder die Summe (für Summen-Pooling) aller Elemente in jedem Fenster verwendet werden, um die räumliche Nachbarschaft darzustellen. In vielen Anwendungen kann Max-Pooling besser funktionieren als andere Pooling-Techniken.
  • In dem in 2 gezeigten Beispiel werden zwei Sätze von Faltungs- und Pooling-Schichten verwendet. Es sei angemerkt, dass diese Operationen beliebig oft in einem einzigen CNN wiederholt werden können. Außerdem darf nicht nach jeder Faltungsschicht eine Pooling-Schicht verwendet werden. Beispielsweise kann ein CNN in einigen Umsetzungen mehrere Faltungs- und ReLU-Operationen durchführen, bevor eine Pooling-Operation durchgeführt wird.
  • Der Trainingsprozess eines neuronalen Faltungsnetzes, wie etwa CNN 200, kann dem Trainingsprozess für ein beliebiges neuronales Feedforward-Netz ähnlich sein. Zunächst können alle Parameter und Gewichtungen (einschließlich der Gewichtungen in den Filtern und Gewichtungen für die vollständig verbundene Schicht) mit zufälligen Werten (oder den Parametern eines bekannten neuronalen Netzes) initialisiert werden. Zweitens kann das neuronale Faltungsnetz ein Trainingsmuster (z. B. ein Trainingsbild) als Eingabe annehmen, die Vorwärtspropagierungsschritte durchführen (einschließlich Faltung, nichtlineare Aktivierung und Pooling-Operationen, zusammen mit den Vorwärtspropagierungsoperationen in der vollständig verbundenen Schicht) und die Ausgabewahrscheinlichkeit für jede mögliche Klasse bestimmen. Da die Parameter des neuronalen Faltungsnetzes, wie beispielsweise die Gewichtungen, für das Trainingsbeispiel zufällig zugewiesen werden, können auch die Ausgabewahrscheinlichkeiten zufällig sein.
  • Am Ende des Trainingsprozesses können alle Gewichtungen und Parameter des CNN optimiert worden sein, um die Trainingsproben aus dem Trainingsdatensatz korrekt zu klassifizieren. Wenn eine unsichtbare Probe (z. B. eine Testprobe oder eine neue Probe) in das CNN eingegeben wird, kann das CNN den Vorwärtsausbreitungsschritt durchlaufen und eine Wahrscheinlichkeit für jede Klasse unter Verwendung der trainierten Gewichtungen und Parameter ausgeben, die als ein Inferenz- (oder Vorhersage-) Prozess im Vergleich zum Trainingsprozess bezeichnet werden können. Wenn der Trainingsdatensatz ausreichend ist, kann das trainierte Netz die unsichtbare Probe in eine korrekte Klasse klassifizieren.
  • 3A und 3B veranschaulichen Faltungsoperationen, die an einem Eingabepixelarray 320 unter Verwendung eines Filters 310 durch eine Faltungsschicht in einem neuronalen Faltungsnetz durchgeführt werden. Ein Eingabepixelarray 320 kann ein Eingabebild, einen Kanal eines Eingabebilds oder eine Merkmalskarte beinhalten, die von einer anderen Faltungsschicht oder Pooling-Schicht erzeugt wird. 3A veranschaulicht die Faltungsoperation, die in einem ersten Schritt an einem ersten Bereich 322 des Eingabepixelarrays 320 durchgeführt wird. 3B veranschaulicht die Faltungsoperation, die an einem zweiten Bereich 324 des Eingabepixelarrays 320 in einem zweiten Schritt nach dem Verschieben des Filters 310 um einen Schritt durchgeführt wird.
  • Filter 310 kann eine zweidimensionale Matrix beinhalten, wobei jedes Element der 2-D-Matrix eine Gewichtung darstellt. Die Gewichtungen im Filter 310 können so gestaltet oder trainiert werden, dass sie bestimmte Merkmale aus der räumlichen Verteilung der Pixelwerte im Bild erfassen oder extrahieren. Die extrahierten Merkmale können für ein menschliches Auge von Bedeutung sein oder auch nicht. Es können unterschiedliche Filter verwendet werden, um unterschiedliche Merkmale aus dem Eingabepixelarray zu erkennen oder zu extrahieren. Beispielsweise können einige Filter verwendet werden, um Kanten in einem Bild zu erkennen oder um ein Bild zu schärfen oder zu verwischen. Der Filter 310 kann R Zeilen (Höhe) und S Spalten (Breite) aufweisen und kann typischerweise kleiner sein als das Eingabepixelarray 320, das eine Höhe von H Pixeln und eine Breite von W Pixeln aufweisen kann. Jede Gewichtung im Filter 310 kann auf ein Pixel in einem Bereich mit R Zeilen und S Spalten im Eingabepixelarray 320 abgebildet werden. Wie beispielsweise in 3A gezeigt, kann eine Faltungsschicht (z. B. die erste Faltungsschicht 215 oder die zweite Faltungsschicht 235) oder ein Verarbeitungsknoten der Faltungsschicht Pixelwerte für eine Region 322 (mit R×S Pixeln) des Eingabepixelarrays 320 empfangen, elementweise Multiplikationen zwischen entsprechenden Elementen im Filter 310 und der Region 322 durchführen und die Produkte der elementweisen Multiplikationen summieren, um einen Faltungsausgabewert 332 zu erzeugen. Mit anderen Worten, der Faltungsausgabewert 332 kann die Summe der Multiplikationsergebnisse zwischen den Gewichten im Filter 310 und den entsprechenden Pixeln in der Region 322 gemäß i = 1 R × S
    Figure DE112020005799T5_0003
    xiwi sein, das heißt ein Punktprodukt zwischen einer Matrix W, die den Filter 310 darstellt, und einer Matrix X, die die Pixelwerte der Region 322 darstellt.
  • In gleicher Weise kann die Faltungsschicht (z. B. ein anderer Verarbeitungsknoten der Faltungsschicht), wie in 3B gezeigt, Pixelwerte für eine Region 324 (mit R×S Pixeln) des Eingabepixelarrays 320 empfangen, elementweise Multiplikationen zwischen entsprechenden Elementen im Filter 310 und der Region 324 durchführen und die Produkte der elementweisen Multiplikationen summieren, um einen Faltungsausgabewert 334 zu erzeugen. Wie in 3B gezeigt, können die Faltungsoperationen in einem Gleitfenster in einem vorgegebenen Stride D durchgeführt werden. Der Stride ist die Anzahl der Pixel, um die die Filtermatrix über das Eingabepixelfeld geschoben wird. Beispielsweise kann sich in dem in 3B gezeigten Beispiel die Region 324 in einem Abstand D (in Form von Pixeln) von der Region 322 befinden, und die nächste Region für die nächste Faltungsoperation kann sich in demselben Abstand D von der Region 324 befinden. Der Stride D kann kleiner oder größer sein als die Breite S des Filters 310.
  • Die Ausgaben der Faltungsoperationen können eine Faltungsausgabematrix 330 mit einer Höhe von E Zeilen und einer Breite von F Spalten bilden. Wie vorstehend beschrieben, kann die Matrix 330 als Merkmalskarte bezeichnet werden. Die Dimensionen der Matrix 330 können kleiner sein als das Eingabepixelarray 320 und kann auf der Grundlage der Dimensionen des Eingabepixelarrays 320, der Dimensionen des Filters 310 und des Strides D bestimmt werden. Wie oben beschrieben, kann das Eingabepixelarray 320 in einigen Umsetzungen mit Nullen am Rand aufgefüllt werden, sodass der Filter 310 auf die angrenzenden Elemente des Eingabepixelarrays 320 angewendet werden kann. Das Auffüllen mit Nullen kann die Steuerung der Größe der Merkmalskarte (z. B. Matrix 330 ) ermöglichen. Wenn die Auffüllgröße auf jeder Seite eines 2-D-Eingabepixelarrays 320 P ist, ist die Höhe E der Matrix 330 E = H R + 2 P D + 1
    Figure DE112020005799T5_0004
    und die Breite F der Matrix 330 F = W S + 2 P D + 1.
    Figure DE112020005799T5_0005
    Wenn beispielsweise der Stride D sowohl in horizontaler als auch in vertikaler Richtung gleich einem Pixel ist, kann E gleich H-R+2P+1 sein und F kann gleich W-S+2P+1 sein. Ein größerer Stride D kann kleinere Merkmalskarten erzeugen.
  • 4A-4E veranschaulichen Beispiele für Faltungs-, nichtlineare Aktivierungs- und Pooling-Operationen, die an einem Beispiel von Eingabepixeldaten durchgeführt werden. Die Eingabepixeldaten können beispielsweise ein digitales Bild, einen Kanal eines digitalen Bildes oder eine Merkmalskarte darstellen, die von einer vorherigen Schicht in einem neuronalen Faltungsnetz erzeugt wurde. 4A veranschaulicht eine beispielhafte Eingabematrix 410, die die beispielhaften Eingabepixeldaten beinhaltet. Die Eingabematrix 410 kann ein 6×6-Pixel-Array beinhalten, wobei jedes Element des Pixel-Arrays eine reelle Zahl beinhalten kann, wie etwa eine ganze Zahl oder eine Gleitkommazahl. 4B veranschaulicht einen beispielhaften Filter 420. Der Filter 420 kann eine 3×3-Matrix beinhalten, wobei jedes Element der Matrix eine Gewichtung des Filters darstellt. Der Filter 420 kann verwendet werden, um bestimmte Merkmale aus der Eingabematrix 410 zu extrahieren. Der beispielhafte Filter 420, der in 4B gezeigt ist, kann ein Filter zum Erfassen von Kanten in einem Bild sein.
  • Die Eingabematrix 410 und der Filter 420 können gefaltet werden, um eine Ausgabematrix 430 zu erzeugen, wie in 4C gezeigt. Jedes Element in der Ausgabematrix 430 kann die Summe der elementweisen Multiplikationen (z. B. Punktprodukt) zwischen den entsprechenden Elementen in Filter 420 und einem überlappenden Bereich 412 der Eingabematrix 410 sein und kann in jedem Schritt bestimmt werden, indem ein Fenster mit den gleichen Dimensionen wie Filter 420 (z. B. 3×3) mit einem bestimmten Stride (z. B. 1 Element horizontal und/oder vertikal) über die Eingabematrix 410 gleitet. Beispielsweise kann der Wert des Elements 432 in Zeile 1 und Spalte 3 der Ausgabematrix 430 das Punktprodukt zwischen der Matrix sein, die das Filter 420 darstellt, und einer Matrix, die den Bereich 412 der Eingabematrix 410 darstellt, wobei 2×0+1×1+0×0×1+3×(-4)+2×1+2×0+1×1+1×0 = 1+5-12+2+1 = -3. In gleicher Weise kann der Wert des Elements 434 in Zeile 4 und Spalte 1 der Ausgabematrix 430 das Punktprodukt zwischen der Matrix, die den Filter 420 darstellt, und einer Matrix sein, die den Bereich 414 der Eingabematrix 410 darstellt, wobei 0×0+2×1+1×0+0×1+0×(-4)+1×1+5×0+3×1+2×0 = 2+1+3 = 6. Bei einer Eingabematrix 410 mit einem 6×6-Pixel-Array und einem Filter 420, der durch eine 3×3-Matrix dargestellt wird, kann die Ausgabematrix 430 eine 4×4-Matrix sein, wenn der verwendete Stride ein Element oder Pixel beträgt.
  • Eine nichtlineare Aktivierungsfunktion (z. B. ReLU, Sigmoid, Tanh usw.) kann dann auf die Ausgabematrix 430 angewendet werden, um eine Matrix 440 zu erzeugen, wie in 4D gezeigt. In dem in 4D gezeigten Beispiel wird die ReLU-Funktion verwendet, und somit werden alle negativen Werte in der Ausgabematrix 430 in der Matrix 440 durch Nullen ersetzt. Eine Pooling-Operation (z. B. eine Max-, Mittelwert- oder Summen-Pooling-Operation) kann auf die Matrix 440 angewendet werden, um Daten in der Matrix 440 Subsampling oder Downsampling zu unterziehen. In dem in 4D und 4E gezeigten Beispiel kann eine Max-Pooling-Operation auf die Matrix 440 angewendet werden, wobei die 4×4-Matrix 440 in vier 2×2-Bereiche 442, 444, 446 und 448 unterteilt werden kann. Der Maximalwert jeder Region kann als Subsample ausgewählt werden, das jede Region darstellt. Beispielsweise wird ein Maximalwert von 9 aus der Region 442 ausgewählt, ein Maximalwert von 2 wird aus der Region 444 ausgewählt, ein Maximalwert von 5 wird aus der Region 446 ausgewählt und ein Maximalwert von 6 wird aus der Region 448 ausgewählt. Somit kann nach den Operationen Faltung, nichtlineare Aktivierung und Pooling eine Merkmalskarte 450 mit vier Elementen 9, 2, 6 und 5 aus der 6×6-Eingabematrix 410 erzeugt werden.
  • 5 veranschaulicht ein Beispiel eines Modells 500 für eine Faltungsschicht eines neuronalen Faltungsnetzes, das beispielsweise in der Bildverarbeitung verwendet wird. Wie in dem Beispiel dargestellt, können mehrere (z. B. N) 3-D-Eingaben 520-1, ... und 520-N in die Faltungsschicht vorliegen. Jede 3-D-Eingabe kann C Kanäle von 2-D-Eingabemerkmalskarten (mit den Dimensionen H×W) beinhalten. Für die erste Faltungsschicht in einem CNN, wie beispielsweise einem ResNet-50, kann eine 3-D-Eingabe beispielsweise drei Kanäle von 2-D-Bildern beinhalten, wie beispielsweise die roten, grünen und blauen Farbkanäle. Mehrere (z. B. M) 3-D-Filter 510-1, ... und 510-M, die j eweils C 2-D-Filter der Dimensionen R×S aufweisen, können mit den N 3-D-Eingaben 520-1, ... und 520-N (z. B. N Stapel von C Eingabemerkmalskarten der Dimensionen H×W) gefaltet werden, um mehrere (z. B. N) 3-D-Ausgaben 530-1, ... und 530-N zu erzeugen, wobei jede der 3-D-Ausgaben 530-1, ... und 530-N M Ausgabemerkmalskarten beinhalten kann (auch als Ausgabekanäle bezeichnet). Jeder 3-D-Filter 510-1, ... oder 510-M (mit den Dimensionen C×R×S) kann auf eine 3-D-Eingabe 520-1, ... oder 520-N (mit dem Unfang C×H×W) angewendet werden, um eine Ausgabemerkmalskarte (mit den Dimensionen E×F, wie vorstehend in Bezug auf 3A und 3B beschrieben) in einer 3-D-Ausgabe 530-1, ... oder 530-N zu erzeugen, die M Eingabemerkmalskarten beinhaltet, und somit können M 3-D-Filter verwendet werden, um die M Ausgabemerkmalskarten in einer 3-D-Ausgabe 530-1, ... oder 530-N für eine 3-D-Eingabe 520-1, ... oder 520-N zu erzeugen. Beispielsweise kann der 3-D-Filter 510-1 auf die 3-D-Eingabe 520-1 angewendet werden, um eine Ausgabemerkmalskarte 530-1-1 zu erzeugen, ... und der 3-D-Filter 510-M kann auf die 3-D-Eingabe 520-1 angewendet werden, um eine Ausgabemerkmalskarte 530-1-M zu erzeugen. Dieselben M3-D-Filter 510-1, ... und 510-M können auf jede 3-D-Eingabe 520-1, ... oder 520-N angewendet werden, um die entsprechende 3-D-Ausgabe 530-1, ... oder 530-N zu erzeugen, die M Ausgabemerkmalskarten beinhaltet. Beispielsweise kann der 3-D-Filter 510-1 auf die 3-D-Eingabe 520-N angewendet werden, um eine Ausgabemerkmalskarte 530-N-1 zu erzeugen, und der 3-D-Filter 510-M kann auf die 3-D-Eingabe 520-N angewendet werden, um eine Ausgabemerkmalskarte 530-N-M zu erzeugen. Somit liegen N 3-D-Eingaben und N 3-D-Ausgaben vor, wobei jede 3-D-Ausgabe M Ausgabemerkmalskarten beinhaltet.
  • Genauer gesagt, wie in 5 gezeigt, können bei einer 3-D-Eingabe 520-1, ... oder 520-N und einem 3-D-Filter 510-1, ... oder 510-M die C 2-D-Filter (jeweils mit den Dimensionen R×S) in einem 3-D-Filter 510-m den C Kanälen der 2-D-Eingabemerkmalskarten (jeweils mit den Dimensionen H×W) in der 3-D-Eingabe entsprechen, und die Faltungsoperation zwischen jedem 2-D-Filter der C 2-D-Filter und dem entsprechenden Kanal der C Kanäle der 2-D-Eingabemerkmalskarten kann durchgeführt werden. Die Faltungsergebnisse für C Paare von 2-D-Filtern und entsprechenden 2-D-Eingabemerkmalskarten können summiert werden, um eine Faltungsausgabe (z. B. ein Pixel) Oe,f m auf einer Ausgabemerkmalskarte mit Index m in den M Ausgabemerkmalskarten in einer 3-D-Ausgabe 530-1, ... oder 530-N wie folgt zu erzeugen: O e , f m = r = 0 R 1 s = 0 S 1 c = 0 C 1 X C e D + r , f D + s × W c , m r , s ,
    Figure DE112020005799T5_0006
    wobei m dem Index der Ausgabemerkmalskarte und dem Index des 3-D-Filters in den M 3-D-Filtern entspricht. Xc eD+r,fD+s ist der Wert eines Pixels mit einer horizontalen Pixelkoordinate von eD+r und einer vertikalen Pixelkoordinate von fD+s in einer Eingabemerkmalskarte des Index C in den C Kanälen von 2-D-Eingabemerkmalskarten in einer 3-D-Eingabe.D ist die Gleitfenster-Stride-Distanz. e und ƒ sind die Koordinaten des Ausgabepixels in der entsprechenden Ausgabemerkmalskarte der M Ausgabemerkmalskarten und können einem bestimmten Gleitfenster entsprechen. r und s entsprechen einer bestimmten Stelle (z. B. einem Pixel oder Element) innerhalb eines Gleitfensters oder eines 2-D-Filters. Wc,m r,s ist eine Gewichtung, die einem Pixel an einer Stelle (r, s) eines 2-D-Filters mit dem Index C in dem 3-D-Filter mit dem Index m entspricht. Gleichung (3) zeigt an, dass zum Berechnen jeder Ausgabe der Faltung (z. B. Pixel) 0e,f m an einer Stelle (e, f) auf einer Ausgabemerkmalskarte m jedes Pixel Xc eD+r,fD+s innerhalb eines Gleitfensters in einer Eingabemerkmalskarte mit Index C mit einer entsprechenden Gewichtung Wc,m r,s multipliziert werden kann, um ein Produkt zu erzeugen, die Teilsumme der Produkte für die Pixel innerhalb jedes Gleitfensters in der Eingabemerkmalskarte mit Index C berechnet werden kann und dann eine Summe der Teilsummen für alle C Eingabemerkmalskarten berechnet werden kann, um den Wert des Pixels Oe, f m an einer Stelle (e, f) in der entsprechenden Ausgabemerkmalskarte mit Index m in den M Ausgabemerkmalskarten zu bestimmen.
  • In einem Beispiel für 3-D-Filter 510-1 und 3-D-Eingabe 520-1 kann jeder 2-D-Filter 512 in den C 2-D-Filtern im 3-D-Filter 510-1 einer entsprechenden Eingabemerkmalskarte 522 in der 3-D-Eingabe 520-1 entsprechen und verwendet werden, um mit der entsprechenden Eingabemerkmalskarte 522 zu falten (z. B. zu filtern), wobei jedes Pixel in einem Gleitfenster 524 in der Eingabemerkmalskarte 522 mit einem entsprechenden Pixel im 2-D-Filter 512 multipliziert werden kann, um ein Produkt zu erzeugen, und die Produkte für alle Pixel im Gleitfenster 524 können summiert werden, um eine Teilsumme zu erzeugen. Die Teilsummen für die C 2-D-Filter 512 (und die entsprechende Eingabemerkmalskarte 522) können addiert werden, um ein Ausgabepixel 532 an einer Stelle (e,f) auf der Ausgabemerkmalskarte 530-1-1 in der 3-D-Ausgabe 530-1 zu erzeugen. Das Gleitfenster 524 kann auf allen C Eingabemerkmalskarten 522 in der 3-D-Eingabe 520-1 auf der Grundlage der Strides D in den beiden Dimensionen verschoben werden, um ein weiteres Ausgabepixel 532 an einer anderen Stelle der Ausgabemerkmalskarte 530-1-1 in der 3-D-Ausgabe 530-1 zu erzeugen. Das Gleitfenster 524 kann wiederholt auf allen C Eingabemerkmalskarten 522 zusammen verschoben werden, bis alle Ausgabepixel 532 auf der Ausgabemerkmalskarte 530-1-1 in der 3-D-Ausgabe 530-1 erzeugt wurden.
  • Jeder 3-D-Filter 510-2, ... oder 510-M kann zur Faltung mit der 3-D-Eingabe 520-1 verwendet werden, wie oben in Bezug auf den 3-D-Filter 510-1 beschrieben, um die jeweilige entsprechende Ausgabemerkmalskarte 530-1-2, ... oder 530-1-M in der 3-D-Ausgabe 530-1 zu erzeugen. In ähnlicher Weise kann jeder 3-D-Filter 510-1, ... oder 510-M zur Faltung mit der 3-D-Eingabe 520-N verwendet werden, wie vorstehend in Bezug auf den 3-D-Filter 510-1 und die 3-D-Eingabe 520-1 beschrieben, um jede entsprechende Ausgabemerkmalskarte 530-N-1, ... oder 530-N-M in der 3-D-Ausgabe 530-N zu erzeugen.
  • 6 veranschaulicht ein Beispiel für eine Faltungsoperation mit einem Stapel (N=1) von C Kanälen (C = 3) von Eingabedaten 620 und M Sätzen (M = 2) von C Filtern (C=3). Das in 6 gezeigte Beispiel kann ein spezifisches Beispiel des Modells 500 sein, das mit Bezug auf 5 beschrieben wurde, wobei die Anzahl der Stapel N eins ist. Wie veranschaulicht beinhalten die Eingabedaten 620 drei Eingabemerkmalskarten 622, 622 und 624 (z. B. Eingabekanäle), die jeweils einem Eingabekanal entsprechen. Die Filter beinhalten einen ersten Satz von Filtern 610-1 und einen zweiten Satz von Filtern 610-2 , wobei der erste Satz von Filtern 610-1 drei 2-D-Filter 612-1, 614-1 und 616-1 beinhalten kann und ein zweiter Satz von Filtern 610-2 drei 2-D-Filter 612-2, 614-2 und 616-2 beinhalten kann.
  • Jeder 2-D-Filter 612-1, 614-1 oder 616-1 im ersten Filtersatz 610-1 kann mit der entsprechenden Eingabemerkmalskarte 622, 622 oder 624 gefaltet werden, und die Ergebnisse der Faltungen für die drei Eingabemerkmalskarten können addiert werden, um eine Ausgabemerkmalskarte 630-1 in den Ausgabemerkmalskarten 630 zu erzeugen. Beispielsweise können die Pixel im Filter 612-1 mit den entsprechenden Pixeln im Fenster 622-1 der Eingabemerkmalskarte 622 multipliziert und die Produkte addiert werden, um eine erste Teilsumme zu erzeugen. Die Pixel im Filter 614-1 können mit den entsprechenden Pixeln im Fenster 624-1 auf der Eingabemerkmalskarte 624 multipliziert werden und die Produkte können addiert werden, um eine zweite Teilsumme zu erzeugen. Die Pixel im Filter 616-1 können mit den entsprechenden Pixeln im Fenster 626-1 auf der Eingabemerkmalskarte 626 multipliziert werden und die Produkte können addiert werden, um eine dritte Teilsumme zu erzeugen. Die erste, zweite und dritte Teilsumme können addiert werden, um ein Ausgabepixel 632-1 auf der Ausgabemerkmalskarte 630-1 zu erzeugen. Andere Ausgabepixel auf der Ausgabemerkmalskarte 630-1 können auf die gleiche Weise erzeugt werden, indem die Fenster oder Filter auf den Eingabemerkmalskarten zusammen verschoben werden.
  • In ähnlicher Weise kann jeder 2-D-Filter 612-2, 614-2 oder 616-2 im zweiten Satz von Filtern 610-2 mit der entsprechenden Eingabemerkmalskarte 622, 622 oder 624 gefaltet werden, und die Ergebnisse der Faltungen für die drei Eingabemerkmalskarten können summiert werden, um eine Ausgabemerkmalskarte 630-2 in den Ausgabemerkmalskarten 630 zu erzeugen. Beispielsweise können die Pixel im Filter 612-2 mit den entsprechenden Pixeln im Fenster 622-1 der Eingabemerkmalskarte 622 multipliziert und die Produkte addiert werden, um eine erste Teilsumme zu erzeugen. Die Pixel im Filter 614-2 können mit den entsprechenden Pixeln im Fenster 624-1 auf der Eingabemerkmalskarte 624 multipliziert werden und die Produkte können addiert werden, um eine zweite Teilsumme zu erzeugen. Die Pixel im Filter 616-2 können mit den entsprechenden Pixeln im Fenster 626-1 auf der Eingabemerkmalskarte 626 multipliziert werden und die Produkte können addiert werden, um eine dritte Teilsumme zu erzeugen. Die erste, zweite und dritte Teilsumme können addiert werden, um ein Ausgabepixel 632-2 auf der Ausgabemerkmalskarte 630-2 zu erzeugen. Andere Ausgabepixel auf der Ausgabemerkmalskarte 630-2 können auf die gleiche Weise erzeugt werden, indem die Fenster oder Filter auf den Eingabemerkmalskarten zusammen verschoben werden.
  • Der Betrieb eines neuronalen Netzes (z. B. die Durchführung von Inferenzen), wie er durch die oben beschriebenen Modelle veranschaulicht wird, umfasst im Allgemeinen das Abrufen von Eingabedaten oder Eingabeaktivierungen, die parallele Ausführung von Multiplikations- und Akkumulationsoperationen für jeden Knoten in einer Schicht und das Bereitstellen von Ausgabeaktivierungen. Die optimale Leistung eines neuronalen Netzes, gemessen an der Reaktionszeit, kann erreicht werden, wenn eine Hardware-Architektur in der Lage ist, hochgradig parallele Berechnungen durchzuführen. Spezielle oder domänenspezifische Prozessoren für neuronale Netze können bei der Ausführung eines neuronalen Netzes eine bessere Leistung erzielen als CPUs und GPUs. Neuronale Netzprozessoren können eine räumliche Architektur verwenden, die ein Array von Verarbeitungselementen (processing element - PE) beinhaltet, in der die Verarbeitungselemente Verarbeitungsketten bilden und Daten direkt von einem Verarbeitungselement zum anderen weiterleiten können. Dadurch kann die Anzahl der Speichertransaktionen erheblich reduziert werden. In einigen Beispielen können die Gewichtungen oder Eingaben in das Verarbeitungselementarray vorgeladen werden. In einigen Beispielen können neuronale Netzprozessoren auch einen On-Chip-Puffer beinahlten, der Werte speichern kann, die aus dem Prozessorspeicher gelesen werden, und der Werte an mehrere Rechen-Engines im Prozessor verteilen kann. Die Rechen-Engines können ferner eine kleine lokale Registerdatei (z. B. einen kleinen Speicher) zum Speichern von Zwischenergebnissen beinhalten. Das Vorhandensein einer On-Chip-Speicherhierarchie kann die Effizienz des Betriebs eines neuronalen Netzes verbessern, indem Speicherlatenzen reduziert werden.
  • 7 ist ein Blockdiagramm, das ein Beispiel einer integrierten Schaltungsvorrichtung zum Durchführen von neuronalen Netzoperationen, wie etwa Tensor-Operationen, gemäß bestimmten Ausführungsformen veranschaulicht. Das in 7 gezeigte Beispiel beinhaltet einen Beschleuniger 702. In verschiedenen Beispielen kann der Beschleuniger 702 Berechnungen für einen Satz von Eingabedaten (z. B. Eingabedaten 750) unter Verwendung eines Verarbeitungselementarrays 710, einer Aktivierungs-Engine 716 und/oder einer Pooling-Engine 718 durchführen. In einigen Beispielen kann der Beschleuniger 702 eine Komponente einer integrierten Schaltung eines Prozessors sein, wie etwa ein Prozessor eines neuronalen Netzes. Der Prozessor kann andere Komponenten einer integrierten Schaltung aufweisen, die zusätzliche Beschleuniger-Engines beinhalten.
  • In einigen Ausführungsformen kann der Beschleuniger 702 ein Speichersubsystem 704 (z. B. Zustandspuffer) beinhalten, das mehrere Speicherbänke 714 beinhaltet. Jede Speicherbank 714 kann unabhängig zugänglich sein, sodass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängig ist. Gleichermaßen kann sich das Schreiben in eine Speicherbank nicht auf das Schreiben in eine andere Speicherbank auswirken oder beschränkt es nicht. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und beschrieben werden. Es können verschiedene Methoden verwendet werden, um unabhängig zugängliche Speicherbänke 714 aufzuweisen. Zum Beispiel kann jede Speicherbank eine physisch getrennte Speicherkomponente sein, die einen Adressbereich aufweist, der getrennt und unabhängig von den Adressbereichen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal und mindestens einen getrennten Schreibkanal aufweisen, die gleichzeitig verwendet werden können. In diesen Beispielen kann das Speichersubsystem 704 den gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speichersubsystem 704 eine Arbitrierungslogik beinhalten, derart, dass eine Arbitrierung zwischen zum Beispiel den Ausgaben mehrerer Speicherbänke 714 dazu führen kann, dass mehr als eine Speicherbankausgabe verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank unabhängig von jeder anderen betrieben werden, obwohl sie global durch das Speichersubsystem 704 verwaltet werden.
  • Wenn die Speicherbänke 714 unabhängig zugänglich sind, kann dies den Wirkungsgrad des Beschleunigers 702 erhöhen. Beispielsweise können in jeder Zeile des Verarbeitungselementarrays 710 gleichzeitig Werte gelesen und bereitgestellt werden, sodass das gesamte Verarbeitungselementarray 710 in einem Taktzyklus in Gebrauch sein kann. Als weiteres Beispiel können die Speicherbänke 714 zur gleichen Zeit gelesen werden, zu der die vom Verarbeitungselementarray 710 berechneten Ergebnisse in das Speichersubsystem 704 geschrieben werden. Im Gegensatz dazu ist ein einzelner Speicher möglicherweise lediglich in der Lage, jeweils nur einen Lese- oder Schreibvorgang zu bedienen. Mit einem einzelnen Speicher können beispielsweise mehrere Taktzyklen erforderlich sein, um Eingabedaten für jede Zeile des Verarbeitungselementarrays 710 zu lesen, bevor das Verarbeitungselementarray 710 gestartet werden kann.
  • In verschiedenen Umsetzungen kann das Speichersubsystem 704 dazu konfiguriert sein, mehrere Clients gleichzeitig zu bedienen, was das Verarbeitungselementarray 710, die Aktivierungs-Engine 716, die Pooling-Engine 718 und alle externen Clients beinhaltet, die über eine Kommunikationsstruktur 720 auf das Speichersubsystem 704 zugreifen. In einigen Umsetzungen kann die Fähigkeit, mehrere Clients zu bedienen, bedeuten, dass das Speichersubsystem 704 mindestens so viele Speicherbänke aufweist, wie es Clients gibt. In einigen Fällen kann jede Zeile des Verarbeitungselementarrays 710 als ein getrennter Client zählen. In einigen Fällen kann jede Spalte des Verarbeitungselementarrays 710 ein Ergebnis ausgeben, derart, dass jede Spalte als ein getrennter Schreib-Client zählen kann. In einigen Fällen kann die Ausgabe von dem Verarbeitungselementarray 710 in die Speicherbänke 714 geschrieben werden, die anschließend Eingabedaten für das Verarbeitungselementarray 710 bereitstellen können. Als weiteres Beispiel können die Aktivierungs-Engine 716 und die Pooling-Engine 718 mehrere Ausführungskanäle beinhalten, die jeweils ein separater Speicher-Client sein können. Die Speicherbänke 714 können zum Beispiel unter Verwendung eines statischen Direktzugriffsspeichers (static random access memory - SRAM) umsetzt sein.
  • In verschiedenen Umsetzungen kann das Speichersubsystem 704 Steuerlogik beinhalten. Die Steuerlogik kann zum Beispiel die Adressbereiche jeder der Speicherbänke 714 nachverfolgen, Speicherbänke 714 identifizieren, aus denen gelesen oder in die geschrieben werden soll, und/oder Daten zwischen den Speicherbänken 714 verschieben. In einigen Umsetzungen können Speicherbänke 714 mit bestimmten Clients fest verdrahtet sein. Zum Beispiel kann ein Satz von Speicherbänken 714 fest verdrahtet sein, um den Zeilen des Verarbeitungselementarrays 710 Werte bereitzustellen, wobei je eine Speicherbank je eine Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet sein, um Werte von Spalten des Verarbeitungselementarrays 710 zu empfangen, wobei je eine Speicherbank Daten für je eine Spalte empfängt.
  • Gemäß bestimmten Ausführungsformen kann der Beschleuniger 702 eine Eingabeauswahlschaltung 730 beinhalten. Die Eingabeauswahlschaltung 730 kann verwendet werden, um die Daten zu bestimmen, die in jedem gegebenen Taktzyklus an das Verarbeitungselementarray 710 zu senden sind. In einigen Beispielen kann die Eingabeauswahlschaltung 730 die Daten steuern, die in jede Zeile des Verarbeitungselementarrays 710 eingegeben werden. In einigen Beispielen kann die Eingabeauswahlschaltung 730 die Daten steuern, die in eine Teilmenge der Zeilen eingegeben werden. In verschiedenen Beispielen kann die Eingabeauswahlschaltung 730 für eine gegebene Zeile zwischen Daten, die von dem Speichersubsystem 704 ausgegeben werden, und Daten auswählen, die zum Eingeben in eine andere Zeile ausgewählt wurden. Beispielsweise kann die Eingabeauswahlschaltung 730 bestimmen, dass Daten aus dem Speichersubsystem 704 in die Zeile 0 im Verarbeitungselementarray 710 eingegeben werden, während die Eingabeauswahlschaltung 730 für die Zeile 1 im Verarbeitungselementarray 710 bestimmen kann, dass die in die Zeile 0 eingegebenen Daten (z. B. nach einer Verzögerung) verwendet werden, anstatt die Daten erneut aus dem Speichersubsystem 704 zu lesen. Mit anderen Worten, die gleichen aus dem Speichersubsystem 704 gelesenen Daten können mehr als einer Zeile des Verarbeitungselementarrays 710 bereitgestellt werden. In einigen Ausführungsformen kann die Eingabeauswahlschaltung 730 so konfiguriert sein, dass sie umgangen werden kann oder keine Datenduplizierung durchführt, und somit kann jede Zeile des Verarbeitungselementarrays 710 Daten von dem Speichersubsystem 704 empfangen.
  • Das Verarbeitungselementarray 710 ist die Berechnungsmatrix des Beschleunigers 702. Das Verarbeitungselementarray 710 kann zum Beispiel unter anderem parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungselementarray 710 kann mehrere Verarbeitungselemente 711 beinhalten, die in Zeilen und Spalten angeordnet sind, sodass die von einem Verarbeitungselement 711 ausgegebenen Ergebnisse direkt in ein anderes Verarbeitungselement 711 eingegeben werden können. Verarbeitungselemente 711, die sich nicht an den Außenrändern des Verarbeitungselementarrays 710 befinden, können daher Daten von anderen Verarbeitungselementen 711 und nicht vom Speichersubsystem 704 erhalten, mit denen sie arbeiten können.
  • In verschiedenen Beispielen verwendet das Verarbeitungselementarray 710 eine systolische Ausführung, bei der Daten in regelmäßigen Abständen aus verschiedenen Richtungen an jedem Verarbeitungselement 711 eintreffen. In einigen Beispielen können Eingabedaten von links in das Verarbeitungselementarray 710 strömen und Gewichtungswerte können oben geladen werden. In einigen Beispielen können Gewichtungen und Eingabedaten von links und Teilsummen von oben nach unten strömen. In diesen und anderen Beispielen bewegt sich eine Multiplikations- und Akkumulationsoperation als eine diagonale Wellenfront durch das Verarbeitungselementarray 710, wobei sich Daten über das Array nach rechts und unten bewegen. Steuersignale können gleichzeitig mit Gewichtungen links eingegeben werden und können zusammen mit der Berechnung quer und nach unten strömen.
  • In verschiedenen Umsetzungen kann die Anzahl von Spalten und Zeilen in dem Verarbeitungselementarray 710 die Rechenkapazität des Verarbeitungselementarrays 710 bestimmen. Beispielsweise kann die Anzahl der Zeilen im Verarbeitungselementarray 710 die Anzahl der Eingabemerkmalskarten bestimmen, die parallel verarbeitet werden können, und die Anzahl der Spalten im Verarbeitungselementarray 710 kann die Anzahl der Filtersätze bestimmen, die parallel angewendet werden können, um Daten einzugeben. Die Anzahl der Zeilen im Verarbeitungselementarray 710 kann auch die Speicherbandbreite zum Erreichen der maximalen Nutzung des Verarbeitungselementarrays 710 bestimmen. Das Verarbeitungselementarray 710 kann zum Beispiel 64 Spalten und 128 Zeilen oder eine andere Anzahl von Spalten und Zeilen aufweisen.
  • Ein Beispiel eines Verarbeitungselements 711 ist in einem eingefügten Diagramm in 7 veranschaulicht. Wie durch dieses Beispiel veranschaulicht, kann das Verarbeitungselement 711 eine Multiplizierer-Akkumulator-Schaltung beinhalten. Eingaben von links können zum Beispiel Eingabedaten i und einen Gewichtungswert w beinhalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenergebnissen stammt, und der Gewichtungswert stammt aus einem Satz von Gewichtungswerten, die eine Schicht des neuronalen Netzes mit der nächsten verbinden. Ein Satz von Eingabedaten kann zum Beispiel unter anderem ein Bild sein, das zur Identifizierung oder Objekterkennung eingereicht wird, ein Audioclip, der zur Spracherkennung bereitgestellt wird, eine Textfolge zur Verarbeitung natürlicher Sprache oder zur maschinellen Übersetzung oder der aktuelle Status eines Spiels, das eine Analyse erfordert, um eine nächsten Zug zu bestimmen. In einigen Beispielen werden die Eingabedaten und der Gewichtungswert zur Eingabe in die nächste Verarbeitungselement 711 rechts ausgegeben.
  • In dem veranschaulichten Beispiel kann eine Eingabe von oben eine Teilsumme, p_in, beinhalten, die entweder von einem anderen Verarbeitungselement 711 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungselementarray 710 bereitgestellt wird. Wenn eine Berechnung für einen neuen Satz von Eingabedaten gestartet wird, kann die obere Zeile des Verarbeitungselementarrays 710 einen feststehenden Wert für p_in, wie etwa null, empfangen. Wie durch dieses Beispiel veranschaulicht, werden i und w miteinander multipliziert und das Ergebnis mit p_in summiert, um eine neue Teilsumme, p_out, zu erzeugen, die in eine andere Verarbeitungselement 711 eingegeben werden kann. Verschiedene andere Umsetzungen des Verarbeitungselements 711 sind möglich.
  • Ausgaben von der letzten Zeile in dem Verarbeitungselementarray 710 können temporär in einem Ergebnispuffer 712 (z. B. Partialsummen(PSUM)-Puffer) gespeichert werden. Die Ergebnisse können Zwischenergebnisse sein, die in die Speicherbänke 714 geschrieben werden können, um dem Verarbeitungselementarray 710 zur zusätzlichen Berechnung bereitgestellt zu werden. Alternativ können die Ergebnisse Endergebnisse sein, die, sobald sie in die Speicherbänke 714 geschrieben wurden, vom Speichersubsystem 704 über die Kommunikationsstruktur 720 gelesen werden können, um vom System ausgegeben zu werden.
  • In einigen Umsetzungen beinhaltet der Beschleuniger 702 eine Aktivierungs-Engine 716. In diesen Umsetzungen kann die Aktivierungs-Engine 716 die Ergebnisse von dem Verarbeitungselementarray 710 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Zum Beispiel können für ein neuronales Faltungsnetz Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann das Sammeln von Ergebnissen aus einer oder mehreren Spalten in dem Verarbeitungselementarray 710 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten in dem neuronalen Netz zu erzeugen. In einigen Beispielen kann die Aktivierungs-Engine 716 umgangen werden.
  • In verschiedenen Beispielen kann die Aktivierungs-Engine 716 mehrere separate Ausführungskanäle beinhalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungselementarrays 710 entsprechen und können eine Operation an den Ausgaben einer Spalte ausführen, deren Ergebnis in dem Speichersubsystem 704 gespeichert werden kann. In diesen Beispielen kann die Aktivierungs-Engine 716 in der Lage sein, zwischen 1 und N parallele Berechnungen durchzuführen, wobei N gleich der Anzahl von Spalten in dem Verarbeitungselementarray 710 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig durchgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal ausführen kann, beinhalten als einige Beispiele unter anderem Exponentiale, Quadrate, Quadratwurzeln, neutrale Elemente, binäre Schritte, bipolare Schritte, Sigmoidale und Rampen.
  • In einigen Umsetzungen kann der Beschleuniger 702 eine Pooling-Engine 718 beinhalten. Pooling ist das Kombinieren von Ausgaben der Spalten des Verarbeitungselementarrays 710. Das Kombinieren kann zum Beispiel das Berechnen eines Maximalwerts, eines Minimalwerts, eines Durchschnittswerts, eines Medianwerts, einer Summierung, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination beinhalten. In verschiedenen Beispielen kann die Pooling-Engine 718 mehrere Ausführungskanäle beinhalten, die mit Werten aus entsprechenden Spalten des Verarbeitungselementarrays 710 arbeiten können. In diesen Beispielen kann die Pooling-Engine 718 in der Lage sein, zwischen 1 und N parallele Berechnungen durchzuführen, wobei N gleich der Anzahl von Spalten in dem Verarbeitungselementarray 710 ist. In verschiedenen Beispielen können Ausführungskanäle der Pooling-Engine 718 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Pooling-Engine 718 umgangen werden.
  • In dieser Schrift können die Aktivierungs-Rngine 716 und die Pooling-Engine 718 zusammen als Ausführungs-Engines bezeichnet sein. Das Verarbeitungselementarray 710 ist ein weiteres Beispiel einer Ausführungs-Engine. Ein weiteres Beispiel einer Ausführungs-Engine ist eine DMA(Direct Memory Access, Direktspeicherzugriff)-Engine, die sich außerhalb des Beschleunigers 702 befinden kann.
  • Die Eingabedaten 750 können über die Kommunikationsstruktur 720 eintreffen. Die Kommunikationsstruktur 720 kann den Beschleuniger 702 mit anderen Komponenten eines Prozessors verbinden, wie etwa einer DMA-Engine, die Eingabedaten 750 von einer Eingabe-Ausgabe-(E/A)-Vorrichtung erhalten kann, einem Speicherlaufwerk oder einer Netzschnittstelle. Die Eingabedaten 750 können zum Beispiel eindimensionale Daten, wie etwa eine Zeichenkette oder eine Zahlenfolge, oder zweidimensionale Daten, wie etwa eine Anordnung von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte im Zeitverlauf für ein Audiosignal sein. In einigen Beispielen können die Eingabedaten 750 dreidimensional sein, wie dies zum Beispiel bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder bei Daten der virtuellen Realität der Fall sein kann. In einigen Umsetzungen kann das Speichersubsystem 704 einen separaten Puffer für die Eingabedaten 750 beinhalten. In einigen Umsetzungen können die Eingabedaten 750 in den Speicherbänken 714 gespeichert werden, wenn der Beschleuniger 702 die Eingabedaten 750 empfängt.
  • In einigen Beispielen kann der Beschleuniger 702 eine Verarbeitungs-Engine des neuronalen Netzes umsetzen. In diesen Beispielen kann der Beschleuniger 702 für einen Satz von Eingabedaten 750 ein neuronales Netz ausführen, um eine Aufgabe auszuführen, für die das neuronale Netz trainiert wurde. Das Ausführen eines neuronalen Netzes mit einem Satz von Eingabedaten kann als Ableitung oder das Durchführen einer Ableitung bezeichnet werden.
  • Die Gewichtungen für das neuronale Netz können in dem Speichersubsystem 704 zusammen mit den Eingabedaten 750 gespeichert werden, mit denen das neuronale Netz arbeiten wird. Das neuronale Netz kann auch Anweisungen beinhalten, die das Verarbeitungselementarray 710 programmieren können, um verschiedene Berechnungen an den Gewichtungen und den Eingabedaten durchzuführen. Die Befehle können auch in dem Speichersubsystem 704, in den Speicherbänken 714 oder in einem separaten Anweisungspuffer gespeichert sein. Das Verarbeitungselementarray 710 kann Zwischenergebnisse ausgeben, welche die Ausgaben einzelner Schichten des neuronalen Netzes darstellen. In einigen Fällen kann die Aktivierungs-Engine 716 und/oder die Pooling-Engine 718 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzes angefordert wurden. Der Beschleuniger 702 kann die Zwischenergebnisse in dem Speichersubsystem 704 zum Eingeben in das Verarbeitungselementarray 710 speichern, um Ergebnisse für die nächste Schicht des neuronalen Netzes zu berechnen. Das Verarbeitungselementarray 710 kann weiterhin Endergebnisse von einer letzten Schicht des neuronalen Netzes ausgeben. Die Endergebnisse können in dem Speichersubsystem 704 gespeichert und dann in den Hostprozessorspeicher oder an einen anderen Ort kopiert werden.
  • In einigen Ausführungsformen kann das Abbilden der vorstehend in Bezug auf 5 und 6 und Gleichung (3) beschriebenen Tensor-Operation auf ein PE-Array (z. B. PE-Array 710) zur Ausführung das Abbilden eines jeden der M 3-D-Filter auf eine entsprechende Spalte des PE-Arrays und das Abbilden jeder Eingabemerkmalskarte der C Eingabemerkmalskarten (z. B. C Kanäle) in einer 3-D-Eingabe auf eine entsprechende Zeile des PE-Arrays beinhalten. Beispielsweise können die H×W-Pixel in jeder 2-D-Eingabemerkmalskarte abgeflacht werden, um einen eindimensionalen Vektor zu bilden, und auf eine Zeile des PE-Arrays abgebildet werden. Die C×R×S Gewichtungen oder Pixel in jedem 3-D-Filter können abgeflacht werden, um einen eindimensionalen Vektor zu bilden, und auf eine Spalte des PE-Arrays abgebildet werden. Teilsummen können in jeder Spalte vertikal akkumuliert werden. In Fällen, in denen ein Stapel verarbeitet wird, der N 3-D-Eingaben beinhaltet, von denen jede C Kanäle beinhaltet, kann jede Zeile des PE-Arrays auf N 2-D-Eingabemerkmalskarten abgebildet werden.
  • Wie vorstehend beschrieben, kann die Bewegung von Daten, wie etwa Eingabepixeln, Filtergewichtungen und zu akkumulierenden Teilsummen, zwischen PEs den Zugriff auf die Zustandspuffer oder den Off-Chip-Speicher reduzieren. In einigen Ausführungsformen kann die Eingabemerkmalskarte stationär sein und die Gewichtungen der Filter können verschoben werden, was als ein „bildstationäres“ Modell bezeichnet werden kann. In einigen Ausführungsformen kann ein „gewichtungsstationäres“ Modell verwendet werden, wobei die Gewichtungen der Filter stationär sind (vorab von einem Zustandspuffer in die Register im PE-Array geladen werden) und das Bild sich bewegt (während der Berechnung aus dem Zustandspuffer geladen wird), um die Kosten für die Bewegung der Gewichtungen zu minimieren. In einigen Ausführungsformen kann die Ausgabe eines PE im Register am PE gespeichert werden und bleibt stationär, um die Kosten der Bewegung der Partialsummen zu minimieren, wobei sich die Eingabemerkmalskarten und -gewichtungen durch das PE-Array und den Zustandspuffer bewegen können.
  • 8 veranschaulicht ein vereinfachtes Beispiel einer gewichtungsstationären Faltungsoperation unter Verwendung eines Beispiels einer Rechen-Engine, die ein Verarbeitungselementarray 810 gemäß bestimmten Ausführungsformen beinhaltet. Das Verarbeitungselementarray 810 kann eine große Anzahl von Verarbeitungselementen beinhalten, die beispielsweise in einem 64×64-Array, einem 64×128-Array, einem 128×128-Array, einem 256×256-Array oder dergleichen angeordnet sind. In dem in 8 gezeigten Beispiel beinhaltet das Verarbeitungselementarray 810 vier Zeilen und vier Spalten von Verarbeitungselementen 812. Eingaben 820 in das Verarbeitungselementarray 810 können vier (entsprechend C) Eingabekanäle 822, 824, 826 und 828 beinhalten. Jeder Eingabekanal kann einer Eingabemerkmalskarte oder einer Eingabemerkmalskarte in jeder von N (in dem Beispiel N= 1) Eingaben entsprechen, wie vorstehend beschrieben. Jede Eingabemerkmalskarte in dem Beispiel kann eine 8×8-Matrix beinhalten und kann zu einem eindimensionalen Vektor mit 64 Elementen abgeflacht werden. Das PE-Array 810 kann vier (entsprechend M) Ausgabemerkmalskarten erzeugen, eine aus jeder Spalte des PE-Arrays 810.
  • Während der Faltungsoperation kann eine Gewichtung in jedem 2-D-Filter (mit Dimensionen R×S) der vier 2-D-Filter in jedem der vier 3-D-Filter (mit Dimensionen C×R×S ) in das PE-Array 810 vorgeladen werden. Beispielsweise kann, wie in 8 gezeigt, das erste Element (r=0, s=0) in jedem der vier 2-D-Filter für die erste Ausgabemerkmalskarte (entspricht dem ersten 3-D-Filter oder m=0) in ein jeweiliges PE 812 der vier PEs in einer ersten Spalte des PE-Arrays 810 geladen werden, das erste Element (z. B. r=0, s=0) in jedem der vier 2-D-Filter für die zweite Ausgabemerkmalskarte (entspricht dem zweiten 3-D-Filter oder m=1) in ein jeweiliges PE 812 der vier PEs in einer zweiten Spalte des PE-Arrays 810 geladen werden, das erste Element (r=0, s=0) in jedem der vier 2-D-Filter für die dritte Ausgabemerkmalskarte (entspricht dem dritten 3-D-Filter oder m=2) in ein entsprechendes PE 812 der vier PEs in einer dritten Spalte des PE-Arrays 810 geladen werden, und das erste Element (r=0, s=0) in jedem der vier 2-D-Filter für die vierte Ausgabemerkmalskarte (entspricht dem vierten 3-D-Filter oder m=3) in ein entsprechendes PE 812 der vier PEs in einer vierten Spalte des PE-Arrays 810 geladen werden. Somit werden 16 Werte, die die ersten Elemente von 16 2-D-Filtern in vier 3-D-Filtern darstellen, in das PE-Array 810 geladen. Die Elemente in dem eindimensionalen Vektor für jede Eingabemerkmalskarte können dann beispielsweise aus einem Zustandspuffer in das PE-Array 810 verschoben und mit den vorab geladenen Gewichtungen im PE-Array 810 multipliziert werden. Die Produkte in jeder Spalte für die vier Kanäle 822, 824, 826 und 828 können akkumuliert werden, um vier Teilsummenwerte zu erzeugen. Da die Elemente in dem eindimensionalen Vektor für jede Eingabemerkmalskarte in das PE-Array 810 verschoben werden, kann ein erster Partialsummenvektor PSUM0,0 (830) erzeugt werden, der vier Teilsummen-Untervektoren für vier Ausgabemerkmalskarten beinhalten kann. In einigen Ausführungsformen kann das Verschieben der Elemente in den Eingabemerkmalskarten auf den gewünschten Strides für die Faltung basieren, sodass jeder Teilsummen-Untervektor für eine Ausgabemerkmalskarte die gewünschte Anzahl von Elementen beinhalten kann (z. B. E×F, wie vorstehend beschrieben).
  • Sechzehn (16) Werte, die die zweiten Elemente (z. B. r=0, s=1) der 16 2-D-Filter in den vier 3-D-Filtern darstellen, können dann in das PE-Array 810 geladen werden. Die Elemente im eindimensionalen Vektor für jede Eingabemerkmalskarte können in das PE-Array 810 verschoben und mit den vorgeladenen Gewichtungen im PE-Array 810 multipliziert werden. Die Produkte in jeder Spalte können akkumuliert werden, um einen zweiten Teilsummenvektor PSUM0,1 (832) zu erzeugen, der vier Teilsummen-Untervektoren für die vier Ausgabemerkmalskarten beinhaltet. Jedes Element in den 16 2-D-Filtern kann in das PE-Array 810 geladen und mit den Elementen im eindimensionalen Vektor multipliziert werden, um einen Teilsummenvektor zu erzeugen, der vier Teilsummen-Unterwerte für die vier Ausgabemerkmalskarten beinhaltet, bis ein Teilsummenvektor PSUMR-1,S-1 (834) erzeugt ist, der dem Element (R-1, S-1) in jedem 2D-Filter entspricht und vier Teilsummen-Untervektoren für die vier Ausgabemerkmalskarten beinhaltet. Die Teilsummen-Untervektoren in den Teilsummenvektoren PSUM0,0 (830), PSUM0,1 (832), ... und PSUMR-1,S-1 (834), die jeder jeweiligen Ausgabemerkmalskarte entsprechen, können akkumuliert werden, um einen jeweiligen Vektor 840, 842, 844 oder 846 zu erzeugen, der einer abgeflachten Ausgabemerkmalskarte entsprechen kann.
  • Wie in 5, 6 und 8 und Gleichung 3 gezeigt, kann ein Verarbeitungselementarray eine parallele Berechnung unter Verwendung unterschiedlicher Spalten durchführen, die unterschiedlichen Filtern oder unterschiedlichen Sätzen von Filtern entsprechen können. Das Verarbeitungselementarray kann auch verschmolzene Multiplikations- und Additionsoperationen zur Datenreduktion in den Dimensionen von beispielsweise Eingabekanälen, Filterhöhe und Filterbreite unter Verwendung der Spalten und Zeilen durchführen. In vielen neuronalen Faltungsnetzen kann die Anzahl der Kanäle zunehmen, wenn die Schicht tiefer wird. Viele Faltungsschichten können mehr als 128 Eingabekanäle aufweisen, die groß genug sein können, um alle Zeilen des Verarbeitungselementarrays zu nutzen. Die Anzahl der Eingabekanäle in der ersten Schicht oder den ersten paar Schichten eines CNN, wie etwa eines CNN zur Bilderkennung oder -klassifizierung, kann jedoch üblicherweise 3 Kanäle für die R-, G-, B-Komponenten eines Farbbildes beinhalten. Beispielsweise kann die erste Faltungsschicht von ResNet-50 drei Eingabemerkmalskarten verwenden (z. B. jede mit einer Größe von 224×224) und kann kleine Filter (z. B. jede mit einer Größe von 7×7) und einen 2×2-Stride verwenden. Die Anzahl der Eingabekanäle oder Eingabemerkmalskarten (z. B. 3) kann im Vergleich zur Anzahl der Zeilen in einem PE-Array (z. B. 128) zu klein sein. Somit kann die PE-Array-Nutzung zumindest für die erste Schicht eines CNN sehr niedrig sein, wenn ein Filterelement in jedem Filter gleichzeitig verwendet wird. Die geringe Ausnutzung des Verarbeitungselementarrays für die erste Schicht oder die ersten paar Schichten kann die Gesamtausnutzung des Verarbeitungselementarrays für viele Inferenzen erheblich reduzieren.
  • Gemäß bestimmten Ausführungsformen kann eine Faltungsoperation in einer neuronalen Netzschicht, die eine geringe Anzahl von Eingabekanälen aufweist, durch mehrere gewichtungsstationäre Faltungsoperationen durchgeführt werden, wobei eine Eingabemerkmalskarte oder ein Teil der Eingabemerkmalskarte aufeinanderfolgend in mehrere Zeilen eingegeben werden kann und mehrere Filterelemente desselben Filters gleichzeitig in die mehreren Zeilen des Verarbeitungselementarrays geladen werden können, um auf dieselbe Eingabekanalkarte oder denselben Teil der Eingabemerkmalskarte angewendet zu werden, wodurch die Ausnutzung des Verarbeitungselementarrays verbessert wird. Um zu vermeiden, dass mehr als eine Kopie der Eingabemerkmalskarte im Speicher (z. B. Speichersubsystem 704) vorhanden ist, und/oder um die Datenübertragungsbandbreite zu reduzieren, die für die Übertragung der Eingabemerkmalskarte vom Speicher in das Verarbeitungselementarray (z. B. Verarbeitungselementarray 710) verwendet wird, können die mehreren Zeilen des Verarbeitungselementarrays die Eingabedaten gemeinsam nutzen. Beispielsweise können die Eingabedaten einmal aus dem Speicher gelesen und von der Eingabeauswahlschaltung 730 repliziert werden, um sie in die mehreren Zeilen des Verarbeitungselementarrays 710 einzugeben, um die Auslastung des Verarbeitungselementarrays 710 zu verbessern und gleichzeitig die Nutzung der Speicherbandbreite für die Datenübertragung zu reduzieren.
  • In einigen Ausführungsformen können die Eingabedaten in mehrere Blöcke aufgeteilt werden, die in verschiedene Zeilen geladen werden, wenn beispielsweise der Stride für die Faltung größer als eins ist. In einigen Ausführungsformen kann ein Compiler neuronale Netzschichten identifizieren, die einen kleinen Teil des Verarbeitungselementarrays in einem Beschleuniger nutzen können, die Faltungsoperation in jeder dieser Netzschichten in mehrere Faltungsoperationen aufteilen, Eingabedaten vorbereiten (z. B. auffüllen und aufteilen), einen neuen Datenflussgraphen erzeugen, Anweisungen zur gemeinsamen Nutzung von Daten erzeugen und Anweisungen für Operationen erzeugen, die mit den Faltungsergebnissen durchgeführt werden sollen, wie etwa das Verwerfen bestimmter Ausgabedaten.
  • 9A und 9B veranschaulichen ein Beispiel des Ladens mehrerer Filterelemente in ein Verarbeitungselementarray, um das Verarbeitungselementarray effizienter zu nutzen, und des gemeinsamen Nutzens von Eingabedaten zwischen Zeilen des Verarbeitungselementarrays zur Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen. Wie in 9A veranschaulicht, kann eine Faltungsoperation, die von einem Beschleuniger 910 durchgeführt wird, der ein PE-Array 920 beinhaltet, C Kanäle von 2-D-Eingabemerkmalskarten 930 (jeweils mit den Dimensionen H×W) und Filter 940 verwenden, die M Sätze von Filtern beinhalten, wobei jeder Satz von Filtern C 2-D-Filter (jeweils mit den Dimensionen R×S) beinhalten kann. Jede Eingabemerkmalskarte 930 kann in einen Vektor umgewandelt werden, der H×W-Pixelwerte beinhaltet, wobei die Pixelwerte in jeder Eingabemerkmalskarte auf eine entsprechende Zeile im PE-Array 920 abgebildet werden können. Die Filter 940 können auf M Kanäle reduziert werden, die jeweils C×R×S-Gewichtungswerte beinhalten, wobei jeder der M Kanäle auf eine entsprechende Spalte im PE-Array 920 abgebildet werden kann. Während der Faltungsoperation kann ein Filterelement jedes 2-D-Filters in einem Satz von C 2-D-Filtern in eine Zeile in einer entsprechenden Spalte der M Spalten geladen werden, und Pixelwerte in jeder Eingabemerkmalskarte können aufeinanderfolgend an Verarbeitungselemente in der entsprechenden Zeile im PE-Array 920 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen wie oben beschrieben durchzuführen. Somit können C Zeilen des PE-Arrays 920 während ein und derselben Zeitspanne verwendet werden. Danach kann ein weiteres Filterelement jedes 2-D-Filters im Satz von C 2-D-Filtern in eine Zeile in einer entsprechenden Spalte der M Spalten geladen werden, und die Daten aus jeder Eingabemerkmalskarte können aufeinanderfolgend an die Verarbeitungselemente in der entsprechenden Zeile im PE-Array 920 gesendet werden. Somit können die selben C Zeilen des PE-Arrays 920 während ein und derselben Zeitspanne verwendet werden. Auf diese Weise kann jedes Filterelement in das PE-Array 920 geladen werden und kann auf eine Eingabemerkmalskarte angewendet werden, um M Ausgabemerkmalskarten 950 zu erzeugen. In dem in 9 gezeigten Beispiel kann C viel kleiner sein als die Anzahl von Zeilen in der PE-Matrix 920. Somit kann die Faltungsoperation zu jedem gegebenen Zeitpunkt nur einen kleinen Teil des PE-Arrays 920 verwenden.
  • Gemäß bestimmten Ausführungsformen, wie in 9B gezeigt, können mehrere (z. B. 4) Filterelemente in jedem 2-D-Filter in einem Satz von C Kanälen von 2-D-Filtern in mehrere (z. B. 4) Zeilen in einer entsprechenden Spalte der M Spalten geladen werden. Pixelwerte in jeder Eingabemerkmalskarte können repliziert und sequentiell an Verarbeitungselemente in mehreren (z. B. 4) entsprechenden Zeilen im PE-Array 920 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen. Somit können 4×C Zeilen des PE-Arrays 920 während ein und derselben Zeitspanne verwendet werden. Danach können weitere mehrere (z. B. 4) Filterelemente in jedem 2-D-Filter in dem Satz von C 2-D-Filtern in mehrere (z. B. 4) Zeilen in einer entsprechenden Spalte der M Spalten geladen werden. Pixelwerte in jeder Eingabemerkmalskarte können repliziert und sequentiell an Verarbeitungselemente in mehreren entsprechenden Zeilen im PE-Array 920 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen. Somit können 4×C Zeilen des PE-Arrays 920 während ein und derselben Zeitspanne verwendet werden. Auf diese Weise kann jedes Filterelement in C Kanälen von 2-D-Filtern in das PE-Array 920 geladen und auf eine Eingabemerkmalskarte angewendet werden, um M Ausgabemerkmalskarten 950 zu erzeugen. Somit kann die Faltungsoperation unter Verwendung von mehr Zeilen des PE-Arrays 920 gleichzeitig schneller durchgeführt werden.
  • 10 beinhaltet ein Diagramm 1000, das ein Beispiel für die Replikation jeder Eingabemerkmalskarte veranschaulicht, die aus einem Speicher gelesen wird, um sie an mehrere Zeilen eines Verarbeitungselementarrays zu senden, gemäß bestimmten Ausführungsformen. 10 kann ein Beispiel von Eingabedaten für Zeilen im PE-Array 920 veranschaulichen. Aus Gründen der Übersichtlichkeit werden nur Eingabedaten für mehrere Zeilen eines PE-Arrays gezeigt, die Eingabedaten für andere Zeilen können repliziert und auf ähnliche Weise oder auf andere Weise und von ähnlichen oder unterschiedlichen Quellen gesendet werden (z. B. Speichervorrichtungen oder Speicherbänken). Um das Beispiel von 10 zu veranschaulichen, wird die Eingabematrix 410 aus 4 als Beispiel der Eingabedaten für eine Schicht eines neuronalen Netzes verwendet. Das Diagramm 1000 veranschaulicht Daten, die für drei Eingabekanäle erhalten werden (z. B. R-, G- und B-Kanäle eines Eingabebilds). Die unterschiedlichen Eingabekanäle (z. B. durch Eingabemerkmalskarten repräsentiert) sind in 10 mit unterschiedlichen Kreuzschraffuren angegeben. In 10 ist die Zeit als von rechts nach links fortschreitend angegeben, sodass Daten für den früheren Eintritt in das Verarbeitungselementarray in den rechten Spalten vorliegen können und Daten für den späteren Eintritt in das Verarbeitungselementarray in den linken Spalten vorliegen können.
  • In der in 10 gezeigten Beispieltabelle 1000 gibt die erste Spalte eine Zeilennummer k (1011) eines PE-Arrays an, und die übrigen Spalten bezeichnen Elemente (z. B. Pixel) in einer Eingabemerkmalskarte, die den entsprechenden Zeilen des PE-Arrays zugeführt werden. In diesem Beispiel sind die Elemente der Eingabemerkmalskarte (z. B. Eingabematrix 410) von links nach rechts und von oben nach unten in einer Rasterabtastreihenfolge nummeriert. Beispielsweise ist das Element in der oberen linken Ecke der Eingabematrix 410 Element [0], das Element in der oberen rechten Ecke ist Element [5], das Element in der unteren linken Ecke ist Element [30] und das Element in der unteren rechten Ecke der Eingabematrix 410 ist Element [35]. Auch in diesem Beispiel werden die Elemente in der Eingabemerkmalskarte von links nach rechts in das PE-Array verschoben, sodass die Elemente in den rechten Spalten vor den Elementen in den linken Spalten in das Verarbeitungselementarray eintreten. In einigen Beispielen kann jede Spalte einem Taktzyklus entsprechen und kann die Dateneingabe in das Verarbeitungselementarray in einem anderen Taktzyklus anzeigen. In dem in 10 gezeigten Beispiel geben die Zahlen in Klammern einen Kanalindex an, wie etwa Kanal 1, Kanal 2 oder Kanal 3. Die ersten drei Zeilen des PE-Arrays können mit dem Filterelement [0,0] jedes Filters in drei Filtern geladen werden, wobei jeder Filter einem Eingabekanal entsprechen kann. Zeile [3] bis Zeile [5] können mit Filterelement [0,1] jedes Filters geladen werden, das einem jeweiligen Eingabekanal in den drei Eingabekanälen entspricht. Zeile [6] bis Zeile [8] können mit Filterelement [0,2] jedes Filters geladen werden, das einem jeweiligen Eingabekanal in den drei Eingabekanälen entspricht.
  • Zeile [0] kann Daten in einer ersten Eingabemerkmalskarte empfangen und das Filterelement [0,0] eines ersten Filters für die erste Eingabemerkmalskarte auf die empfangenen Daten anwenden. Zeile [1] kann Daten in der zweiten Eingabemerkmalskarte empfangen und das Filterelement [0,0] eines zweiten Filters für die zweite Eingabemerkmalskarte auf die empfangenen Daten anwenden. Zeile [2] kann Daten in der dritten Eingabemerkmalskarte empfangen und das Filterelement [0,0] in einem dritten Filter für die dritte Eingabemerkmalskarte auf die empfangenen Daten anwenden. In einem Beispiel können die Zeilen [0], [1] und [2] Daten von dem lokalen Pufferspeicher, wie etwa dem Speichersubsystem 704, empfangen.
  • Ferner kann in diesem Beispiel Zeile [3] auch Daten in der ersten Eingabemerkmalskarte empfangen und kann das Filterelement [0,1] des ersten Filters auf die empfangenen Daten anwenden. Für diese Zeile kann, anstatt die Daten in der ersten Eingabemerkmalskarte aus dem lokalen Pufferspeicher zu erhalten, eine Eingabeauswahlschaltung wie oben und nachstehend beschrieben konfiguriert werden, um die Daten, die in Zeile [0] bereitgestellt werden, in Zeile [3] zu leiten. Wie in dem Beispiel von 10 veranschaulicht, wird das Filterelement [0,1] nicht auf das Element [0] jeder Eingabemerkmalskarte angewendet, sodass die Eingabeauswahlschaltung die Eingabedaten nur replizieren kann, wenn das Element [1] der ersten Eingabemerkmalskarte aus dem Pufferspeicher gelesen wird. Zusätzlich können die an Zeile [3] gesendeten Daten gegenüber den an Zeile [0] gesendeten Daten verzögert werden (z. B. um zwei Taktzyklen), damit die Daten korrekt in eine Ausgabemerkmalskarte aufgenommen werden können.
  • Zeile [4] kann ähnlich Daten für die zweite Eingabemerkmalskarte empfangen, beginnend bei Element [1] und zeitversetzt zu den an Zeile [1] gesendeten Daten. Die Eingabeauswahlschaltung kann auf ähnliche Weise die Daten für Zeile [4] erhalten, indem sie die in Reihe [1] eingegebenen Daten mit einer Verzögerung von beispielsweise zwei Taktzyklen zu Zeile [4] leitet. Die in Zeile [4] eingegebenen Daten können mit dem Filterelement [0,1] des zweiten Filters multipliziert werden. Zeile [5] kann in ähnlicher Weise Daten für die dritte Eingabemerkmalskarte erhalten, beginnend bei Element [1] und zeitversetzt zu den an Zeile [2] gesendeten Daten. Die Eingabeauswahlschaltung kann die Daten für Zeile [5] aus den Daten erhalten, die in Zeile [2] mit einer Verzögerung von beispielsweise zwei Taktzyklen eingegeben werden. Die in Zeile [5] eingegebenen Daten können mit dem Filterelement [0,1] des dritten Filters multipliziert werden.
  • Zeile [6] kann auch Daten von der ersten Eingabemerkmalskarte empfangen. In Zeile [6] kann ein drittes Filterelement [0,2] im ersten Filter auf die erste Eingabemerkmalskarte angewendet werden, beginnend bei Element [2] der ersten Eingabemerkmalskarte. Für Zeile [6] kann die Eingabeauswahlschaltung Eingabedaten von den Daten erhalten, die an Zeile [0] gesendet werden, oder von den Daten, die an Zeile [3] gesendet werden. Wenn zum Beispiel die Eingabeauswahlschaltung mindestens sechs Zeilen von Zeile [6] zurückblicken kann, kann die Eingabeauswahlschaltung die Daten verwenden, die entweder an Zeile [0] oder Zeile [3] gesendet werden. Wenn die Eingabeauswahlschaltung in der Lage ist, auf höchstens drei Zeilen zurückzublicken, kann die Eingabeauswahlschaltung die an Zeile [3] gesendeten Daten verwenden. Zeile [7] kann ebenfalls mit Daten aus der zweiten Eingabemerkmalskarte versorgt werden, die sie aus den an Zeile [1] oder Zeile [4] gesendeten Daten erhält, und das Filterelement [0,2] im zweiten Filter auf die gelieferten Daten anwenden. Zeile [8] kann mit Daten aus der dritten Eingabemerkmalskarte versorgt werden, die aus Daten erhalten werden, die an Zeile [2] oder Zeile [5] gesendet werden, und kann Filterelement [0,2] im dritten Filter auf die gelieferten Daten anwenden.
  • Das in Diagramm 1000 dargestellte Beispiel kann beispielsweise verwendet werden, wenn die Faltungsberechnungen für die erste Schicht eines neuronalen Netzes durchgeführt werden, wobei die Schritte in Breiten- und Höhenrichtung beide eins sind. Wie vorstehend erörtert, können die Eingaben in die erste Schicht drei oder mehr Eingabemerkmalskarten beinhalten, und das Anwenden von Filtern auf diese Eingabemerkmalskarten kann nur drei Zeilen des Verarbeitungselementarrays belegen. Durch Duplizieren jeder der drei Eingabemerkmalskarten zum Senden an mehrere Zeilen des Verarbeitungselementarrays und zum Filtern durch mehrere Filterelemente in jedem jeweiligen Filter können mehr Verarbeitungselemente verwendet werden, wenn Ergebnisse für die erste Schicht berechnet werden. Nachfolgende Schichten weisen möglicherweise mehr Eingabemerkmalskarten auf. Für diese Schichten kann die Eingabeauswahlschaltung jede Eingabemerkmalskarte weniger oft replizieren oder kann die Datenreplikation deaktivieren und die Ausgabe aus dem Pufferspeicher auswählen. In einigen Beispielen kann die Eingabeauswahlschaltung für verschiedene Schichten des neuronalen Netzes die Ausgabe des Pufferspeichers für einige Zeilen auswählen und duplizierte Daten für andere Zeilen auswählen.
  • 11 beinhaltet ein vereinfachtes Blockdiagramm eines Beispiels einer Eingabeauswahlschaltung 1100, wie die vorstehend beschriebene Eingabeauswahlschaltung 730, zum Auswählen von Eingabedaten für die parallele Verarbeitung durch ein Verarbeitungselementarray unter Verwendung mehrerer Filterelemente gemäß bestimmten Ausführungsformen. In dem veranschaulichten Beispiel kann die Eingabeauswahlschaltung 1100 einen ersten Multiplexer 1132, der so konfiguriert sein kann, dass er die Eingabedaten für eine Zeile eines Verarbeitungselementarrays 1110 auswählt, sowie einen zweiten Multiplexer 1136 beinhalten, der eine geeignete Verzögerung für die Eingabe der ausgewählten Daten in eine Zeile des Verarbeitungselementarrays 1110 auswählen kann. Eine Zeilenauswahl 1142, die an die Eingabeauswahlschaltung 1130 gesendet wird, kann die Daten x'[k] (1144 ) bestimmen, die letztlich für die Zeile ausgewählt werden. Aus Gründen der Klarheit sind die Multiplexer nur für eine Zeile (z. B. Zeile [k] (1111)) gezeigt, wobei k eine Zeilennummer bezeichnet. Es sei angemerkt, dass eine ähnliche Schaltung wie in 11 verwendet werden kann, um die Eingabedaten für andere Zeilen des Verarbeitungselementarrays 1110 auszuwählen. In einigen Fällen können andere Zeilen des Verarbeitungselementarrays 1110 jeweils eine ähnliche Eingabeauswahlschaltung aufweisen.
  • In verschiedenen Beispielen kann eine neuronale Netz-Verarbeitungs-Engine so konfiguriert sein, dass eine Speicherbank aus dem Speichersubsystem der neuronalen Netz-Verarbeitungs-Engine Eingabedaten für eine Zeile des Verarbeitungselementarrays 1110 bereitstellen kann. Diese Anordnung kann ermöglichen, dass die Daten von einer Eingabemerkmalskarte in eine Speicherbank geladen werden, aus der die Daten für die Eingabemerkmalskarte dann in eine Zeile von Verarbeitungselementarrays 1110 eingegeben werden können. Im Beispiel von 11 werden die von der Speicherbank für Zeile [k] (1111) ausgegebenen Daten als x[k] (1106) bezeichnet. Für die Speicherbankausgabe x[k] (1106), die in die Zeile [k] (1111) eingegeben werden soll, kann die Zeilenauswahl 1142 den ersten Multiplexer 1132 konfigurieren, um die Speicherbankausgabe x[k] (1106) als die Ausgabe des ersten Multiplexers 1132 auszuwählen.
  • In verschiedenen Beispielen kann der erste Multiplexer 1132 auch unter anderen Daten 1140 auswählen, die zum Eingeben in andere Zeilen des Verarbeitungselementarrays 1110 ausgewählt sind. Andere Daten 1140 können von den Ausgängen anderer Multiplexer stammen, beispielsweise in anderen Auswahlschaltungen (in 11 nicht explizit gezeigt). Beispielsweise können andere Daten 1140 die zum Eingeben in Zeile[k-1] ausgewählten Daten (z. B. die Zeile vor Zeile [k] (1111)) beinhalten, die in dem Beispiel von 11 mit x'[k-1] bezeichnet ist. Als weiteres Beispiel können andere Daten 1140 Daten beinhalten, die zum Eingeben in Zeile [k-2] ausgewählt sind (z. B. zwei Zeilen vor Zeile [k] (1111)), die mit x'[k-2] bezeichnet werden. Als weiteres Beispiel können die anderen Daten 1140 Daten beinhalten, die zum Eingeben in die Zeile [k-n] ausgewählt sind, die mit x'[k-n] bezeichnet wird. In einigen Ausführungsformen können die Eingaben in den ersten Multiplexer 1132 für Zeile [k] Daten beinhalten, die für die Eingabe in Zeile [k-3], Zeile [k-6], Zeile [k-9], ... und Zeile [k-3×n] ausgewählt wurden, wenn drei Eingabekanäle, wie R-, G- und B-Kanäle, bei der Faltungsoperation verwendet werden.
  • In einigen Beispielen kann es wünschenswert sein, die vom ersten Multiplexer 1132 ausgewählten Daten um eine bestimmte Anzahl von Taktzyklen zu verzögern. Da das Verarbeitungselementarray 1110 ein systolisches Array sein kann, kann die zeitliche Steuerung des Ladens von Daten in das Verarbeitungselementarray 1110 das Ergebnis beeinflussen, das das Verarbeitungselementarray 1110 berechnet. Somit kann die Eingabeauswahlschaltung 1130 in verschiedenen Umsetzungen eine oder mehrere Verzögerungsschaltungen 1134a-1134n wie etwa Flip-Flops beinhalten, die die Ausgabe des ersten Multiplexers 1132 um 1, 2, ... und n Taktzyklen verzögern können. Die Verzögerungsschaltungen 1 134a-1 134n können in einer Kette verbunden sein, sodass eine Verzögerungsschaltung die Ausgabe von der unmittelbar vorhergehenden Verzögerungsschaltung weiter verzögern kann. Beispielsweise kann eine erste Verzögerungsschaltung 1134a die Daten um einen Taktzyklus verzögern, eine zweite Verzögerungsschaltung 1134b kann die Daten weiter um einen Taktzyklus verzögern und so weiter. In einigen Ausführungsformen können die Verzögerungsschaltungen 1134a-1134n jeweils eine andere Verzögerung aufweisen. Beispielsweise kann eine erste Verzögerungsschaltung 1134a die Daten um einen Taktzyklus verzögern, eine zweite Verzögerungsschaltung 1134b kann die Daten um zwei Taktzyklen verzögern, eine dritte Verzögerungsschaltung kann die Daten um vier Taktzyklen verzögern und so weiter. In einigen Ausführungsformen können beliebige Verzögerungsschaltungen der Verzögerungsschaltungen 1134a-1134n umgangen werden, um eine gewünschte Gesamtverzögerung durch die Kette zu erreichen. Die Eingabeauswahlschaltung 1130 kann einen zweiten Multiplexer 1136 beinhalten, der konfiguriert sein kann, um die gewünschte Verzögerung an der Ausgabe einer Verzögerungsschaltung auszuwählen. Die Ausgabe des zweiten Multiplexers 1136, bezeichnet mit x'[k] (1144), kann von der Eingabeauswahlschaltung 1130 als die Eingabe in Zeile [k] (1111) ausgegeben werden.
  • In verschiedenen Beispielen kann x'[k] (1144) auch die Eingabe für andere Zeilen sein. Dies ist in dem Beispiel von 11 durch eine gestrichelte Linie 1150 vom Ausgang des zweiten Multiplexers 1136 veranschaulicht. Beispielsweise kann x'[k] (1144) eine Eingabe in einen Multiplexer sein, der Eingabedaten für Zeile [k+1] auswählt, und/oder einen Multiplexer, der Eingabedaten für Zeile [k+2] auswählt, oder dergleichen. In diesen und anderen Beispielen kann x'[k] (1144) in mehr als eine Zeile des Verarbeitungselementarrays 1110 eingegeben werden. In einigen Beispielen kann x'[k] (1144) zur Eingabe in eine Zeile bis zu beispielsweise acht Zeilen unterhalb von Zeile [k] (1111) ausgewählt werden.
  • In verschiedenen Beispielen kann die vom zweiten Multiplexer 1136 ausgewählte Verzögerung basierend auf den vom ersten Multiplexer 1132 ausgewählten Daten bestimmt werden. Wie in dem Beispiel von 10 gezeigt kann, wenn die Zeilenauswahl 1142 x'[k-1] auswählt, der zweite Multiplexer 1136 konfiguriert sein, um diese Daten um einen Taktzyklus zu verzögern. Wenn als weiteres Beispiel die Zeilenauswahl 1142 x'[k-2] auswählt, kann der zweite Multiplexer 1136 konfiguriert sein, um diese Daten um zwei Taktzyklen zu verzögern. In diesen und anderen Beispielen kann die Zeilenauswahl 1142 verwendet werden, um sowohl den ersten Multiplexer 1132 als auch den zweiten Multiplexer 1136 zu konfigurieren oder zu steuern. In einigen Beispielen kann die Zeilenauswahl 1142 Teil einer Anweisung zum Umsetzen eines neuronalen Netzes sein. Die Zeilenauswahl 1142 kann beispielsweise mit den Filtern gespeichert werden und zusammen mit dem Filterelement (z. B. Gewichtungen) in das Speichersubsystem einer Verarbeitungsmaschine geladen werden. In einigen Beispielen kann die Zeilenauswahl 1142 durch Software bestimmt werden, die die neuronale Netz-Verarbeitungs-Engine betreibt. In einigen Beispielen kann die Zeilenauswahl 1142 für verschiedene Schichten eines neuronalen Netzes variieren. Beispielsweise kann die Zeilenauswahl 1142 für eine erste Schicht des neuronalen Netzes den ersten Multiplexer 1132 konfigurieren, um aus anderen Daten 1140 auszuwählen, um zuvor gelesene und verwendete Daten zu replizieren, während die Zeilenauswahl 1142 für nachfolgende Schichten Daten aus der Speicherbankausgabe x[k] (1106) auswählen kann.
  • Wie zuvor angemerkt, kann die Anordnung der Multiplexer, Verzögerungsschaltungen und Signale in der Eingabeauswahlschaltung für andere Zeilen des Verarbeitungselementarrays 1110 ähnlich sein. In einigen Beispielen kann die Eingabeauswahlschaltung 1130 für einige Zeilen eine andere Schaltung aufweisen. Beispielsweise kann die Eingabeauswahlschaltung 1130 für Zeile [0] nur betriebsfähig sein, um eine Speicherausgabe als Eingabe für Zeile [0] auszuwählen. In diesem Beispiel kann die Eingabeauswahlschaltung 1130 nur eine Verzögerungsschaltung zwischen der Speicherausgabe und der Eingabe an das Verarbeitungselementarray 1110 aufweisen. Als ein weiteres Beispiel kann die Eingabeauswahlschaltung 1130 für Zeile [1] nur die Speicherausgabe und die für Zeile [0] ausgewählten Daten als in Frage kommende Auswahlmöglichkeiten für die Eingabe für Zeile [1] aufweisen. In diesem Beispiel kann die Schaltung für Zeile [1] einen Multiplexer mit weniger Eingaben sowie weniger Verzögerungsschaltungen beinhalten. In einigen Beispielen weisen einige Zeilen möglicherweise weniger Auswahlmöglichkeiten als mögliche Eingaben als andere Zeilen auf. Beispielsweise können einige Zeilen konfiguriert sein, um Daten zu empfangen, die einer von zwei vorangehenden Zeile bereitgestellt werden, während andere Zeilen konfiguriert sein können, um Daten zu empfangen, die einer von acht vorangehenden Zeilen bereitgestellt werden. In einigen Beispielen kann die Eingabeauswahlschaltung 1130 dazu konfiguriert sein, einen Teil der Eingabe für eine andere Zeile des Verarbeitungselementarrays 1110 auszuwählen.
  • Wie vorstehend beschrieben, kann der Filter bei einer Faltungsoperation gemäß bestimmten Schritten über die Eingabemerkmalskarte gleiten. Beispielsweise ist in den in den 4A-4C, 8 und 10 gezeigten Beispielen der Stride =1, wobei das Filterelement [0,0] mit den Eingabemerkmalskartenelementen [0,0], [0,1], [0,2], ... und dergleichen multipliziert werden kann, während das Filterelement [0,1] mit den Eingabemerkmalskartenelementen [0,1], [0,2], [0,3], ... und dergleichen multipliziert werden kann. In der ersten Schicht von ResNet-50 können die Filter (z. B.jeder mit einer Größe von 7×7) mit einem Stride von 2×2 über die Eingabemerkmalskarten (z. B. jeweils mit einer Größe von 224×224) gleiten. Somit kann das Filterelement [0,0] mit den Eingabemerkmalkartenelementen [0,0], [0,2], [0,4], ... und dergleichen multipliziert werden, während das Filterelement [0,1] mit dem Eingabemerkmalkartenelement [0,1], [0,3], [0,5], ... und dergleichen multipliziert werden kann. Somit können unterschiedliche Teilsätze der Eingabemerkmalskarte (z. B. an unterschiedlichen Startpunkten) an Zeilen eines PE-Arrays gesendet werden, in die unterschiedliche Filterelemente geladen sind.
  • 12 beinhaltet ein Diagramm 1200, das ein weiteres Beispiel für die Replikation von Eingabedaten zur parallelen Verarbeitung durch ein Verarbeitungselementarray unter Verwendung mehrerer Filterelemente gemäß bestimmten Ausführungsformen veranschaulicht. In dem in 12 gezeigten Beispiel kann der Stride in der Breitenrichtung 2 sein. In diesem Beispiel sind aus Gründen der Klarheit nur Daten für die Zeilen [0] bis [11] gezeigt, und es wird angemerkt, dass das Verarbeitungselementarray viel mehr Zeilen aufweisen kann (z. B. 64, 128, 256 oder mehr Zeilen). Im Diagramm 1200 zeigt die erste Spalte eine Zeilennummer k (1211) an, und die verbleibenden Spalten geben Elemente in einer Eingabemerkmalskarte an, die einer entsprechenden Zeile in dem PE-Array zuzuführen sind. Die Elemente der Eingabemerkmalskarte sind von links nach rechts und von oben nach unten in einer Rasterabtastreihenfolge nummeriert. Diagramm 1200 veranschaulicht Daten, die für drei Eingabemerkmalskarten erhalten werden. Zahlen in Klammern geben die Nummern der Eingabekanäle an. Die unterschiedlichen Eingabemerkmalskarten sind auch in 12 mit unterschiedlichen Kreuzschraffuren angegeben. Wie in 10 ist die Zeit als von rechts nach links fortschreitend angegeben, sodass Daten für den früheren Eintritt in das Verarbeitungselementarray in den rechten Spalten vorliegen können und Daten für den späteren Eintritt in das Verarbeitungselementarray in den linken Spalten vorliegen können.
  • In dem in 12 gezeigten Beispiel empfangen Zeile [0] und Zeile [3] jeweils Daten in der ersten Eingabemerkmalskarte, wobei Zeile [0] die geradzahligen Elemente und Zeile [3] die ungeradzahligen Elemente empfängt. Ein erstes Filterelement [0,0] des Filters für die erste Eingabemerkmalskarte wird auf die geradzahligen Elemente angewendet, und ein zweites Filterelement [0,1] des Filters für die erste Eingabemerkmalskarte wird auf die ungeradzahligen Elemente angewendet. Beispielsweise kann in der ersten Gleitfensterposition das erste Filterelement [0,0] mit dem ersten Element [0] der ersten Eingabemerkmalskarte multipliziert werden, und das zweite Filterelement [0,1] kann mit dem zweiten Element [1] der ersten Eingabemerkmalskarte multipliziert werden. In der zweiten Gleitfensterposition kann das erste Filterelement [0,0] mit dem dritten Element [2] der ersten Eingabemerkmalskarte multipliziert werden, und das zweite Filterelement [0,1] kann mit dem vierten Element [3] der ersten Eingabemerkmalskarte multipliziert werden.
  • Gemäß bestimmten Ausführungsformen kann die Software (z. B. ein Compiler oder eine Operation im neuronalen Netzmodell) die Daten in der Eingabemerkmalskarte aufteilen und in zwei verschiedene Bänke im lokalen Pufferspeicher schreiben, um geradzahlige Elemente und ungeradzahlige Elemente in verschiedenen Zeilen bereitzustellen. Eine wie vorstehend beschriebene Eingabeauswahlschaltung (z. B. Eingabeauswahlschaltung 1130) kann aus den Ausgaben der zwei Bänke als die Eingabe in Zeile [0] bzw. Zeile [3] auswählen. Die Eingabe der Daten (z. B. ungeradzahlige Elemente) für die Zeile [3] kann durch den Mechanismus, der Daten aus dem Pufferspeicher liest, und/oder durch die Eingabeauswahlschaltung um mehrere Taktzyklen in Bezug auf die Daten (z. B. geradzahlige Elemente) für die Zeile [0] verzögert werden.
  • Die Daten für eine zweite Eingabemerkmalskarte und eine dritte Eingabemerkmalskarte können jeweils ähnlich geteilt und in zwei Bänke zum Senden an zwei entsprechende Zeilen geschrieben werden. In dem in 12 gezeigten Beispiel können die geradzahligen Elemente der zweiten Eingabemerkmalskarte in Zeile [1] eingegeben werden und die ungeradzahligen Elemente der zweiten Eingabemerkmalskarte können in Zeile [4] eingegeben werden. Die geradzahligen Elemente der dritten Eingabemerkmalskarte können in die Zeile [2] und die ungeradzahligen Elemente der dritten Eingabemerkmalskarte können in die Zeile [5] eingegeben werden. Die ersten Filterelemente [0,0] der Filter für die zweite und dritte Eingabemerkmalskarte können in Zeile [1] bzw. Zeile [2] geladen werden und die zweiten Filterelemente [0,1] für die zweite und dritte Eingabemerkmalskarte können in Zeile [4] bzw. Zeile [5] geladen werden. Wie bei Zeile [0] und Zeile [3] können die Daten für die Zeilen [1], [2], [4] und [5] direkt aus den Speicherbänken erhalten werden, und die Daten, die in diese Zeilen eintreten, können durch die Anweisungen, die aus den Speicherbänken lesen, und/oder durch die Eingabeauswahlschaltung zeitlich gestaffelt werden.
  • Wie in 12 gezeigt, kann das Anwenden der Filterelemente [0,0] und [0,1] auf drei Eingabemerkmalskarten nur sechs Zeilen in dem Verarbeitungselementarray verwenden. Um mehr Filterelemente auf die drei Eingabemerkmalskarten anzuwenden, kann die Eingabeauswahlschaltung die Daten für andere Zeilen unter Verwendung von Daten replizieren, die aus dem Speicher gelesen und in die Zeilen [0]-[5] eingegeben werden. Beispielsweise können die geraden Elemente für die erste Eingabemerkmalskarte aus der Dateneingabe in Zeile [0] repliziert und in Zeile [6] eingegeben werden, und die ungeraden Elemente können aus der Dateneingabe in Zeile [3] repliziert werden und in Zeile [9] eingegeben werden. Ein drittes Filterelement [0,2] des Filters für die erste Eingabemerkmalskarte kann in Zeile [6] geladen werden und ein viertes Filterelement [0,3] des Filters für die erste Eingabemerkmalskarte kann in Zeile [9] geladen werden. Damit die Daten für die erste Eingabemerkmalskarte in Zeile [6] und Zeile [9] eingegeben werden können, kann die Eingabeauswahlschaltung für diese Zeilen die Daten auswählen, die in Zeile [0] bzw. Zeile [3] eingegeben werden, und geeignete Verzögerungen anwenden, bevor die Daten an Zeile [6] und Zeile [9] gesendet werden. Da beispielsweise für Zeile [6] das dritte Filterelement [0,2] zuerst auf das Eingabeelement [2] der ersten Eingabemerkmalskarte angewendet wird, kann die Eingabeauswahlschaltung die Weiterleitung von Daten aus den für Zeile [0] bereitgestellten Daten aktivieren, wenn Eingabeelement [2] verfügbar ist. Zusätzlich kann die Eingabeauswahlschaltung die Eingabe der Daten in höher nummerierte Zeilen verzögern, beispielsweise mit Hilfe der oben beschriebenen Verzögerungsschaltungen.
  • Die Daten für die zweite und dritte Eingabemerkmalskarte können in ähnlicher Weise aus den in die Zeilen [1], [2], [4] und [5] eingegebenen Daten repliziert und in zusätzliche Zeilen, wie die Zeilen [7], [8], [10] und [11], eingegeben werden. In dem in Diagramm 1200 gezeigten Beispiel können die geradzahligen Elemente aus der zweiten Merkmalskarte von der Dateneingabe in die Zeile [1] repliziert und in die Zeile [7] eingegeben werden, und die ungeradzahligen Elemente können von der Dateneingabe in die Zeile [4] repliziert und in die Zeile [10] eingegeben werden. Für die dritte Eingabemerkmalskarte können die geradzahligen Elemente aus der Dateneingabe in die Zeile [2] repliziert und in die Zeile [8] eingegeben werden, und die ungeradzahligen Elemente können aus der Dateneingabe in die Zeile [5] repliziert und in die Zeile [11] eingegeben werden. In Zeile [7] und Zeile [8] können dritte Filterelemente [0,2] der Filter für die zweite bzw. dritte Eingabemerkmalskarte geladen werden, um sie auf die Eingabeelemente in der zweiten und dritten Eingabemerkmalskarte anzuwenden. In ähnlicher Weise können in Zeile [10] und Zeile [11] dritte Filterelementen [0,3] der Filter für die zweite bzw. dritte Eingabemerkmalskarte geladen werden, um sie auf die Eingabeelemente in der zweiten und dritten Eingabemerkmalskarte anzuwenden. Die Replikation der Daten aus der Dateneingabe in niedriger nummerierte Zeilen statt direkt aus dem Speicher kann den Leseaufwand für Daten aus dem Speicher erheblich reduzieren, insbesondere wenn die Daten in einer Eingabemerkmalskarte in viele, wie etwa zehn oder mehr, Zeilen im Verarbeitungselementarray eingegeben werden.
  • In einigen Ausführungsformen kann aufgrund der spezifischen Hardwarekonfiguration jede Zeile eines PE-Arrays Daten derselben Größe (z. B. dieselbe Anzahl von Eingabeelementen, wie etwa Pixeln) für jede Faltungsoperation verwenden. Die Faltung, die das Gleitfenster und die vorstehend beschriebene Datenreplikation verwendet, zeigt jedoch, dass es zu Verschiebungen der Eingaben zwischen den Zeilen kommen kann, wobei verschiedene Zeilen Eingabedaten an unterschiedlichen Startpositionen und somit auch an unterschiedlichen Endpositionen verwenden können. Außerdem kann es in einigen Ausführungsformen wünschenswert sein, die geladenen Daten für eine effiziente Speicherung, Direktspeicherzugriffs(DMA)-Operationen, Speicherauslesung oder dergleichen auf eine bestimmte Länge zu bringen, wie ein Vielfaches von 8 Byte. Somit können die Eingabedaten (z. B. eine Eingabemerkmalskarte) vor der Faltungsoperation mit Auffülldaten aufgefüllt werden, und bestimmte Berechnungsergebnisse, die unter Verwendung der Auffülldaten berechnet wurden, können nach der Berechnung verworfen werden (z. B. Multiplikationen).
  • 13 veranschaulicht ein Beispiel einer aufgefüllten Eingabemerkmalskarte 1300 für eine Faltungsoperation gemäß bestimmten Ausführungsformen. Die Eingabemerkmalskarte 1300 kann eine ursprüngliche Eingabemerkmalskarte 1310 und aufgefüllte Eingabemerkmalselemente beinhalten. In dem in 13 gezeigten Beispiel kann die ursprüngliche Eingabemerkmalskarte 1310 ein Eingabekanal für ein ResNet-50 sein, wie der R-, G- oder B-Kanal eines Eingabefarbbilds, und kann zum Beispiel 224×224 Eingabeelemente (z. B. Pixel) beinhalten. Die ursprüngliche Eingabemerkmalskarte 1310 kann beispielsweise unter Verwendung eines 7×7-Filters oder Kernels gefaltet werden. Wie vorstehend beschrieben, können die zusätzlichen aufgefüllten Eingabemerkmalselemente in der Eingabemerkmalskarte 1300 und außerhalb der ursprünglichen Eingabemerkmalskarte 1310 aufgrund der spezifischen Hardwarekonfiguration, der Dimensionen der Filter, der Strides, der Bedingung für den Speicherabgleich, der Datenreplikation zur Verringerung der Nutzung der Speicherbandbreite und dergleichen hinzugefügt werden, wie vorstehend und nachstehend näher beschrieben. Die Eingabeelemente in der Eingabemerkmalskarte 1300, die in 13 gezeigt ist, sind wie oben beschrieben in der Reihenfolge der Rasterabtastung nummeriert.
  • In einem ersten Fenster 1320 (7×7) in der Eingabemerkmalskarte 1300 können die Eingabeelemente mit entsprechenden Filterelementen in dem 7×7-Filter multipliziert werden, und die Produkte können summiert werden. Beispielsweise können die Filterelemente [0,0], [0,1], [0,2], [0,3], [0,4], [0,5] und [0,6] mit den Eingabeelementen [0], [1], [2], [3], [4], [5] bzw. [6] multipliziert werden. Die Filterelemente [6,0], [6,1], [6,2], [6,3], [6,4], [6,5] und [6,6] können mit Eingabeelementen [1392], [1393], [1394], [1395], [1396], [1397] bzw. [1398] multipliziert werden.
  • In einem anderen Fenster 1330 (7×7) in der Eingabemerkmalskarte 1300 können die Eingabeelemente mit entsprechenden Filterelementen in dem 7×7-Filter multipliziert werden, und die Produkte können summiert werden. Beispielsweise kann Filterelement [0,0] mit Eingabeelement [222] multipliziert werden, Filterelement [0,1] kann mit Eingabeelement [223] multipliziert werden, ..., Filterelement [0,6] kann mit Eingabeelement [228] multipliziert werden, und so weiter. Filterelement [6,0] kann mit Eingabeelement [1602] multipliziert werden, Filterelement [6,1] kann mit Eingabeelement [1603] multipliziert werden, ... und Filterelement [6,6] kann mit Eingabeelement [1608] multipliziert werden.
  • In der Eingabemerkmalskarte 1300 können einige aufgefüllte Eingabeelemente hinzugefügt werden, sodass jede Zeile des PE-Arrays die gleiche Anzahl von Eingabeelementen für eine Eingabeteilwelle empfangen kann. Beispielsweise können die Eingabeelemente [0], [2] und [4] von den Filterelementen [0,0], [0,2] und [0,4] verwendet werden, aber nicht von den Filterelementen und [0,6], während das Eingabeelement [228] nicht von den Filterelementen [0,0], [0,2] und [0,4] verwendet werden kann, aber von dem Filterelement [0,6] verwendet werden kann. Einige aufgefüllte Eingabeelemente können hinzugefügt werden, sodass die in jede Zeile eingegebenen Daten effizienter in einen Speicher geladen und dort gespeichert und/oder effizienter aus dem Speicher gelesen werden können. Beispielsweise kann es wünschenswert sein, dass die Größe der Eingabeelemente, die in jede Zeile des PE-Arrays in einer Eingabe-Subwelle eingegeben werden, ein ganzzahliges Vielfaches von 8 Byte ist. Die Eingabeelemente [0], [2], [4], [6], ... und [228] können 115 Eingabeelemente oder 230 Bytes beinhalten, was kein ganzzahliges Vielfaches von 8 Byte ist. Das Eingabeelement 230 kann hinzugefügt und in die Zeile [0] des PE-Arrays eingegeben werden, sodass die Eingabeelemente in der Zeile [0] 116 Eingabeelemente oder 232 Bytes beinhalten können, was ein ganzzahliges Vielfaches von 8 Bytes ist.
  • 14 beinhaltet ein Diagramm 1400, das ein Beispiel für das Laden eines ersten Satzes von Filterelementen in ein Verarbeitungselementarray und die gemeinsame Nutzung eines ersten Satzesvon Daten (z. B. Daten in einigen geradzahligen Zeilen) in der Eingabemerkmalskarte 1300 von 13 in den Zeilen des Verarbeitungselementarrays zur parallelen Verarbeitung unter Verwendung der geladenen Filterelemente (z. B. Gewichtungen) veranschaulicht, gemäß bestimmten Ausführungsformen. Das in 14 gezeigt Beispiel veranschaulicht Filterelemente, die in die Zeilen des PE-Arrays geladen wurden, und Eingabeelemente, die in einer gewichtungsstationären Faltungsoperation in die Zeilen des PE-Arrays verschoben wurden. In dem in 14 gezeigten Beispiel kann die Eingabe in die Schicht des neuronalen Netzes 3 Eingabekanäle beinhalten, wie die R-, G- und B-Kanäle eines Farbbilds. Das in 14 gezeigte Beispiel kann ein Beispiel für die erste Schicht in einem ResNet-50-Netz sein, bei dem die Eingabe in die erste Schicht drei 224×224-Bilder (Eingabemerkmalskarten) beinhaltet, der Filter für jedes Bild eine 7×7-Matrix sein kann und der Filter mit einem Stride von 2×2 über das entsprechende Eingabebild gleiten kann (z. B. jede zweite Zeile und jede zweite Spalte überspringt). Die ursprüngliche 224×224-Eingabemerkmalskarte kann aufgefüllt werden, um eine Eingabemerkmalskarte zu erzeugen, wie sie durch die Eingabemerkmalskarte 1300 in 13 gezeigt ist.
  • Wie veranschaulicht, können Filterelemente [0,0] der drei Filter (z. B. Kernel) für die Kanäle 1-3 jeweils in die Zeilen [0]-[2] geladen werden; Filterelemente [0,1] der drei Filter für die Kanäle 1-3 können jeweils in die Zeilen [3]-[5] geladen werden; ... ; und Filterelemente [0,6] der drei Filter für die Kanäle 1-3 können jeweils in die Zeilen [18]-[20] geladen werden. In der in 14 gezeigten ersten Teilwelle können die Eingangselemente [0], [2], [4], ... und [230] in jedem Eingabebild in die Zeile [0], [1] oder [2] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,0] multipliziert werden; die Eingabeelemente [2], [4], [6], ..., [230] und [464] in jedem Eingabebild können in die Zeile [6], [7] oder [8] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,2] multipliziert werden; die Eingabeelemente [4], [6], [8], ..., [230], [464] und [466] in jedem Eingabebild können in die Zeile [12], [13] oder [14] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,4] multipliziert werden; und die Eingabeelemente [6], [8], [10], ..., [230], [464], [466] und [468] in jedem Eingabebild können in die Zeile [18], [19] oder [20] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,6] multipliziert werden. In ähnlicher Weise können die Eingabeelemente [1], [3], [5], ... und [231] in jedem Eingabebild in die Zeile [3], [4] oder [5] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,1] multipliziert werden; die Eingabeelemente [3], [5], [7], ... , [231] und [465] in jedem Eingabebild können in die Zeile [9], [10] oder [11] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,3] multipliziert werden; und die Eingabeelemente [5], [7], [9], ..., [231], [465] und [467] in jedem Eingabebild können in die Zeile [15], [16] oder [17] des PE-Arrays verschoben und mit dem entsprechenden Filterelement [0,5] multipliziert werden.
  • Somit können die Zeilen des PE-Arrays Eingabeelemente empfangen, die mit unterschiedlichen Indizes beginnen, aber viele gemeinsame Eingabeelemente nutzen. Beispielsweise können die Zeilen [0], [6], [12] und [18] viele geradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte gemeinsam nutzen, während die Zeilen [3], [9] und [15] viele ungeradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte gemeinsam nutzen können. So können die Eingabeelemente in der ersten Eingabemerkmalskarte zur Anwendung von Filterelementen in der ersten Zeile des Filters in zwei Blöcke aufgeteilt und in zwei Speicherbänken gespeichert werden, wobei einige geradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte in Speicherbank 0 gespeichert und in die Zeilen [0], [6], [12] und [18] eingegeben werden können und einige ungeradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte in Speicherbank 1 gespeichert und in die Zeilen [3], [9] und [15] eingegeben werden können. Wie vorstehend beschrieben, können die Daten in der Speicherbank 0 gelesen und in die Zeile [0] des PE-Arrays eingegeben werden und nach entsprechenden Verzögerungen, beispielsweise durch die vorstehend beschriebene Eingabeauswahlschaltung, repliziert und in die Zeilen [6], [12] und [18] eingegeben werden. In ähnlicher Weise können die Daten in der Speicherbank 1 gelesen und in die Zeile [3] des PE-Arrays eingegeben werden und können nach geeigneten Verzögerungen, beispielsweise durch die Eingabeauswahlschaltung, repliziert und in die Zeilen [9] und [15] eingegeben werden.
  • In Diagramm 1400 müssen Eingabeelemente in einem Kasten 1410 möglicherweise nicht mit den entsprechenden Filterelementen multipliziert werden, wie es in 13 gezeigt ist und somit können die Produkte für diese Eingabeelemente verworfen werden (z. B. ohne zur Summe addiert zu werden). Wie vorstehend beschrieben, können Eingabeelemente in der zweiten bis vierten Spalte 1414, 1416 und 1418 in Kasten 1410 in die entsprechenden Zeilen eingegeben werden, sodass sie zur Verwendung durch nachfolgende Zeilen repliziert werden können, und die Eingaben in die verschiedenen Zeilen können dieselbe Größe aufweisen. Beispielsweise ist es möglich, dass das Eingabeelement [224] nicht mit dem Filterelement [0,0] multipliziert werden muss, sondern in Zeile [0] eingegeben wird, sodass es repliziert und von Zeile [6], [12] oder [18] zur Berechnung der Teilsumme verwendet werden kann; das Eingabeelement [228] nicht mit dem Filterelement [0,0], [0,2] oder [0,4] in der Zeile [0], [2] oder [4] multipliziert werden muss, sondern in die Zeile [0] eingegeben wird, sodass es repliziert und von der Zeile [18] zur Berechnung der Teilsumme verwendet werden kann. Es ist möglich, dass die Eingabeelemente in einer ersten Spalte 1412 im Kasten 1410 von keiner Zeile verwendet werden, aber hinzugefügt werden, damit die aus dem Speicher gelesenen und in jede Zeile in jeder Unterwelle eingegebenen Eingabeelemente ein ganzzahliges Vielfaches von 8 Byte für eine effizientere Speicherspeicherung und einen effizienteren Zugriff (z. B. Schreiben oder Lesen) beinhalten können. Beispielsweise kann das Eingabeelement 230 von keiner Zeile in den Zeilen [0]-[20] verwendet werden, kann aber in den Eingabeelementen für die Zeile [0] enthalten sein, sodass die Eingabeelemente, die aus dem Speicher gelesen werden, um in einer Teilwelle an die Zeile [0] gesendet zu werden, 116 (statt 115) Elemente und 232 (statt 230) Bytes beinhalten können, wobei 232 ein ganzzahliges Vielfaches von 8 ist.
  • Aufgrund des 2×2-Stride können einige Eingabeelemente (z. B.Eingabeelemente in einigen ungeraden Zeilen) der Eingabemerkmalskarte 1300 nicht mit einigen Filterelementen (z. B.Filterelementen in einigen geraden Zeilen) im Filter multipliziert werden und einige Eingabeelemente (z. B.Eingabeelemente in einigen geradzahligen Zeilen) der Eingabemerkmalskarte 1300 nicht mit einigen anderen Filterelementen (z. B. Filterelementen in einigen ungeradzahligen Zeilen) im Filter multipliziert werden. Beispielsweise ist es möglich, dass Filterelemente in Zeile [0] des Filters nicht auf Eingabeelemente in den Zeilen [1], [3], [5] und dergleichen in der Eingabemerkmalskarte 1300 angewendet werden müssen, während Filterelemente in Zeile [1] des Filters nicht auf Eingabeelemente in den Zeilen [0], [2], [4] und dergleichen in der Eingabemerkmalskarte 1300 angewendet werden müssen. Somit kann eine zusätzliche Partitionierung der Eingabemerkmalskarte 1300 verwendet werden, um Eingabedaten in Zeilen der PE-Arrays zu senden, um einige Filterelemente anzuwenden.
  • 15 beinhaltet ein Diagramm 1500, das ein Beispiel für das Laden eines zweiten Satzes von Filterelementen in ein Verarbeitungselementarray und das gemeinsame Nutzen eines zweiten Satzes von Daten (z. B. Daten in einigen ungeradzahligen Zeilen) in der Eingabemerkmalskarte 1300 von 13 unter den Zeilen des Verarbeitungselementarrays für die parallele Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen veranschaulicht. Das in 15 gezeigt Beispiel veranschaulicht Filterelemente, die in Zeilen des PE-Arrays geladen wurden, und Eingabeelemente, die in einer gewichtungsstationären Faltungsoperation in Zeilen des PE-Arrays verschoben wurden. In dem in 14 gezeigten Beispiel kann die Eingabe in die Schicht des neuronalen Netzes 3 Eingabekanäle beinhalten, wie die R-, G- und B-Kanäle eines Farbbilds. Das in 15 gezeigte Beispiel kann ein Beispiel für die erste Schicht in einem ResNet-50-Netz sein, bei dem die Eingabe in die erste Schicht drei 224×224-Bilder (Eingabemerkmalskarten) beinhaltet, der Filter für jedes Bild eine 7×7-Matrix sein kann und der Filter mit einem Stride von 2×2 über das entsprechende Eingabebild gleiten kann (z. B. jede zweite Zeile und jede zweite Spalte überspringt). Die ursprüngliche 224×224-Eingabemerkmalskarte kann aufgefüllt werden, um eine Eingabemerkmalskarte zu erzeugen, wie durch die Eingabemerkmalskarte 1300 in 13 gezeigt. Abhängig von der Anzahl der Zeilen im PE-Array kann der zweite Satz von Filterelementen in die Zeilen [0]-[20] geladen werden, nachdem der erste Satz von Filterelementen auf die Eingabemerkmalskarten angewendet wurde, oder er kann in die Zeilen [21]-[41] geladen werden, wenn der erste Satz von Filterelementen in die Zeilen [0]-[20] geladen wird, wenn das PE-Array 42 oder mehr Zeilen aufweist. In einigen Ausführungsformen können einige, aber nicht alle von dem zweiten Satz von Filterelementen zu dem Zeitpunkt in das PE-Array geladen werden, zu dem der erste Satz von Filterelementen in die Zeilen [0]-[20] geladen wird, wenn das PE-Array mehr als 21, aber weniger als 42 Zeilen aufweist. In dem in 15 gezeigten Beispiel kann das PE-Array 64, 128 oder mehr Zeilen beinhalten, sodass der zweite Satz von Filterelementen zu dem Zeitpunkt in die Zeilen [21]-[41] geladen werden kann, zu dem der erste Satz von Filterelementen in die Zeilen [0]-[20] geladen wird.
  • Wie veranschaulicht, können Filterelemente [1,0] der drei Filter (z. B. Kernel) für die Kanäle 1-3 jeweils in die Zeilen [21]-[23] geladen werden; Filterelemente [1,1] der drei Filter für die Kanäle 1-3 können jeweils in die Zeilen [24]-[26] geladen werden; ... und Filterelemente [1,6] der drei Filter für die Kanäle 1-3 können jeweils in die Zeilen [39]-[41] geladen werden. In der in 15 gezeigten ersten Teilwelle können die Eingabeelemente [232], [234], [236], ... und [462] in jedem Eingabebild in Zeile 21, 22 oder 23 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,0] multipliziert werden; die Eingabeelemente [234], [236], [238], ..., [462] und [696] in jedem Eingabebild können in Zeile 27, 28 oder 29 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,2] multipliziert werden; die Eingabeelemente [236], [238], [240], ..., [462], [696] und [698] in jedem Eingabebild können in Zeile 33, 34 oder 35 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1, 4] multipliziert werden; und die Eingabeelemente [238], [240], [242], ..., [462], [696], [698] und [700] injedem Eingangsbild können in Zeile 38, 40 oder 41 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,6] multipliziert werden. In ähnlicher Weise können die Eingabeelemente [233], [235], [237], ... und [463] in jedem Eingabebild in die Zeile 24, 25 oder 26 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,1] multipliziert werden; die Eingabeelemente [235], [237], [239], ..., [463] und [697] in jedem Eingabebild können in Zeile 30, 31 oder 32 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,3] multipliziert werden; und die Eingabeelemente [237], [239], [241], ..., [463], [697] und [699] in jedem Eingabebild können in Zeile 36, 37 oder 38 des PE-Arrays verschoben und mit dem entsprechenden Filterelement [1,5] multipliziert werden.
  • Somit können die Eingabedaten für Zeilen des PE-Arrays von unterschiedlichen Eingabeelementen beginnen, können aber viele gemeinsame Eingabeelemente nutzen. Beispielsweise können die Zeilen [21], [27], [33] und [39] viele geradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte gemeinsam nutzen, während die Zeilen [24], [30] und [36] viele ungeradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte gemeinsam nutzen können. So können die Eingabeelemente in der ersten Eingabemerkmalskarte zur Anwendung von Filterelementen in der zweiten Zeile des Filters in zwei Blöcke aufgeteilt und in zwei Speicherbänken gespeichert werden, wobei einige geradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte in Speicherbank 0 gespeichert und in die Zeilen [21], [27], [33] und [39] eingegeben werden können und einige ungeradzahlige Eingabeelemente in der ersten Eingabemerkmalskarte in Speicherbank 3 gespeichert und in die Zeilen [24], [30] und [36] eingegeben werden können. Wie vorstehend beschrieben, können die Daten in der Speicherbank 2 gelesen und in die Zeile [21] eingegeben werden. Sie können auch repliziert und nach entsprechenden Verzögerungen, beispielsweise durch die oben beschriebene Eingabeauswahlschaltung, in die Zeilen [27], [33] und [39] eingegeben werden. In ähnlicher Weise können die Daten in der Speicherbank 3 gelesen und in die Zeile [24] eingegeben werden. Sie können auch repliziert und nach entsprechenden Verzögerungen, beispielsweise durch die Eingabeauswahlschaltung, in die Zeilen [30] und [36] eingegeben werden.
  • In Diagramm 1500 können Eingabeelemente im Kasten 1510 Eingabeelemente sein, die nicht mit dem entsprechenden Filterelement multipliziert werden müssen, sodass die Produkte für diese Eingabeelemente verworfen werden können (z. B. ohne Addieren zur Summe). Wie vorstehend beschrieben, können die Eingabeelemente in der zweiten bis vierten Spalte 1514, 1516 und 1518 im Kasten 1510 in die entsprechenden Zeilen eingegeben werden, sodass sie für die Verwendung durch nachfolgende Zeilen repliziert werden können, und die in jede Zeile des PE-Arrays eingegebenen Daten können die gleiche Größe aufweisen. Beispielsweise ist es möglich, dass das Eingabeelement [456] nicht mit dem Filterelement [1,0] multipliziert werden muss, sondern in Zeile [21] eingegeben wird, sodass es repliziert und von Zeile [27], [33] oder [39] zur Berechnung der Partialsumme verwendet werden kann; es ist möglich, dass das Eingabeelement [460] nicht mit dem Filterelement [1,0], [1,2] oder [1,4] in Zeile [21], [27] oder [33] multipliziert werden muss, sondern in Zeile [21] eingegeben wird, sodass es repliziert und von Zeile [39] zur Berechnung der Teilsumme verwendet werden kann. Die Eingabeelemente in der ersten Spalte 1512 im Kasten 1510 können von keiner Zeile verwendet werden, werden aber wie oben beschrieben zum Speicherabgleich hinzugefügt.
  • 16 beinhaltet ein Diagramm 1600, das ein Beispiel für die Partitionierung von Daten in der Eingabemerkmalskarte 1300 von 13 in mehrere kleinere Merkmalskarten für die Verarbeitung kleinerer Daten unter Verwendung eines Verarbeitungselementarrays gemäß bestimmten Ausführungsformen veranschaulicht. Wie vorstehend in Bezug auf die 13-15 beschrieben, kann das in 16 gezeigte Beispiel beispielsweise in der ersten Schicht eines ResNet-50-Netzs verwendet werden, wobei die Eingabe in die erste Schicht drei 224×224-Bilder (Eingabemerkmalskarten) beinhaltet, der Filter für jedes Bild eine 7×7-Matrix sein kann und der Filter mit einem Stride von 2×2 über das entsprechende Eingabebild gleiten kann (z. B. jede zweite Zeile und jede zweite Spalte überspringend). Die ursprüngliche 224×224-Eingabemerkmalskarte kann aufgefüllt werden, um eine 229×229-Eingabemerkmalskarte zu erzeugen, wie durch die Eingabemerkmalskarte 1300 in 13 gezeigt. Die Eingabemerkmalskarte kann dann zum Speichern in vier Speicherbänken in vier Blöcke partitioniert werden, wie vorstehend mit Bezug auf die 14 und 15 beschrieben.
  • In dem in 16 gezeigten Beispiel kann die Speicherbank 0 Eingabeelemente in geradzahligen Zeilen und geradzahligen Spalten der Eingabemerkmalskarte 1300 beinhalten und kann in Zeilen des PE-Arrays verschoben werden, bei dem Filterelemente in geradzahlige Zeilen und geradzahlige Spalten des Filters geladen sind. Die Speicherbank 1 kann Eingabeelemente in geradzahligen Zeilen und ungeradzahligen Spalten der Eingabemerkmalskarte 1300 beinhalten und kann in Zeilen des PE-Arrays geladen werden, bei dem Filterelemente in geradzahlige Zeilen und ungeradzahlige Spalten des Filters geladen sind. Die Speicherbank 2 kann Eingabeelemente in ungeradzahligen Zeilen und geradzahligen Spalten der Eingabemerkmalskarte 1300 beinhalten und kann in Zeilen des PE-Arrays geladen werden, bei dem Filterelemente in ungeradzahlige Zeilen und geradzahlige Spalten des Filters geladen sind. Die Speicherbank 4 kann Eingabeelemente in ungeradzahligen Zeilen und ungeradzahligen Spalten der Eingabemerkmalskarte 1300 beinhalten und kann in Zeilen des PE-Arrays geladen werden, bei dem Filterelemente in ungeradzahlige Zeilen und ungeradzahlige Spalten des Filters geladen sind. Wie in 14-16 gezeigt, kann jede Speicherbank Eingabeelemente für mehrere Teilwellen beinhalten.
  • 17A und 17B veranschaulichen ein Beispiel des Ladens mehrerer Filterelemente in ein Verarbeitungselementarray und des gemeinsamen Nutzens von Eingabedaten durch Zeilen des Verarbeitungselementarrays zur parallelen Verarbeitung unter Verwendung der geladenen Filterelemente gemäß bestimmten Ausführungsformen. Wie in 17A veranschaulicht, kann eine Faltungsoperation, die von einem Beschleuniger 1710 durchgeführt wird, der ein PE-Array 1720 enthält, C Kanäle von 2-D-Eingabemerkmalskarten 1730 (jeweils mit den Dimensionen H×W) und Filter 1740 verwenden, die M Sätze von Filtern beinhalten, wobei jeder Satz von Filtern C 2-D-Filter (jeweils mit den Dimensionen R×S) beinhalten kann, und jeder 2-D-Filter kann verwendet werden, um eine entsprechende 2-D-Eingabemerkmalskarte 1730 zu filtern. Jede Eingabemerkmalskarte 1730 kann in einen Vektor umgewandelt werden, der H×W-Pixelwerte beinhaltet, wobei die Pixelwerte in jeder Eingabemerkmalskarte 1730 auf eine Zeile im PE-Array 1720 abgebildet werden können. Die Filter 1740 können auf M Kanäle reduziert werden, die jeweils C×R×S-Gewichtungswerte beinhalten, wobei jeder der M Kanäle auf eine Spalte im PE-Array 1720 abgebildet werden kann. Während der Faltungsoperation kann ein Element jedes 2-D-Filters in einem Satz von C 2-D-Filtern (insgesamt R×S Elemente) in eine Zeile in einer entsprechenden Spalte der M Spalten geladen werden, und Pixelwerte in jeder Eingabemerkmalskarte können aufeinanderfolgend an Verarbeitungselemente in der entsprechenden Zeile im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen wie oben beschrieben durchzuführen. Somit können C Zeilen des PE-Arrays 1720 während ein und derselben Zeitspanne verwendet werden. Danach kann ein anderes Element in jedem 2-D-Filter in dem Satz von C Kanälen der 2-D-Filter in eine Zeile in einer entsprechenden Spalte der M Spalten geladen werden, und die Pixelwerte in jeder Eingabemerkmalskarte können aufeinanderfolgend an die Verarbeitungselemente in der entsprechenden Zeile im PE-Array 1720 gesendet werden. Somit können dieselben C Zeilen des PE-Arrays 1720 während ein und derselben Zeitspanne verwendet werden. Auf diese Weise kann jedes Filterelement in das PE-Array 1720 geladen werden und auf eine Eingabemerkmalskarte angewendet werden, um M Ausgabemerkmalskarten 1750 zu erzeugen. In dem in 17 gezeigten Beispiel kann C viel kleiner sein als die Anzahl von Zeilen in der PE-Matrix 1720. Somit kann die Faltungsoperation nur einen kleinen Teil des PE-Arrays 1720 verwenden.
  • Gemäß bestimmten Ausführungsformen, wie in 17B gezeigt, können Pixelwerte in jeder Eingabemerkmalskarte (z. B. ursprüngliche Eingabemerkmalskarte 1310) aufgefüllt werden, um eine Eingabemerkmalskarte (z. B. Eingabemerkmalskarte 1300) zu erzeugen. Eingabeelemente in der Eingabemerkmalskarte können in mehrere (z. B. N) Partitionen unterteilt werden, beispielsweise basierend auf dem bei der Faltung verwendeten Stride. In einem Beispiel, wie vorstehend in Bezug auf 14-16 beschrieben, beträgt die Stride-Größe 2×2, und jede aufgefüllte Eingabemerkmalskarte kann in vier Partitionen 1732 unterteilt und in vier Speicherbänken gespeichert werden.
  • Bei der Faltungsoperation können mehrere Filterelemente (z. B. K Filterelemente in einer oder mehreren Zeilen) in jedem 2-D-Filter in einem Satz von C 2-D-Filtern in mehrere (z. B.K) Zeilen in einer entsprechenden Spalte der M Spalten geladen werden. Daten in einer oder mehreren Partitionen 1732 können aus einem Speicher gelesen und in entsprechende Zeilen im PE-Array 1720 eingegeben werden. Beispielsweise können, wie in 14 gezeigt, Daten in einer ersten Partition 1732 aus dem Speicher (z. B. Speicherbank 0) gelesen und in Zeile [0] des PE-Arrays 1720 verschoben werden, um das Filterelement [0,0] anzuwenden, und Daten in einer zweiten Partition 1732 können aus dem Speicher (z. B. Speicherbank 1) gelesen und in Zeile [3] des PE-Arrays 1720 verschoben werden, um das Filterelement [0,1] anzuwenden. Die in Zeile [0] des PE-Arrays 1720 eingegebenen Daten können beispielsweise durch eine Eingabeauswahlschaltung, wie vorstehend beschrieben, repliziert und aufeinanderfolgend an Verarbeitungselemente in mehreren entsprechenden Zeilen (z. B. Zeilen [6], [12] und [18], wie in 14 gezeigt) im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen. Die in Zeile [3] des PE-Arrays 1720 eingegebenen Daten können zum Beispiel durch die Eingabeauswahlschaltung repliziert und aufeinanderfolgend an Verarbeitungselemente in mehreren entsprechenden Zeilen (z. B. Zeilen [9] und [15], wie in 14 gezeigt) im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen. In ähnlicher Weise können, wie in 15 gezeigt, Daten in einer dritten Partition 1732 aus dem Speicher (z. B. Speicherbank 2) gelesen und in eine Zeile (z. B. Zeile [21]) des PE-Arrays 1720 verschoben werden, um ein Filterelement anzuwenden (z. B. Filterelement [1,0]), und Daten in einer vierten Partition 1732 können aus dem Speicher (z. B. Speicherbank 3) gelesen und in eine Zeile (z. B. Zeile [24]) des PE-Arrays 1720 verschoben werden, um ein Filterelement (z. B. Filterelement [1,1]) anzuwenden. Die in Zeile [21] des PE-Arrays 1720 eingegebenen Daten können beispielsweise durch die Eingabeauswahlschaltung repliziert und aufeinanderfolgend an die Verarbeitungselemente in mehreren entsprechenden Zeilen (z. B. die Zeilen [27], [33] und [39], wie in 15 gezeigt) im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen. Die in Zeile [24] des PE-Arrays 1720 eingegebenen Daten können zum Beispiel durch die Eingabeauswahlschaltung repliziert und aufeinanderfolgend an Verarbeitungselemente in mehreren entsprechenden Zeilen (z. B. Zeilen [30] und [36], wie in 15 gezeigt) im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen.
  • Somit können K Zeilen des PE-Arrays 1720 während ein und derselben Zeitspanne verwendet werden, wobei Eingabedaten in jeder Partition 1732 einmal aus dem Speicher gelesen und unter Verwendung mehrerer (z. B. K) Filterelemente gefiltert werden können. Danach können andere mehrere (z. B. K) Filterelemente in jedem 2-D-Filter im Satz von C 2-D-Filtern in mehrere (z. B. K) Zeilen in einer entsprechenden Spalte der M Spalten geladen werden, und Daten in einer oder mehreren Partitionen 1732 können gelesen, repliziert und aufeinanderfolgend an Verarbeitungselemente in mehreren entsprechenden Zeilen im PE-Array 1720 gesendet werden, um die verschmolzenen Multiplikations- und Additionsoperationen durchzuführen und M Ausgabemerkmalskarten 1750 zu erzeugen. Somit kann die Faltungsoperation unter jeweiliger Verwendung von mehr Zeilen des PE-Arrays 1720 schneller durchgeführt werden.
  • Der Beschleuniger 1710 kann Anweisungen ausführen, die von einem Compiler unter Verwendung eines neuronalen Netzmodells, wie eines ResNet-50-Modells, erzeugt wurden. Das neuronale Netzmodell kann durch einen Datenflussgraphen dargestellt werden, wobei jeder Knoten (z. B. Vertex) im Graphen eine Operation darstellen kann und Verbindungen (z. B. Rändern) zwischen den Knoten den Datenfluss oder die Datenabhängigkeit darstellen können. Der Compiler kann zum Beispiel eine Forminferenz an dem neuronalen Netzmodell durchführen, um die Größen der Daten zu bestimmen, die für jede Operation verwendet werden. Der Compiler kann dann den Datenflussgraphen durchlaufen, um Operationen zu identifizieren, die die Rechen-Engines (z. B. Beschleuniger oder insbesondere Verarbeitungselementarrays) des Hardwaresystems zum Umsetzen des neuronalen Netzs möglicherweise nicht effizient nutzen. Beispielsweise kann der Compiler Operationen identifizieren, die eine kleine Anzahl von Eingabekanälen verwenden, wie beispielsweise Operationen, die jeweils nicht mehr als beispielsweise die Hälfte der Gesamtzahl von Zeilen in dem PE-Array verwenden, wenn eine einzelne Gewichtung auf jeden Eingabekanal angewendet wird.
  • Für die identifizierten Operationen kann der Compiler zu dem neuronalen Netzmodell Operationen zum Auffüllen der Eingabemerkmalskarte für jeden Eingabekanal hinzufügen, wie oben in Bezug auf beispielsweise 13 beschrieben, basierend auf Parametern einer Faltungsoperation, wie der Größe einer ursprünglichen Eingabemerkmalskarte, der Größe eines Filters (z. B. Kernel), dem für die Faltung verwendeten Stride, dem Speicherabgleich und der Größe des Verarbeitungselementarrays. Optional kann der Compiler dem neuronalen Netzmodell Operationen zur Aufteilung der aufgefüllten Eingabemerkmalskarte in mehrere Partitionen und zur Aufteilung der Faltungsoperation in mehrere Teiloperationen hinzufügen, wobei die Teiloperationen verschiedene Partitionen der mehreren Partitionen verwenden können. In einigen Ausführungsformen kann der Compiler Operationen zum Verwerfen bestimmter aufgefüllter Daten oder von Ergebnissen, die mit bestimmten aufgefüllten Daten erzeugt wurden, hinzufügen.
  • Der Compiler kann dann die Faltungsoperation (z. B. die Unteroperationen) auf das Hardwaresystem abbilden, wie etwa das Verarbeitungselementarray in einem Beschleuniger. Der Compiler kann Operationen erkennen, die aus dem Speicher gelesene verschobene Daten verwenden und bestimmte Daten gemeinsam mit anderen Operationen nutzen, beispielsweise durch Analysieren der Berechnungsschleifengrenze. Für die erkannten Operationen kann der Compiler Anweisungen hinzufügen, die zum Beispiel durch die vorstehend beschriebene Eingabeauswahlschaltung ausgeführt werden können, um bestimmte Daten zum Eingeben in bestimmte Zeilen des Verarbeitungselementarrays zu replizieren. Der Compiler kann auch die aufgrund des Auffüllens zu verwerfende Datenmenge bestimmen und Befehle zur Ausführung beispielsweise durch den Beschleuniger erzeugen, um bestimmte aufgefüllte Daten oder unter Verwendung bestimmter aufgefüllter Daten erzeugte Ergebnisse zu verwerfen.
  • 18 ist ein Flussdiagramm, das ein Beispiel eines Verfahrens zum effizienteren Verwenden eines Verarbeitungselementarrays veranschaulicht, während das Übertragen von Daten aus dem Speicher gemäß bestimmten Ausführungsformen reduziert wird. Die im Flussdiagramm 1800 beschriebenen Operationen können zum Beispiel von einem Compiler durchgeführt werden, der auf einem Hostsystem ausgeführt wird, wie etwa dem Compiler und dem Hostsystem, die unten mit Bezug auf 19 beschrieben werden. Obwohl das Flussdiagramm 1800 die Operationen als einen sequentiellen Prozess beschreiben kann, können in verschiedenen Ausführungsformen viele der Operationen parallel oder gleichzeitig durchgeführt werden. Außerdem kann die Reihenfolge der Operationen neu angeordnet werden. Ein Prozess kann zusätzliche Schritte aufweisen, die in der Figur nicht gezeigt sind. Darüber hinaus können Ausführungsformen der Verfahren durch Hardware, Software, Firmware, Middleware, Mikrocode, Hardwarebeschreibungssprachen oder eine beliebige Kombination davon umgesetzt werden. Bei Umsetzung in Software, Firmware, Middleware oder Mikrocode können der Programmcode oder Codesegmente zum Ausführen der zugeordneten Aufgaben in einem computerlesbaren Medium wie etwa einem Speichermedium gespeichert werden.
  • Bei Block 1810 kann ein Hostsystem ein neuronales Netzmodell empfangen, das Faltungsoperationen in unterschiedlichen Schichten eines neuronalen Netzes beinhaltet. Das neuronale Netzmodell muss möglicherweise unter Verwendung einer Rechen-Engine umgestezt werden, die ein zweidimensionales Verarbeitungselementarray beinhalten kann. Das neuronale Netzmodell kann wie vorstehend beschrieben durch einen Datenflussgraphen dargestellt werden. Die Faltungsoperation kann verwendet werden, um einen Ausgabetensor zu erzeugen, der einen Satz von Ausgabemerkmalskarten beinhaltet, wobei ein Satz von Eingabemerkmalskarten und ein Satz von Filtern verwendet werden. Wie vorstehend beschrieben, kann in einigen Ausführungsformen der Satz von Eingabemerkmalskarten C Eingabemerkmalskarten beinhalten, der Satz von Filtern kann M Filter beinhalten, die jeweils C Filtermatrizen beinhalten, und der Satz von Ausgabemerkmalskarten kann M Ausgabemerkmalskarten beinhalten, wobei jede der M Ausgabemerkmalskarten die Summe des Ergebnisses einer Faltung zwischen jeder der C Eingabemerkmalskarten und der entsprechenden Filtermatrix in den C Filtermatrizen in einem Filter der M Filter sein kann. In einigen Ausführungsformen kann C viel kleiner sein als die Gesamtzahl von Zeilen in dem zweidimensionalen Verarbeitungselementarray in der Rechen-Engine. In einem Beispiel kann C 3 sein und die drei Eingabemerkmalskarten können die roten, grünen und blauen Kanäle eines Farbbildes beinhalten. Das Verarbeitungselementarray kann zum Beispiel 64, 128 oder mehr Zeilen beinhalten.
  • Bei Block 1820 kann ein Compiler, der auf einem Hostsystem ausgeführt wird, eine Faltungsoperation erkennen, die die Rechen-Engine möglicherweise nicht effizient nutzt. Beispielsweise kann der Compiler den Datenflussgraphen des neuronalen Netzmodells durchlaufen, um eine Faltungsoperation zu identifizieren, die die Rechen-Engine zum Umsetzen des neuronalen Netzes möglicherweise nicht ausreichend auslastet. Die identifizierte Operation kann eine kleine Anzahl von Eingabekanälen verwenden, wie etwa nicht mehr als die Hälfte der Gesamtzahl von Zeilen in dem PE-Array, wenn ein einzelnes Filterelement auf jeden Eingabekanal der kleinen Anzahl von Eingabekanälen angewendet wird. Wenn die Anzahl der Eingabekanäle nicht mehr als die Hälfte der Gesamtanzahl der Zeilen im Verarbeitungselementarray beträgt, kann die Faltungsoperation nicht mehr als die Hälfte der Zeilen im Verarbeitungselementarray verwenden, um einen Satz von Filterelementen, der ein Filterelement in jedem Filter des Satzes von Filtern beinhaltet, auf den Satz von Eingabemerkmalskarten anzuwenden. Beispielsweise kann die Anzahl der verwendeten Zeilen gleich der Anzahl der Eingabekanäle sein.
  • Bei Block 1830 kann der Compiler Operationen zu dem neutralen Netzmodell hinzufügen, so etwa Knoten zu dem Datenflussgraphen hinzufügen, der das neuronale Netz darstellt. Die Operationen können beispielsweise basierend auf dem Stride (z. B. 2×2) der Faltungsoperation das Auffüllen der Eingabemerkmalskarte mit Auffülldaten, wie vorstehend in Bezug auf die 13-15 beschrieben, das Aufteilen der aufgefüllten Eingabemerkmalskarte in Partitionen, wie vorstehend in Bezug auf die 14-16 beschrieben, das Aufteilen der Faltungsoperation in kleinere Teiloperationen zur Bearbeitung der Partitionen und/oder das Verwerfen bestimmter Auffülldaten beinhalten, wie derjenigen Auffülldaten, die zum Speicherabgleich verwendet werden. In einigen Ausführungsformen können die hinzugefügten Operationen das Schreiben der Partitionen in verschiedene jeweilige Speicherbänke in einer Speichervorrichtung beinhalten. Das neuronale Netzmodell mit den hinzugefügten Operationen kann kompiliert werden, um Anweisungen zur Ausführung durch die Rechen-Engine zu erzeugen, die das zweidimensionale Verarbeitungselementarray und andere Schaltungen beinhaltet, wie beispielsweise in 7 beschrieben, wie etwa die Eingabeauswahlschaltung 730.
  • Bei Block 1840 kann der Compiler Anweisungen erkennen, die Daten in das PE-Array verschieben, wobei die Daten zumindest teilweise von den Anweisungen gemeinsam genutzt werden können. Beispielsweise kann der Compiler zwei Anweisungen identifizieren, die das Verschieben eines gleichen Abschnitts einer Eingabemerkmalskarte in das PE-Array zur Multiplikation mit unterschiedlichen Filterelementen beinhalten können. Eine erste Anweisung in den beiden Anweisungen kann das Verschieben eines ersten Teils der Eingabemerkmalskarte in das PE-Array beinhalten, um mit einem ersten Filterelement eines Filters zu multiplizieren, eine zweite Anweisung in den beiden Anweisungen kann das Verschieben eines zweiten Teils der Eingabemerkmalskarte in das PE-Array beinhalten, um mit einem zweiten Filterelement des Filters zu multiplizieren, und es kann eine gewisse Überlappung zwischen dem ersten Teil und dem zweiten Teil der Eingabemerkmalskarte vorliegen. Die erste Anweisung und die zweite Anweisung können möglicherweise gleichzeitig durch zwei Zeilen des PE-Arrays ausgeführt werden, wobei eine Anweisung die Daten verwenden kann, die von der anderen Anweisung verwendet werden.
  • Bei Block 1850 kann der Compiler Anweisungen zum Replizieren der Daten erzeugen, die von den Anweisungen gemeinsam genutzt werden können. Beispielsweise können die von der ersten Anweisung verwendeten Daten aus einem Speicher gelesen und in eine erste Zeile verschoben werden, in die das erste Filterelement im PE-Array geladen wird, während die von der zweiten Anweisung verwendeten Daten von einer Eingabeauswahlschaltung auf der Grundlage der aus dem Speicher gelesenen und von der ersten Anweisung verwendeten Daten repliziert werden können. In einigen Ausführungsformen kann die Eingabeauswahlschaltung die replizierten Daten um eine bestimmte Anzahl von Taktzyklen verzögern, bevor die replizierten Daten in eine zweite Zeile gesendet werden, in die das zweite Filterelement im PE-Array geladen ist. In einigen Ausführungsformen können die Anweisungen zum Replizieren der Daten Anweisungen zum Aktivieren der Eingabeauswahlschaltung zu einem Zeitpunkt beinhalten, nachdem die aus dem Speicher gelesenen Daten in die erste Zeile eingegeben wurden.
  • Optional kann der Compiler bei Block 1860 Anweisungen zum Verwerfen von Ergebnissen erzeugen, die unter Verwendung bestimmter Fülldaten berechnet wurden. Beispielsweise werden einige Daten, die in die erste Zeile im PE-Array verschoben werden, möglicherweise nicht von der ersten Zeile benötigt, können aber zur Verwendung durch die zweite Zeile repliziert werden. Somit können die von der ersten Zeile unter Verwendung der Auffülldaten berechneten Berechnungsergebnisse verworfen werden (z. B. nicht zur Summe der Produkte addiert werden).
  • 19 beinhaltet ein Blockdiagramm, das ein Beispiel eines Hostsystems 1900 darstellt, auf dem ein Compiler 1930, wie er hierin beschrieben ist, ausgeführt werden kann. Das dargestellte Hostsystem 1900 ist ein Beispiel für eine Rechenvorrichtung und beinhaltet einen Prozessor 1902, einen Prozessorspeicher 1904, mindestens eine Speichervorrichtung 1906, verschiedene Eingabe-/Ausgabe(E/A)-Vorrichtungen 1908 und mindestens eine Netzschnittstelle 1910. Im Beispiel von 19 beinhaltet das Hostsystem 1900 auch eine Beschleunigungs-Engine 1912, die eine integrierte Schaltungsvorrichtung ist, die bestimmte Operationen oder Berechnungen beschleunigen kann, die von dem Hostsystem 1900 durchgeführt werden. In verschiedenen Beispielen kann das Hostsystem 1900 unter anderen Beispielen als ein Server in einem Rechenzentrum, ein Desktop-Computer, ein Laptop-Computer, ein Tablet-Computer oder ein Smartphone umgesetzt sein. In einigen Beispielen können Operationen oder Komponenten, die unten erörtert und in dem Hostsystem 1900 ausgeführt werden oder darin beinhaltet sind, in anderen Computervorrichtungen ausgeführt werden oder darin beinhaltet sein. Beispielsweise kann der Compiler 1930 auf dem Hostsystem 1900 ausgeführt werden, während sich die Beschleunigungs-Engine 1912 auf einem anderen Hostsystem befindet.
  • Der Prozessor 1902 ist eine integrierte Schaltungsvorrichtung, die Programmcode in Form von Anweisungen ausführen kann. Der Programmcode kann für verschiedene Softwareanwendungen oder Tools vorgesehen sein, wie beispielsweise ein Betriebssystem 1920 oder den veranschaulichten Compiler 1930. Während der Prozessor 1902 ein Programm ausführt, können die Anweisungen für das Programm im Prozessorspeicher 1904 gespeichert sein. Die Anweisungen können auch anderswo gespeichert sein, wie etwa auf der Speichervorrichtung 1906, und können in den Prozessorspeicher 1904 geladen werden, wenn sie vom Prozessor 1902 benötigt werden. Der Prozessor 1902 kann auch den Prozessorspeicher 1904 zum vorübergehenden Speichern anderer Daten verwenden, auf denen der Prozessor 1902 arbeitet. In verschiedenen Beispielen ist der Prozessorspeicher 1904 ein flüchtiger Speichertyp, wie etwa ein Typ von Direktzugriffsspeicher, obwohl nichtflüchtige Speichertypen alternativ oder zusätzlich für den Prozessorspeicher 1904 verwendet werden können.
  • Die Speichervorrichtung 1906 ist ein Beispiel einer Vorrichtung, die einen nichtflüchtigen Speicher beinhalten kann. Beispielsweise kann die Speichervorrichtung 1906 neben anderen Beispielen ein Magnetplattenlaufwerk, ein Festkörperlaufwerk oder ein optisches Laufwerk sein. Die Speichervorrichtung 1906 kann ferner nichtflüchtig sein, sodass Programmcode und andere Daten, die auf der Speichervorrichtung 1906 gespeichert sind, vorhanden bleiben, wenn die Speichervorrichtung 1906 nicht eingeschaltet ist.
  • Die Speichervorrichtung 1906 ist ein Beispiel einer Peripherievorrichtung, wobei es sich um Komponenten handelt, die mit dem Hostsystem 1900 gekoppelt werden können, um dem Hostsystem 1900 bestimmte Funktionen zu verleihen. Andere Beispiele für Peripherievorrichtungen beinhalten die Eingabe-/Ausgabevorrichtungen 1908 und die Netzschnittstelle 1910. Die Eingabe-/Ausgabevorrichtungen 1908 können unter anderen Beispielen Benutzereingabe- und -ausgabevorrichtungen beinhalten, wie etwa Tastaturen, Mäuse, Berührungsbildschirme, Mikrofone, Anzeigebildschirme, Lautsprecher, Drucker und Scanner. Die Netzschnittstelle 1910, die unter Verwendung einer Netzschnittstellenkarte umgesetzt werden kann, kann Zugriff auf ein oder mehrere Netze bereitstellen. Die Netzschnittstelle 1910 kann beispielsweise einen physischen Anschluss zum Anschließen eines Netzkabels und/oder drahtlose Antennen zum Kommunizieren mit WLAN- und/oder Mobilfunknetzen beinhalten. Die Netzschnittstelle 1910 kann auch als E/A-Vorrichtung beschrieben werden.
  • Die Beschleunigungs-Engine 1912 ist auch eine andere Art von Peripherievorrichtung oder E/A-Vorrichtung. Die Beschleunigungs-Engine 1912 ist eine Vorrichtung, die speziell dafür gebaut ist, bestimmte Operationen durchzuführen, die von dem Prozessor 1902 ausgeführt werden können, aber von der Beschleunigungs-Engine 1912 schneller ausgeführt werden können. Beispielsweise kann die Beschleunigungs-Rngine 1912 ein neuronaler Netzbeschleuniger sein und kann somit in der Lage sein, die parallelen Berechnungen eines neuronalen Netzes im großen Maßstab effizienter durchzuführen, als wenn die Berechnungen durch den Prozessor 1902 durchgeführt werden. Als ein weiteres Beispiel kann die Beschleunigungs-Engine 1912 eine Grafikverarbeitungseinheit (GPU) sein und kann optimiert sein, um die Berechnungen durchzuführen, die für das Rendern von Grafiken erforderlich sind. Andere Beispiele von Vorrichtungen, die durch die Beschleunigungs-Engine 1912 umgesetzt werden können, beinhalten kryptographische Beschleuniger, Komprimierungs- und Dekomprimierungsbeschleuniger, 3-D-Beschleuniger, Beschleuniger für reguläre Ausdrücke, Sicherheitsbeschleuniger und andere.
  • In verschiedenen Beispielen kann die Beschleunigungs-Engine 1912 Programmcode ausführen, um bestimmte Operationen durchzuführen. Wenn die Beschleunigungs-Engine 1912 beispielsweise ein neuraler Netzbeschleuniger ist, kann die Beschleunigungs-Engine 1912 programmiert sein, um ein bestimmtes neuronales Netz auszuführen, wie beispielsweise eines, das eine Bilderkennung durchführt, oder eines, das eine maschinelle Übersetzung durchführt. Als weiteres Beispiel zur Unterstützung der Ausführung eines neuronalen Netzes kann die Beschleunigungs-Engine 1912 so programmiert sein, dass sie Vorgänge wie das Kopieren von Daten für das neuronale Netz aus dem Prozessorspeicher 1904 (beispielsweise) in die Beschleunigungs-Engine 1912, das Kopieren von Eingabedaten für das neuronale Netz aus dem Prozessorspeicher 1904 in die Beschleunigungs-Engine 1912 und/oder das Kopieren von Ergebnissen aus der Beschleunigungs-Engine 1912 in den Prozessorspeicher 1904 durchführt, neben anderen Beispielen.
  • Um Programmcode für die Beschleunigungs-Engine 1912 zu generieren, kann das Hostsystem 1900 in verschiedenen Beispielen den Compiler 1930 ausführen. Compiler sind im Allgemeinen Softwareprogramme, die in einer für Menschen lesbaren Sprache geschriebenen Programmcode in ein Format (z. B. Maschinenanweisungen) übersetzen, das von einer integrierten Schaltungsvorrichtung gelesen und verarbeitet werden kann. Im Beispiel von 19 ist die Beschleunigungs-Engine 1912 ein neuronaler Netzbeschleuniger und der Compiler 1930 dient zum Kompilieren einer neuronalen Netzbeschreibung in Anweisungen, die von der Beschleunigungs-Engine 1912 auszuführen sind. Wenn die Beschleunigungs-Engine 1912 einen anderen Beschleunigertyp umsetzt, kann ein anderer Compiler verwendet werden. Wie vorstehend beschrieben, kann der Compiler 1930 in einigen Ausführungsformen verwendet werden, um die Tensor-Operationen in Unteroperationen zu unterteilen, und kann die Durchführung der Unteroperationen auf verschiedenen Beschleunigungs-Engines und/oder verschiedenen Beschleunigern in einer Beschleunigungs-Engine planen.
  • Der Compiler 1930 kann beispielsweise aktiviert werden, wenn das Betriebssystem 1920 Tastatur-, Maus-, Touchscreen-, Sprachbefehls- oder andere Eingaben von den Eingabe-/Ausgabevorrichtungen 1908 empfängt. Die Eingaben können ferner Parameter für den Compiler 1930 beinhalten, wie beispielsweise den Eingabecode 1942 zum Kompilieren und Konfigurieren von Optionen für den Kompilierungsprozess. Sobald der Compiler 1930 aktiviert ist, kann der Prozessor 1902 die Anweisungen für den Compiler 1930 in den Prozessorspeicher 1904 laden und die Anweisungen ausführen.
  • Im Beispiel von 19 beinaltet der Compiler 1930 eine erste Stufe 1932, eine zweite Stufe 1936 und eine dritte Stufe 1940, die jeweils unterschiedliche Operationen ausführen, um kompilierten Code 1944 zu erzeugen. In anderen Beispielen kann der Compiler 1930 die Operationen der ersten Stufe 1932, der zweiten Stufe 1936 und/oder der dritten Stufe 1940 in weniger Stufen kombinieren oder kann die Operationen einer der Stufen in mehrere Stufen unterteilen.
  • Die erste Stufe 1932 kann den Eingabecode 1942 empfangen und verarbeiten. Der Eingabecode 1942 kann neben vielen anderen Beispielen ein Programm in einer höheren Programmiersprache wie etwa Java, C++ oder Tensorflow beschreiben. Der Eingabecode 1942 kann beispielsweise Schritte zum Durchführen von Bilderkennung, Spracherkennung, Maschinenübersetzung oder anderen Operationen beschreiben. Der Eingabecode 1942 kann beispielsweise von der Speichervorrichtung 1906 erhalten werden. Alternativ, obwohl hier nicht dargestellt, kann sich der Eingabecode 1942 im Prozessorspeicher 1904 befinden oder kann unter Verwendung der Netzschnittstelle 1910 von einer Position im Netz erhalten werden. Die Verarbeitung des Eingabecodes 1942 kann Sortieren der im Eingabecode 1942 beschriebenen Operationen in Schichten beinhalten, wobei die Ausgaben einer Schicht die Eingaben für eine nächste Schicht bereitstellen. Die Verarbeitung kann auch Identifizieren von Schritten beinhalten, die von dem Prozessor 1902 statt von der Beschleunigungs-Engine 1912 auszuführen sind. Zum Beispiel muss der Prozessor 1902 durch die Ausführung eines Treibers 1922 unter anderen Beispielen möglicherweise Schritte wie das Konfigurieren von Deskriptoren für direkten Speicherzugriff (DMA) zum Bewegen von Daten in die oder aus der Beschleunigungs-Engine 1912 ausführen.
  • Die Ausgabe 1934 der ersten Stufe 1932 kann beispielsweise in Schichten, Knoten und Verbindungen zwischen Knoten eines neuronalen Netzes organisiert werden. Die zweite Stufe 1936 kann an dieser Ausgabe 1934 eine Zwischenverarbeitung durchführen. Beispielsweise können die Operationen, die in einer beliebigen Schicht oder an einem beliebigen Knoten in einer Schicht durchgeführt werden, zu viele sein, als dass die Beschleunigungs-Engine 1912 sie gleichzeitig ausführen könnte. Die Beschleunigungs-Engine 1912 kann zum Beispiel eine begrenzte Menge an lokalem Speicherplatz für die Daten aufweisen, die für eine Berechnung benötigt werden, oder die Berechnungen können mehr sein, als die Beschleunigungs-Engine 1912 auf einmal ausführen kann. In diesem Beispiel kann die erste Stufe 1932 die Operationen der Schicht oder des Knotens in kleinere Operationen zerlegen, die in den lokalen Speicher der Beschleunigungs-Engine und/oder in die Rechenkapazität der Beschleunigungs-Engine 1912 passen können. Die Verarbeitung der Ausgabe 1934 der ersten Stufe 1932 kann unter anderen Beispielen andere Schritte umfassen, wie etwa Planung oder Bestimmung der Reihenfolge, in der die Beschleunigungs-Engine 1912 und/oder der Prozessor 1902 Operationen ausführen.
  • In verschiedenen Beispielen beinhaltet die Ausgabe 1938 der zweiten Stufe 1936 die verschiedenen Schritte, die von Komponenten der Beschleunigungs-Engine 1912 in der Reihenfolge auszuführen sind, in der die Schritte auszuführen sind. Die Ausgabe 1938 kann beispielsweise als ein Datenflussdiagramm dargestellt werden, wobei die Knoten im Diagramm Speicheroperationen, Berechnungen und andere Operationen darstellen und die Ränder oder Verbindungen zwischen den Knoten Abhängigkeiten zwischen den Knoten darstellen, wie etwa Datenabhängigkeiten, Speicherabhängigkeiten oder Betriebsabhängigkeiten, neben anderen Beispielen.
  • Die dritte Stufe 1940 kann an der Ausgabe 1938 der zweiten Stufe 1936 arbeiten und verschiedene Schritte ausführen, bevor sie die Anweisungen erzeugt, die von der Beschleunigungs-Engine 1912 auszuführen sind. Diese Schritte können beispielsweise das Entfernen redundanter Abhängigkeiten, das Auflösen oder Handhaben von Abhängigkeiten zwischen Knoten durch Einfügen von Synchronisationsanweisungen in den Code, das Identifizieren möglicher Optimierungen bei der Speichernutzung oder der Speicherbandbreitennutzung und andere Operationen beinhalten. In einigen Beispielen kann die dritte Stufe 1940 einen Datenplaner 1950 beinhalten.
  • Die Ausgabe der dritten Stufe 1940 ist kompilierter Code 1944, der Maschinenanweisungen im Binärformat beinhalten kann. In einigen Beispielen kann der kompilierte Code 1944 im Prozessorspeicher 1904 gespeichert werden. Alternativ oder zusätzlich kann der kompilierte Code 1944 auf die Speichervorrichtung 1906 oder an eine Position im Netz kopiert werden. Wie vorstehend erwähnt, kann sich die Beschleunigungs-Engine 1912 in einem anderen Hostsystem befinden, wobei in diesem Fall der kompilierte Code 1944 über die Netzschnittstelle 1910 an das andere Hostsystem gesendet werden kann.
  • Im Beispiel von 19 kann das Hostsystem 1900 einen Treiber 1922 ausführen, der auch als Vorrichtungstreiber oder Laufzeittreiber bezeichnet werden kann, der die Beschleunigungs-Engine 1912 verwaltet. Der Treiber 1922 kann eine Schnittstelle zwischen Anwendungen, die auf dem Hostsystem 1900 (oder auf einem anderen Hostsystem) ausgeführt werden, und der Beschleunigungs-Engine 1912 bereitstellen. Beispielsweise kann der Treiber 1922 eine Anwendungsprogrammschnittstelle (API) bereitstellen, die Funktionen zum Zuführen von Eingabedaten zu der Beschleunigungs-Engine 1912 und zum Definieren der an den Eingabedaten durchzuführenden Operation definiert. In diesem und anderen Beispielen kann der Treiber 1922 die Beschleunigungs-Engine 1912 konfigurieren, um die Operation durchzuführen. Beispielsweise kann der Treiber 1922 ein neuronales Netz identifizieren, das die Beschleunigungs-Engine 1912 ausführen soll, sowie den Ort im Prozessorspeicher 1904 oder auf der Speichervorrichtung 1906, wo sich der kompilierte Code 1944 für das neuronale Netz befindet. Der Treiber 1922 kann ferner in die Beschleunigungs-Engine 1912 laden oder die Beschleunigungs-Engine 1912 veranlassen, den kompilierten Code 1944 zu laden, kann die Eingabedaten, mit denen das neuronale Netz arbeiten soll, laden oder die Beschleunigungs-Engine 1912 laden, und/oder kann Bewirken, dass die Beschleunigungs-Engine 1912 an den Eingabedaten ausgeführt wird. Sobald die Beschleunigungs-Engine 1912 beendet ist, kann die Beschleunigungs-Engine 1912 den Treiber 1922 benachrichtigen, und der Treiber 1922 kann ein Ergebnis an die Anwendung zurückliefern, die das Ergebnis angefordert hat.
  • 20 beinhaltet ein Blockdiagramm, das ein Beispiel einer Beschleunigungs-Engine 2000 veranschaulicht. Die Beschleunigungs-Engine 2000 ist ein Beispiel für eine integrierte Schaltung, die einen oder mehrere Beschleuniger 2002a-2002n beinhalten kann, die dem vorstehend in Bezug auf 7 beschriebenen Beschleuniger gleichen können. Beispielsweise kann die Beschleunigungs-Engine 2000 in einer Ausführungsform vier Beschleuniger beinhalten, die dazu verwendet werden können, vier Teiloperationen einer Faltungsoperation parallel durchzuführen, wie vorstehend beschrieben.
  • In dem Beispiel von 20 beinhaltet die Beschleunigungs-Engine 2000 mehrere Beschleuniger 2002a-2002n, von denen jeder einen Satz von Operationen ausführen kann. In verschiedenen Beispielen dienen die Beschleuniger 2002a-2002n bestimmten Arten von Operationen, sodass die Beschleuniger 2002a-2002n die Operationen viel schneller ausführen können, als wenn ähnliche Operationen von einem Allzweckprozessor ausgeführt werden. In verschiedenen Beispielen müssen Eingabedaten, an denen die Operationen ausgeführt werden sollen, zuerst in die Beschleuniger 2002a-2002n verschoben werden, um einen Satz von Operationen auszuführen. Zusätzlich wird in einigen Fällen auch Programmcode in die Beschleuniger 2002a-2002n verschoben, der die Operationen programmiert, welche die Beschleuniger 2002a-2002n an den Daten ausführen. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2000 N Beschleuniger 2002a-2002n. Beispiele für Beschleuniger, die in der Beschleunigungs-Engine 2000 beinhaltet sein können, beinhalten Grafikbeschleuniger, Gleitkommabeschleuniger, neuronale Netzbeschleuniger und andere. In verschiedenen Beispielen können die Beschleuniger 2002a-2002n jeweils gleich sein (z. B. ist jeder von ihnen ein Grafikbeschleuniger) oder unterschiedlich sein (z. B. beinhalten die Beschleuniger 2002a-2002n einen Grafikbeschleuniger, einen Gleitkommabeschleuniger und einen Beschleuniger des neuronalen Netzes).
  • Die beispielhafte Beschleunigungs-Engine 2000 beinhaltet ferner DRAM-Steuerungen 2042a-2042k zum Kommunizieren mit einem externen Speicher. Der externe Speicher wird in diesem Beispiel unter Verwendung von DRAM 2030 umgesetzt. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungs-Engine 2000 k DRAM-Steuerungen 2042a-2042k, von denen jede in der Lage sein kann, mit einem unabhängigen Satz von Bänken des DRAM zu kommunizieren. In anderen Beispielen können andere Arten von RAM-Technologie für den externen Speicher verwendet werden. Die DRAM-Steuerungen 2042a-2042k können auch als Speichersteuerungen bezeichnet werden.
  • In verschiedenen Beispielen können Eingabedaten und/oder der Programmcode für die Beschleuniger 2002a-2002n im DRAM 2030 gespeichert sein. Unterschiedliche Programme können veranlassen, dass die Beschleuniger 2002a-2002n unterschiedliche Operationen ausführen. Wenn zum Beispiel einer der Beschleuniger ein neuronaler Netzbeschleuniger ist, kann ein Programm den neuronalen Netzbeschleuniger dazu konfigurieren, eine Spracherkennung auszuführen, während ein anderes Programm den neuronalen Netzbeschleuniger dazu konfigurieren kann, eine Bilderkennung auszuführen. In verschiedenen Beispielen können unterschiedliche Beschleuniger 2002a-2002n mit unterschiedlichen Programmen programmiert sein, sodass jeder einen anderen Satz von Operationen ausführt. In verschiedenen Beispielen können die Prozessoren 2048a-2048s das Verschieben von Programmcode vom DRAM 2030 zu den Beschleunigern 2002a-2002n verwalten.
  • Die beispielhafte Beschleunigungs-Engine 2000 beinhaltet ferner E/A-Steuerungen 2044a-2044p für die Kommunikation mit den E/A-Vorrichtungen 2032 im System. Die Beschleunigungs-Engine 2000 kann mit E/A-Vorrichtungen über zum Beispiel einen Prozessorbus kommunizieren. In einigen Beispielen kann der Prozessorbus unter Verwendung von peripherer Komponentenverbindung (Peripheral Component Interconnect - PCI) und/oder einer Variante des PCI-Bus-Protokolls umgesetzt sein. Der Prozessorbus kann die Beschleunigungs-Engine 2000 mit E/A-Vorrichtungen verbinden, wie zum Beispiel unter anderem Eingabe- und Ausgabevorrichtungen, Speichersteuerungen, Speichervorrichtungen und/oder Netzkarten. In einigen Beispielen können die E/A-Steuerungen 2044-2044p es der Beschleunigungs-Engine 2000 ermöglichen, als E/A-Vorrichtung für einen Hostprozessor zu fungieren. Zum Beispiel kann die Beschleunigungs-Engine 2000 der Empfänger von Eingabedaten vom Hostprozessor und eines Befehls sein, der eine Operation angibt, die an den Eingabedaten ausgeführt werden soll (z. B. eine bestimmte Berechnung oder Analyse). In dem dargestellten Beispiel beinhaltet die Beschleunigungsengine 2000 p E/A-Steuerungen 2044a-2044p, von denen jede einen separaten Wurzelkomplex beinhalten kann und mit einem separaten Satz von E/A-Vorrichtungen 2032 kommunizieren kann. In anderen Beispielen können andere standardisierte Busprotokolle wie etwa Ultra Path Interconnect (UPI) für den Hostbus verwendet werden. In anderen Beispielen kann ein proprietäres Busprotokoll verwendet werden.
  • Die Bewegung von Daten in der Beschleunigungs-Engine 2000 kann von einem oder mehreren Prozessoren 2048a-2048 verwaltet werden, die auch als Datenverwaltungsprozessoren bezeichnet werden können. In dem Beispiel von 20 beinhaltet die Beschleunigungs-Engine 2000 s Prozessoren 2048a-2048s, die in die Vorrichtung integriert sind (z. B. auf demselben Siliziumchip). In anderen Beispielen können sich die Prozessoren 2048a-2048 außerhalb der Beschleunigungs-Engine 2000 befinden (z. B. auf einem anderen Chip und/oder in einem anderen Paket). In einigen Beispielen können die Prozessoren 2048a-2048s das Bewegen von Daten von den E/A-Vorrichtungen 2032 zu den Beschleunigern 2002a-2002n oder dem DRAM 2030 verwalten. Zum Beispiel können sich Eingabedaten an einer E/A-Vorrichtung 2032 oder im Prozessorspeicher befinden, und die Prozessoren 2048a-2048s können die Eingabe von der E/A-Vorrichtung 2032 oder dem Prozessorspeicher in einen Beschleuniger oder in DRAM 2030 bewegen. Als weiteres Beispiel kann sich der Programmcode für die Beschleuniger 2002a-2002n auf einer E/A-Vorrichtung 2032 oder in Prozessorspeicher befinden.
  • Die beispielhafte Beschleunigungs-Engine 2000 beinhaltet ferner DMA-Engines 2046a-2046d, die Daten zwischen den Beschleunigern 2002a-2002n, den DRAM-Steuerungen 2042a-2042k und den E/A-Steuerungen 2044a-2044p bewegen können. In dem veranschaulichten Beispiel beinhaltet die Beschleunigungsengine 2000 D DMA-Engines 2046a-2046d. In einigen Umsetzungen können die DMA-Engines 2046a-2046d bestimmten Aufgaben zugewiesen werden, wie etwa dem Bewegen von Daten von den DRAM-Steuerungen 2042a-2042d zu den Beschleunigern 2002a-2002n oder dem Bewegen von Daten zwischen den E/A-Steuerungen 2044a-2044p und den Beschleunigern 2002a-2002n. Diese Aufgaben können zum Beispiel durch das Einreihen von Deskriptoren in die DMA-Engines 2046a-2046d zugewiesen werden, wobei ein Deskriptor eine Adresse für einen Datenblock und eine auszuführende Operation (z. B. Lesen oder Schreiben) identifiziert. Ein Deskriptor kann zum Beispiel eine DMA-Engine anweisen, eine DMA-Steuerung anzuweisen, einen Datenblock aus dem DRAM 2030 zu lesen. Ein Deskriptor kann als ein weiteres Beispiel die DMA-Engine anweisen, von der DMA-Steuerung gelesene Daten in einen Beschleuniger zu schreiben. Weitere Deskriptoren können verwendet werden, um Daten von einem Beschleuniger zum DRAM 2030 zu bewegen.
  • In verschiedenen Beispielen kann jeder der Prozessoren 2048a-2048 für das Verwalten der Datenbewegung für einen anderen Beschleuniger verantwortlich sein. In einigen Beispielen kann ein Prozessor die Datenbewegung für mehr als einen Beschleuniger verwalten. Gleichermaßen kann in verschiedenen Beispielen jeder der Prozessoren 2048a-2048s einer oder mehreren DMA-Engines 2046a-2046d zugeordnet sein. In diesen und anderen Beispielen werden Zuordnungen zwischen Prozessoren 2048a-2048s, Beschleunigern 2002a-2002n und DMA-Engines 2046a-2046d durch Programmcode bestimmt, der von jedem entsprechenden Prozessor ausgeführt wird.
  • In der beispielhaften Beschleunigungs-Engine 2000 können die verschiedenen Komponenten über eine Chipverbindung 2020 kommunizieren. Die Chipverbindung 2020 beinhaltet hauptsächlich eine Verdrahtung zum Weiterleiten von Daten zwischen den Komponenten der Beschleunigungs-Engine 2000. In einigen Fällen kann die Chipverbindung 2020 eine minimale Menge an Logik beinhalten, wie etwa Multiplexer zum Steuern der Datenrichtung, Flip-Flops zum Behandeln von Taktdomänenkreuzungen und Zeitsteuerungslogik.
  • Umsetzungsbeispiele können in den folgenden nummerierten Abschnitten beschrieben sein:
    • Abschnitt 1. Ein computerimplementiertes Verfahren, umfassend:
      • Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines neuronalen Netzbeschleunigers, der eine erste Anzahl von Zeilen von Verarbeitungselementen beinhaltet, wobei das neuronale Netzmodell eine Netzschicht beinhaltet, die eine Faltungsoperation beinhaltet, um eine Ausgabemerkmalskarte unter Verwendung einer zweiten Anzahl von Eingabemerkmalskarten und eines Satzes von Filtern zu erzeugen;
      • Bestimmen, dass die zweite Anzahl gleich oder kleiner als die Hälfte der ersten Anzahl ist;
      • Hinzufügen von Operationen zu dem neuronalen Netzmodell, wobei die Operationen beinhalten:
        • Auffüllen der zweiten Anzahl von Eingabemerkmalskarten mit Auffülldaten, um aufgefüllte Eingabemerkmalskarten zu erzeugen;
        • Aufteilen jeder der aufgefüllten Eingabemerkmalskarten in Partitionen; und
        • Unterteilen der Faltungsoperation in Unteroperationen basierend auf den Partitionen;
      • Erzeugen, basierend auf dem neuronalen Netzmodell, von Anweisungen zur Ausführung durch den neuronalen Netzbeschleuniger, um die Faltungsoperation umzusetzen;
      • Erfassen einer ersten Anweisung und einer zweiten Anweisung aus den Anweisungen, die beide eine erste Partition in den Partitionen einer aufgefüllten Eingabemerkmalskarte verwenden, wobei die erste Anweisung und die zweite Anweisung unterschiedliche Elemente eines Filters in dem Satz von Filtern verwenden; und
      • Erzeugen einer Anweisung zum Replizieren der aus dem Speicher gelesenen und von der ersten Anweisung verwendeten ersten Partition zur Verwendung durch die zweite Anweisung.
    • Abschnitt 2. Das computerimplementierte Verfahren nach Abschnitt 1, ferner umfassend Erzeugen einer Anweisung zum Verwerfen von Ergebnissen, die unter Verwendung der Auffülldaten und der ersten Anweisung erzeugt wurden.
    • Abschnitt 3. Das computerimplementierte Verfahren nach einem der Abschnitte 1-2, wobei:
      • die Auffülldaten Auffülldaten für den Speicherabgleich beinhalten; und
      • die Operationen ferner Verwerfen der Auffülldaten für den Speicherabgleich in den Unteroperationen beinhalten.
    • Abschnitt 4. Das computerimplementierte Verfahren nach einem der Abschnitte 1-3, ferner umfassend Erzeugen einer Anweisung zum Abbilden der ersten Anweisung und der zweiten Anweisung auf verschiedene Zeilen in der ersten Anzahl von Zeilen von Verarbeitungselementen zur gleichzeitigen Ausführung.
    • Abschnitt 5. Ein Verfahren, umfassend, unter Verwandung eines Computersystems:
      • Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines Verarbeitungselementarrays, wobei das neuronale Netzmodell eine Faltungsoperation an einem Satz von Eingabemerkmalskarten und einem Satz von Filtern beinhaltet;
      • Bestimmen, basierend auf dem neuronalen Netzmodell, dass die Faltungsoperation weniger als eine Schwellenwertanzahl von Zeilen in dem Verarbeitungselementarray verwendet, um einen Satz von Filterelementen auf den Satz von Eingabemerkmalskarten anzuwenden, wobei der Satz von Filterelementen ein Filterelement in jedem Filter des Satzes von Filtern beinhaltet; und
      • Erzeugen, für die Faltungsoperation und basierend auf dem neuronalen Netzmodell, eines ersten Befehls und eines zweiten Befehls zur Ausführung durch entsprechende Zeilen in dem Verarbeitungselementarray, wobei der erste Befehl und der zweite Befehl unterschiedliche Filterelemente eines Filters in dem Satz von Filtern verwenden.
    • Abschnitt 6. Das Verfahren nach Abschnitt 5, ferner umfassend Hinzufügen einer Operation zum Auffüllen der Eingabemerkmalskarten mit Auffülldaten zum Erzeugen von aufgefüllten Eingabemerkmalskarten zu dem neuronalen Netzmodell.
    • Abschnitt 7. Das Verfahren nach Abschnitt 6, wobei:
      • die Auffülldaten Auffülldaten für den Speicherabgleich beinhalten; und
      • wobei das Verfahren ferner Hinzufügen einer Operation zum Verwerfen der Auffülldaten für den Speicherabgleich zu dem neuronalen Netzmodell umfasst, wenn die Faltungsoperation unter Verwendung des Verarbeitungselementarrays durchgeführt wird.
    • Abschnitt 8. Das Verfahren nach einem der Abschnitte 6-7, ferner umfassend Hinzufügen einer Operation zum Aufteilen jeder der aufgefüllten Eingabemerkmalskarten in Partitionen zu dem neuronalen Netzmodell, wobei die erste Anweisung und die zweite Anweisung eine gleiche Partition in den Partitionen einer aufgefüllten Eingabemerkmalskarte in den aufgefüllten Eingabemerkmalskarten verwenden.
    • Abschnitt 9. Das Verfahren nach Abschnitt 8, ferner umfassend Hinzufügen einer Operation zum Aufteilen der Faltungsoperation in Unteroperationen zu dem neuronalen Netzmodell, wobei jede Teiloperation in den Unteroperationen eine Partition in den Partitionen verwendet.
    • Abschnitt 10. Das Verfahren nach einem der Abschnitte 8-9, ferner umfassend Hinzufügen einer Operation zum Schreiben der Partitionen in verschiedene jeweilige Speicherbänke in einer Speichervorrichtung zu dem neuronalen Netzmodell.
    • Abschnitt 11. Das Verfahren nach einem der Abschnitte 6-10, ferner umfassend Erzeugen einer Anweisung zum Verwerfen von Ergebnissen, die unter Verwendung der Auffülldaten und der ersten Anweisung erzeugt wurden.
    • Abschnitt 12. Das Verfahren nach einem der Abschnitte 5-11, wobei die Faltungsoperation durch einen Stride größer als eins gekennzeichnet ist.
    • Abschnitt 13. Das Verfahren nach einer der Abschnitte 5-12, wobei:
      • die erste Anweisung und die zweite Anweisung einen gleichen Teil einer Eingabemerkmalskarte in dem Satz von Eingabemerkmalskarten verwenden; und
      • das Verfahren ferner Erzeugen einer Anweisung für Folgendes umfasst:
        • Replizieren von Daten, die in eine erste Zeile des Verarbeitungselementarrays zur Ausführung der ersten Anweisung eingegeben werden, durch eine Eingabeauswahlschaltung; und
        • Senden der replizierten Daten an eine zweite Zeile des Verarbeitungselementarrays zur Ausführung der zweiten Anweisung.
    • Abschnitt 14. Das Verfahren nach einem der Abschnitte 5-13, wobei die Schwellenwertanzahl gleich oder kleiner als die Hälfte der Gesamtanzahl der Zeilen in dem Verarbeitungselementarray ist.
    • Abschnitt 15. Das Verfahren nach einem der Abschnitte 5-14, ferner umfassend:
      • Erzeugen, basierend auf dem neuronalen Netzmodell, von Anweisungen zur Ausführung durch eine Rechen-Engine, die das Verarbeitungselementarray beinhaltet, um die Faltungsoperation umzusetzen, wobei die Anweisungen die erste Anweisung und die zweite Anweisung beinhalten; und
      • Erfassen anhand der Anweisungen, dass die erste Anweisung und die zweite Anweisung denselben Teil einer Eingabemerkmalskarte aus dem Satz der Eingabemerkmalskarten verwenden.
    • Abschnitt 16. Das Verfahren nach einem der Abschnitte 5-15, wobei das neuronale Netzmodell einen Datenflussgraphen beinhaltet, der Knoten beinhaltet, die neuronale Netzoperationen darstellen.
    • Abschnitt 17. Ein nichtflüchtiges, computerlesbares Speichermedium, in dem Anweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, einen Compiler auszuführen, wobei der Compiler Operationen durchführt, die beinhalten:
      • Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines Verarbeitungselementarrays, wobei das neuronale Netzmodell eine Faltungsoperation an einem Satz von Eingabemerkmalskarten und einem Satz von Filtern beinhaltet;
      • Bestimmen, dass die Faltungsoperation weniger als eine Schwellenwertanzahl von Zeilen in dem Verarbeitungselementarray verwendet, um einen Satz von Filterelementen auf den Satz von Eingabemerkmalskarten anzuwenden, wobei der Satz von Filterelementen ein Filterelement in jedem Filter des Satzes von Filtern beinhaltet; und
      • Erzeugen, für die Faltungsoperation und basierend auf dem neuronalen Netzmodell, einer ersten Anweisung und einer zweiten Anweisung zur Ausführung durch entsprechende Zeilen in dem Verarbeitungselementarray, wobei die erste Anweisung und die zweite Anweisung unterschiedliche Filterelemente eines Filters in dem Satz von Filtern verwenden.
    • Abschnitt 18. Das nichtflüchtige, computerlesbare Medium nach Abschnitt 17, wobei die Operationen ferner Hinzufügen einer Operation zum Auffüllen der Eingabemerkmalskarten mit Auffülldaten zum Erzeugen von aufgefüllten Eingabemerkmalskarten zu dem neuronalen Netzmodell umfassen.
    • Abschnitt 19. Das nichtflüchtige, computerlesbare Medium nach Abschnitt 18, wobei die Operationen ferner umfassen:
      • Hinzufügen einer Operation zum Aufteilen jeder der aufgefüllten Eingabemerkmalskarten in Partitionen zu dem neuronalen Netzmodell; und
      • Hinzufügen einer Operation zum Aufteilen der Faltungsoperation in Unteroperationen zu dem neuronalen Netzmodell, wobei jede Teiloperation in den Unteroperationen eine Partition in den Partitionen einer aufgefüllten Eingabemerkmalskarte in den aufgefüllten Eingabemerkmalskarten verwendet.
    • Abschnitt 20. Das nichtflüchtige, computerlesbare Medium nach einem der Abschnitte 17-19, wobei die Operationen ferner Erzeugen einer Anweisung umfassen zum:
      • Replizieren von Daten, die in eine erste Zeile des Verarbeitungselementarrays zur Ausführung der ersten Anweisung eingegeben werden, durch eine Eingabeauswahlschaltung; und
      • Senden der replizierten Daten an eine zweite Zeile des Verarbeitungselementarrays zur Ausführung der zweiten Anweisung.
  • Die Beschreibung und die Zeichnungen sind dementsprechend in einem veranschaulichenden und nichteinschränkenden Sinne zu verstehen. Es ist jedoch ersichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom weiteren Geist und Schutzumfang der Offenbarung, wie in den Patentansprüchen dargelegt, abzuweichen.
  • Andere Varianten liegen im Geist der vorliegenden Offenbarung. Somit sind, obwohl die offenbarten Techniken sich für verschiedene Modifikationen und alternative Bauweisen anbieten, bestimmte veranschaulichte Beispiele davon in den Zeichnungen gezeigt und wurden vorstehend ausführlich beschrieben. Es versteht sich jedoch, dass nicht die Absicht verfolgt wird, die Offenbarung auf die konkrete offenbarte Form oder die konkreten offenbarten Formen einzuschränken, sondern im Gegenteil die Absicht darin besteht, sämtliche Modifikationen, alternativen Bauweisen und Äquivalente abzudecken, die, wie in den angefügten Patentansprüchen definiert, in den Geist und Schutzumfang der Offenbarung fallen.
  • Jedes der hier beschriebenen Verfahren kann als computerlesbares Medium oder Computerprogrammprodukt umgesetzt werden, das Anweisungen umfasst, die, wenn das Programm von einem oder mehreren Computern ausgeführt wird, den einen oder die mehreren Computer veranlassen, die Schritte des Verfahrens auszuführen. Solche Computerprogrammprodukte können über ein verdrahtetes oder drahtloses Netz in einem Datenträgersignal übertragen werden, das das Computerprogrammprodukt trägt.
  • Die Verwendung der Begriffe „ein“ und „eine“ und „der/die/das“ und ähnlicher Referenten im Zusammenhang der Beschreibung der offenbaren Beispiele (besonders im Zusammenhang der folgenden Patentansprüche) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdecken, sofern in dieser Schrift nicht anderweitig angegeben oder im eindeutigen Widerspruch zum Kontext. Die Begriffe „umfassend“, „aufweisend“, „beinhaltend“ und „enthaltend“ sind als offene Begriffe auszulegen (d. h. in der Bedeutung „beinhaltend, ohne darauf beschränkt zu sein“), es sei denn, es ist etwas anderes angegeben. Der Begriff „verbunden“ ist als teilweise oder vollständig ineinander enthalten, aneinander angebracht oder zusammengefügt auszulegen, selbst, wenn etwas dazwischenliegt. Die Nennung von Wertebereichen in dieser Schrift soll lediglich als ein schnelles Verfahren des einzelnen Bezugnehmens auf jeden getrennten Wert dienen, der in den Bereich fällt, es sei denn, in dieser Schrift ist etwas anderes angegeben, und jeder getrennte Wert ist in die Beschreibung eingeschlossen, als ob er einzeln in dieser Schrift wiedergegeben wäre. Alle in dieser Schrift beschriebenen Verfahren können in einer beliebigen geeigneten Reihenfolge durchgeführt werden, sofern es in dieser Schrift anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht. Die Verwendung sämtlicher Beispiele oder beispielhafter Formulierung (z. B. „wie etwa“), die in dieser Schrift bereitgestellt sind, soll lediglich die Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Schutzumfang der Offenbarung dar, es sei denn, es ist etwas anderes beansprucht. Keinerlei Formulierung in der Beschreibung sollte so ausgelegt werden, dass sie ein beliebiges nichtbeanspruchtes Element als für die Umsetzung der Offenbarung wesentlich angibt.
  • Eine disjunktive Formulierung, wie etwa der Ausdruck „mindestens eines von X, Y oder Z“ soll, sofern nicht ausdrücklich anders angegeben, im Kontext verstanden werden, wie er im Allgemeinen verwendet wird, um darzustellen, dass ein Gegenstand, ein Begriff usw. entweder X, Y oder Z oder eine beliebige Kombination davon (z. B. X, Y, und/oder Z) sein kann. Somit soll eine derartige disjunktive Ausdrucksweise im Allgemeinen nicht ausdrücken, dass bestimmte Ausführungen erfordern, dass mindestens eines von X, mindestens eines von Y oder mindestens eines von Z jeweils vorhanden ist.
  • In dieser Schrift sind verschiedene Beispiele dieser Offenbarung beschrieben, was die besten den Erfindern bekannte Art und Weise zum Ausführen der Offenbarung beinhaltet. Der Fachmann kann bei der Lektüre der vorstehenden Beschreibung Varianten dieser Beispiele erkennen. Die Erfinder gehen davon aus, dass der erfahrene Handwerker derlei Varianten im geeigneten Fall anwendet, und die Erfinder sehen vor, dass die Offenbarung, anders als in dieser Schrift konkret beschrieben, umsetzt werden kann. Dementsprechend beinhaltet die Offenbarung alle Modifikationen und Äquivalente des in den beigefügten Patentansprüchen dargelegten Gegenstands, wie es durch das jeweils geltende Recht zulässig ist. Darüber hinaus ist jede beliebige Kombination der vorstehend beschriebenen Elemente in allen möglichen Varianten davon durch die Offenbarung abgedeckt, sofern es in dieser Schrift nicht anders angegeben ist oder der Kontext dem anderweitig eindeutig widerspricht.

Claims (15)

  1. Verfahren, umfassend, unter Verwandung eines Computersystems: Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines Verarbeitungselementarrays, wobei das neuronale Netzmodell eine Faltungsoperation an einem Satz von Eingabemerkmalskarten und einem Satz von Filtern beinhaltet; Bestimmen, basierend auf dem neuronalen Netzmodell, dass die Faltungsoperation weniger als eine Schwellenwertanzahl von Zeilen in dem Verarbeitungselementarray verwendet, um einen Satz von Filterelementen auf den Satz von Eingabemerkmalskarten anzuwenden, wobei der Satz von Filterelementen ein Filterelement in jedem Filter des Satzes von Filtern beinhaltet; und Erzeugen, für die Faltungsoperation und basierend auf dem neuronalen Netzmodell, einer ersten Anweisung und einer zweiten Anweisung zur Ausführung durch entsprechende Zeilen in dem Verarbeitungselementarray, wobei die erste Anweisung und die zweite Anweisung unterschiedliche Filterelemente eines Filters in dem Satz von Filtern verwenden.
  2. Verfahren nach Anspruch 1, ferner umfassend Hinzufügen einer Operation zum Auffüllen der Eingabemerkmalskarten mit Auffülldaten zum Erzeugen von aufgefüllten Eingabemerkmalskarten zu dem neuronalen Netzmodell.
  3. Verfahren nach Anspruch 2, wobei: die Auffülldaten Auffülldaten für den Speicherabgleich beinhalten; und wobei das Verfahren ferner Hinzufügen einer Operation zum Verwerfen der Auffülldaten für den Speicherabgleich zu dem neuronalen Netzmodell umfasst, wenn die Faltungsoperation unter Verwendung des Verarbeitungselementarrays durchgeführt wird.
  4. Verfahren nach einem der Ansprüche 2-3, ferner umfassend Hinzufügen einer Operation zum Aufteilen jeder der aufgefüllten Eingabemerkmalskarten in Partitionen zu dem neuronalen Netzmodell, wobei die erste Anweisung und die zweite Anweisung eine gleiche Partition in den Partitionen einer aufgefüllten Eingabemerkmalskarte in den aufgefüllten Eingabemerkmalskarten verwenden.
  5. Verfahren nach Anspruch 4, ferner umfassend Hinzufügen einer Operation zum Aufteilen der Faltungsoperation in Unteroperationen zu dem neuronalen Netzmodell, wobei jede Teiloperation in den Unteroperationen eine Partition in den Partitionen verwendet.
  6. Verfahren nach einem der Ansprüche 4-5, ferner umfassend Hinzufügen einer Operation zum Schreiben der Partitionen in verschiedene jeweilige Speicherbänke in einer Speichervorrichtung zu dem neuronalen Netzmodell.
  7. Verfahren nach einem der Ansprüche 2-6, ferner umfassend Erzeugen einer Anweisung zum Verwerfen von Ergebnissen, die unter Verwendung der Auffülldaten und der ersten Anweisung erzeugt wurden.
  8. Verfahren nach einem der Ansprüche 1-7, wobei die Faltungsoperation durch einen Stride größer als eins gekennzeichnet ist.
  9. Verfahren nach einem der Ansprüche 1-8, wobei: die erste Anweisung und die zweite Anweisung einen gleichen Teil einer Eingabemerkmalskarte in dem Satz von Eingabemerkmalskarten verwenden; und das Verfahren ferner Erzeugen einer Anweisung für Folgendes umfasst: Replizieren von Daten, die in eine erste Zeile des Verarbeitungselementarrays zur Ausführung der ersten Anweisung eingegeben werden, durch eine Eingabeauswahlschaltung; und Senden der replizierten Daten an eine zweite Zeile des Verarbeitungselementarrays zur Ausführung der zweiten Anweisung.
  10. Verfahren nach einem der Ansprüche 1-9, wobei die Schwellenwertanzahl gleich oder kleiner als die Hälfte der Gesamtanzahl der Zeilen in dem Verarbeitungselementarray ist.
  11. Verfahren nach einem der Ansprüche 1-10, ferner umfassend: Erzeugen, basierend auf dem neuronalen Netzmodell, von Anweisungen zur Ausführung durch eine Rechen-Engine, die das Verarbeitungselementarray beinhaltet, um die Faltungsoperation umzusetzen, wobei die Anweisungen die erste Anweisung und die zweite Anweisung beinhalten; und Erfassen anhand der Anweisungen, dass die erste Anweisung und die zweite Anweisung denselben Teil einer Eingabemerkmalskarte aus dem Satz von Eingabemerkmalskarten verwenden.
  12. Computerprogrammprodukt, in dem Anweisungen gespeichert sind, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, einen Compiler auszuführen, wobei der Compiler Operationen durchführt, die beinhalten: Empfangen eines neuronalen Netzmodells zur Umsetzung unter Verwendung eines Verarbeitungselementarrays, wobei das neuronale Netzmodell eine Faltungsoperation an einem Satz von Eingabemerkmalskarten und einem Satz von Filtern beinhaltet; Bestimmen, dass die Faltungsoperation weniger als eine Schwellenwertanzahl von Zeilen in dem Verarbeitungselementarray verwendet, um einen Satz von Filterelementen auf den Satz von Eingabemerkmalskarten anzuwenden, wobei der Satz von Filterelementen ein Filterelement in jedem Filter des Satzes von Filtern beinhaltet; und Erzeugen, für die Faltungsoperation und basierend auf dem neuronalen Netzmodell, einer ersten Anweisung und einer zweiten Anweisung zur Ausführung durch entsprechende Zeilen in dem Verarbeitungselementarray, wobei die erste Anweisung und die zweite Anweisung unterschiedliche Filterelemente eines Filters in dem Satz von Filtern verwenden.
  13. Computerprogrammprodukt nach Anspruch 12, wobei die Operationen ferner Hinzufügen einer Operation zum Auffüllen der Eingabemerkmalskarten mit Auffülldaten zum Erzeugen von aufgefüllten Eingabemerkmalskarten zu dem neuronalen Netzmodell umfassen.
  14. Computerprogrammprodukt nach Anspruch 13, wobei die Operationen ferner umfassen: Hinzufügen einer Operation zum Aufteilen jeder der aufgefüllten Eingabemerkmalskarten in Partitionen zu dem neuronalen Netzmodell; und Hinzufügen einer Operation zum Aufteilen der Faltungsoperation in Unteroperationen zu dem neuronalen Netzmodell, wobei jede Teiloperation in den Unteroperationen eine Partition in den Partitionen einer aufgefüllten Eingabemerkmalskarte in den aufgefüllten Eingabemerkmalskarten verwendet.
  15. Datenträgersignal, das das Computerprogrammprodukt nach einem der Ansprüche 12-14 trägt.
DE112020005799.2T 2019-11-27 2020-11-13 Effiziente Ausnutzung eines Verarbeitungselementarrays Pending DE112020005799T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/698,461 US11741350B2 (en) 2019-11-27 2019-11-27 Efficient utilization of processing element array
US16/698,461 2019-11-27
PCT/US2020/070787 WO2021108800A1 (en) 2019-11-27 2020-11-13 Efficient utilization of processing element array

Publications (1)

Publication Number Publication Date
DE112020005799T5 true DE112020005799T5 (de) 2022-10-06

Family

ID=73790313

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020005799.2T Pending DE112020005799T5 (de) 2019-11-27 2020-11-13 Effiziente Ausnutzung eines Verarbeitungselementarrays

Country Status (4)

Country Link
US (2) US11741350B2 (de)
CN (1) CN114761925A (de)
DE (1) DE112020005799T5 (de)
WO (1) WO2021108800A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6805984B2 (ja) * 2017-07-06 2020-12-23 株式会社デンソー 畳み込みニューラルネットワーク
CN108388537B (zh) * 2018-03-06 2020-06-16 上海熠知电子科技有限公司 一种卷积神经网络加速装置和方法
US11663446B2 (en) * 2020-01-06 2023-05-30 Alibaba Group Holding Limited Data reuse and efficient processing scheme in executing convolutional neural network
GB2596104B (en) * 2020-06-17 2022-07-06 Imagination Tech Ltd Input/output filter unit for graphics processing unit
CN112862724B (zh) * 2021-03-12 2022-09-09 上海壁仞智能科技有限公司 用于计算的方法、计算设备和计算机可读存储介质
CN115470176B (zh) * 2021-06-10 2024-04-09 中科寒武纪科技股份有限公司 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN117480508A (zh) * 2021-11-25 2024-01-30 英特尔公司 用于加速处理引擎的计算的装置、方法、设备及介质

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5402369A (en) 1993-07-06 1995-03-28 The 3Do Company Method and apparatus for digital multiplication based on sums and differences of finite sets of powers of two
JP2830833B2 (ja) 1996-04-30 1998-12-02 日本電気株式会社 プロセッサ間通信方法及びそれに用いるプロセッサ
US6101180A (en) 1996-11-12 2000-08-08 Starguide Digital Networks, Inc. High bandwidth broadcast system having localized multicast access to broadcast content
JP2001188767A (ja) 1999-12-28 2001-07-10 Fuji Xerox Co Ltd ニューラルネットワーク演算装置及びニューラルネットワークの演算方法
EP1400060A2 (de) 2001-06-21 2004-03-24 Telefonaktiebolaget Lm Ericsson Multicast in einem punkt-zu- punkt orientierten paketvermittelten telekommunikationsnetz
WO2003015027A2 (en) 2001-08-07 2003-02-20 Board Of Trustees Operating Michigan State University Self-programmable chip
US7120666B2 (en) 2002-10-30 2006-10-10 Riverbed Technology, Inc. Transaction accelerator for client-server communication systems
US8176186B2 (en) 2002-10-30 2012-05-08 Riverbed Technology, Inc. Transaction accelerator for client-server communications systems
US7194568B2 (en) 2003-03-21 2007-03-20 Cisco Technology, Inc. System and method for dynamic mirror-bank addressing
US7590098B2 (en) * 2004-10-27 2009-09-15 Honeywell International Inc. Publish/subscribe model in a wireless sensor network
US7826450B2 (en) 2005-04-25 2010-11-02 Infineon Technologies Ag Multicast/broadcast extension to a point-to-point unicast-only packet switch system
WO2011115769A2 (en) 2010-03-15 2011-09-22 California Institute Of Technology System and method for cognitive processing for data fusion
US20120066423A1 (en) 2010-09-13 2012-03-15 Boon Siang Choo Inter-integrated circuit bus multicasting
US8909864B2 (en) 2011-09-30 2014-12-09 Hewlett-Packard Development Company, L.P. Multicast write commands
US8554963B1 (en) 2012-03-23 2013-10-08 DSSD, Inc. Storage system with multicast DMA and unified address space
US9619423B1 (en) 2013-10-29 2017-04-11 Altera Corporation Memory-mapped state bus for integrated circuit
EP3254286B1 (de) 2015-02-06 2019-09-11 Micron Technology, INC. Vorrichtungen und verfahren zum parallelen schreiben an mehrere speichervorrichtungsstandorte
US10403269B2 (en) * 2015-03-27 2019-09-03 Google Llc Processing audio waveforms
US10019168B2 (en) 2015-05-19 2018-07-10 EMC IP Holding Company LLC Method and system for multicasting data to persistent memory
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10852955B2 (en) 2015-12-29 2020-12-01 EMC IP Holding Company LLC Method and system for accessing data objects stored in a storage system using object descriptors allocated by clients
US9971541B2 (en) 2016-02-17 2018-05-15 Micron Technology, Inc. Apparatuses and methods for data movement
US11120329B2 (en) 2016-05-07 2021-09-14 Intel Corporation Multicast network and memory transfer optimizations for neural network hardware acceleration
US11200487B1 (en) * 2016-12-30 2021-12-14 X Development Llc Optical processing system
US9691019B1 (en) * 2017-03-07 2017-06-27 Google Inc. Depth concatenation using a matrix computation unit
WO2018184208A1 (en) 2017-04-07 2018-10-11 Intel Corporation Methods and apparatus for deep learning network execution pipeline on multi-processor platform
US10706349B2 (en) * 2017-05-25 2020-07-07 Texas Instruments Incorporated Secure convolutional neural networks (CNN) accelerator
US10872292B1 (en) * 2017-10-09 2020-12-22 Snap Inc. Compact neural networks using condensed filters
US20190164037A1 (en) 2017-11-29 2019-05-30 Electronics And Telecommunications Research Institute Apparatus for processing convolutional neural network using systolic array and method thereof
US10445638B1 (en) 2018-02-28 2019-10-15 Amazon Technologies, Inc. Restructuring a multi-dimensional array
US11948073B2 (en) 2018-04-20 2024-04-02 Advanced Micro Devices, Inc. Machine learning inference engine scalability
US11537838B2 (en) 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
US10831693B1 (en) 2018-09-27 2020-11-10 Amazon Technologies, Inc. Multicast master
US10613977B1 (en) 2018-09-27 2020-04-07 Amazon Technologies, Inc. Target port with distributed transactions
US11580356B2 (en) * 2019-07-19 2023-02-14 Qualcomm Incorporated Efficient inferencing with piecewise pointwise convolution
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays
US11958183B2 (en) * 2019-09-19 2024-04-16 The Research Foundation For The State University Of New York Negotiation-based human-robot collaboration via augmented reality

Also Published As

Publication number Publication date
WO2021108800A1 (en) 2021-06-03
US11741350B2 (en) 2023-08-29
CN114761925A (zh) 2022-07-15
US20210158132A1 (en) 2021-05-27
US20230359876A1 (en) 2023-11-09

Similar Documents

Publication Publication Date Title
DE112020005799T5 (de) Effiziente Ausnutzung eines Verarbeitungselementarrays
US10395167B2 (en) Image processing method and device
CN109635141B (zh) 用于检索图像的方法、电子设备和计算机可读存储介质
CN112308200B (zh) 神经网络的搜索方法及装置
EP3427195B1 (de) Neurale faltungsnetzwerke, insbesondere zur bildanalyse
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE112020004702T5 (de) Bildgenerierung unter verwendung eines oder mehrerer neuronaler netze
EP3923233A1 (de) Verfahren und vorrichtung zum entrauschen von bildern
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE202017104127U1 (de) Superpixel für faltende neuronale Netze
CN112236779A (zh) 基于卷积神经网络的图像处理方法和图像处理装置
US20220108478A1 (en) Processing images using self-attention based neural networks
DE112020002693T5 (de) Verringerung der berechnung in neuralen netzwerken mit selbstmodifizierendem code
DE102022105748A1 (de) Effiziente optimierung für den einsatz und die ausführung neuronaler netze
Liu et al. Deep adaptive inference networks for single image super-resolution
DE112020003055T5 (de) Neuanordnen der operationen eines neuronalen netzwerks für parallele ausführung
DE102021107510A1 (de) Training eines neuronalen netzwerks unter speicherbeschränkung
Hernández et al. CUDA-based parallelization of a bio-inspired model for fast object classification
DE102022105808A1 (de) Effiziente quantisierung für eine bereitstellung und ausführung von neuronalen netzen
DE112020003105T5 (de) Schicht für schicht-debugging von neuronalen netzwerken
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
Ichimura Spatial frequency loss for learning convolutional autoencoders
DE112020006070T5 (de) Hardwarebeschleuniger mit rekonfigurierbarem befehlssatz
DE102022129634A1 (de) Durchführen von simulationen unter verwendung maschinellen lernens
Hacker et al. GPU simulator of multilayer neural network based on multi-valued neurons

Legal Events

Date Code Title Description
R012 Request for examination validly filed