Nothing Special   »   [go: up one dir, main page]

DE202016107439U1 - Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor - Google Patents

Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor Download PDF

Info

Publication number
DE202016107439U1
DE202016107439U1 DE202016107439.8U DE202016107439U DE202016107439U1 DE 202016107439 U1 DE202016107439 U1 DE 202016107439U1 DE 202016107439 U DE202016107439 U DE 202016107439U DE 202016107439 U1 DE202016107439 U1 DE 202016107439U1
Authority
DE
Germany
Prior art keywords
weight
input
circuit
neural network
cell
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.)
Active
Application number
DE202016107439.8U
Other languages
English (en)
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.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of DE202016107439U1 publication Critical patent/DE202016107439U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/002Biomolecular computers, i.e. using biomolecules, proteins, cells
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Chemical & Material Sciences (AREA)
  • Organic Chemistry (AREA)
  • Spectroscopy & Molecular Physics (AREA)
  • Algebra (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)
  • Image Analysis (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Multi Processors (AREA)

Abstract

Eine Schaltung zum Durchführen neuronaler Netzwerkberechnungen für ein neuronales Netzwerk mit einer Vielzahl von Schichten, wobei die Schaltung umfasst: ein systolisches Array, das eine Vielzahl von Zellen umfasst; eine Gewichtsabrufeinheit, die so konfiguriert ist, dass für jede der Vielzahl von neuronalen Netzwerkebenen folgende Aufgaben erledigt werden: das Senden für die neuronale Netzwerkebene einer Vielzahl von Gewichtseingaben an Zellen entlang einer ersten Dimension des systolischen Arrays; und eine Vielzahl von Gewichtssequenzereinheiten, wobei jede Gewichtssequenzereinheit mit einer bestimmten Zelle entlang der ersten Dimension des systolischen Arrays verbunden ist und die Vielzahl von Gewichtssequenzereinheiten für jede der Vielzahl von neuronalen Netzwerkebenen so konfiguriert ist, dass folgende Aufgaben erledigt werden: das Verschieben für die neuronale Netzwerkebene der Vielzahl von Gewichtseingaben in Zellen entlang der zweiten Dimension des systolischen Arrays im Lauf einer Vielzahl von Taktzyklen, wobei jede Gewichtseingabe in einer entsprechenden Zelle entlang der zweiten Dimension gespeichert wird und jede Zelle so konfiguriert ist, dass sie unter Verwendung einer Multiplikationsschaltung ein Produkt aus einer Aktivierungseingabe und einer entsprechenden Gewichtseingabe berechnet.

Description

  • HINTERGRUND
  • Diese Spezifikation bezieht sich auf die Datenverarbeitung neuronaler Netzwerk-Inferenzen in Hardware.
  • Neuronale Netzwerke sind Modelle für maschinelles Lernen, die eine oder mehrere Modellebenen verwenden, um für eine empfangene Eingabe eine Ausgabe zu erzeugen, z. B. eine Klassifizierung. Einige neuronale Netzwerke umfassen zusätzlich zu einer Außenschicht eine oder mehrere ausgeblendete Schichten. Die Ausgabe von jeder verborgenen Ebene wird als Eingabe für die nächste Ebene im Netzwerk (d. h. die nächste verborgene Ebene oder die Ausgabeebene des Netzwerks) verwendet. Jede Schicht des Netzwerks erzeugt in Übereinstimmung mit aktuellen Werten eines jeweiligen Satzes von Parametern einen Ausgang von einem empfangenen Eingang.
  • Manche neuronalen Netzwerke enthalten eine oder mehrere Faltungsebenen. Jede Faltungsebene eines neuronalen Netzwerks hat einen zugehörigen Satz Kernel. Jeder Kernel beinhaltet Werte, die von einem durch einen Benutzer erstellten neuronalen Netzwerkmodell festgelegt werden. Bei manchen Ausführungsformen bezeichnen Kernel bestimmte Bildkonturen, Formen oder Farben. Kernel können als Matrixstruktur aus Gewichtseingaben dargestellt werden. Jede Faltungsebene kann auch einen Satz Aktivierungseingaben verarbeiten. Der Satz Aktivierungseingaben kann auch als Matrixstruktur dargestellt werden.
  • Manche bereits vorhandenen Systeme führen Berechnungen für eine gegebene Faltungsebene in Software aus. Die Software kann z. B. jeden Kernel für die Ebene auf den Satz Aktivierungseingaben anwenden. Das heißt für jeden Kernel kann die Software den Kernel, der mehrdimensional dargestellt werden kann, über einen ersten Teil der Aktivierungseingaben legen, der mehrdimensional dargestellt werden kann. Die Software kann dann aus den überlappenden Elementen ein Skalarprodukt berechnen. Das Skalarprodukt kann einer einzelnen Aktivierungseingabe entsprechen, z. B. einem Aktivierungseingabeelement, das in dem überlappten mehrdimensionalen Raum eine Position oben links einnimmt. Mithilfe eines Schiebefenster kann die Software dann z. B. den Kernel so verschieben, dass er sich über einen zweiten Teil der Aktivierungseingaben legt, und ein weiteres Skalarprodukt berechnen, das einer weiteren Aktivierungseingabe entspricht. Die Software kann die Ausführung des Verfahrens solange wiederholen, bis jede Aktivierungseingabe ein entsprechendes Skalarprodukt aufweist. Bei manchen Ausführungsformen werden die Skalarprodukte in eine Aktivierungsfunktion eingegeben, die Aktivierungswerte erzeugt. Die Aktivierungswerte können kombiniert, z. B. zusammengefasst, werden, bevor sie an eine nachfolgende Ebene des neuronalen Netzwerks gesendet werden.
  • Eine Methode zur Durchführung von Faltungsberechnungen erfordert eine Vielzahl von Matrizenmultiplikationen in einem hochdimensionalen Raum. Ein Prozessor kann Matrizenmultiplikationen mithilfe einer Brute-Force-Methode berechnen. Obwohl dies rechen- und zeitaufwändig ist, kann der Prozessor für Faltungsberechnungen z. B. wiederholt einzelne Summen und Produkte berechnen. Das Ausmaß, in dem der Prozessor Berechnungen parallelisiert, wird durch seine Architektur begrenzt.
  • KURZDARSTELLUNG
  • Im Allgemeinen beschreibt diese Spezifikation eine spezielle Hardware-Schaltung, die neuronale Netzwerkinferenzen berechnet.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstands in einer Schaltung für die Ausführung neuronaler Netzwerkberechnungen für ein neuronales Netzwerk ausgeführt werden, das eine Vielzahl von Ebenen umfasst, wobei die Schaltung umfasst: ein systolisches Array, das eine Vielzahl von Zellen umfasst; eine Gewichtsabrufeinheit, die für jede der Vielzahl von neuronalen Netzwerkebenen konfiguriert ist, um für die neuronale Netzwerkebene eine Vielzahl von Gewichtseingaben an Zellen entlang einer ersten Dimension des systolischen Arrays zu senden; und eine Vielzahl von Gewichtssequenzereinheiten, die jeweils mit einer bestimmten Zelle entlang der ersten Dimension des systolischen Arrays verbunden sind, wobei die Vielzahl der Gewichtssequenzereinheiten für jede der Vielzahl von neuronalen Netzwerkebenen konfiguriert ist, um die Vielzahl von Gewichtseingaben für die neuronale Netzwerkebene im Lauf einer Vielzahl von Taktzyklen an Zellen entlang der zweiten Dimension des systolischen Arrays zu verschieben, wobei jede Gewichtseingabe in einer entsprechenden Zelle entlang der zweiten Dimension gespeichert wird und jede Zelle so konfiguriert ist, dass sie unter Verwendung einer Multiplikationsschaltung ein Produkt aus einer Aktivierungseingabe und einem entsprechenden Gewicht berechnet.
  • Implementierungen können eines oder mehrere der folgenden Elemente beinhalten. Eine Wertsequenzereinheit, die so konfiguriert ist, dass sie für jede der Vielzahl von neuronalen Netzwerkebenen eine Vielzahl von Aktivierungseingaben an Zellen entlang der zweiten Dimension des systolischen Arrays für die neuronale Netzwerkebene sendet. Die erste Dimension des systolischen Arrays entspricht Zeilen des systolischen Arrays, und die zweite Dimension des systolischen Arrays entspricht Spalten des systolischen Arrays. Jede Zelle ist so konfiguriert, dass sie ein Gewichtssteuerungssignal an eine benachbarte Zelle sendet, wobei das Gewichtssteuerungssignal die Schaltung in der benachbarten Zelle dazu bringt, eine Gewichtseingabe für die benachbarte Zelle zu verschieben oder zu laden. Ein Gewichtspfadregister, das so konfiguriert ist, dass es die in die Zelle verschobene Gewichtseingabe speichert; ein Gewichtsregister, das mit dem Gewichtspfadregister gekoppelt ist; ein Gewichtssteuerungsregister, das für die Ermittlung konfiguriert ist, ob die Gewichtseingabe im Gewichtsregister gespeichert werden soll; ein Aktivierungsregister, das zur Speicherung einer Aktivierungseingabe sowie zum Senden der Aktivierungseingabe an ein anderes Aktivierungsregister in einer ersten benachbarten Zelle entlang der ersten Dimension konfiguriert ist; die Multiplikationsschaltung, die mit dem Gewichtsregister und dem Aktivierungsregister verbunden ist, wobei die Multiplikationsschaltung zur Ausgabe eines Produkts aus der Gewichtseingabe und der Aktivierungseingabe konfiguriert ist; eine Summierungsschaltung, die mit der Multiplikationsschaltung verbunden und zum Empfangen des Produkts sowie einer ersten Teilsumme aus einer zweiten benachbarten Zelle entlang der zweiten Dimension konfiguriert ist, wobei die Summierungsschaltung zur Ausgabe einer zweiten Teilsumme aus dem Produkt und der ersten Teilsumme konfiguriert ist; und ein Teilsummenregister, das zum Senden der zweiten Teilsumme an eine andere Summierungsschaltung in einer dritten benachbarten Zelle entlang der zweiten Dimension konfiguriert ist. Jede Gewichtssequenzereinheit umfasst: einen Anhaltezähler, der dem Gewichtssteuerungsregister in der entsprechenden Zelle, die mit der Gewichtssequenzereinheit verbunden ist, entspricht; und eine Dekrementschaltung, die zum Dekrementieren einer Eingabe für die Gewichtssequenzereinheit konfiguriert ist, um eine dekrementierte Ausgabe zu erzeugen und an den Anhaltezähler zu senden. Werte in jedem Anhaltezähler sind identisch, und jede Gewichtssequenzereinheit ist zum Laden einer entsprechenden Gewichtseingabe in die entsprechende bestimmte Zelle des systolischen Arrays konfiguriert, wobei das Laden das Senden der Gewichtseingabe an die Multiplikationsschaltung umfasst. Werte in jedem Anhaltezähler erreichen einen vorgegebenen Wert, um die Vielzahl von Gewichtssequenzereinheiten dazu zu bringen, das Verschieben der Vielzahl von Gewichtseingaben entlang der zweiten Dimension anzuhalten. Das systolische Array ist so konfiguriert, dass es für jede der Vielzahl von neuronalen Netzwerkebenen aus jedem Produkt eine akkumulierte Ausgabe für die neuronale Netzwerkebene erzeugt.
  • Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Durch das Vorabrufen von Gewichten kann ein neuronaler Netzwerkprozessor Berechnungen effizienter ausführen. Der Prozessor kann das Laden von Gewichtseingaben in das systolische Array mithilfe einer Gewichtsabrufeinheit sowie einer Gewichtssequenzereinheit koordinieren und damit den Bedarf nach einer Drahtkopplung einer externen Speichereinheit mit den einzelnen Zellen im systolischen Array eliminieren. Der Prozessor kann anhalten (d. h. „einfrieren”), indem er die Gewichtseingaben verschiebt, um die Ausführung verschiedener Faltungsberechnungen zu synchronisieren.
  • Die Details einer oder mehrerer Ausführungen eines Gegenstands dieser Spezifikation sind in den begleiteten Bildern und der Beschreibung unten veranschaulicht. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzes.
  • 2 zeigt ein Beispiel eines neuronalen Netzwerkverarbeitungssystems.
  • 3 zeigt eine Beispielarchitektur mit einer Matrix-Recheneinheit.
  • 4 zeigt eine Beispielarchitektur einer Zelle innerhalb eines systolischen Arrays.
  • 5 zeigt eine exemplarische Matrixstruktur mit Raumdimensionen und einer Funktionsdimension.
  • 6 zeigt eine exemplarische Darstellung dazu, wie eine Kernel-Matrixstruktur an ein systolisches Array gesendet wird.
  • 7 zeigt eine exemplarische Darstellung von Gewichtseingaben in Zellen nach drei Taktzyklen.
  • 8 ist eine exemplarische Darstellung dazu, wie Steuerungssignale dafür sorgen, dass Aktivierungseingaben verschoben oder geladen werden. Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ein neuronales Netzwerk mit mehreren Schichten kann verwendet werden, um Inferenzen zu berechnen. So kann das neuronale Netzwerk beispielsweise bei einer Eingabe, eine Inferenz für die Eingabe berechnen. Insbesondere können die Schichten des neuronalen Netzwerks sind in einer Reihe mit jeweils einem Gewichtssatz in einer Sequenz angeordnet sein. Insbesondere die Schichten des neuronalen Netzes sind mit jeweils einem entsprechenden Satz von Gewichten in einer Sequenz angeordnet. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe entsprechend den Gewichtssätzen für die Schicht, um eine Ausgabe zu erzeugen.
  • Daher empfängt das neuronale Netzwerk die Eingabe und verarbeitet diese zum Erzeugen der Inferenz in der Sequenz durch jede der neuronalen Netzwerkschichten, wobei der Ausgang einer Netzwerkschicht als Eingang für die nächste neuronale Netzwerkschicht vorgesehen ist. Dateneingaben zu einer neuronalen Netzwerkschicht, z. B. können entweder als Eingabe für das neuronale Netzwerk oder als Ausgang der Schicht der darunterliegenden Schicht in der Sequenz zu einer neuronalen Netzwerkschicht als Aktivierungseingaben für die Schicht bezeichnet werden.
  • Bei einigen Implementierungen sind die Schichten des neuronalen Netzwerks in einem gerichteten Graph angeordnet. Das heißt, jede spezielle Schicht kann mehrere Eingänge, mehrere Ausgänge oder beide empfangen. Die Schichten des neuronalen Netzes können auch so angeordnet sein, dass ein Ausgang einer Schicht als Eingang in eine vorhergehende Schicht zurückgesendet werden kann.
  • 1 ist ein Flussdiagramm eines Beispielprozesses 100 zum Durchführen einer Berechnung für eine gegebene Schicht eines neuronalen Netzwerks mithilfe einer speziellen Hardwareschaltung. Der Einfachheit halber wird das Verfahren 100 in Bezug auf ein System beschrieben, mit einer oder mehreren Schaltungen, die das Verfahren 100 ausführen. Das Verfahren 100 kann für jede Schicht des neuronalen Netzwerks ausgeführt werden, um eine Inferenz aus einem empfangenen Eingang zu berechnen.
  • Das System empfängt für die gegebene Schicht Gewichtseingangssätze (Schritt 102) und Aktivierungseingangssätze (Schritt 104). Die Sätze mit Gewichtseingaben und die Sätze mit Aktivierungseingaben können von einem dynamischen Speicher bzw. einem einheitlichen Puffer der speziellen Hardwareschaltung empfangen werden. Bei einigen Implementierungen können sowohl die Gewichtseingaben als auch die Aktivierungseingaben von dem einheitlichen Puffer empfangen werden.
  • Das System erzeugt aus den Gewichtseingaben und den Aktivierungseingaben mithilfe einer Matrixmultiplikationseinheit der speziellen Hardwareschaltung (Schritt 106) kumulierte Werte. Bei einigen Implementierungen sind die kumulierten Werte Punktprodukte der Gewichtseingangssätze und den Aktivierungseingaben. Das heißt, für einen Satz von Gewichtungen, kann das System jede Gewichtseingabe mit jedem Aktivierungseingang multiplizieren und die Produkte zusammenaddieren, um einen kumulierten Wert zu bilden. Dann kann das System Punktprodukte eines anderen Satzes von Gewichtungen mit anderen Sätzen von Aktivierungseingaben berechnen.
  • Das System kann unter Verwendung einer Vektor-Recheneinheit der speziellen Hardware-Schaltung eine Schichtausgabe von den kumulierten Werten (Schritt 108) erzeugen. Bei einigen Implementierungen wendet die Vektor-Recheneinheit eine Aktivierungsfunktion auf die kumulierten Werte an. Der Ausgang der Schicht kann zur Verwendung als eine Eingabe in eine nachfolgende Schicht in dem neuronalen Netzwerk in dem einheitlichen Puffer gespeichert werden oder kann verwendet werden, um die Inferenz zu bestimmen. Das System beendet die Verarbeitung des neuronalen Netzwerks, um die Inferenz für den empfangenen Eingang zu erzeugen, wenn ein empfangener Eingang durch jede Schicht des neuronalen Netzwerks verarbeitet worden ist.
  • 2 zeigt ein Beispiel einer speziellen integrierten Schaltung 200 zum Durchführen neuronaler Netzwerkberechnungen. Das System 200 verfügt über eine Host-Schnittstelle 202. Die Host-Schnittstelle 202 kann Anweisungen empfangen, die Parameter für eine neuronale Netzwerkberechnung umfassen. Die Parameter können mindestens eine oder mehrere der folgenden beinhalten: die Anzahl der zu verarbeitenden Ebenen, die entsprechenden Sätze aus Gewichtseingaben für jede Ebene der Ebene, ein Anfangssatz aus Aktivierungseingaben, d. h. die Eingabe für das neuronale Netzwerk, aus der die Inferenz zu berechnen ist, entsprechende Eingabe- und Ausgabegrößen jeder Ebene, eine Schrittgröße für die Berechnung durch das neuronale Netzwerk, und die Art der zu verarbeitenden Ebene, z. B. eine Faltungsebene oder eine vollständig verbundene Ebene.
  • Die Host-Schnittstelle 202 kann die Befehle an einen Sequenzer 206 senden, der die Befehle in Steuerungssignale mit niedrigem Pegel umwandelt, um die Schaltung zur Durchführung der neuronalen Netzwerkberechnungen zu steuern. In einigen Implementierungen regeln die Steuersignale den Datenfluss in der Schaltung, z. B. wie die Gewichtseingangssätze und die Aktivierungseingangssätze durch die Schaltung fließen. Der Sequenzer 206 kann die Steuersignale zu einem einheitlichen Puffer 208, einer Matrix-Recheneinheit 212 und einer Vektor-Recheneinheit 214 senden. Bei einigen Implementierungen sendet der Sequenzer 206 auch Steuersignale an ein direktes Speicherzugriffsprogramm 204 und einen dynamischen Speicher 210. In manchen Implementierungen ist der Sequenzer 206 ein Prozessor, der getaktete Signale erzeugt. Der Sequenzer 206 kann mithilfe einer geeigneten zeitlichen Anordnung der getakteten Signale die Steuerungssignale an die einzelnen Komponenten der Schaltung 200 senden. In einigen anderen Implementierungen leitet die Host-Schnittstelle 202 ein getaktetes Signal von einem externen Prozessor ein.
  • Die Host-Schnittstelle 202 kann Gewichtseingangssätze und den anfänglichen Satz von Aktivierungseingaben an ein direktes Speicherzugriffsprogramm 204 senden. Das direkte Speicherzugriffsprogramm 204 kann die Sätze von Aktivierungseingaben an dem einheitlichen Puffer 208 speichern. Bei einigen Implementierungen speichert der direkte Speicherzugriff die Gewichtungssätze in den dynamischen Speicher 210, der eine Speichereinheit sein kann. In einigen Implementierungen befindet sich der dynamische Speicher außerhalb der Schaltung.
  • Die einheitliche Puffer 208 ist ein Speicherpuffer. Er kann verwendet werden, um den Satz von Aktivierungseingaben von dem direkten Speicherzugriffsprogramm 204 und Ausgängen der Vektor-Recheneinheit 214 zu speichern. Das direkte Speicherzugriffsprogramm 204 kann auch die Ausgänge der Vektor-Recheneinheit 214 aus dem einheitlichen Puffer 208 lesen.
  • Der dynamische Speicher 210 und der einheitliche Puffer 208 können die Gewichtseingangssätze und die Sätze von Aktivierungseingaben jeweils an die Matrix-Recheneinheit 212 senden. Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 eine zweidimensionale systolische Matrix. Die Matrix-Recheneinheit 212 kann auch ein eindimensionales systolisches Array oder eine andere Schaltung sein, die mathematische Operationen durchführen kann (z. B. Multiplikation und Addition). Bei einigen Implementierungen ist die Matrix-Recheneinheit 212 ein Allzweck-Matrixprozessor.
  • Die Matrix-Recheneinheit 212 kann die Gewichtseingaben und die Aktivierungseingaben verarbeiten und einen Ausgangsvektor an die Vektorberechnungseinheit 214 bereitstellen. Bei einigen Implementierungen sendet die Matrix-Recheneinheit den Ausgangsvektor an den einheitlichen Puffer 208, der den Ausgangsvektor an die Vektor-Recheneinheit 214 sendet. Die Vektor-Recheneinheit kann den Ausgangsvektor verarbeiten und einen Vektor von verarbeiteten Ausgängen zum einheitlichen Puffer 208 speichern. So kann beispielsweise die Vektor-Recheneinheit 214 kann eine nichtlineare Funktion auf Ausgänge der Matrix-Recheneinheit, z. B. einen Vektor von kumulierten Werten anwenden, um aktivierte Werte zu erzeugen. Bei einigen Implementierungen erzeugt die Vektor-Recheneinheit 214 normierte Werte, gebündelte Werte oder beides. Der Vektor von verarbeiteten Ausgängen kann als Aktivierungseingang für die Matrix-Recheneinheit 212 verwendet werden, z. B. zur Verwendung in einer nachfolgenden Schicht in dem neuronalen Netzwerk. Die Vektor-Recheneinheit 212 wird nachfolgend unter Bezugnahme auf 3 und 4 näher beschrieben.
  • 3 zeigt eine Beispielarchitektur 300 mit einer Matrix-Recheneinheit. Die Matrix-Recheneinheit ein zweidimensionales systolisches Array 306. Das Array 306 enthält mehrere Zellen 304. Bei einigen Implementierungen entspricht eine erste Dimension 320 des systolischen Arrays 306 Spalten von Zellen und eine zweite Dimension 322 des systolischen Arrays 306 entspricht Zeilen von Zellen. Das systolische Array kann mehr Zeilen als Spalten, mehr Spalten als Zeilen oder eine gleiche Anzahl von Spalten und Zeilen aufweisen.
  • In dem dargestellten Beispiel senden die Wertlader 302 Aktivierungseingänge an Zeilen des Arrays 306 und eine Gewichtsabrufschnittstelle 308 sendet Gewichtseingänge an Spalten des Arrays 306. Bei einigen anderen Implementierungen werden jedoch Aktivierungseingänge zu den Spalten übertragen und Gewichtseingänge zu den Zeilen des Arrays 306.
  • Die Wertlader 302 können die Aktivierungseingänge von einem einheitlichen Puffer, z. B. dem einheitlichen Puffer 208 von 2 empfangen. Jeder Wertlader kann einen entsprechenden Aktivierungseingang zu einer am weitesten links liegenden Zelle des Arrays 306 senden. Die am weitesten links liegende Zelle kann eine Zelle entlang einer äußerst linken Spalte des Arrays 306 sein. So kann beispielsweise der Wertlader 312 einen Aktivierungseingang zur Zelle 314 senden. Der Wertlader kann auch den Aktivierungseingang an einen benachbarten Wertlader senden und der Aktivierungseingang kann an einer anderen am weitesten links liegenden Zelle des Arrays 306 verwendet werden. Dies ermöglicht, dass Aktivierungseingänge zur Verwendung in einer anderen bestimmten Zelle des Arrays 306 verschoben werden.
  • Die Gewichtsabrufschnittstelle 308 kann die Gewichtseingabe von einer Speichereinheit, z. B. dem dynamischen Speicher 210 von 2 empfangen. Jede Gewichtsabrufschnittstelle 308 kann eine entsprechende Gewichtseingabe an eine bestimmte oberste Zelle des Arrays 306 senden. Die oberste Zelle kann eine Zelle entlang einer obersten Zeile des Arrays 306 sein. Die Gewichtsabrufschnittstelle 308 kann beispielsweise Gewichtseingaben an die Zellen 314 und 316 übermitteln.
  • Bei einigen Implementierungen kann eine Hostschnittstelle, z. B. die Hostschnittstelle 202 von 2, die Aktivierungseingänge über das gesamte Array 306 entlang einer Dimension, z. B. nach rechts verschieben, während die Gewichtseingänge entlang des gesamten Arrays 306 entlang einer anderen Dimension, z. B. nach unten, verschoben werden können. So kann beispielsweise der Aktivierungseingang an der Zelle 314 über einen Taktzyklus zu einem Aktivierungsregister in der Zelle 316, die rechts von der Zelle 314 liegt, verschieben. In ähnlicher Weise kann die Gewichtseingabe an der Zelle 316 zu einem Gewichtsregister in der Zelle 318 verschoben werden, die unterhalb der Zelle 314 liegt.
  • Um eine kumulierte Ausgabe zu erzeugen, kann bei jedem Taktzyklus jede Zelle einen gegebenen Gewichtseingang und einen gegebenen Aktivierungseingang verarbeiten. Die kumulierte Ausgabe kann auch an die benachbarte Zelle entlang der gleichen Dimension wie die gegebene Gewichtseingabe weitergegeben werden. Nachfolgend weiter unten wird unter Bezugnahme auf 4 eine Einzelzelle beschrieben. In einigen Implementierungen werden Gewichte und Aktivierungen im Lauf eines gegebenen Taktzyklus in mehr als eine Zelle verschoben, um von einer Faltungsberechnung zu einer anderen zu wechseln.
  • Die kumulierte Ausgabe kann entlang der gleichen Spalte wie die Gewichtseingabe, z. B. in Richtung des Bodens der Spalte in dem Array 306, verschoben werden. Bei einigen Implementierungen kann das Array 306 unterhalb jeder Spalte Akkumulationseinheiten 310 beinhalten, die jede Ausgabe von jeder Spalte speichert und kumuliert, wenn Berechnungen mit Schichten durchgeführt werden, die mehr Aktivierungseingaben als Zeilen aufweisen. Bei In einigen Implementierungen speichert jede Akkumulatoreinheit mehrere parallele Akkumulationen. Dies wird weiter unten unter Bezugnahme auf 6 beschrieben. Die Akkumulatoreinheiten 310 können jede kumulierte Ausgabe kumulieren, um einen endgültigen kumulierten Wert zu erzeugen. Der endgültige kumulierte Wert kann auf eine Vektor-Recheneinheit übertragen werden. Bei einigen anderen Implementierungen übergeben die Akkumulationseinheiten 310 die kumulierten Werte zu der Vektor-Recheneinheit, ohne irgendwelche Ansammlungen auszuführen, wenn Schichten mit weniger Gewichtseingaben verarbeitet werden als Spalten oder Schichten mit weniger Aktivierungseingaben als Zeilen.
  • Während Aktivierungseingaben und Gewichtseingaben durch die Schaltung fließen, kann die Schaltung den Fluss eines Satzes mit Gewichtseingaben „einfrieren” oder anhalten, um eine präzise Berechnung von Akkumulationswerten zu ermöglichen. Das bedeutet, dass die Schaltung den Satz mit Gewichtseingaben anhalten kann, damit sich ein bestimmter Satz von Gewichtseingaben auf einen bestimmten Satz von Aktivierungseingaben anwenden lässt.
  • In einigen Implementierungen konfigurieren Gewichtssequenzer 324, ob Gewichtseingaben in benachbarte Zellen verschoben werden sollen. Ein Gewichtssequenzer 326 kann einen Steuerungswert von einem Host, z. B. Host-Schnittstelle 202 aus 2, oder einem Prozessor empfangen. Jeder Gewichtssequenzer kann den Steuerungswert an eine entsprechende Zelle im Array 306 weiterleiten. Insbesondere kann der Steuerungswert in einem Gewichtssteuerungsregister der Zelle gespeichert werden, zum Beispiel im Gewichtssteuerungsregister 414 aus 4. Der Steuerungswert kann ermitteln, ob Gewichtseingaben entlang einer Dimension des Arrays verschoben bzw. geladen werden sollen; dieser Vorgang wird im Folgenden beschrieben unter Bezugnahme auf 8. Der Gewichtssequenzer kann den Steuerungswert außerdem an einen benachbarten Gewichtssequenzer senden, der das Verschieben oder Laden einer entsprechenden Gewichtseingabe für eine entsprechende Zelle steuern kann.
  • In einigen Implementierungen wird der Steuerungswert als Ganzzahl dargestellt. Jeder Gewichtssequenzer kann ein Anhaltezählerregister beinhalten, das die Ganzzahl speichert. Außerdem kann der Gewichtssequenzer die Ganzzahl dekrementieren, bevor der Steuerungswert im Anhaltezählerregister gespeichert wird. Nach dem Speichern des Steuerungswerts im Anhaltezählerregister kann der Gewichtssequenzer die Ganzzahl an einen benachbarten Gewichtssequenzer und an die entsprechende Zelle senden. Jeder Gewichtssequenzer kann zum Beispiel eine Dekrementschaltung aufweisen, die so konfiguriert ist, dass sie aus dem Steuerungswert eine dekrementierte Ganzzahl erzeugt. Die dekrementierte Ganzzahl kann im Anhaltezählerregister gespeichert werden. Die gespeicherten Steuerungswerte lassen sich verwenden, um eine simultane Verschiebungspause in einer gesamten Spalte des Arrays zu koordinieren; dieser Vorgang wird im Folgenden genauer beschrieben unter Bezugnahme auf 8.
  • In einigen Implementierungen können Entwickler durch das Anhalten von Gewichten in der Schaltung Fehler in der Schaltung beseitigen.
  • Andere Verfahren zum Anhalten von Gewichten sind möglich. Anstatt Werte in den Anhaltezählerregistern an benachbarte Anhaltezählerregister zu übertragen, lässt sich der Steuerungswert zum Beispiel mithilfe eines Baums übermitteln. Das bedeutet, dass sich das Signal an einer bestimmten Zelle an alle benachbarten Zellen und nicht nur an eine benachbarte Zelle übertragen lässt, sodass sich das Signal rasch im gesamten systolischen Array verbreitet. 4 zeigt eine Beispielarchitektur 400 Einer Zelle innerhalb eines systolischen Arrays, z. B. des systolischen Arrays 306 von 3.
  • Die Zelle kann ein Aktivierungsregister 406 umfassen, das einen Aktivierungseingang speichert. Das Aktivierungsregister kann die Aktivierungseingabe von einer linken benachbarten Zelle, d. h. eine benachbarte Zelle, die links von der gegebenen Zelle angeordnet ist, oder von einem einheitlichen Puffer, abhängig von der Position der Zelle, innerhalb des systolischen Arrays empfangen. Die Zelle kann ein Aktivierungsregister 402 umfassen, das einen Gewichtseingang speichert. Der Gewichtseingang kann, abhängig von der Position der Zelle innerhalb des systolischen Arrays, von einer oberen benachbarten Zelle oder von einer Gewichtsabrufschnittstelle übertragen werden. Die Zelle kann auch eine Summe im Register 404 beinhalten Die Summe im Register 404 kann einen akkumulierten Wert aus der obersten benachbarten Zelle speichern. Die Multiplikationsschaltung 408 kann verwendet werden, um die Gewichtseingabe von dem Gewichtsregister 402 mit der Aktivierungseingabe von dem Aktivierungsregister 406 zu multiplizieren. Die Multiplikationsschaltung 408 kann das Produkt an die Summierungsschaltung 410 ausgeben.
  • Die Summierungsschaltung kann das Produkt und den kumulierten Wert aus der Summe im Register 404 summieren, um einen neuen kumulierten Wert zu erzeugen. Die Summierungsschaltung 410 kann dann den neuen kumulierten Wert an eine andere Summe im Register senden, die sich in einer unteren angrenzenden Zelle befindet. Der neue akkumulierte Wert kann in der untersten benachbarten Zelle als Operand für eine Summierung verwendet werden.
  • In einigen Implementierungen beinhaltet die Zelle auch ein allgemeines Steuerungsregister. Das Steuerregister kann ein Steuersignal speichern, das bestimmt, ob die Zelle entweder die Gewichtseingabe oder die Aktivierungseingabe zu benachbarten Zellen verschieben soll. In einigen Implementierungen erfordert das Verschieben der Gewichtseingabe bzw. der Aktivierungseingabe mehr als einen Taktzyklus. Das Steuerungssignal kann ferner ermitteln, ob die Aktivierungseingabe oder Gewichtseingaben an die Multiplikationsschaltung 408 übertragen werden sollen bzw. ob die Multiplikationsschaltung 408 Operationen an den Aktivierungs- und Gewichtseingaben vornehmen soll. Das Steuersignal kann auch an eine oder mehrere benachbarte Zellen geleitet werden, z. B. mithilfe eines Drahtes.
  • Bei einigen Implementierungen werden die Gewichte in ein Gewichtspfadregister 412 verschoben. Das Gewichtspfadregister 412 kann die Gewichtseingabe, z. B. von einer oberen benachbarten Zelle empfangen und die Gewichtseingabe auf das Gewichtsregister 402 auf der Grundlage des Steuersignals übertragen. Das Gewichtsregister 402 kann die Gewichtseingabe statisch speichern, sodass wenn Aktivierungseingaben über mehrere Taktzyklen in die Zelle übertragen werden, z. B. durch das Aktivierungsregister 406 über mehrere Taktzyklen hinweg, bleibt die Gewichtseingabe innerhalb der Zelle und wird nicht zu einer benachbarten Zelle übertragen.
  • Die Gewichtseingabe kann daher auf mehrere Aktivierungseingaben angewendet werden, z. B. unter Verwendung der Multiplikationsschaltung 408, und entsprechende akkumulierte Werte können zu einer benachbarten Zelle übertragen werden.
  • In einigen Implementierungen steuert das Gewichtssteuerungsregister 414, ob die Gewichtseingabe im Gewichtsregister 402 gespeichert wird. Wenn das Gewichtssteuerungsregister 414 zum Beispiel einen Steuerungswert 0 speichert, kann das Gewichtsregister 402 die vom Gewichtspfadregister 412 gesendete Gewichtseingabe speichern. In einigen Implementierungen wird das Speichern der Gewichtseingabe im Gewichtsregister 402 als Laden der Gewichtseingabe bezeichnet. Sobald die Gewichtseingabe geladen wurde, lässt sich die Gewichtseingabe zur Verarbeitung an Multiplikationsschaltung 408 senden. Wenn das Gewichtssteuerungsregister 414 einen Steuerungswert speichert, der nicht 0 ist, kann das Gewichtsregister 402 die vom Gewichtspfadregister 412 gesendete Gewichtseingabe ignorieren. Der im Gewichtssteuerregister 414 gespeicherte Steuerungswert kann an eine oder mehrere benachbarte Zellen übertragen werden; für eine gegebene Zelle lässt sich der Steuerungswert zum Beispiel an ein Gewichtssteuerungsregister in einer Zelle senden, die sich rechts von der gegebenen Zelle befindet.
  • Die Zelle kann die Gewichtseingabe sowie die Aktivierungseingabe auch in benachbarte Zellen verschieben. Das Gewichtspfadregister 412 kann z. B. die Gewichtseingabe an ein anderes Gewichtspfadregister in der untersten benachbarten Zelle senden. Das Aktivierungsregister 406 kann die Gewichtseingabe zu einem anderen Aktivierungsregister in der rechten benachbarten Zelle senden. Daher können sowohl die Gewichtseingabe als auch die Aktivierungseingabe von anderen Zellen in dem Array bei einem nachfolgenden Taktzyklus wiederverwendet werden
  • 5 zeigt eine exemplarische Matrixstruktur 500, die Raumdimensionen und eine Funktionsdimension aufweist. Die Matrixstruktur 500 kann entweder einen Satz von Aktivierungseingaben oder einen Satz von Gewichtseingaben darstellen. Eine Matrixstruktur für einen Satz Aktivierungseingaben wird in dieser Spezifikation als Aktivierungsmatrixstruktur bezeichnet, und eine Matrixstruktur für einen Satz aus Gewichtseingaben als Kernel-Matrixstruktur. Die Matrixstruktur 500 hat drei Dimensionen: zwei Raumdimensionen und eine Funktionsdimension.
  • Bei manchen Ausführungsformen entsprechen die Raumdimensionen einem Raum oder Position eines Satzes Aktivierungseingaben. Wenn das neuronale Netzwerk z. B. ein Bild verarbeitet, das zwei Dimensionen hat, können die Matrixstrukturen zwei Raumdimensionen haben, die Raumkoordinaten, d. h. XY-Koordinaten, des Bildes entsprechen.
  • Die Funktionsdimension entspricht den Funktionen einer Aktivierungseingabe. Jede Funktionsdimension kann Tiefenebenen haben; z. B. hat die Matrixstruktur 500 die Tiefenebenen 502, 504 und 506. Zur Veranschaulichung: Wenn die Matrixstruktur 500 ein 3×3×3-Bild darstellt, das als Satz von Aktivierungseingaben an eine erste Ebene gesendet wird, können die X- und Y-Dimensionen des Bilds (3×3) die Raumdimensionen sein, während die Z-Dimension (3) die Funktionsdimension sein kann, die den Werten R, G, und B entspricht. Das heißt, dass die Tiefenebene 502 einer Funktion mit neun '1'-Aktivierungseingaben entsprechen kann (z. B. Rotwerte), die Tiefenebene 504 einer Funktion mit neun '2'-Aktivierungseingaben entsprechen kann (z. B. Grünwerte) und die Tiefenebene 506 einer Funktion mit neun '3'-Aktivierungseingaben entsprechen kann (z. B. Blauwerte).
  • Obwohl in dem Beispiel in 5 nur drei Tiefenniveaus für die Funktionsdimension abgebildet sind, kann eine gegebene Funktionsdimension eine große Zahl, z. B. Hunderte, von Funktionsdimensionen aufweisen. In ähnlicher Weise kann eine gegebene Matrixstruktur, obwohl nur eine Funktionsdimension abgebildet ist, mehrere Funktionsdimensionen haben. Um mit der Matrixstruktur 500 die Berechnung der Faltungsebene auszuführen, muss das System die Faltungsberechnung in eine zweidimensionale Matrixmultiplikation umwandeln. 6 zeigt eine exemplarische Darstellung dazu, wie eine Matrixstruktur 500 in 5 von einem systolischen Array 606 bei einer gegebenen Faltungsebene verarbeitet wird. Die Matrixstruktur 600 kann ein Satz Aktivierungseingaben sein. Allgemein kann der Prozessor des neuronalen Netzwerks die Aktivierungseingaben (z. B. Elemente in einer Matrixstruktur 600) und Gewichtseingaben (z. B. Kernel A-D 610) an Zeilen bzw. Spalten des Arrays senden. Die Aktivierungs- und Gewichtseingaben können in dem systolischen Array nach rechts bzw. nach unten verschoben werden und müssen eine bestimmte Position erreichen, z. B. ein bestimmtes Register in einer bestimmten Zelle. Sobald festgestellt wird, dass die Eingaben am richtigen Ort sind (z. B. durch Analyse der Steuerungssignale), kann der Prozessor mithilfe der in den Zellen gespeicherten Eingaben Berechnungen durchführen, um die Ausgabe für die jeweilige Ebene zu erzeugen.
  • Der Prozessor des neuronalen Netzwerks „ebnet” die Matrixstruktur 600 ein, bevor er Teile der Struktur 600 an Zeilen des systolischen Arrays sendet, wie oben beschrieben. Das heißt, dass der Prozessor des neuronalen Netzwerks die Tiefenebenen 602 der Matrixstruktur 600 aufspalten kann, z. B. in die Tiefenebenen 602, 604, und 606 aus 6, und jedes Tiefenniveau an eine bestimmte Zelle senden.
  • In einigen Implementierungen wird jede Tiefenebene an eine Zelle in einer anderen Zeile des systolischen Arrays 606 gesendet. Der Prozessor kann z. B. die Aktivierungseingaben aus einer ersten Tiefenebene (z. B. einer Matrix mit neun '1'-Aktivierungseingaben) an eine Zelle ganz links in einer ersten Zeile des systolischen Arrays 606, aus einer zweiten Tiefenebene (z. B. einer Matrix mit neun '2'-Aktivierungseingaben) an eine Zelle ganz links in einer zweiten Zeile und aus einer dritten Tiefenebene (z. B. einer Matrix mit neun '3'-Aktivierungseingaben) an eine Zelle ganz links in einer dritten Zeile usw. senden.
  • Die angegebene Ebene kann mehrere Kernel aufweisen, z. B. Kernel A-D 610. Die Kernel A-D 610 können Matrixstrukturen der Dimension 3×3×10 aufweisen. Der Prozessor kann jede Kernel-Matrixstruktur an eine Zelle in einer bestimmten Spalte des systolischen Arrays 606 senden. Kernel A kann z. B. an eine oberste Zelle in einer ersten Spalte gesendet werden, während Kernel B an eine oberste Zelle in einer zweiten Spalte gesendet werden kann usw.
  • Wenn eine Matrixstruktur an eine Zelle gesendet wird, kann ein erstes Element der Matrix während einem Taktzyklus in der Zelle gespeichert werden. Beim nächsten Taktzyklus kann ein weiteres Element in der Zelle gespeichert werden. Das erste gespeicherte Element kann in eine benachbarte Zelle verschoben werden, wie oben beschrieben unter Bezugnahme auf 4. Das Verschieben von Eingaben kann fortgesetzt werden, bis alle Elemente der Matrixstruktur im systolischen Array 606 gespeichert sind. Sowohl die Aktivierungseingaben als auch die Gewichtseingaben können nach einem oder mehreren Taktzyklen innerhalb der jeweiligen Zelle verschoben werden. Das Verschieben der Eingaben innerhalb des systolischen Arrays wird weiter unten beschrieben unter Bezugnahme auf 7.
  • 7 zeigt eine exemplarische Darstellung 700 mit Gewichtseingaben in Zellen eines exemplarischen systolischen 3×3-Arrays im Anschluss an drei Taktzyklen. Jede Zelle kann eine Gewichtseingabe und eine Aktivierungseingabe speichern, wie oben beschrieben unter Bezugnahme auf 5. Gewichtseingaben können an Zellen in bestimmten Spalten des systolischen Arrays für Faltungsberechnungen gesendet werden, wie oben beschrieben unter Bezugnahme auf 7. Zur Veranschaulichung sendet das System eine erste Kernel-Matrixstruktur mit den Gewichtseingaben von 1, 2, und 4 an eine erste Spalte des systolischen Arrays. Das System sendet eine zweite Kernelstruktur mit den Gewichtseingaben von 3, 5, und 7 an eine zweite Spalte. Das System sendet eine dritte Kernelstruktur mit den Gewichten 6, 8, und 10 an eine dritte Spalte. Nach jedem Taktzyklus können die Gewichtseingaben in einer Dimension verschoben werden, z. B. von oben nach unten, während die Aktivierungseingaben in einer anderen Dimension verschoben werden können (nicht abgebildet), z. B. von links nach rechts.
  • Gewichtseingaben können in den Zellen gestaffelt gespeichert werden. Das heißt, dass ein Zustand des systolischen Arrays nach einem ersten Taktzyklus 702 in einer Zelle oben links eine '1' anzeigt. Die '1' stellt die in der Zelle gespeicherte Gewichtseingabe von '1' dar. Beim nächsten Taktzyklus 704 wird die '1' in eine Zelle unterhalb der Zelle oben links verschoben, und eine andere Gewichtseingabe aus dem Kernel, die '2', wird in der Zelle oben links gespeichert, während eine Gewichtseingabe von '3' bei einer obersten Zelle in einer zweiten Spalte gespeichert wird. Bei einem dritten Taktzyklus 706 wird jedes Gewicht erneut verschoben. In der ersten Spalte speichert eine Zelle am Fuß die Gewichtseingabe '1', die Gewichtseingabe '2' wird da gespeichert, wo im vorigen Zyklus die Gewichtseingabe '1' gespeichert wurde, und eine Gewichtseingabe '4' wird in der Zelle ganz oben links gespeichert. Auf ähnliche Weise wird die '3' in der zweiten Spalte nach unten verschoben, und eine Gewichtseingabe '5' wird in der Mitte der obersten Zelle gespeichert. In der dritten Spalte wird eine Gewichtseingabe '6' in der Zelle ganz oben rechts gespeichert.
  • Bei manchen Ausführungsformen wird ein Steuersignal für die Gewichtseingaben, das angibt, ob die Gewichtseingaben verschoben werden sollen, ebenfalls gemeinsam mit den Gewichtseingaben verschoben.
  • Aktivierungseingaben können in ähnlicher Weise in der anderen Dimension verschoben werden, z. B. von links nach rechts.
  • Sind die Aktivierungseingaben und die Gewichtseingaben einmal an Ort und Stelle, kann der Prozessor eine Faltungsberechnung ausführen, z. B. indem er die Multiplikations- und Summenschaltungen innerhalb der Zellen verwendet, um einen Satz Sammelwerte zu erzeugen, die in einer Vektorberechnungseinheit zu verwenden sind.
  • Obwohl das System mit Gewichtseingaben beschrieben wurde, die an Spalten des Arrays gesendet werden, und Aktivierungseingaben, die an Zeilen des Arrays gesendet werden, werden bei manchen Ausführungsformen die Gewichtseingaben an die Zeilen des Arrays und die Aktivierungseingaben an die Spalten des Arrays gesendet.
  • 8 ist eine exemplarische Darstellung dazu, wie Steuerungswerte dafür sorgen können, dass Gewichtseingaben verschoben oder geladen werden. Die Steuerungswerte 806 können an einen Host gesendet und von Gewichtssequenzern gespeichert werden, wie oben beschrieben unter Bezugnahme auf 3. Die Werte im Graphen repräsentieren auf einer Pro-Taktzyklus-Basis 802 Steuerungswerte, die in Gewichtssequenzern 808814 gespeichert sind, welche den Zeilen 1–4 804 eines systolischen Arrays entsprechen.
  • In einigen Implementierungen wird eine Gewichtseingabe des systolischen Arrays in eine benachbarte Zelle verschoben, wenn ein Steuerungswert in einem gegebenen Gewichtssequenzer nicht 0 ist. Wenn der Steuerungswert im gegebenen Gewichtssequenzer 0 ist, kann die Gewichtseingabe in die entsprechende Zelle geladen zur Berechnung eines Produkts mit einer Aktivierungseingabe in der Zelle verwendet werden.
  • Zu Illustrationszwecken kann ein Host ermitteln, ob vier Gewichtseingaben verschoben werden sollen, bevor sie geladen werden. Bei Taktzyklus 0 kann der Host einen Steuerungswert von 5 an Gewichtssequenzer 808 (also den Gewichtssequenzer, der Zeile 1 entspricht) senden. Der Gewichtssequenzer 808 beinhaltet eine Dekrementschaltung, die auf einen Taktzyklus zurückgreift, um anhand des Steuerungswerts von 5 einen Steuerungswert von 4 auszugeben. Daher wird der Steuerungswert von 4 beim folgenden Taktzyklus (d. h. Taktzyklus 1) im Gewichtssequenzer 808 gespeichert.
  • Beim Taktzyklus 1 sendet der Host einen Steuerungswert von 4 an den Gewichtssequenzer 808.
  • Darum speichert der Gewichtssequenzer 808 bei Taktzyklus 2 einen Steuerungswert von 3 (z. B. mit der Dekrementschaltung). Beim Taktzyklus 1 kann der Gewichtssequenzer 808 den Steuerungswert von 4 an Gewichtssequenzer 810 senden. Nachdem der Steuerungswert von 4 von der Dekrementschaltung des Gewichtssequenzer 810 verarbeitet worden ist, kann der Gewichtssequenzer 810 daher bei Taktzyklus 2 einen Steuerungswert von 3 speichern. Gleichermaßen kann der Host Steuerungswerte von 3, 2 und 1 bei Taktzyklen 2, 3 bzw. 4 versenden. Da die Dekrementschaltung in jedem Gewichtssequenzer 808814 beim Dekrementieren von Steuerungswerten eine Verzögerung verursacht, kann das Dekrementieren von Steuerungswerten 806 in jedem Taktzyklus letztendlich jeden Gewichtssequenzer dazu bringen, den gleichen Steuerungswert zu speichern (d. h. Steuerungswerte von 1 bei Taktzyklus 4 und Steuerungswerte von 0 bei Taktzyklus 5).
  • In einigen Implementierungen – wenn jeder Gewichtssequenzer einen Steuerungswert von 0 ausgibt – hält das systolische Array das Verschieben von Gewichtseingaben an und lädt die Gewichtseingaben in die einzelnen Zellen. Durch das Laden der Gewichtseingaben ermöglicht es das systolische Array also, dass sich die Gewichtseingaben als Operanden in Skalarproduktberechnungen verwenden lassen, wodurch die Verarbeitung einer Ebene in einem neuronalen Netzwerk gestartet wird.
  • In einigen Implementierungen – nach Fertigstellung einer Berechnung und zum Starten einer erneuten Verschiebung von Gewichten – ändert der Host die Steuerungswerte in eine Zahl, die nicht 0 ist (z. B. Senden eine Steuerungswerts von 5 im Taktzyklus 7). Das Verfahren der Verschiebung kann wie oben beschrieben unter Bezugnahme auf Taktzyklus 0 wiederholt werden.
  • In einigen Implementierungen starten die Steuerungswerte bei einem anderen Offset (z. B. 1). Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen funktionalen Operationen können in digitalen elektronischen Schaltungen oder in einer konkret darin verkörperten Computersoftware oder Firmware, in Hardware (einschließlich der in dieser Spezifikation offenbarten Strukturen und ihrer strukturellen Entsprechungen) oder in beliebigen Kombinationen daraus implementiert werden. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme (d. h. als ein oder mehrere Module von Computerprogrammbefehlen) implementiert werden, die auf einem Computer-Speichermedium für die Ausführung durch oder die Steuerung der Operation des datenverarbeitenden Geräts codiert sind. Alternativ oder zusätzlich können die Programmbefehle in einem künstlich erzeugten und übertragenen Signal (z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal) codiert sein, das erzeugt wird, um Informationen für die Übertragung an geeignetes Empfängergerät zur Ausführung durch ein datenverarbeitendes Gerät zu codieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln.
  • Der Begriff „Datenverarbeitungsvorrichtung” umfasst alle Arten von Vorrichtungen, Geräten und Maschinen zum Verarbeiten von Daten, einschließlich beispielsweise eines programmierbaren Prozessors, eines Rechners oder mehrerer Prozessoren oder Rechner. Die Vorrichtung kann spezielle Logikschaltungen umfassen, z. B. ein FPGA (Field Programmable Gate Array-programmierbare Hardware-Logik) oder ein ASIC (anwendungsspezifische integrierte Schaltung). Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Durchführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbankverwaltungssystem, ein Betriebssystem, oder eine Kombination einer oder mehrerer der genannten.
  • Ein Computerprogramm (das auch als Programm, Software, Softwareanwendung, Modul, Softwaremodul, Skript oder Code bezeichnet werden kann) kann in einer beliebigen Form von Programmiersprache verfasst sein (einschließlich kompilierter oder interpretierter Sprachen bzw. funktional reiner, deklarativer oder verfahrensorientierter Sprachen) und in beliebiger Form bereitgestellt werden (z. B. als unabhängiges Programm oder als Modul, als Komponente, als Subroutine oder als eine andere Einheit, die zur Nutzung in einer Rechenumgebung geeignet ist). Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern. Ein Computerprogramm kann auf einem Computer oder mehreren Computer eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
  • Die in dieser Beschreibung dargestellten Prozesse und Logik-Abläufe können durch einen oder mehrere programmierbare Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Funktionen durch das Arbeiten mit Eingabedaten und das Erzeugen von Ausgaben auszuführen. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
  • Computer, die zur Ausführung eines Datenverarbeitungsprogramms geeignet sind, können beispielsweise allgemeine oder spezielle Mikroprozessoren oder beides oder jede andere Art einer Zentraleinheit beinhalten. Ganz allgemein nimmt eine zentrale Recheneinheit Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind eine CPU für das Ausführen von Befehlen und ein oder mehrere Speichergeräte für das Speichern von Befehlen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehr Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen. Jedoch muss ein Computer solche Geräte nicht haben.
  • Außerdem kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Personal Digital Assistant (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger (GPS) oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen. Computerlesbare Medien, die für das Speichern von Computerprogrammbefehlen und -daten geeignet sind, beinhalten alle Formen von nicht flüchtigen Speichern, Medien und Speichergeräten, zum Beispiel Halbleiterspeicher wie EPROM, EEPROM und Flashspeichergeräte; Magnetplatten wie interne Festplatten oder auswechselbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Monitor, mit welchem dem Benutzer Informationen angezeigt werden, sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Nutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Darüber hinaus kann ein Computer über das Senden von Dokumenten an und das Empfangen von Dokumenten von einer Einrichtung, die vom Benutzer verwendet wird, mit einem Benutzer interagieren; beispielsweise über das Senden von Webpages an einen Webbrowser auf dem Clientgerät des Benutzers als Antwort auf die vom Webbrowser empfangenen Aufforderungen.
  • Ausführungsformen der in dieser Spezifikation betrachteten Gegenstands können in ein Computersystem implementiert werden, das eine Backend-Komponente (z. B. einen Datenserver), oder eine Middleware-Komponente (z. B. einen Anwendungsserver), oder eine Frontend-Komponente (z. B. einen Client-Computer mit graphischem Benutzerinterface oder Webbrowser) umfasst, worüber der Benutzer mit einer Implementierung der in dieser Spezifikation betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein (z. B. über ein Kommunikationsnetzwerk). So beinhalten beispielsweise Kommunikationsnetzwerke ein lokales Netzwerk („LAN”), ein Fernnetz („WAN”), z. B. das Internet.
  • Das Computersystem kann Clients und Server umfassen. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung zwischen Client und Server entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computern laufen und die eine Client-Server-Beziehung zueinander haben.
  • Zwar enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
  • Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anforderung verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Tätigkeiten ausgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemmodule und -komponenten in den oben beschriebenen Ausführungsformen nicht als in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
  • Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. Die in den Ansprüchen ausgeführten Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden und dennoch gewünschte Ergebnisse erzielen. Die in den beigefügten Figuren dargestellten Verfahren erfordern beispielsweise nicht unbedingt die gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.

Claims (10)

  1. Eine Schaltung zum Durchführen neuronaler Netzwerkberechnungen für ein neuronales Netzwerk mit einer Vielzahl von Schichten, wobei die Schaltung umfasst: ein systolisches Array, das eine Vielzahl von Zellen umfasst; eine Gewichtsabrufeinheit, die so konfiguriert ist, dass für jede der Vielzahl von neuronalen Netzwerkebenen folgende Aufgaben erledigt werden: das Senden für die neuronale Netzwerkebene einer Vielzahl von Gewichtseingaben an Zellen entlang einer ersten Dimension des systolischen Arrays; und eine Vielzahl von Gewichtssequenzereinheiten, wobei jede Gewichtssequenzereinheit mit einer bestimmten Zelle entlang der ersten Dimension des systolischen Arrays verbunden ist und die Vielzahl von Gewichtssequenzereinheiten für jede der Vielzahl von neuronalen Netzwerkebenen so konfiguriert ist, dass folgende Aufgaben erledigt werden: das Verschieben für die neuronale Netzwerkebene der Vielzahl von Gewichtseingaben in Zellen entlang der zweiten Dimension des systolischen Arrays im Lauf einer Vielzahl von Taktzyklen, wobei jede Gewichtseingabe in einer entsprechenden Zelle entlang der zweiten Dimension gespeichert wird und jede Zelle so konfiguriert ist, dass sie unter Verwendung einer Multiplikationsschaltung ein Produkt aus einer Aktivierungseingabe und einer entsprechenden Gewichtseingabe berechnet.
  2. Schaltung nach Anspruch 1, des Weiteren umfassend: eine Wertsequenzereinheit, die so konfiguriert ist, dass sie für jede der Vielzahl von neuronalen Netzwerkebenen eine Vielzahl von Aktivierungseingaben an Zellen entlang der zweiten Dimension des systolischen Arrays für die neuronale Netzwerkebene sendet.
  3. Schaltung nach Anspruch 1 oder 2, wobei die erste Dimension des systolischen Arrays Zeilen des systolischen Arrays entspricht und die zweite Dimension des systolischen Arrays Spalten des systolischen Arrays entspricht.
  4. Schaltung nach beliebigen vorstehenden Ansprüchen, wobei jede Zelle so konfiguriert ist, dass sie ein Gewichtssteuerungssignal an eine benachbarte Zelle sendet, und wobei das Gewichtssteuerungssignal die Schaltung in der benachbarten Zelle dazu bringt, eine Gewichtseingabe für die benachbarte Zelle zu verschieben oder zu laden.
  5. Schaltung nach beliebigen Ansprüchen 1 bis 3, wobei jede Zelle umfasst: ein Gewichtspfadregister, das so konfiguriert ist, dass die in die Zelle verschobene Gewichtseingabe gespeichert wird; ein Gewichtsregister, das mit dem Gewichtspfadregister verbunden ist; ein Gewichtspfadregister, das so konfiguriert ist, dass es ermittelt, ob die Gewichtseingabe im Gewichtsregister gespeichert werden soll; ein Aktivierungsregister, das so konfiguriert ist, dass es eine Aktivierungseingabe speichert, und so konfiguriert ist, dass es die Aktivierungseingabe an ein anderes Aktivierungsregister in einer ersten benachbarten Zelle entlang der ersten Dimension sendet; die Multiplikationsschaltung, die mit dem Gewichtsregister und dem Aktivierungsregister gekoppelt ist, wobei die Multiplikationsschaltung so konfiguriert ist, dass sie ein Produkt aus der Gewichtseingabe und der Aktivierungseingabe ausgibt; und die Summierungsschaltung, die mit der Multiplikationsschaltung gekoppelt und so konfiguriert ist, dass sie das Produkt und eine erste Teilsumme von einer zweiten benachbarten Zelle entlang der zweiten Dimension empfängt, wobei die Summierungsschaltung so konfiguriert ist, dass sie eine zweite Teilsumme des Produkts und die erste Teilsumme ausgibt; und ein Teilsummenregister, das mit der Summierungsschaltung gekoppelt und so konfiguriert ist, dass es die zweite Teilsumme speichert, und so konfiguriert ist, dass es die zweite Teilsumme an eine andere Summierungsschaltung in einer dritten benachbarten Zelle entlang der zweiten Dimension sendet.
  6. Schaltung nach Anspruch 5, wobei jede Gewichtssequenzereinheit umfasst: einen Anhaltezähler, der dem Gewichtssteuerungsregister in der entsprechenden Zelle entspricht, die mit der Gewichtssequenzereinheit verbunden ist; und eine Dekrementschaltung, die so konfiguriert ist, dass sie eine Eingabe für die Gewichtssequenzereinheit dekrementiert, um eine dekrementierte Ausgabe zu erzeugen und diese dekrementierte Ausgabe an den Anhaltezähler zu senden.
  7. Schaltung nach Anspruch 6, wobei Werte in jedem Anhaltezähler identisch sind und jede Gewichtssequenzereinheit zum Laden einer entsprechenden Gewichtseingabe in die entsprechende bestimmte Zelle des systolischen Arrays konfiguriert ist, wobei das Laden das Senden der Gewichtseingabe an die Multiplikationsschaltung umfasst.
  8. Schaltung nach Anspruch 6, wobei sich Werte in den einzelnen Anhaltezählern unterscheiden und jede Gewichtssequenzereinheit so konfiguriert ist, dass sie eine entsprechende Gewichtseingabe in eine benachbarte Gewichtssequenzereinheit entlang der zweiten Dimension verschiebt.
  9. Schaltung nach Anspruch 6, wobei Werte in jedem Anhaltezähler einen vorgegebenen Wert erreichen, um die Vielzahl von Gewichtssequenzereinheiten dazu zu bringen, das Verschieben der Vielzahl von Gewichtseingaben entlang der zweiten Dimension anzuhalten.
  10. Schaltung nach einem beliebigen vorstehenden Anspruch, wobei das systolische Array so konfiguriert ist, dass es für jede der Vielzahl von neuronalen Netzwerkebenen aus jedem Produkt eine akkumulierte Ausgabe für die neuronale Netzwerkebene erzeugt.
DE202016107439.8U 2015-05-21 2016-04-29 Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor Active DE202016107439U1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562164981P 2015-05-21 2015-05-21
US62/164,981 2015-05-21
US14/844,670 US10049322B2 (en) 2015-05-21 2015-09-03 Prefetching weights for use in a neural network processor
US14/844,670 2015-09-03

Publications (1)

Publication Number Publication Date
DE202016107439U1 true DE202016107439U1 (de) 2017-01-16

Family

ID=56081550

Family Applications (2)

Application Number Title Priority Date Filing Date
DE112016002298.0T Ceased DE112016002298T5 (de) 2015-05-21 2016-04-29 Vorabruf von gewichten zur verwendung in einem neuronalen netzwerkprozessor
DE202016107439.8U Active DE202016107439U1 (de) 2015-05-21 2016-04-29 Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE112016002298.0T Ceased DE112016002298T5 (de) 2015-05-21 2016-04-29 Vorabruf von gewichten zur verwendung in einem neuronalen netzwerkprozessor

Country Status (11)

Country Link
US (6) US10049322B2 (de)
EP (2) EP3968232A1 (de)
JP (5) JP6689878B2 (de)
KR (3) KR102641283B1 (de)
CN (2) CN112465132A (de)
DE (2) DE112016002298T5 (de)
DK (1) DK3298546T3 (de)
GB (2) GB2553052B (de)
HK (1) HK1245462A1 (de)
TW (1) TWI636368B (de)
WO (1) WO2016186810A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019119744B4 (de) 2018-07-24 2024-12-24 Sandisk Technologies Llc Konfigurierbares präzises neuronales netz mit differentieller binärer, nichtflüchtiger speicherzellenstruktur

Families Citing this family (136)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10846591B2 (en) * 2015-12-29 2020-11-24 Synopsys, Inc. Configurable and programmable multi-core architecture with a specialized instruction set for embedded application based on neural networks
US10360496B2 (en) * 2016-04-01 2019-07-23 Intel Corporation Apparatus and method for a digital neuromorphic processor
KR20180034853A (ko) * 2016-09-28 2018-04-05 에스케이하이닉스 주식회사 합성곱 신경망의 연산 장치 및 방법
IE87469B1 (en) * 2016-10-06 2024-01-03 Google Llc Image processing neural networks with separable convolutional layers
US10521488B1 (en) 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
EP3563304B1 (de) * 2016-12-30 2022-03-09 Intel Corporation Hardware für tiefenlernen
US10146768B2 (en) * 2017-01-25 2018-12-04 Google Llc Automatic suggested responses to images received in messages using language model
JP6823495B2 (ja) * 2017-02-27 2021-02-03 株式会社日立製作所 情報処理装置および画像認識装置
US10896367B2 (en) * 2017-03-07 2021-01-19 Google Llc Depth concatenation using a matrix computation unit
US10909447B2 (en) 2017-03-09 2021-02-02 Google Llc Transposing neural network matrices in hardware
US10241972B2 (en) * 2017-03-16 2019-03-26 International Business Machines Corporation Matrix multiplication on a systolic array
KR102414583B1 (ko) * 2017-03-23 2022-06-29 삼성전자주식회사 머신 러닝을 수행하는 전자 장치 및 머신 러닝 수행 방법
US10546234B2 (en) 2017-04-03 2020-01-28 Gyrfalcon Technology Inc. Buffer memory architecture for a CNN based processing unit and creation methods thereof
US10331999B2 (en) * 2017-04-03 2019-06-25 Gyrfalcon Technology Inc. Memory subsystem in CNN based digital IC for artificial intelligence
US10552733B2 (en) 2017-04-03 2020-02-04 Gyrfalcon Technology Inc. Memory subsystem in CNN based digital IC for artificial intelligence
US10534996B2 (en) 2017-04-03 2020-01-14 Gyrfalcon Technology Inc. Memory subsystem in CNN based digital IC for artificial intelligence
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10824938B2 (en) 2017-04-24 2020-11-03 Intel Corporation Specialized fixed function hardware for efficient convolution
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
TWI685757B (zh) * 2017-05-17 2020-02-21 美商谷歌有限責任公司 低延遲矩陣乘法單元
US10019668B1 (en) * 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
CN109284827A (zh) 2017-07-19 2019-01-29 阿里巴巴集团控股有限公司 神经网络计算方法、设备、处理器及计算机可读存储介质
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
US11868804B1 (en) 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
WO2019057281A1 (en) * 2017-09-21 2019-03-28 Huawei Technologies Co., Ltd. MULTI-WIRE SYSTOLIC NETWORK
CN107832839B (zh) * 2017-10-31 2020-02-14 南京地平线机器人技术有限公司 执行卷积神经网络中的运算的方法和装置
GB2568086B (en) 2017-11-03 2020-05-27 Imagination Tech Ltd Hardware implementation of convolution layer of deep neutral network
CN110059798B (zh) 2017-11-06 2024-05-03 畅想科技有限公司 开发神经网络中的稀疏性
KR102424962B1 (ko) 2017-11-15 2022-07-25 삼성전자주식회사 병렬 연산 처리를 수행하는 메모리 장치 및 이를 포함하는 메모리 모듈
CN111465943B (zh) * 2017-12-12 2023-10-31 亚马逊技术股份有限公司 一种集成电路和用于神经网络处理的方法
US10803379B2 (en) 2017-12-12 2020-10-13 Amazon Technologies, Inc. Multi-memory on-chip computational network
CN107909148B (zh) * 2017-12-12 2020-10-20 南京地平线机器人技术有限公司 用于执行卷积神经网络中的卷积运算的装置
CN111126588B (zh) * 2017-12-14 2023-05-23 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
US11119677B2 (en) 2017-12-15 2021-09-14 Samsung Electronics Co., Ltd. HBM based memory lookup engine for deep learning accelerator
KR102637735B1 (ko) * 2018-01-09 2024-02-19 삼성전자주식회사 근사 곱셈기를 구비하는 뉴럴 네트워크 처리 장치 및 이를 포함하는 시스템온 칩
WO2019136764A1 (zh) * 2018-01-15 2019-07-18 深圳鲲云信息科技有限公司 卷积器及其所应用的人工智能处理装置
CN108364063B (zh) * 2018-01-24 2019-09-27 福州瑞芯微电子股份有限公司 一种基于权值分配资源的神经网络训练方法和装置
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
CN108416434B (zh) * 2018-02-07 2021-06-04 复旦大学 针对神经网络的卷积层与全连接层进行加速的电路结构
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
US11164074B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Multi-core systolic processor system for neural network processing
DE102018202095A1 (de) * 2018-02-12 2019-08-14 Robert Bosch Gmbh Verfahren und Vorrichtung zum Überprüfen einer Neuronenfunktion in einem neuronalen Netzwerk
US11468302B2 (en) 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
CN118014031A (zh) * 2018-03-22 2024-05-10 亚马逊技术股份有限公司 针对多个输入数据集的处理
US11475306B2 (en) 2018-03-22 2022-10-18 Amazon Technologies, Inc. Processing for multiple input data sets
CN110210610B (zh) * 2018-03-27 2023-06-20 腾讯科技(深圳)有限公司 卷积计算加速器、卷积计算方法及卷积计算设备
US10621489B2 (en) * 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US11188814B2 (en) * 2018-04-05 2021-11-30 Arm Limited Systolic convolutional neural network
US20190332924A1 (en) * 2018-04-27 2019-10-31 International Business Machines Corporation Central scheduler and instruction dispatcher for a neural inference processor
US11537838B2 (en) 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
US11823376B2 (en) 2018-05-16 2023-11-21 Benevis Informatics, Llc Systems and methods for review of computer-aided detection of pathology in images
CN113159304B (zh) * 2018-06-05 2024-11-19 光子智能私营科技有限公司 光电计算装置
US12099912B2 (en) 2018-06-22 2024-09-24 Samsung Electronics Co., Ltd. Neural processor
US10839894B2 (en) * 2018-06-29 2020-11-17 Taiwan Semiconductor Manufacturing Company Ltd. Memory computation circuit and method
US20200019836A1 (en) * 2018-07-12 2020-01-16 International Business Machines Corporation Hierarchical parallelism in a network of distributed neural network cores
US10643119B2 (en) * 2018-07-24 2020-05-05 Sandisk Technologies Llc Differential non-volatile memory cell for artificial neural network
CN110751276A (zh) * 2018-07-24 2020-02-04 闪迪技术有限公司 在nand存储器阵列中实现具有三值输入和二值权重的神经网络
US11954573B2 (en) 2018-09-06 2024-04-09 Black Sesame Technologies Inc. Convolutional neural network using adaptive 3D array
KR20200029661A (ko) * 2018-09-07 2020-03-19 삼성전자주식회사 뉴럴 프로세싱 시스템
CN109543816B (zh) * 2018-09-20 2022-12-06 中国科学院计算技术研究所 一种基于权重捏合的卷积神经网络计算方法和系统
US10817042B2 (en) * 2018-09-27 2020-10-27 Intel Corporation Power savings for neural network architecture with zero activations during inference
US11443185B2 (en) 2018-10-11 2022-09-13 Powerchip Semiconductor Manufacturing Corporation Memory chip capable of performing artificial intelligence operation and method thereof
US11636325B2 (en) 2018-10-24 2023-04-25 Macronix International Co., Ltd. In-memory data pooling for machine learning
KR102637733B1 (ko) 2018-10-31 2024-02-19 삼성전자주식회사 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
JP7315317B2 (ja) * 2018-11-09 2023-07-26 株式会社Preferred Networks プロセッサおよびプロセッサのデータ転送方法
US11537687B2 (en) 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices
US11562229B2 (en) * 2018-11-30 2023-01-24 Macronix International Co., Ltd. Convolution accelerator using in-memory computation
US11494645B2 (en) 2018-12-06 2022-11-08 Egis Technology Inc. Convolutional neural network processor and data processing method thereof
TWI766193B (zh) * 2018-12-06 2022-06-01 神盾股份有限公司 卷積神經網路處理器及其資料處理方法
US11100193B2 (en) 2018-12-07 2021-08-24 Samsung Electronics Co., Ltd. Dataflow accelerator architecture for general matrix-matrix multiplication and tensor computation in deep learning
US11934480B2 (en) 2018-12-18 2024-03-19 Macronix International Co., Ltd. NAND block architecture for in-memory multiply-and-accumulate operations
US11734556B2 (en) 2019-01-14 2023-08-22 Lightelligence PTE. Ltd. Optoelectronic computing systems
CN109902064A (zh) * 2019-02-01 2019-06-18 京微齐力(北京)科技有限公司 一种二维脉动阵列的芯片电路
CN109919321A (zh) * 2019-02-01 2019-06-21 京微齐力(北京)科技有限公司 单元具有本地累加功能的人工智能模块及系统芯片
CN109933371A (zh) * 2019-02-01 2019-06-25 京微齐力(北京)科技有限公司 其单元可访问本地存储器的人工智能模块和系统芯片
CN109857024B (zh) * 2019-02-01 2021-11-12 京微齐力(北京)科技有限公司 人工智能模块的单元性能测试方法和系统芯片
US20200249996A1 (en) * 2019-02-04 2020-08-06 Pathtronic Inc. Systems and methods for artificial intelligence hardware processing
US11507662B2 (en) 2019-02-04 2022-11-22 Sateesh Kumar Addepalli Systems and methods of security for trusted artificial intelligence hardware processing
US11544525B2 (en) 2019-02-04 2023-01-03 Sateesh Kumar Addepalli Systems and methods for artificial intelligence with a flexible hardware processing framework
US11150720B2 (en) 2019-02-04 2021-10-19 Sateesh Kumar Addepalli Systems and methods for power management of hardware utilizing virtual multilane architecture
US11423454B2 (en) 2019-02-15 2022-08-23 Sateesh Kumar Addepalli Real-time customizable AI model collaboration and marketplace service over a trusted AI model network
JP7297468B2 (ja) 2019-02-28 2023-06-26 キヤノン株式会社 データ処理装置及びその方法
KR20200107295A (ko) * 2019-03-07 2020-09-16 에스케이하이닉스 주식회사 시스톨릭 어레이 및 프로세싱 시스템
BR112021016106A2 (pt) 2019-03-15 2021-11-09 Intel Corp Processador gráfico de propósito geral, método e sistema de processamento de dados
EP4130988A1 (de) 2019-03-15 2023-02-08 INTEL Corporation Systeme und verfahren zur cache-optimierung
US20220197800A1 (en) 2019-03-15 2022-06-23 Intel Corporation System and methods to provide hierarchical open sectoring and variable sector size for cache operations
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US12182577B2 (en) 2019-05-01 2024-12-31 Samsung Electronics Co., Ltd. Neural-processing unit tile for shuffling queued nibbles for multiplication with non-zero weight nibbles
CN111985628B (zh) * 2019-05-24 2024-04-30 澜起科技股份有限公司 计算装置及包括所述计算装置的神经网络处理器
KR102351087B1 (ko) 2019-06-04 2022-01-14 주식회사 딥엑스 인공신경망의 데이터 로컬리티 기반의 데이터 캐슁을 이용하여 고속의 인공신경망 오퍼레이션을 지원하는 데이터 관리 장치
US11233049B2 (en) 2019-06-14 2022-01-25 Macronix International Co., Ltd. Neuromorphic computing device
US11514300B2 (en) 2019-06-14 2022-11-29 Macronix International Co., Ltd. Resistor circuit, artificial intelligence chip and method for manufacturing the same
TWI698810B (zh) * 2019-06-14 2020-07-11 旺宏電子股份有限公司 類神經計算裝置
CN110210615B (zh) * 2019-07-08 2024-05-28 中昊芯英(杭州)科技有限公司 一种用于执行神经网络计算的脉动阵列系统
CN110543934B (zh) * 2019-08-14 2022-02-01 北京航空航天大学 一种用于卷积神经网络的脉动阵列计算结构及方法
US20220318638A1 (en) * 2019-08-22 2022-10-06 Google Llc Propagation latency reduction
US11501145B1 (en) * 2019-09-17 2022-11-15 Amazon Technologies, Inc. Memory operation for systolic array
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
CN114930351A (zh) * 2019-11-26 2022-08-19 格罗克公司 使用仅单个侧从多维阵列加载操作数并输出结果
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
KR20210065605A (ko) 2019-11-27 2021-06-04 한국전자통신연구원 선인출 정보를 이용한 메모리 제어 방법 및 장치
US12112141B2 (en) 2019-12-12 2024-10-08 Samsung Electronics Co., Ltd. Accelerating 2D convolutional layer mapping on a dot product architecture
US11586889B1 (en) * 2019-12-13 2023-02-21 Amazon Technologies, Inc. Sensory perception accelerator
US11669733B2 (en) 2019-12-23 2023-06-06 Marvell Asia Pte. Ltd. Processing unit and method for computing a convolution using a hardware-implemented spiral algorithm
TWI733334B (zh) * 2020-02-15 2021-07-11 財團法人工業技術研究院 卷積神經網路運算裝置及其運算的方法
KR20210105053A (ko) 2020-02-18 2021-08-26 에스케이하이닉스 주식회사 연산 회로 및 그것을 포함하는 딥 러닝 시스템
US12073310B2 (en) * 2020-04-01 2024-08-27 Microsoft Technology Licensing, Llc Deep neural network accelerator with independent datapaths for simultaneous processing of different classes of operations
CN113496117B (zh) * 2020-04-02 2024-03-12 北京庖丁科技有限公司 交叉检查表格中单元格数字内容的方法和电子设备
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
JP7537213B2 (ja) 2020-09-30 2024-08-21 セイコーエプソン株式会社 情報処理装置、演算方法、及び、コンピュータープログラム
WO2021246818A1 (ko) * 2020-06-05 2021-12-09 주식회사 퓨리오사에이아이 뉴럴 네트워크 프로세싱 방법 및 이를 위한 장치
US11422773B1 (en) 2020-06-29 2022-08-23 Amazon Technologies, Inc. Multiple busses within a systolic array processing element
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
CN111737193B (zh) * 2020-08-03 2020-12-08 深圳鲲云信息科技有限公司 数据存储方法、装置、设备和存储介质
US12008469B1 (en) 2020-09-01 2024-06-11 Amazon Technologies, Inc. Acceleration of neural networks with stacks of convolutional layers
US12205013B1 (en) 2020-09-01 2025-01-21 Amazon Technologies, Inc. Accelerated convolution of neural networks
CN112580787B (zh) * 2020-12-25 2023-11-17 北京百度网讯科技有限公司 神经网络加速器的数据处理方法、装置、设备及存储介质
US11656988B2 (en) * 2021-04-16 2023-05-23 Macronix International Co., Ltd. Memory device and operation method thereof
TWI847030B (zh) 2021-05-05 2024-07-01 創鑫智慧股份有限公司 矩陣乘法器及其操作方法
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
US20230004523A1 (en) * 2021-06-30 2023-01-05 Amazon Technologies, Inc. Systolic array with input reduction to multiple reduced inputs
US12197890B2 (en) 2021-07-16 2025-01-14 Google Llc Multiplier and adder in systolic array
KR102717245B1 (ko) * 2023-06-23 2024-10-15 오픈엣지테크놀로지 주식회사 신경망 액티베이션의 채널별 크기를 증가시키고 채널의 총 개수를 감소시키는 액티베이션 변환방법, 및 이를 위한 하드웨어 가속장치와 컴퓨팅 장치

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU8698582A (en) 1981-08-14 1983-02-17 Rca Corp. Digital air filter
JPS6028345A (ja) 1983-07-26 1985-02-13 Fujitsu Ltd 並列計算機における通信方式
JPS63293668A (ja) 1987-05-27 1988-11-30 Matsushita Electric Ind Co Ltd 並列計算機の通信方法
US5014235A (en) 1987-12-15 1991-05-07 Steven G. Morton Convolution memory
US5136717A (en) 1988-11-23 1992-08-04 Flavors Technology Inc. Realtime systolic, multiple-instruction, single-data parallel computer system
US5138695A (en) 1989-10-10 1992-08-11 Hnc, Inc. Systolic array image processing system
US5146543A (en) 1990-05-22 1992-09-08 International Business Machines Corp. Scalable neural array processor
US5337395A (en) 1991-04-08 1994-08-09 International Business Machines Corporation SPIN: a sequential pipeline neurocomputer
US5274832A (en) * 1990-10-04 1993-12-28 National Semiconductor Corporation Systolic array for multidimensional matrix computations
JP2760170B2 (ja) 1990-11-29 1998-05-28 松下電器産業株式会社 学習機械
JP2749725B2 (ja) 1991-03-18 1998-05-13 富士通株式会社 並列計算機の通信方法
JPH04290155A (ja) 1991-03-19 1992-10-14 Fujitsu Ltd 並列データ処理方式
US5903454A (en) 1991-12-23 1999-05-11 Hoffberg; Linda Irene Human-factored interface corporating adaptive pattern recognition based controller apparatus
JPH05346914A (ja) 1992-06-16 1993-12-27 Matsushita Electron Corp ニューロプロセッサ
US5465041A (en) 1993-09-17 1995-11-07 Penberthy, Inc. Bipolar tracking current source/sink with ground clamp
JPH0823874B2 (ja) * 1993-11-18 1996-03-06 株式会社ジーデイーエス シストリックアレイプロセサー
DE4414821A1 (de) 1994-04-28 1995-11-02 Vorwerk Co Interholding Küchenmaschine mit einem Rührgefäß und einem Antrieb für ein Rührwerk in dem Rührgefäß
US5583964A (en) * 1994-05-02 1996-12-10 Motorola, Inc. Computer utilizing neural network and method of using same
US5799134A (en) 1995-03-13 1998-08-25 Industrial Technology Research Institute One dimensional systolic array architecture for neural network
US5812993A (en) 1996-03-07 1998-09-22 Technion Research And Development Foundation Ltd. Digital hardware architecture for realizing neural network
US6038337A (en) 1996-03-29 2000-03-14 Nec Research Institute, Inc. Method and apparatus for object recognition
KR100189195B1 (ko) 1996-04-04 1999-06-01 박래홍 단일화된 시스톨릭어레이 구조에 의한 2차원 dct/dst/dht의 수행장치
JPH11177399A (ja) * 1997-12-15 1999-07-02 Mitsubishi Electric Corp クロック遅延回路およびこれを用いた発振回路、位相同期回路、クロック生成回路
GB9902115D0 (en) 1999-02-01 1999-03-24 Axeon Limited Neural networks
KR100450750B1 (ko) * 2002-04-17 2004-10-01 한국전자통신연구원 향상된 선형 궤환 시프트 레지스터 구조의 유한체 승산기
JP4314017B2 (ja) 2002-11-06 2009-08-12 キヤノン株式会社 階層処理装置
US7197721B2 (en) * 2002-12-17 2007-03-27 Intel Corporation Weight compression/decompression system
FR2853424B1 (fr) * 2003-04-04 2005-10-21 Atmel Corp Architecture de multiplicateurs polynomial et naturel combines
US7245767B2 (en) 2003-08-21 2007-07-17 Hewlett-Packard Development Company, L.P. Method and apparatus for object identification, classification or verification
US7634137B2 (en) 2005-10-14 2009-12-15 Microsoft Corporation Unfolded convolution for fast feature extraction
WO2008067676A1 (en) 2006-12-08 2008-06-12 Medhat Moussa Architecture, system and method for artificial neural network implementation
US8184696B1 (en) 2007-09-11 2012-05-22 Xilinx, Inc. Method and apparatus for an adaptive systolic array structure
TW200923803A (en) 2007-11-26 2009-06-01 Univ Nat Taipei Technology Hardware neural network learning and recall architecture
TWI417798B (zh) 2008-11-21 2013-12-01 Nat Taipei University Oftechnology High - speed reverse transfer neural network system with elastic structure and learning function
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US8442927B2 (en) 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
US9141386B2 (en) * 2010-09-24 2015-09-22 Intel Corporation Vector logical reduction operation implemented using swizzling on a semiconductor chip
TWI525558B (zh) 2011-01-17 2016-03-11 Univ Nat Taipei Technology Resilient high - speed hardware reverse transfer and feedback type neural network system
US8924455B1 (en) 2011-02-25 2014-12-30 Xilinx, Inc. Multiplication of matrices using systolic arrays
US9111222B2 (en) * 2011-11-09 2015-08-18 Qualcomm Incorporated Method and apparatus for switching the binary state of a location in memory in a probabilistic manner to store synaptic weights of a neural network
TW201331855A (zh) 2012-01-19 2013-08-01 Univ Nat Taipei Technology 具自由回饋節點的高速硬體倒傳遞及回饋型類神經網路
US9477925B2 (en) 2012-11-20 2016-10-25 Microsoft Technology Licensing, Llc Deep neural networks training for speech and pattern recognition
US9811775B2 (en) 2012-12-24 2017-11-07 Google Inc. Parallelizing neural networks during training
US9190053B2 (en) 2013-03-25 2015-11-17 The Governing Council Of The Univeristy Of Toronto System and method for applying a convolutional neural network to speech recognition
CN104035751B (zh) 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
EP3064130A1 (de) 2015-03-02 2016-09-07 MindMaze SA Hirnaktivitätsmessung und Rückkopplungssystem
US20160267111A1 (en) 2015-03-11 2016-09-15 Microsoft Technology Licensing, Llc Two-stage vector reduction using two-dimensional and one-dimensional systolic arrays

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019119744B4 (de) 2018-07-24 2024-12-24 Sandisk Technologies Llc Konfigurierbares präzises neuronales netz mit differentieller binärer, nichtflüchtiger speicherzellenstruktur

Also Published As

Publication number Publication date
JP7383757B2 (ja) 2023-11-20
US20210192328A1 (en) 2021-06-24
JP6953577B2 (ja) 2021-10-27
HK1245462A1 (zh) 2018-08-24
JP2020126662A (ja) 2020-08-20
US20190065940A1 (en) 2019-02-28
DE112016002298T5 (de) 2018-02-15
JP6689878B2 (ja) 2020-04-28
KR20170126999A (ko) 2017-11-20
US11853865B2 (en) 2023-12-26
KR20200045006A (ko) 2020-04-29
CN112465132A (zh) 2021-03-09
KR102641283B1 (ko) 2024-02-27
GB2597611A (en) 2022-02-02
US20200218966A1 (en) 2020-07-09
GB2597611B (en) 2022-09-21
GB201715437D0 (en) 2017-11-08
GB2553052A (en) 2018-02-21
JP2022115983A (ja) 2022-08-09
CN107454966A (zh) 2017-12-08
EP3298546A1 (de) 2018-03-28
GB2553052B (en) 2021-10-13
JP2022008636A (ja) 2022-01-13
US20240062055A1 (en) 2024-02-22
US20170103314A1 (en) 2017-04-13
DK3298546T3 (da) 2022-02-07
EP3298546B1 (de) 2021-12-08
KR20220092642A (ko) 2022-07-01
US10878316B2 (en) 2020-12-29
US10049322B2 (en) 2018-08-14
JP2018521374A (ja) 2018-08-02
US20160342892A1 (en) 2016-11-24
CN107454966B (zh) 2020-12-04
US9805304B2 (en) 2017-10-31
WO2016186810A1 (en) 2016-11-24
KR102413522B1 (ko) 2022-06-24
EP3968232A1 (de) 2022-03-16
TWI636368B (zh) 2018-09-21
JP2024016196A (ja) 2024-02-06
JP7071577B2 (ja) 2022-05-19
US11281966B2 (en) 2022-03-22
GB202112401D0 (en) 2021-10-13
KR102105128B1 (ko) 2020-04-27
KR20240029112A (ko) 2024-03-05
TW201706872A (zh) 2017-02-16

Similar Documents

Publication Publication Date Title
DE202016107439U1 (de) Vorabruf von Gewichten zur Verwendung in einem neuralen Netzwerkprozessor
DE112016002292T5 (de) Stapel-verarbeitung in einem neuronalen netzwerkprozessor
DE202016107436U1 (de) Neuronaler Netzwerkprozessor
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE112016002296T5 (de) Vektor-recheneinheit in einem neuronalen netzwerkprozessor
DE202017105729U1 (de) Kerndurchschreiten in Hardware
DE102018105457A1 (de) Transponieren von Matrizen neuronaler Netze in Hardware
DE102017121257A1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE102020101187A1 (de) Winograd-transformationsfaltungsoperation für neuronale netze
DE102018111905A1 (de) Domänenspezifische Sprache zur Erzeugung rekurrenter neuronaler Netzarchitekturen
DE102020118004A1 (de) Verfahren und vorrichtungen zum kachelförmigen durchlaufen eines tensors für faltungsoperationen
DE102018103598A1 (de) Permutieren in einem Matrix-Vektor-Prozessor
DE112017000855B4 (de) Energiesparender zeitlich gemultiplexter neurosynaptischer Kern zum Implementieren neuronaler Netze
DE102017125049A1 (de) Transponieren in einem Matrix-Vektor-Prozessor
DE112019003529T5 (de) Datendarstellung für dynamische Genauigkeit in Kernen neuronaler Netze
DE112019000336T5 (de) Massiv parallele neuronale inferenz-datenverarbeitungselemente
DE102018105198A1 (de) Tiefenverkettung unter Verwendung einer Matrixberechnungseinheit
DE202017105403U1 (de) Befehlssatzarchitektur für neuronale Netze
DE112017007826T5 (de) Simulieren von Quantenschaltungen
DE102018100239A1 (de) Schleifen- und Bibliotheksfusion
DE102017113232A1 (de) Tensorverarbeitung unter verwendung eines formats mit geringer genauigkeit
DE102019100292A1 (de) Neuronalnetz-Verarbeitungseinheit mit Approximationsmultiplizierer und System-on-Chip mit einer solchen Einheit
EP3590078B1 (de) Neuronalnetzsystem
DE102019007340A1 (de) Technik zum Einrichten und Betreiben eines neuronalen Netzwerks

Legal Events

Date Code Title Description
R207 Utility model specification
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: MAIKOWSKI & NINNEMANN PATENTANWAELTE PARTNERSC, DE

R150 Utility model maintained after payment of first maintenance fee after three years
R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years