DE102018119513A1 - Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden - Google Patents

Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden Download PDF

Info

Publication number
DE102018119513A1
DE102018119513A1 DE102018119513.3A DE102018119513A DE102018119513A1 DE 102018119513 A1 DE102018119513 A1 DE 102018119513A1 DE 102018119513 A DE102018119513 A DE 102018119513A DE 102018119513 A1 DE102018119513 A1 DE 102018119513A1
Authority
DE
Germany
Prior art keywords
memory bank
parameters
memory
tile
neural network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102018119513.3A
Other languages
English (en)
Inventor
Olivier Temam
Harshit Khaitan
Ravi Narayanaswami
Dong Hyuk Woo
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 DE102018119513A1 publication Critical patent/DE102018119513A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Multi Processors (AREA)

Abstract

Eine Ausführungsform eines Beschleunigers umfasst eine Recheneinheit; eine erste Arbeitsspeicherbank zum Speichern von Eingangsaktivierungen und eine zweite Arbeitsspeicherbank zum Speichern von Parametern, die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, eine ausreichende Menge der Neuronalnetzparameter in der Recheneinheit zu speichern, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau zu ermöglichen. Die Recheneinheit umfasst mindestens eine Zelle mit mindestens einem Multiplikations-Akkumulations-Operator („MAC“-Operator), der Parameter von der zweiten Arbeitsspeicherbank empfängt und Berechnungen durchführt. Die Recheneinheit umfasst ferner eine erste Durchlaufeinheit, die ein Steuersignal zur ersten Arbeitsspeicherbank liefert, um zu bewirken, dass eine Eingangsaktivierung zu einem Datenbus geliefert wird, der für den MAC-Operator zugänglich ist. Die Recheneinheit führt Berechnungen durch, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen durch den MAC-Operator durchgeführt werden.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht die Priorität der US-Patentanmeldung Nr. 62/544 171 über Neural Network Accelerator with Parameters Resident on Chip, die am 11. August 2017 eingereicht wurde und die hier durch Bezugnahme vollständig mit aufgenommen ist.
  • HINTERGRUND
  • Diese Beschreibung bezieht sich im Allgemeinen auf eine Rechenkachel eines Neuronalnetzes („NN“) für die Berechnung von Schichten eines tiefen Neuronalnetzes („DNN“).
  • ZUSAMMENFASSUNG
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Beschreibung beschriebenen Gegenstandes im Speichern der Parameter eines Neuronalnetzes auf einem Beschleuniger verkörpert sein. Neuronalnetze weichen von den typischen Rechenarbeitslasten insofern ab, als ihr Arbeitsbereich, d. h. die Gesamtmenge an Speicher, die für die ganze Berechnung erforderlich ist, tatsächlich begrenzt ist. Dieser Arbeitsbereich entspricht weitgehend der Anzahl von Parametern, typischerweise von einigen Hunderttausend bis einigen Milliarden. Diese Speichermenge ist mit existierenden Hardware-Speichertechnologien kompatibel.
  • Trotz dieser Tatsachen, enthalten aktuelle Beschleuniger einen lokalen Speicher für Parameter, den die Parameter durchlaufen, d. h. die Parameter befinden sich nicht dauerhaft auf dem Chip. Vielmehr strömen Parameter von einem externen Arbeitsspeicher für jede neue Inferenz.
  • Die Bandbreite des externen Arbeitsspeichers ist folglich eine Schlüsselbegrenzung aller Neuronalnetzbeschleuniger („NN“-Beschleuniger). In dieser Beschreibung beschriebene Ausführungsformen ersetzen den transitorischen lokalen Speicher für Parameter durch einen permanenten Speicher für Parameter, d. h. Ausführungsformen halten alle Parameter des NN im Beschleuniger resident und streamen sie nicht mehr vom externen Arbeitsspeicher.
  • Die Vorteile des Speicherns der Parameter auf dem Chip umfassen: Überwinden von Leistungsfähigkeitsbegrenzungen von NN-Beschleunigern; drastisches Erleichtern einer Erhöhung der Anzahl von Multiplikations-Akkumulations-Operatoren („MAC“-Operatoren), da Leistungsfähigkeitsbegrenzungen überwunden wurden; und Bereitstellen von Neuronalnetzbeschleunigern mit niedrigerer Leistung, da Zugriffe auf den externen Arbeitsspeicher typischerweise mindestens eine Größenordnung mehr Energie erfordern als Zugriffe auf den lokalen Arbeitsspeicher.
  • In bestimmten Ausführungsformen umfasst der Beschleuniger eine Recheneinheit. Die Recheneinheit umfasst: eine erste Arbeitsspeicherbank zum Speichern von Eingangsaktivierungen oder Ausgangsaktivierungen; eine zweite Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern, die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, eine ausreichende Menge der Neuronalnetzparameter auf der Recheneinheit zu speichern, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen; mindestens eine Zelle mit mindestens einem MAC-Operator, der Parameter von der zweiten Arbeitsspeicherbank empfängt und Berechnungen durchführt; eine erste Durchlaufeinheit in Datenkommunikation mit zumindest der ersten Arbeitsspeicherbank, wobei die erste Durchlaufeinheit dazu konfiguriert ist, ein Steuersignal zur ersten Arbeitsspeicherbank zu liefern, um zu bewirken, dass eine Eingangsaktivierung zu einem Datenbus geliefert wird, der für den MAC-Operator zugänglich ist; und wobei der Beschleuniger eine oder mehrere Berechnungen durchführt, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen durch den MAC-Operator durchgeführt werden und teilweise ein Multiplikationsoperation der Eingangsaktivierung, die vom Datenbus empfangen wird, und eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen. Wenn der Speicher für Parameter ausreicht, um alle Neuronalnetzparameter zu halten, wird die Leistungsfähigkeit des Beschleunigers nicht durch die Arbeitsspeicherbandbreite bestimmt. In diesem Fall ist es möglich, alle MACs mit Parametern in jedem Zyklus zu versorgen.
  • Ein anderer innovativer Aspekt des in dieser Beschreibung beschriebenen Gegenstandes kann in einem computerimplementierten Verfahren zum Beschleunigen von Tensorberechnungen verkörpert sein. Das computerimplementierte Verfahren umfasst: Senden einer ersten Eingangsaktivierung durch eine erste Arbeitsspeicherbank in Reaktion darauf, dass die erste Arbeitsspeicherbank ein Steuersignal empfängt, wobei die erste Eingangsaktivierung durch einen Datenbus übertragen wird; Empfangen von einem oder mehreren Parametern durch mindestens einen MAC-Operator von einer zweiten Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern, die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank eine ausreichende Menge der Neuronalnetzparameter auf der Recheneinheit speichert, um eine Latenz unter einem festgelegten Schwellenwert und einen Durchsatz über einem festgelegten Schwellenwert für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen; und Durchführen von einer oder mehreren Berechnungen durch den MAC-Operator, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen teilweise eine Multiplikationsoperation zumindest der ersten Eingangsaktivierung, auf die vom Datenbus zugegriffen wird, und mindestens eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen.
  • Ein anderer innovativer Aspekt des in dieser Beschreibung beschriebenen Gegenstandes kann in einem Verfahren zum Beschleunigen von Berechnungen verkörpert sein. Das Verfahren umfasst: vor der Ausführung Laden von Neuronalnetzgewichtsparametern in einen Neuronalnetzbeschleuniger; und während der Ausführung Verarbeiten von Eingaben in den Beschleuniger im Wesentlichen ohne Zugreifen auf Neuronalnetzgewichtsparameter außerhalb des Beschleunigers. Das Verfahren kann ferner umfassen: Laden von Neuronalnetzgewichtsparametern in mehrere eng verbundene Beschleunigerchips, wenn die Anzahl von Neuronalnetzgewichtsparametern zu groß ist, um auf einen einzelnen Beschleunigerchip zu passen; und Verarbeiten von Eingaben in die Beschleunigerchips im Wesentlichen ohne Zugreifen auf Neuronalnetzgewichtsparameter außerhalb der eng verbundenen Beschleunigerchips.
  • Der in dieser Beschreibung beschriebene Gegenstand kann in speziellen Ausführungsformen implementiert werden, um einen oder mehrere der folgenden Vorteile zu verwirklichen. Die Verwendung von Registern, um Arbeitsspeicheradressenwerte nachzuverfolgen, ermöglicht, dass ein Programm tief verschachtelte Schleifen mit einem Befehl iteriert. Ein Tensor, der von schmalen Arbeitsspeicher- und breiten Arbeitsspeichereinheiten in einer einzelnen Rechenkachel zugänglich ist, wird auf der Basis von Arbeitsspeicheradressenwerten durchlaufen, die von Registern abgerufen werden. Arbeitsspeicheradressenwerte entsprechen Elementen des Tensors. Tensorberechnungen finden in individuellen Rechenkacheln auf der Basis der Ausführung von tiefen Schleifenverschachtelungen statt. Berechnungen können über mehrere Kacheln verteilt werden. Die Recheneffizienz wird auf der Basis der Verteilung von Tensorberechnungen für ein mehrschichtiges Neuronalnetz über mehrere Rechenkacheln verbessert und beschleunigt. Tensoren können durchlaufen werden und Tensorberechnungen können mit einer verringerten Anzahl von Befehlen durchgeführt werden.
  • Die in dieser Beschreibung beschriebenen Ausführungsformen weisen eine Auswirkung auf den Neuronalnetzbeschleunigerbetrieb („NN“-Beschleunigerbetrieb) und die Neuronalnetzbeschleunigerkonstruktion auf. Die Ausführungsformen bearbeiten eine der merklichen Begrenzungen von Neuronalnetzbeschleunigerkonstruktionen, die Kombination von niedriger Latenz und hohem Durchsatz. Das Setzen der Parameter resident auf dem Chip verringert drastisch die Latenz in Anbetracht eines hohen Durchsatzes und eines gegebenen NN-Modells und einer gegebenen NN-Architektur. Der Beschleuniger benötigt keine hohe Arbeitsspeicherbandbreite und die Energie sinkt.
  • Das Vorliegen einer Kachelanordnung, wie in dieser Beschreibung beschrieben, schafft eine Kompilierungstyplokalität. Das Setzen von vollständig verbundenen Modellen neben den SRAM führt beispielsweise zu einer größeren internen Bandbreite gegenüber einem Cache-Modell. Die in dieser Beschreibung beschriebenen Ausführungsformen arbeiten schneller als herkömmliche Neuronalnetzbeschleuniger. Bestimmte Ausführungsformen weisen mehr Operatoren auf; um die Operatoren zu versorgen, benötigen die Beschleuniger mehr interne Bandbreite. Um diesen Bedarf anzugehen, verteilt die Architektur den Arbeitsspeicher und bringt die Parameter auf den Beschleuniger.
  • Der in dieser Beschreibung beschriebene Gegenstand kann auch in speziellen Ausführungsformen implementiert werden, um andere Vorteile zu verwirklichen. Unter Verwendung einer Arbeitsspeicherhierarchie, die einen schmalen Arbeitsspeicher mit niedriger Bandbreite mit einem breiten Arbeitsspeicher mit hoher Bandbreite koppelt, kann beispielsweise eine hohe Nutzung der MAC-Operatoren für DNN-Schichten von sehr unterschiedlichen Dimensionen und unterschiedlicher Lokalität erreicht werden. Der schmale Arbeitsspeicher mit niedriger Bandbreite kann Adressierungsflexibilität ermöglichen, um eine mehrdimensionale Anordnung in irgendeiner Reihenfolge zu durchlaufen.
  • Andere Implementierungen dieses und anderer Aspekte umfassen entsprechende Systeme, Einrichtungen und Computerprogramme, die dazu konfiguriert sind, die Handlungen der Verfahren durchzuführen, die auf Computerspeichervorrichtungen codiert sind. Ein System von einem oder mehreren Computern kann durch Software, Firmware, Hardware oder eine Kombination von ihnen so konfiguriert sein, die auf dem System installiert sind, die im Betrieb bewirken, dass das System die Handlungen durchführt. Ein oder mehrere Computerprogramme können so konfiguriert sein, indem sie Befehle aufweisen, die, wenn sie durch eine Datenverarbeitungseinrichtung ausgeführt werden, bewirken, dass die Einrichtung die Handlungen durchführt.
  • Die Details von einer oder mehreren Implementierungen des in dieser Beschreibung beschriebenen Gegenstandes sind in den begleitenden Zeichnungen und der nachstehenden Beschreibung dargelegt. Andere potentielle Merkmale, Aspekte und Vorteile des Gegenstandes werden aus der Beschreibung, den Zeichnungen und den Ansprüchen ersichtlich.
  • Figurenliste
    • 1 ist ein Blockdiagramm eines Beispielrechensystems.
    • 2 stellt eine beispielhafte Neuronalnetzrechenkachel dar.
    • 3 stellt eine beispielhafte Tensordurchlaufeinheitsstruktur (Beispiel-TTU-Struktur) dar.
    • 4 stellt eine beispielhafte Architektur dar, die eine schmale Arbeitsspeichereinheit umfasst, die Eingangsaktivierungen zu einem oder mehreren Multiplikations-Akkumulations-Operatoren (MAC-Operatoren) liefert.
    • 5 stellt eine beispielhafte Architektur dar, die einen Ausgangsbus umfasst, der Ausgangsaktivierungen zur schmalen Arbeitsspeichereinheit von 2 und 4 liefert.
    • 6 ist ein beispielhafter Ablaufplan eines Prozesses zum Durchführen von Tensorberechnungen unter Verwendung der Neuronalnetzrechenkachel von 2.
    • 7 ist eine alternative Ausführungsform eines Rechensystems.
    • 8 ist eine alternative Ausführungsform einer Neuronalnetzrechenkachel.
    • 9 ist ein beispielhafter Ablaufplan eines Prozesses zum Beschleunigen von Berechnungen durch Laden von Neuronalnetzgewichtsparametern in einen Neuronalnetzbeschleuniger.
  • Gleiche Bezugszeichen und Bezeichnungen in den verschiedenen Zeichnungen geben gleiche Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Der in dieser Beschreibung beschriebene Gegenstand bezieht sich auf ein Verfahren zum Beschleunigen von Berechnungen. Das Verfahren umfasst vor der Ausführung das Laden von Neuronalnetzgewichtsparametern in einen Neuronalnetzbeschleuniger und während der Ausführung die Verarbeitung von Eingaben in den Beschleuniger im Wesentlichen ohne Zugreifen auf Neuronalnetzgewichtsparameter außerhalb des Beschleunigers. Das Verfahren kann ferner das Laden von Neuronalnetzgewichtsparametern in mehrere eng verbundene Beschleunigerchips, wenn die Anzahl von Neuronalnetzgewichtsparametern zu groß ist, um auf einen einzelnen Beschleunigerchip zu passen; und das Verarbeiten von Eingaben in die Beschleunigerchips im Wesentlichen ohne Zugreifen auf Neuronalnetzgewichtsparameter außerhalb der eng verbundenen Beschleunigerchips umfassen.
  • Eine Ausführungsform eines Beschleunigers umfasst eine Recheneinheit; eine erste Arbeitsspeicherbank zum Speichern von Eingangsaktivierungen und eine zweite Arbeitsspeicherbank zum Speichern von Parametern, die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, eine ausreichende Menge der Neuronalnetzparameter auf der Recheneinheit zu speichern, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau zu ermöglichen. Die Recheneinheit umfasst mindestens eine Zelle mit mindestens einem Multiplikations-Akkumulations-Operator („MAC“-Operator), der Parameter von der zweiten Arbeitsspeicherbank empfängt und Berechnungen durchführt. Die Recheneinheit umfasst ferner eine erste Durchlaufeinheit, die ein Steuersignal zur ersten Arbeitsspeicherbank liefert, um zu bewirken, dass eine Eingangsaktivierung zu einem Datenbus geliefert wird, der für den MAC-Operator zugänglich ist. Die Recheneinheit führt Berechnungen durch, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen durch den MAC-Operator durchgeführt werden.
  • Der in dieser Beschreibung beschriebene Gegenstand bezieht sich auch auf ein Hardware-Rechensystem mit mehreren Recheneinheiten, die dazu konfiguriert sind, Maschinenlerninferenzarbeitslasten einer Neuronalnetzschicht zu beschleunigen. Jede Recheneinheit des Hardware-Rechensystems ist eigenständig und kann unabhängig Berechnungen ausführen, die für eine gegebene Schicht eines mehrschichtigen Neuronalnetzes erforderlich sind. Diese Beschreibung bezieht sich im Allgemeinen auf eine Neuronalnetz-Rechenkachel („NN“-Rechenkachel) für die Berechnung von Schichten eines tiefen Neuronalnetzes („DNN“) mit Parametern, die sich auf dem Chip befinden, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen.
  • Ein Neuronalnetz mit mehreren Schichten kann verwendet werden, um Inferenzen zu berechnen. In Anbetracht einer Eingabe kann das Neuronalnetz beispielsweise eine Inferenz für die Eingabe berechnen. Das Neuronalnetz berechnet diese Inferenz durch Verarbeiten der Eingabe durch jede der Schichten des Neuronalnetzes. Insbesondere weisen die Schichten des Neuronalnetzes jeweils einen jeweiligen Satz von Gewichten auf. Jede Schicht empfängt eine Eingabe und verarbeitet die Eingabe gemäß dem Satz von Gewichten für die Schicht, um eine Ausgabe zu erzeugen.
  • Um eine Inferenz aus einer empfangenen Eingabe zu berechnen, empfängt das Neuronalnetz daher die Eingabe und verarbeitet sie durch jede der Neuronalnetzschichten, um die Inferenz zu erzeugen, wobei die Ausgabe aus einer Neuronalnetzschicht als Eingabe zur nächsten Neuronalnetzschicht geliefert wird. Dateneingaben oder Datenausgaben, die einer Neuronalnetzschicht zugeordnet sind, z. B. entweder die Eingabe in das Neuronalnetz oder die Ausgaben der Schicht unter der Schicht in der Sequenz, können als Aktivierung für die Schicht bezeichnet werden.
  • In einigen Implementierungen sind die Schichten des Neuronalnetzes in einer Sequenz angeordnet. In anderen Implementierungen sind die Schichten in einem gerichteten Graphen angeordnet. Das heißt, irgendeine spezielle Schicht kann mehrere Eingaben, mehrere Ausgaben oder beides empfangen. Die Schichten des Neuronalnetzes können auch derart angeordnet sein, dass eine Ausgabe einer Schicht als Eingabe zu einer vorherigen Schicht zurückgesendet werden kann.
  • Das in dieser Beschreibung beschriebene Hardware-Rechensystem kann die Berechnung einer Neuronalnetzschicht durch Verteilen von Tensorberechnungen über mehrere Rechenkacheln durchführen. Ein Rechenprozess, der innerhalb einer Neuronalnetzschicht durchgeführt wird, kann eine Multiplikation eines Eingangstensors mit Eingangsaktivierungen mit einem Parametertensor mit Gewichten umfassen. Die Berechnung umfasst das Multiplizieren einer Eingangsaktivierung mit einem Gewicht in einem oder mehreren Zyklen und das Durchführen einer Akkumulation eines Produkts über viele Zyklen.
  • Ein Tensor ist ein mehrdimensionales geometrisches Objekt und mehrdimensionale geometrische Beispielobjekte umfassen Matrizen und Datenanordnungen. Im Allgemeinen wird ein Prozess durch eine Rechenkachel ausgeführt, um Tensorberechnungen durch Verarbeiten einer verschachtelten Schleife durchzuführen, um einen N-dimensionalen Tensor zu durchlaufen. In einem Beispielrechenprozess kann jede Schleife für das Durchlaufen einer speziellen Dimension des N-dimensionalen Tensors verantwortlich sein. Für ein gegebenes Tensorgebilde kann eine Rechenkachel Zugriff auf ein Element eines speziellen Tensors erfordern, um mehrere Punktproduktberechnungen auszuführen, die dem Tensor zugeordnet sind. Die Berechnung findet statt, wenn eine Eingangsaktivierung, die durch eine schmale Arbeitsspeicherstruktur bereitgestellt wird, mit einem Parameter oder Gewicht multipliziert wird, das durch eine breite Arbeitsspeicherstruktur bereitgestellt wird. Da der Tensor in einem Arbeitsspeicher gespeichert ist, kann ein Satz von Tensorindizes eine Übersetzung in einen Satz von Arbeitsspeicheradressen erfordern. Im Allgemeinen führt eine Tensordurchlaufeinheit einer Rechenkachel Steueroperationen aus, die den Index jeder Dimension, die dem Tensor zugeordnet ist, und eine Reihenfolge, in der Indexelemente durchlaufen werden, liefern, um Berechnungen durchzuführen. Tensorberechnungen enden, wenn Multiplikationsergebnisse auf einen Ausgangsbus geschrieben werden und im Arbeitsspeicher gespeichert werden.
  • 1 zeigt ein Blockdiagramm eines Beispielrechensystems 100 zum Beschleunigen von Tensorberechnungen, die tiefen Neuronalnetzen (DNNs) zugeordnet sind. Das System 100 umfasst im Allgemeinen eine Steuereinheit 102, eine Host-Schnittstelle 108, eine Eingabe/Ausgabe-Verbindung (E/A-Verbindung) 110, mehrere Kacheln mit einem ersten Kachelsatz 112 und einem zweiten Kachelsatz 114, einen Klassifikatorabschnitt 116 und Datenbusse, die in einer Busabbildung 118 (die der Deutlichkeit halber gezeigt ist, jedoch im System 100 nicht enthalten ist), identifiziert sind. Die Steuereinheit 102 umfasst im Allgemeinen einen Datenarbeitsspeicher 104, einen Befehlsarbeitsspeicher 106 und mindestens einen Prozessor, der dazu konfiguriert ist, einen oder mehrere Befehle auszuführen, die in einem computerlesbaren Speichermedium codiert sind. Der Befehlsarbeitsspeicher 106 kann einen oder mehrere maschinenlesbare Befehle speichern, die durch den einen oder die mehreren Prozessoren der Steuereinheit 102 ausführbar sind. Der Datenarbeitsspeicher 104 kann irgendeiner von einer Vielfalt von Datenspeichermedien zum Speichern und anschließenden Zugreifen auf eine Vielfalt von Daten in Bezug auf Berechnungen, die innerhalb des Systems 100 stattfinden, sein.
  • Die Steuereinheit 102 ist dazu konfiguriert, einen oder mehrere Befehle in Bezug auf Tensorberechnungen innerhalb des Systems 100 auszuführen, einschließlich Befehlen, die im Befehlsarbeitsspeicher 106 gespeichert sind. In einigen Implementierungen sind der Datenarbeitsspeicher 104 und der Befehlsarbeitsspeicher 106 eine flüchtige Arbeitsspeichereinheit oder flüchtige Arbeitsspeichereinheiten. In einigen anderen Implementierungen sind der Datenarbeitsspeicher 104 und der Befehlsarbeitsspeicher 106 eine nichtflüchtige Arbeitsspeichereinheit oder nichtflüchtige Arbeitsspeichereinheiten. Der Datenarbeitsspeicher 104 und der Befehlsarbeitsspeicher 106 können auch eine andere Form von computerlesbarem Medium sein, wie z. B. eine Diskettenvorrichtung, eine Festplattenvorrichtung, eine optische Plattenvorrichtung oder eine Bandvorrichtung, ein Flash-Arbeitsspeicher oder eine andere ähnliche Halbleiterarbeitsspeichervorrichtung oder eine Anordnung von Vorrichtungen, einschließlich Vorrichtungen in einem Speicherbereichsnetz oder anderen Konfigurationen. In verschiedenen Implementierungen kann die Steuereinheit 102 auch als Kernmanager 102 ausgewiesen oder bezeichnet werden.
  • Wie dargestellt, ist die Host-Schnittstelle 108 mit der E/A-Verbindung 110, der Steuereinheit 102 und dem Klassifikatorabschnitt 116 gekoppelt. Die Host-Schnittstelle 108 empfängt Befehle und Datenparameter von der E/A-Verbindung 110 und liefert Befehle und Parameter zur Steuereinheit 102. Im Allgemeinen können Befehle zu einer oder mehreren Vorrichtungen im System 100 durch den Befehlsbus 124 (nachstehend beschrieben) geliefert werden und Parameter können zu einer oder mehreren Vorrichtungen im System 100 durch den Ringbus 128 (nachstehend beschrieben) geliefert werden. In einigen Implementierungen werden Befehle durch die Steuereinheit 102 von der Host-Schnittstelle 118 zu einer anfänglichen Zeit empfangen und im Befehlsarbeitsspeicher 106 für die Ausführung durch die Steuereinheit 102 zu einer späteren Zeit gespeichert.
  • Der Klassifikatorabschnitt 116 ist ebenso mit der Steuereinheit 102 und der Kachel 7 des zweiten Kachelsatzes 114 gekoppelt. In einigen Implementierungen wird der Klassifikatorabschnitt 116 als separate Kachel innerhalb des Systems 100 implementiert. In alternativen Implementierungen ist der Klassifikatorabschnitt 116 innerhalb der Steuereinheit 102 als Unterschaltung oder Untervorrichtung der Steuereinheit 102 angeordnet oder befindlich. Der Klassifikatorabschnitt 116 ist im Allgemeinen dazu konfiguriert, eine oder mehrere Funktionen an akkumulierten Voraktivierungswerten durchzuführen, die als Ausgaben von vollständig verbundenen Schichten empfangen werden. Die vollständig verbundenen Schichten können über die Kacheln in den Kachelsätzen 112 und 114 unterteilt sein. Folglich ist jede Kachel dazu konfiguriert, eine Teilmenge von Voraktivierungswerten (d. h. lineare Ausgaben) zu erzeugen, die in (einer) Arbeitsspeichereinheit(en) der Kachel gespeichert werden können. Der Klassifikationsergebnisbus 120 sieht einen Datenpfad vom Klassifikatorabschnitt 116 zur Steuereinheit 102 vor. Daten, die Nachfunktionswerte (d. h. Ergebnisse) umfassen, werden zur Steuereinheit 102 vom Klassifikatorabschnitt 116 über den Klassifikationsergebnisbus 120 geliefert.
  • Die Busabbildung 118 zeigt Datenbusse, die einen oder mehrere miteinander verbundene Datenkommunikationspfade zwischen Kacheln des ersten Kachelsatzes 112 und des zweiten Kachelsatzes 114 vorsehen. Die Busabbildung 118 sieht eine Legende zum Identifizieren eines Klassifikationsergebnisbusses 120, eines CSR/Master-Busses 122, eines Befehlsbusses 124, eines Gitterbusse 126 und eines Ringbusses 128 vor, wie in 1 dargestellt. Im Allgemeinen ist eine Kachel eine Kernkomponente innerhalb der Beschleunigerarchitektur des Systems 100 und ist der Schwerpunkt für Tensorberechnungen, die im System stattfinden. Jede Kachel ist eine individuelle Recheneinheit, die mit anderen Kacheln im System zusammenwirkt, um Berechnungen über eine oder mehrere Schichten eines mehrschichtigen Neuronalnetzes zu beschleunigen. Obwohl Kacheln in den Kachelsätzen 112, 114 sich die Ausführung von Tensorberechnungen teilen können, die einem gegebenen Befehl zugeordnet sind, ist eine individuelle Recheneinheit eine eigenständige Rechenkomponente, die dazu konfiguriert ist, eine Teilmenge von Tensorberechnungen unabhängig relativ zu anderen entsprechenden Kacheln innerhalb der Kachelsätze 112, 114 auszuführen.
  • Der CSR-Bus 122 ist ein Bus mit einzelnem Master und mehreren Slaves, der ermöglicht, dass die Steuereinheit 102 einen oder mehrere Befehle, die Programmkonfigurationen festlegen und Statusregister lesen, die einer oder mehreren Kacheln zugeordnet sind, überträgt. Der CSR-Bus 122 kann in einer einzelnen Verkettungskonfiguration mit einem Master-Bussegment und mehreren Slave-Bussegmenten verbunden sein. Wie in 1 gezeigt, sieht der CSR-Bus 122 Kommunikationen vor, die durch einen Busdatenpfad koppeln, der Kacheln in den Kachelsätzen 112, 114 und die Steuereinheit 102 in einem Ring mit der Host-Schnittstelle 110 verbindet. In einer gewissen Implementierung ist die Host-Schnittstelle 110 der einzige Master des CSR-Busrings und der ganze CSR-Busadressenraum wird auf einen Arbeitsspeicherraum in der Host-Schnittstelle 110 arbeitsspeicherabgebildet.
  • Der CSR-Bus 122 kann durch die Host-Schnittstelle 110 verwendet werden, um eine oder mehrere Operationen durchzuführen, einschließlich beispielsweise Programmieren von Arbeitsspeicherpufferzeigern in der Steuereinheit 102, um zu ermöglichen, dass die Steuereinheit 102 das Abrufen von Befehlen aus dem Befehlsarbeitsspeicher 106 beginnt, Aktualisieren/Programmieren von verschiedenen Kacheleinstellungen (z. B. Koeffiziententabellen für Polynomnäherungsberechnungen), die während einer oder mehrerer Berechnungen statisch bleiben, und/oder Laden/Neuladen von Firmware in den Klassifikationsabschnitt 116. In einem Beispiel können Firmware-Neuladungen neue Funktionen umfassen, die auf lineare Ausgaben (d. h. Voraktivierungswerte) angewendet werden sollen. Folglich weist jeder Slave mit Zugriff auf den CSR-Bus 122 einen unterschiedlichen Knotenidentifizierer (Knoten-ID) auf, der an den Slave gebunden ist und ihn identifiziert. Die Knoten-ID ist ein Teil einer Befehlsadresse und wird durch die CSR-Slaves (d. h. die Steuereinheit 102, die Kacheln 112, 114 und den Klassifikator 116) verwendet, untersucht oder anderweitig geprüft, um zu bestimmen, ob das CSR-Paket an den Slave adressiert ist.
  • In einigen Implementierungen können ein oder mehrere Befehle durch die Host-Schnittstelle 102 durch die Steuereinheit 102 hindurch übertragen werden. Die Befehle können beispielsweise 32 Bits breit sein, wobei die ersten 7 Bits Kopfinformationen umfassen, die die Befehlsadresse/das Befehlsziel angeben, das die Befehle empfangen und ausführen soll. Die ersten 7 Bits des Kopfs können Datenparameter enthalten, die eine spezielle Knoten-ID darstellen. Slaves (z. B. jede Kachel) auf dem CSR-Busring können daher den Kopf des Befehls untersuchen, um zu bestimmen, ob die Anforderung durch den Master (Host-Schnittstelle 110) an die Kachel, die den Kopf untersucht, adressiert war. Wenn die Knoten-ID des Kopfs nicht angibt, dass das Ziel die untersuchende Kachel ist, kopiert die untersuchende Kachel das Eingangs-CSR-Befehlspaket auf den CSR-Buseingang, der mit der nächsten Kachel verbunden ist, für die Untersuchung durch die nächste Kachel.
  • Der Befehlsbus 124 entspringt von der Steuereinheit 102 und schafft ähnlich zum CSR-Bus 122 auch Kommunikationen, die durch einen Busdatenpfad koppeln, der Kacheln in den Kachelsätzen 112, 114 in einem Ring zur Steuereinheit 102 zurück verbindet. In einer Implementierung rundsendet die Steuereinheit 102 einen oder mehrere Befehle über den Befehlsbus 124. Die Befehle, die durch die Steuereinheit 102 rundgesendet werden, können sich von den Befehlen unterscheiden, die über den CSR-Bus 122 geliefert werden. Die Weise, in der eine Kachel den über den Bus 124 empfangenen Befehl empfängt und/oder verbraucht oder ausführt, kann jedoch zu dem Prozess zur Ausführung von Befehlen, die über den CSR-Bus 122 empfangen werden, ähnlich sein.
  • In einem Beispiel gibt ein Kopf (d. h. ein Bitmap) des Befehls für eine empfangende Kachel an, dass die empfangende Kachel einen speziellen Befehl verbrauchen muss, auf der Basis eines Bitmap, das dem Befehl zugeordnet ist. Das Bitmap kann eine spezielle Breite aufweisen, die hinsichtlich Bits definiert ist. Der Befehl wird typischerweise von einer Kachel zur nächsten Kachel auf der Basis von Parametern des Befehls weitergeleitet. In einer Implementierung kann die Breite des Befehlsbusses 124 so konfiguriert sein, dass sie kleiner ist als die Größe/Breite des Befehls. In einer solchen Konfiguration findet folglich die Übertragung der Befehle über mehrere Zyklen statt und Busstopps des Befehlsbusses 124 weisen Decodierer auf, um Befehle, die an der Kachel empfangen werden, in den geeigneten Zielbefehlspuffer zu setzen, der dieser Kachel zugeordnet ist.
  • Wie nachstehend weiter beschrieben, sind die Kacheln in den Kachelsätzen 112, 114 im Allgemeinen dazu konfiguriert, zwei breite Kategorien von Befehlen zu unterstützen. Die zwei breiten Kategorien können auch als Befehlstypen bezeichnet werden. Die Befehlstypen umfassen einen Tensoroperationsbefehl (TensorOp-Befehl) und einen Direktspeicherzugriffsbefehl (DMAOp-Befehl). In einigen Implementierungen weisen DMAOp-Befehle eine oder mehrere Spezialisierungen auf, die gleichzeitig sein dürfen. Die eine oder die mehrere Spezialisierungen können als DMAOp-Befehlsuntertypen oder Opcodes bezeichnet werden. In einigen Fällen weist jedes eindeutige und/oder gültige DMAOp-Befehls-Typ/Untertyp-Tupel einen separaten Befehlspuffer innerhalb einer speziellen Kachel auf.
  • An einer speziellen Kachel der Kacheln 112, 114 untersucht der Busstopp, der dem Befehlsbus 124 zugeordnet ist, das Kopf-Bitmap, um den Befehls-Typ/Untertyp zu bestimmen. Der Befehl kann durch die Kachel empfangen werden und anschließend in einen Befehlspuffer der Kachel vor der Ausführung des Befehls durch die Kachel geschrieben werden. Der Befehlspuffer der Kachel, in den der Befehl geschrieben wird, kann durch den Typ- und Untertypindikator/ das Typ- und Untertypfeld des Befehls bestimmt werden. Die Befehlspuffer können ein erstes First-in-First-out-Steuerschema (FIFO-Steuerschema) umfassen, das den Verbrauch von einem oder mehreren zugehörigen Befehlen priorisiert. Unter diesem FIFO-Steuerschema werden folglich Befehle desselben Typs/Untertyps immer in der Reihenfolge ausgeführt, in der der Befehl am Befehlsbus angekommen ist.
  • Die verschiedenen Befehlspuffer innerhalb einer Kachel sind die TensorOp-Befehlspuffer und die DMAOp-Befehlspuffer. Wie vorstehend angegeben, umfassen Befehlstypen den TensorOp-Befehl und den DMAOp-Befehl. Im Hinblick auf DMAOp-Befehle umfassen Befehlsuntertypen (die einen „Schreibe-in“-Pufferort angeben) die Folgenden: 1) Gitterankunftsbefehlspuffer; 2) Netzabgangsbefehlspuffer; 3) Befehlspuffer für schmalen-breiten DMA; 4) Befehlspuffer für breitenschmalen DMA; und 5) Ringbus-DMA-Befehlspuffer. Diese Pufferorte werden nachstehend mit Bezug auf 2 genauer beschrieben. Breite und schmale Bezeichnungen werden in dieser ganzen Beschreibung verwendet und beziehen sich im Allgemeinen auf eine ungefähre Größe in der Breite (Bits/Bytes) von einer oder mehreren Arbeitsspeichereinheiten. Wie hier verwendet, kann sich „schmal“ auf eine oder mehrere Arbeitsspeichereinheiten mit jeweils einer Größe oder Breite von weniger als 16 Bits beziehen und „breit“ kann sich auf eine oder mehrere Arbeitsspeichereinheiten mit jeweils einer Größe oder Breite zwischen 16 Bits und 64 Bits beziehen.
  • Der Gitterbus 126 sieht einen Datenkommunikationspfad vor, der vom CSR-Bus 122, Befehlsbus 124 und Ringbus 128 (nachstehend beschrieben) verschieden ist. Wie in 1 dargestellt, sieht der Gitterbus 126 einen Kommunikationspfad vor, der jede Kachel mit ihrer entsprechenden Nachbarkachel sowohl in den X- als auch Y-Dimensionen koppelt oder verbindet. In verschiedenen Implementierungen kann der Gitterbus 126 verwendet werden, um Eingangsaktivierungsgrößen zwischen einer oder mehreren schmalen Arbeitsspeichereinheiten in benachbarten Kacheln zu transportieren. Wie gezeigt, ermöglicht der Gitterbus 126 keine direkte Weiterleitung von Eingangsaktivierungsdaten zu nicht benachbarten Kacheln.
  • In verschiedenen Implementierungen können der Gitterbus 126 und die verschiedenen Kacheln, die über den Gitterbus 126 verbunden sind, die folgende Konfiguration aufweisen. Vier Eckkacheln des Gitters weisen zwei Abgangsports und zwei Ankunftsports auf. Vier Kantenkacheln des Gitters weisen drei Ankunftsports und drei Abgangsports auf. Alle Nicht-Kanten-, Nicht-Eck-Kacheln weisen vier Ankunftsports und vier Abgangsports auf. In Anbetracht einer NxN-Beispielkachelanordnung sind Kantenkacheln im Allgemeinen Kacheln mit nur drei Nachbarkacheln, während Eckkacheln Kacheln mit zwei Nachbarkacheln sind. Hinsichtlich der Datenflussmethodologie über den Gitterbus 126 muss im Allgemeinen jede Eingangsaktivierung, die über den Gitterbus 126 für eine spezielle Kachel ankommt, zu einer oder mehreren schmalen Arbeitsspeichereinheiten der Kachel übergeben werden. Überdies können für Kachelkonfigurationen, die weniger als vier Ankunftsports aufweisen, DMAOp-Befehle Nullwerte in die Stellen im schmalen Arbeitsspeicher der Kachel schreiben, anstatt auf Daten an einem fehlenden Eingangsport zu warten. Für Kachelkonfigurationen, die weniger als vier Abgangsports aufweisen, führen ebenso DMAOp-Befehle nicht die Lese- und Portschreibvorgänge des schmalen Arbeitsspeichers in Bezug auf Übertragungen für irgendwelche fehlenden Ports aus.
  • In einigen Implementierungen wird ein Ort oder eine Adresse einer (von) schmalen Arbeitsspeichereinheit(en), in die eine spezielle Eingangsaktivierung geschrieben wird oder aus der diese gelesen wird, durch eine Tensordurchlaufeinheit (nachstehend „TTU“) auf der Basis einer ankommenden/abgehenden DMAOp erzeugt, die über den Gitterbus 126 geliefert wird. Eine ankommende DMAOp und eine abgehende DMAOp können gleichzeitig ausgeführt werden und irgendeine erforderliche Synchronisation wird durch Synchronisations-Flag-Steuerschemen gemanagt, die durch die Steuereinheit 102 verwaltet werden. TTUs werden nachstehend mit Bezug auf 2 und 3 genauer beschrieben.
  • Der Ringbus 128 entspringt von der Steuereinheit 120 und sieht ähnlich zum CSR-Bus 122 und Befehlsbus 124 auch eine Kommunikationskopplung durch einen Busdatenpfad vor, der Kacheln 112, 114 in einem Ring zur Steuereinheit 102 zurück verbindet. In verschiedenen Implementierungen verbindet oder koppelt der Ringbus 128 im Allgemeinen alle breiten Arbeitsspeichereinheiten (nachstehend mit Bezug auf 2 genauer beschrieben) in allen Kacheln 112, 114. Folglich entspricht eine Nutzinformationsbreite des Ringbusses 128 der Breite der breiten Arbeitsspeichereinheiten, die innerhalb jeder Kachel der Kachelsätze 112, 114 angeordnet sind. Wie vorstehend erörtert, umfasst der Ringbus 128 auch einen Bitmap-Kopf, der die Kacheln angibt, die Nutzinformationsdaten mit Befehlen oder Parametern verbrauchen müssen, die über den Ringbus 128 übermittelt werden.
  • Im Hinblick auf Daten (d. h Nutzinformationen), die an einer speziellen Kachel über den Ringbus 128 empfangen werden, stellt in Reaktion auf das Empfangen der Informationen jede Kachel Positionsdaten auf null (d. h. räumt sie aus), die im Bitmap-Kopf angegeben sind, der für die empfangende Kachel eindeutig ist, vor dem Weiterleiten der Daten zu einer anderen Kachel. Wenn das Kopf-Bitmap keine restlichen Bitsatzdaten aufweist, die eine spezielle Kachel angeben, die die Nutzinformationen empfangen soll, stoppt daher das Weiterleiten der Nutzinformationen zu einer anderen Kachel. Nutzinformationsdaten beziehen sich im Allgemeinen auf Aktivierungen und Gewichte, die von einer oder mehreren Kacheln während Tensorberechnungen verwendet werden, die auf der Basis der Ausführung von tief verschachtelten Schleifen durchgeführt werden.
  • In einigen Implementierungen kann die Steuereinheit 102 als ein Teil des Ringbusses 128 beschrieben werden. In einem Beispiel kann für DMAOp-Befehle, die innerhalb einer speziellen Kachel ausgeführt werden, die Steuereinheit 102 verwendet werden, um die Daten/Nutzinformationen von Ringbusstopps hervorzuholen und die Nutzinformationen zu einem Ringbusstopp in einer nächsten Kachel im Ring weiterzuleiten. Die Steuereinheit 102 kann auch bewirken, dass die Nutzinformationsdaten zu einer oder mehreren breiten Arbeitsspeichereinheiten der Kachel übergeben werden, wenn eine solche Handlung durch Befehle im Bitmap-Kopf erforderlich ist. Die Adresse der einen oder der mehreren breiten Arbeitsspeichereinheiten, in die die Daten geschrieben werden müssen, können durch DMAOp-Befehle innerhalb der speziellen Kachel erzeugt werden.
  • In verschiedenen Implementierungen kann jede Kachel des Kachelsatzes 112, 114 entweder ein Erzeuger von Nutzinformationsdaten oder ein Verbraucher von Nutzinformationsdaten sein. Wenn eine Kachel ein Erzeuger von Nutzinformationsdaten ist, liest die Kachel die Daten aus einer oder mehreren ihrer breiten Arbeitsspeichereinheiten und sendet die Daten per Multicast über den Ringbus 128 für den Verbrauch durch eine oder mehrere andere Kacheln. Wenn eine Kachel ein Verbraucher von Nutzinformationsdaten ist, empfängt und schreibt die Kachel die Daten in eine oder mehrere breite Arbeitsspeichereinheiten innerhalb der Kachel und leitet die Nutzinformationsdaten für den Verbrauch durch eine oder mehrere andere Kacheln weiter. Im Hinblick auf die Bewegung der Nutzinformationsdaten über den Ringbus 128 ist typischerweise nur ein Erzeuger/Master von Daten auf dem Ringbus 128 zu irgendeiner gegebenen Zeit vorhanden. Die DMAOp-Befehlsausführungsreihenfolge (z. B. FIFO-Steuerschema) in allen Kacheln stellt sicher, dass nur ein Erzeuger/Master von Daten auf dem Ringbus 128 zu einer gegebenen Zeit vorhanden ist.
  • In einigen Implementierungen verwendet die Steuereinheit 102 eine Synchronisations-Flag-Steuerarchitektur, um sicherzustellen, dass nur ein Erzeuger/Master von Nutzinformationsdaten auf dem Ringbus 128 zu einer gegebenen Zeit vorhanden ist. In einem Beispiel löst jeder Schreibvorgang durch eine Kachel in einen Ringausgang ein Inkrement des entsprechenden Synchronisations-Flag-Zählwerts aus. Die Steuereinheit 102 kann die Nutzinformationsdaten untersuchen, um die Anzahl von Datenstücken oder Datensegmenten zu bestimmen, die die Nutzinformationen bilden. Die Steuereinheit 102 überwacht dann die Ausführung durch die Kachel, um sicherzustellen, dass die erwartete Anzahl von Datensegmenten durch die Kachel weitergeleitet und/oder verbraucht wird, bevor eine andere Kachel im Mastermodus ausführt.
  • Eine Ausnahme für das Sicherstellen, dass nur ein Erzeuger/Master von Daten auf dem Ringbus 128 zu einer gegebenen Zeit vorhanden ist, tritt auf, wenn lokale Multicast-Gruppen vorhanden sind, die über den Ringbus 128 verbunden sind, die keinen überlappenden Bereich auf dem Ringbus aufwiesen. Die Kachel 0 (Master) kann beispielsweise zu einer Kachel in der Gruppierung Kachel 0 - Kachel 3 per Multicast senden (d. h. Daten erzeugen), während die Kachel 4 (Master) dasselbe zu einer Gruppierung Kachel 4 - Kachel 7 durchführen kann. Eine wichtige Anforderung dieser dualen Master-Multicast-Methodologie besteht darin, dass verschiedenen Multicast-Gruppen nicht erlaubt werden darf, die Datenpakete gegenseitig zu sehen, da eine Paketüberlappung auftreten kann und zu einem oder mehreren Datenberechnungsfehlern führen kann.
  • Wie in 1 gezeigt, sieht die Steuereinheit 102 einen Kommunikationsdatenpfad vor, der Kacheln in den Kachelsätzen 112, 114 mit dem E/A 110 koppelt oder verbindet, und umfasst mehrere Kernfunktionen. Die Kernfunktionen der Steuereinheit 102 umfassen im Allgemeinen das Zuführen von einer oder mehreren E/A-Eingangsaktivierungen zu Kacheln in den Kachelsätzen 112, 114, wobei eine oder mehrere Eingangsaktivierungen und Parameter, die vom E/A 110 empfangen werden, zu den Kacheln zugeführt werden, Zuführen von einem oder mehreren Befehlen, die vom E/A 110 empfangen werden, zu den Kacheln, Senden von E/A-Ausgangsaktivierungen zur Host-Schnittstelle 108 und Dienen als Ringstopp für den CSR-Bus 122 sowie Ringbus 128. Wie nachstehend genauer beschrieben, umfassen der erste Kachelsatz 112 und der zweite Kachelsatz 114 jeweils mehrere Kacheln, die verwendet werden, um eine oder mehrere Tensorberechnungen durchzuführen, die auf der Basis einer tiefen Schleifenverschachtelung ausgeführt werden, die aus inneren und äußeren Schleifen besteht.
  • Das System 100 arbeitet im Allgemeinen wie folgt. Die Host-Schnittstelle 108 liefert einen oder mehrere Befehle zur Steuereinheit 102, die Direktzugriffsspeicheroperationen (DMAOp) definieren, die für eine gegebene Berechnung stattfinden. Deskriptoren, die Befehlen zugeordnet sind, die zur Steuereinheit 102 zugeführt werden, umfassen Informationen, die für die Steuereinheit erforderlich sind, um Punktproduktberechnungen im großen Maßstab zu erleichtern, die mehrdimensionalen Datenanordnungen (Tensoren) zugeordnet sind. Im Allgemeinen empfängt die Steuereinheit 102 von der Host-Schnittstelle 108 Eingangsaktivierungen, Kachelbefehle und Modellparameter (d. h. Gewichte) für die Ausführung von Tensorberechnungen für eine gegebene Schicht eines Neuronalnetzes. Die Steuereinheit 102 kann dann bewirken, dass die Befehle zu Kacheln 112, 114 in einer Datenflussweise per Multicast gesendet werden, die durch den (die) Befehl(e) definiert ist. Wie vorstehend erörtert, können Kacheln, die einen Befehl verbrauchen, dann eine Rundsendung eines neuen/anschließenden Befehls zu einer anderen Kachel auf der Basis von Bitmap-Daten im Befehlskopf einleiten.
  • Im Hinblick auf den Datenfluss werden Eingangsaktivierungen und Parameter zu Kacheln der Kachelsätze 112, 114 über den Ringbus 128 übertragen. Jede der Kacheln 112, 114 speichert eine Teilmenge der Eingangsaktivierungen, die erforderlich sind, um eine Teilmenge von Ausgangsaktivierungen zu berechnen, die dieser speziellen Kachel zugewiesen sind. DMAOp-Befehle für eine Kachel bewirken, dass die Eingangsaktivierung vom breiten Arbeitsspeicher zum schmalen Arbeitsspeicher bewegt wird. Die Berechnung innerhalb einer Kachel beginnt, wenn erforderliche Eingangsaktivierungen, Parameter/Gewichte und Rechenbefehle (TTU-Operationen, Arbeitsspeicheradressen usw.) in der Kachel verfügbar sind. Berechnungen, die innerhalb einer Kachel stattfinden, enden, wenn MAC-Operatoren (nachstehend beschrieben) innerhalb einer Kachel alle Punktproduktoperationen vollenden, die durch den Befehlssatz definiert sind, und Voraktivierungsfunktionen auf die Ergebnisse (d. h. Ausgangsaktivierungen) der Multiplikationsoperationen angewendet werden.
  • Ergebnisse der einen oder der mehreren Tensorberechnungen umfassen das Schreiben von Ausgangsaktivierungen einer Rechenschicht in (eine) schmale Arbeitsspeichereinheit(en) der Kachel, die die Berechnung durchführt. Für bestimmte Tensorberechnungen besteht eine Übertragung von Ausgangskantenaktivierungen zu Nachbarkacheln über den Gitterbus 126. Die Übertragung von Ausgangskantenaktivierungen zu Nachbarkacheln ist erforderlich, um Ausgangsaktivierungen für eine anschließende Schicht zu berechnen, wenn sich Berechnungen über mehrere Schichten erstrecken. Wenn Berechnungen für alle Schichten vollständig sind, bewegt eine DMAOp Endaktivierungen zur Klassifikatorkachel 116 durch den Ringbus 128. Die Steuereinheit 102 liest dann Endaktivierungen aus der Klassifikatorkachel 116 und führt eine DMAOp aus, um die Endaktivierungen zur Host-Schnittstelle 108 zu bewegen. In einigen Implementierungen führt der Klassifikatorabschnitt 116 Berechnungen einer Ausgangsschicht (d. h. der letzten Schicht) des NN durch. In anderen Implementierungen ist die Ausgangsschicht des NN eine von einer Klassifikatorschicht, einer Regressionsschicht oder eines anderen Schichttyps, der im Allgemeinen Neuronalnetzen zugeordnet ist.
  • 2 stellt eine Beispielneuronalnetzrechenkachel (Beispiel-NN-Rechenkachel) 200 dar. Im Allgemeinen kann die Beispielkachel 200 irgendeiner der Kacheln innerhalb des ersten Kachelsatzes 112 und des zweiten Kachelsatzes entsprechen, die vorstehend mit Bezug auf 1 erörtert wurden. In verschiedenen Implementierungen kann die Rechenkachel 200 auch als Recheneinheit 200 ausgewiesen oder bezeichnet werden. Jede Rechenkachel 200 ist eine eigenständige Recheneinheit, die dazu konfiguriert ist, Befehle unabhängig relativ zu anderen entsprechenden Kacheln innerhalb der Kachelsätze 112, 114 auszuführen. Wie vorstehend kurz erörtert, führt jede Rechenkachel 200 zwei Typen von Befehlen aus, einen TensorOp-Befehl und einen DMAOp-Befehl. Im Allgemeinen umfasst jeder Befehlstyp Rechenoperationen, die tiefen Schleifenverschachtelungen zugeordnet sind, und folglich führt jeder Befehlstyp im Allgemeinen über mehrere Zeitepochen aus, um die Vollendung aller Schleifeniterationen sicherzustellen.
  • Wie nachstehend genauer erörtert, werden die verschiedenen Befehlstypen durch unabhängige Steuerungseinheiten innerhalb der Rechenkachel 200 ausgeführt, die Daten durch Synchronisations-Flag-Steuerungen synchronisieren, die innerhalb der Rechenkachel 200 gemanagt werden. Die Synchronisations-Flag-Steuerungen managen die Gleichzeitigkeit zwischen Ausführungen von verschiedenen Befehlstypen innerhalb der Rechenkachel 200. Jede Rechenoperation, die jedem Befehlstyp zugeordnet ist, wird in einer strengen Reihenfolge der Ausgabe (d. h. First in, First out) ausgeführt. Im Hinblick auf die zwei Befehlstypen, TensorOp und DMAOp, bestehen keine Ordnungsgarantien zwischen diesen verschiedenen Befehlstypen und jeder Typ wird durch die Rechenkachel 200 als separater Thread der Steuerung behandelt.
  • Im Hinblick auf Datenflussgebilde umfasst die Rechenkachel 200 im Allgemeinen einen Datenpfad 202 und einen Datenpfad 205, die jeweils einen Kommunikationspfad für den Datenfluss in die und aus der Rechenkachel 200 vorsehen. Wie vorstehend beschrieben, umfasst das System 100 drei unterschiedliche Datenbusstrukturen, die in einer Ring-Konfiguration verlegt sind - CSR-Bus 122, Befehlsbus 124 und Ringbus 128. Mit Bezug auf 2 entspricht der Datenpfad 205 dem Befehlsbus 124, während der Datenpfad 202 im Allgemeinen einem des CSR-Busses 122 und des Ringbusses 128 entspricht. Wie gezeigt, umfasst der Datenpfad 202 einen Ringausgang 203, der einen Ausgangspfad für Daten vorsieht, die die Rechenkachel 200 verlassen, und einen Ringeingang 204, der einen Eingangspfad für Daten vorsieht, die in die Rechenkachel 200 eintreten.
  • Die Rechenkachel 200 umfasst ferner eine TensorOp-Steuerung 206 mit einer TensorOp-Tensordurchlaufeinheit (TTU) 226 und eine DMAOp-Steuerung 208 mit einer DMAOp-TTU 228. Die TensorOp-Steuerung 206 managt im Allgemeinen Schreibvorgänge in und Lesevorgänge aus dem TensorOp-TTU-Register 232 und verwaltet Durchlaufoperationen für die Ausführung durch die TensorOp-TTU 226. Ebenso managt die DMAOp-Steuerung 208 im Allgemeinen Schreibvorgänge in das und Lesevorgänge aus dem DMAOp-Register 234 und verwaltet Durchlaufoperationen für die Ausführung durch die DMAOp-TTU 228. Das TTU-Register 232 umfasst Befehlspuffer zum Speichern von einem oder mehreren Befehlen mit Operationen, die durch die TensorOp-TTU 226 durchgeführt werden sollen, bei der Ausführung der Befehle durch die TensorOp-Steuerung 206. Ebenso umfasst das TTU-Register 234 Befehlspuffer zum Speichern von einem oder mehreren Befehlen mit Operationen, die durch die TTU 208 durchgeführt werden sollen, bei der Ausführung der Befehle durch die DMAOp-Steuerung 208. Wie nachstehend weiter beschrieben, werden TTUs durch die Rechenkachel 200 verwendet, um Anordnungselemente von einem oder mehreren Tensoren zu durchlaufen, die sich im Allgemeinen im schmalen Arbeitsspeicher 210 und breiten Arbeitsspeicher 212 befinden.
  • In einigen Implementierungen kommen bestimmte Befehle für die Ausführung durch die Rechenkachel 200 an der Kachel über den Datenpfad 205 (d. h. einen Abschnitt des Befehlsbusses 124) an. Die Rechenkachel 200 untersucht das Kopf-Bitmap, um den Befehlstyp (TensorOp oder DMAOp) und den Befehlsuntertyp (Leseoperation oder Schreiboperation) zu bestimmen. Befehl(e), die durch die Rechenkachel 200 empfangen werden, werden anschließend in einen speziellen Befehlspuffer in Abhängigkeit vom Befehlstyp geschrieben. Im Allgemeinen werden Befehle vor der Ausführung des Befehls durch eine Komponente der Rechenkachel 200 empfangen und gespeichert (d. h. in den Puffer geschrieben). Wie in 2 gezeigt, können die Befehlspuffer (d. h. TensorOp-TTU-Register 232 und DMAOp-TTU-Register 234) jeweils ein First-in-First-out-Steuerschema (FIFO-Steuerschema) umfassen, das den Verbrauch (die Ausführung) von einem oder mehreren zugehörigen Befehlen priorisiert.
  • Wie vorstehend kurz erörtert, ist ein Tensor ein mehrdimensionales geometrisches Objekt und mehrdimensionale geometrische Beispielobjekte umfassen Matrizen und Datenanordnungen. Ein Algorithmus, einschließlich tief verschachtelter Schleifen, kann durch die Rechenkachel 200 ausgeführt werden, um Tensorberechnungen durch Iterieren von einer oder mehreren verschachtelten Schleifen durchzuführen, um einen N-dimensionalen Tensor zu durchlaufen. In einem Beispielrechenprozess kann jede Schleife der Schleifenverschachtelung für das Durchlaufen einer speziellen Dimension des N-dimensionale Tensors verantwortlich sein. Wie hier beschrieben, verwaltet die TensorOp-Steuerung 206 im Allgemeinen eine oder mehrere Tensoroperationen, die die Sequenz ansteuern, in der dimensionale Elemente eines speziellen Tensorgebildes durchlaufen werden und auf diese zugegriffen wird, um Berechnungen zu vollenden, die durch die tiefen verschachtelten Schleifen definiert sind.
  • Die Rechenkachel 200 umfasst ferner einen schmalen Arbeitsspeicher 210 und einen breiten Arbeitsspeicher 212. Schmale und breite Bezeichnungen beziehen sich im Allgemeinen auf eine Größe in der Breite (Bits/Bytes) der Arbeitsspeichereinheiten des schmalen Arbeitsspeichers 210 und des breiten Arbeitsspeichers 212. In einigen Implementierungen umfasst der schmale Arbeitsspeicher 210 Arbeitsspeichereinheiten mit jeweils einer Größe oder Breite von weniger als 16 Bits und der breite Arbeitsspeicher 212 umfasst Arbeitsspeichereinheiten mit jeweils einer Größe oder Breite von weniger als 32 Bits. Im Allgemeinen empfängt die Rechenkachel 200 Eingangsaktivierungen über den Datenpfad 205 und die DMA-Steuerung 208 führt eine Operation aus, um die Eingangsaktivierungen in dem schmalen Arbeitsspeicher 210 zu schreiben. Ebenso empfängt die Rechenkachel 200 Parameter (Gewichte) über den Datenpfad 202 und die DMA-Steuerung 208 führt eine Operation aus, um die Parameter in den breiten Arbeitsspeicher 212 zu schreiben. In einigen Implementierungen kann der schmale Arbeitsspeicher 210 einen Arbeitsspeicherzuteiler umfassen, der typischerweise in geteilten Arbeitsspeichersystemen verwendet wird, um für jeden Arbeitsspeicherzyklus zu entscheiden, welcher Steuervorrichtung (z. B. TensorOp-Steuerung 206 oder DMAOp-Steuerung 208) erlaubt wird, auf diese geteilten Arbeitsspeichereinheiten des schmalen Arbeitsspeichers 210 zuzugreifen.
  • Die Rechenkachel 200 umfasst ferner einen Eingangsaktivierungsbus 216 und eine MAC-Anordnung 214 mit mehreren Zellen, die jeweils einen MAC-Operator 215 und ein Summenregister 220 umfassen. Im Allgemeinen führt die MAC-Anordnung 214 unter Verwendung der MAC-Operatoren 215 und Summenregister 220 über mehrere Zellen Tensorberechnungen aus, die arithmetische Operationen in Bezug auf Punktproduktberechnungen umfassen. Der Eingangsaktivierungsbus 216 sieht einen Datenpfad, in dem Eingangsaktivierungen geliefert werden, durch den schmalen Arbeitsspeicher 210 nacheinander für den jeweiligen Zugriff durch jeden MAC-Operator 215 der MAC-Anordnung 214 vor. Auf der Basis der Rundsendung einer Eingangsaktivierung nacheinander empfängt daher ein einzelner MAC-Operator 215 einer speziellen Zelle jeweils eine Eingangsaktivierung. Arithmetische Operationen, die durch die MAC-Operatoren der MAC-Anordnung 214 durchgeführt werden, umfassen im Allgemeinen das Multiplizieren einer Eingangsaktivierung, die durch den schmalen Arbeitsspeicher 210 geliefert wird, mit einem Parameter, auf den vom breiten Arbeitsspeicher 212 zugegriffen wird, um einen einzelnen Ausgangsaktivierungswert zu erzeugen.
  • Während arithmetischer Operationen können Teilsummen akkumuliert und in einem entsprechenden z. B. Summenregister 220 gespeichert oder in den breiten Arbeitsspeicher 212 geschrieben werden und darauf durch eine spezielle Zelle der MAC-Anordnung 214 erneut zugegriffen werden, um Folgemultiplikationsoperationen zu vollenden. Die Tensorberechnungen können als einen ersten Teil und einen zweiten Teil aufweisend beschrieben werden. Der erste Teil ist vollständig, wenn Multiplikationsoperationen eine Ausgangsaktivierung erzeugen, beispielsweise durch Vollenden einer Multiplikation einer Eingangsaktivierung und eines Parameters, um die Ausgangsaktivierung zu erzeugen. Der zweite Teil umfasst die Anwendung einer nicht-linearen Funktion auf eine Ausgangsaktivierung und der zweite Teil ist vollständig, wenn die Ausgangsaktivierung in den schmalen Arbeitsspeicher 210 nach der Anwendung der Funktion geschrieben wird.
  • Die Rechenkachel 200 umfasst ferner einen Ausgangsaktvierungsbus 218, eine nicht-lineare Einheit (NLU) 222 mit einer Ausgangsaktivierungs-Pipeline 224, eine NLU-Steuerung 238 und eine Referenzabbildung 230, die ein Kernattribut einer Komponente in der Rechenkachel 200 angibt. Die Referenzabbildung 230 ist der Deutlichkeit halber gezeigt, ist jedoch nicht in der Rechenkachel 200 enthalten. Kernattribute umfassen, ob eine spezielle Komponente eine Einheit, eine Speichervorrichtung, ein Operator, eine Steuervorrichtung oder ein Datenpfad ist. Im Allgemeinen werden bei der Vollendung des ersten Teils der Tensorberechnungen Ausgangsaktivierungen von der MAC-Anordnung 214 zur NLU 222 über den Ausgangsaktivierungsbus 218 geliefert. Nach der Ankunft an der NLU 222 werden Daten, die eine Aktivierungsfunktion angeben, die über die Aktivierungs-Pipeline 224 empfangen wird, auf die Ausgangsaktivierungen angewendet und die Ausgangsaktivierungen werden dann in den schmalen Arbeitsspeicher 210 geschrieben. In einigen Implementierungen umfasst der Ausgangsaktivierungsbus 218 mindestens ein Pipeline-Schieberegister 236 und das Vollenden des zweiten Teils der Tensorberechnungen umfasst die Verwendung eines Schieberegisters 236 des Aktivierungsbusses 218, um Ausgangsaktivierungen in Richtung des schmalen Arbeitsspeichers 210 zu verschieben.
  • Im Hinblick auf Punktproduktberechnungen von beispielsweise zwei mehrdimensionalen Datenanordnungen für eine einzelne Rechenkachel 200 sieht die MAC-Anordnung 214 eine robuste Einzelbefehls-Mehrfachdaten-Funktionalität (SIMD-Funktionalität) vor. SIMD bedeutet im Allgemeinen, dass alle parallelen Einheiten (mehrere MAC-Operatoren 215) sich denselben Befehl teilen (auf der Basis der tiefen Schleifenverschachtelung), aber jeder MAC-Operator 215 den Befehl an verschiedenen Datenelementen ausführt. In einem Basisbeispiel erfordert das elementweise Addieren der Anordnungen [1,2,3,4] und [5,6,7,8], um die Anordnung [6,8,10,12] zu erhalten, in einem Zyklus typischerweise vier arithmetische Einheiten, um die Operation an jedem Element auszuführen. Unter Verwendung von SIMD können sich die vier Einheiten denselben Befehl (z. B. „Addieren“) teilen und Berechnungen parallel durchführen. Folglich sehen das System 100 und die Rechenkachel 200 eine verbesserte Beschleunigung und Parallelität bei Tensorberechnungen gegenüber früheren Verfahren vor.
  • In einem Beispiel und wie nachstehend genauer beschrieben, kann ein einzelner Befehl durch die Steuereinheit 102 zu mehreren Rechenkacheln 200 (siehe Kachelsätze 112, 114 von 1) für den Verbrauch durch mehrere MAC-Anordnungen 214 geliefert werden. Im Allgemeinen können Neuronalnetzschichten mehrere Ausgangsneuronen umfassen und die Ausgangsneuronen können unterteilt sein, so dass Tensorberechnungen, die einer Teilmenge von Ausgangsneuronen zugeordnet sind, einer speziellen Kachel der Kachelsätze 112, 114 zugewiesen werden können. Jede Kachel der Kachelsätze 112, 114 kann dann zugehörige Tensorberechnungen an verschiedenen Gruppen von Neuronen für eine gegebene Schicht durchführen. Die Rechenkachel 200 kann daher mindestens zwei Formen von Parallelität vorsehen: 1) eine Form umfasst die Unterteilung der Ausgangsaktivierungen (entsprechend der Teilmenge von Ausgangsneuronen) unter den mehreren Kacheln des Kachelsatzes 112, 114; und 2) eine andere Form umfasst die gleichzeitige Berechnung (mit einem einzigen Befehl) von mehreren Teilmengen von Ausgangsneuronen auf der Basis der Unterteilung unter den Kacheln der Kachelsätze 112, 114.
  • 3 stellt eine Beispieltensordurchlaufeinheitsstruktur (Beispiel-TTU-Struktur) 300 mit vier zu verfolgenden Tensoren jeweils mit einer Tiefe von acht dar. Die TTU 330 umfasst im Allgemeinen einen Zählertensor 320, einen Schritttensor 304, einen Initialisierungstensor 306 und einen Grenztensor 308. Die TTU 300 umfasst ferner eine Addiererbank 310 und einen Tensoradressenindex 312. Wie vorstehend beschrieben, ist ein Tensor ein mehrdimensionales geometrisches Objekt und zum Zugreifen auf ein Element des Tensors muss ein Index jeder Dimension bereitgestellt werden. Da der Tensor im schmalen Arbeitsspeicher 210 und breiten Arbeitsspeicher 212 gespeichert ist, muss ein Satz von Tensorindizes in einen Satz von Arbeitsspeicheradressen übersetzt werden. In einigen Implementierungen wird die Übersetzung der Indizes in Arbeitsspeicheradressen durchgeführt, indem die Arbeitsspeicheradressen zu einer linearen Kombination der Indizes gemacht werden und Adressen über den Tensoradressenindex 312 widergespiegelt werden.
  • Es ist eine TTU pro Steuer-Thread vorhanden und ein Steuer-Thread ist pro Befehlstyp (TensorOP und DMAOp) in der Rechenkachel 200 vorhanden. Wie vorstehend erörtert, sind folglich zwei Sätze von TTUs in der Rechenkachel 200 vorhanden: 1) TensorOp-TTU 226; und 2) DMAOp-TTU 228. In verschiedenen Implementierungen bewirkt die TensorOp-Steuerung 206, dass die TTU 300 die Werte des TensorOp-TTU-Zählers 302, der Grenze 308 und des Schritts 304 am Beginn einer speziellen Tensoroperation lädt, und ändert die Registerwerte nicht, bevor der Befehl zurückgezogen wird. Jede der zwei TTUs muss eine Adresse für die folgenden Arbeitsspeicheradressenports in der Rechenkachel 200 erzeugen: 1) Adressenports des breiten Arbeitsspeichers 212; und 2) schmaler Arbeitsspeicher 210, der vier unabhängig zugeteilte Bänke aufweist, die als vier Adressenports dargestellt sind.
  • Wie vorstehend erörtert, kann in einigen Implementierungen der schmale Arbeitsspeicher 210 einen Arbeitsspeicherzuteiler umfassen, der typischerweise in geteilten Arbeitsspeichersystemen verwendet wird, um für jeden Arbeitsspeicherzyklus zu entscheiden, welcher Steuervorrichtung (z. B. TensorOp-Steuerung 206 oder DMAOp-Steuerung 208) erlaubt wird, auf geteilte Arbeitsspeicherressourcen des schmalen Arbeitsspeichers 210 zuzugreifen. In einem Beispiel sind verschiedene Befehlstypen (TensorOp und DMAOp) unabhängige Steuer-Threads, die einen Arbeitsspeicherzugriff anfordern, der zugeteilt werden muss. Wenn ein spezieller Steuer-Thread ein Tensorelement zum Arbeitsspeicher übergibt, inkrementiert der Steuer-Thread die Zähler 302 der Tensorreferenz, die zum Arbeitsspeicher übergeben wurde.
  • In einem Beispiel kann, wenn die TensorOp-Steuerung 206 einen Befehl zum Zugreifen auf ein spezielles Element eines Tensors ausführt, die TTU 300 die Adresse des speziellen Elements des Tensors bestimmen, so dass die Steuerung 206 auf den Speicher, beispielsweise den schmalen Arbeitsspeicher 210, zugreifen kann, um Daten zu lesen, die einen Aktivierungswert des speziellen Elements darstellen. In einigen Implementierungen kann ein Programm eine verschachtelte Schleife umfassen und die Steuerung 206 kann einen Befehl ausführen, um auf ein Element einer zweidimensionalen Anordnungsvariable innerhalb der verschachtelten Schleife gemäß den aktuellen variablen Indexwerten zuzugreifen, die der verschachtelten Schleife zugeordnet sind.
  • Die TTU 300 kann den Durchlaufzustand für bis zu einer Anzahl X von TTU-Zeilen für (einen) gegebene(n) Tensor(en) gleichzeitig halten. Jeder Tensor, der sich gleichzeitig in der TTU 300 befindet, belegt einen zweckgebundenen Hardware-Tensorsteuerdeskriptor. Der Hardware-Steuerdeskriptor kann aus einer Anzahl X von TTU-Zählern 302 pro Zeilenposition, Schritt 304 und Grenzregistern 308 bestehen, die Tensoren mit bis zu einer Anzahl X von TTU-Zählern pro Zeilendimensionen unterstützen. In einigen Implementierungen können die Anzahl von Zeilen und die Anzahl von Zählern pro Zeile unterschiedlich sein.
  • Für ein gegebenes Positionsregister wird die Endarbeitsspeicheradresse aus einer Additionsoperation berechnet, die das Zusammenaddieren von Positionsregistern umfasst. Die Basisadresse wird in den Zähler 302 eingegliedert. Ein oder mehrere Addierer werden für Tensorreferenzen geteilt, die sich im gleichen Arbeitsspeicher befinden. In einer Implementierung ist es, da nur ein einzelnes Laden/Speichern an irgendeinem gegebenen Port in einem Zyklus stattfinden kann, eine Funktion der Schleifenverschachtelungssteuerung, um sicherzustellen, dass bei mehreren Tensorreferenzen, die sich im gleichen schmalen oder breiten Arbeitsspeicher befinden, nicht die Zähler in irgendeinem gegebenen Zyklus inkrementiert werden. Die Verwendung von Registern für die Berechnung von Arbeitsspeicherzugriffsadressenwerten, einschließlich der Bestimmung von Versatzwerten, ist in der Patentanmeldung lfd. Nr. 15/014 265 mit dem Titel „Matrix Processing Apparatus“, eingereicht am 3. Februar 2016, genauer beschrieben, deren ganze Offenbarung hiermit durch den Hinweis in ihrer Gesamthier hier ausdrücklich aufgenommen wird.
  • Das folgende sieht Vorlagenparameter vor, die verwendet werden können, um eine spezialisierte TTU 300 zu instanziieren: 1) Anzahl X von TTU-Zeilen; 2) Anzahl X von TTU-Zählern pro Zeile; 3) Anzahl X von TTU-Addierereinheiten; 4) pro TTU-Zeile Angeben von geteilter Addierreferenz; und 5) pro Zähler Angeben von X Zählergröße [TTU][Zeile][Tiefe]. Alle TTU-Register sind architektonisch sichtbar. Eine Adresse eines speziellen Tensorelements (d. h. Tensoradresse 312), auf die für die Berechnung zugegriffen werden muss, ist das Ergebnis der Addition der Zähler. Wenn ein Inkrementsignal aus dem Steuer-Thread einer Zeile der TTU ausgegeben wird, führt die TTU 300 eine Operation eines einzigen Zyklus aus und inkrementiert eine innerste Dimension um einen Schritt 304 dieser Dimension und breitet die überlappende Eingabe durch alle Tiefen aus.
  • Im Allgemeinen bestimmt die TTU 300 einen Status, der einem oder mehreren Tensoren zugeordnet ist. Der Status kann Schleifengrenzwerte, aktuelle Schleifenindexvariablenwerte, Dimensionsmultiplizierer zum Berechnen eines Arbeitsspeicherwerts und/oder Programmzählerwerte für die Handhabung von Zweigschleifengrenzen umfassen. Die TTU 300 kann ein oder mehrere Tensorstatuselemente und eine arithmetische Logikeinheit umfassen. Jedes der Tensorstatuselemente kann ein Speicherelement sein, beispielsweise ein Register oder irgendeine andere geeignete Speicherschaltungsanordnung. In einigen Implementierungen können die Tensorstatuselemente physikalisch oder logisch in verschiedenen Gruppen angeordnet sein.
  • 4 stellt eine Beispielarchitektur dar, die einen schmalen Arbeitsspeicher 210 umfasst, der Aktivierungen 404 über den Eingangsbus 216 zu einem oder mehreren Multiplikations-Akkumulations-Operatoren (MAC-Operatoren) rundsendet. Das Schieberegister 404 sieht eine Verschiebungsfunktionalität vor, wobei Aktivierungen 404 einzeln auf den Eingangsbus 216 für den Empfang durch einen oder mehrere MAC-Operatoren 215 in einer MAC-Zelle 410 ausgesendet werden. Im Allgemeinen können MAC-Zellen 410, einschließlich MAC-Operatoren 215, als Rechenzellen definiert sein, die eine Teilsumme berechnen und in einigen Implementierungen dazu konfiguriert sind, ein Teilsummendatenelement auf den Ausgangsbus 218 zu schreiben. Wie gezeigt, können die Zellen 410 aus einem oder mehreren MAC-Operatoren bestehen. In einer Implementierung wird die Anzahl von MAC-Operatoren 215 in einer MAC-Zelle 410 als Ausgabebreite der Zelle bezeichnet. Als Beispiel bezieht sich eine Doppelausgabezelle auf eine Zelle mit zwei MAC-Operatoren, die die Multiplikation von zwei Aktivierungswerten (vom schmalen Arbeitsspeicher 210) mit zwei Parametern (vom breiten Arbeitsspeicher 212) berechnen und eine Addition zwischen den Ergebnissen der zwei Multiplizierer und der aktuellen Teilsumme durchführen können.
  • Wie vorstehend beschrieben, ist der Eingangsbus 216 ein Rundsendebus, der Eingangsaktivierungen zu MAC-Operatoren 215 der linearen Einheit (d. h. MAC-Anordnung 214) liefert. In einigen Implementierungen wird dieselbe Eingabe zwischen allen MAC-Operatoren 215 geteilt. Die Breite des Eingangsbusses 216 muss breit genug sein, um die Rundsendeeingaben zur entsprechenden Anzahl von Zellen für eine gegebene MAC-Anordnung 214 zu liefern. Das folgende Beispiel soll betrachtet werden, um die Struktur des Eingangsbusses 216 darzustellen. Wenn die Anzahl von Zellen in der linearen Einheit gleich vier ist und die Aktivierungsbreite gleich acht Bits ist, kann der Eingangsbus 216 dazu konfiguriert sein, bis zu vier Eingangsaktivierungen in jedem Zyklus zu liefern. In diesem Beispiel greift jede Zelle in der MAC-Anordnung 214 nur auf eine der vier Aktivierungen zu, die rundgesendet werden.
  • Auf der Basis von TensorOp-Feldeinstellungen des Befehls, der durch die Rechenkachel 200 empfangen wird, müssen Zellen der MAC-Anordnung 214 nur Berechnungen unter Verwendung derselben Eingabeaktivierung durchführen. Dies kann als Zout-Unterteilung innerhalb einer Zelle der MAC-Anordnung 214 bezeichnet werden. Ebenso findet eine Zin-Unterteilung innerhalb einer Zelle statt, wenn die Zellen der MAC-Anordnung 214 verschiedene Aktivierungen benötigen, um Berechnungen durchzuführen. Im ersteren Fall wird die einzelne Eingangsaktivierung viermal repliziert und vier Aktivierungen, die aus dem schmalen Arbeitsspeicher 210 gelesen werden, werden über vier Zyklen rundgesendet. Im letzteren Fall ist ein Lesen des schmalen Arbeitsspeichers 210 in jedem Zyklus erforderlich. Für das vorstehend erwähnte Beispiel organisiert die TensorOp-Steuerung 206 diese Rundsendemethodologie auf der Basis der Ausführung von Befehlen, die von der Steuereinheit 102 empfangen werden.
  • 5 stellt eine Beispielarchitektur dar, die einen Ausgangsbus 218 zum Liefern von Ausgangsaktivierungen zu einer schmalen Arbeitsspeichereinheit 210 von 2 und 4 umfasst. Im Allgemeinen berechnet jede MAC-Zelle 215 der MAC-Anordnung 214 in der Rechenkachel 200 eine unterschiedliche Ausgangsaktivierung. Im Hinblick auf eine Ausgangsmerkmalsanordnung können jedoch in Fällen, in denen die Ausgangsmerkmalstiefe geringer ist als die Anzahl von MAC-Zellen 215 in einer Rechenkachel 200, Zellen gruppiert werden, um eine oder mehrere Zellengruppen zu bilden. Alle MAC-Zellen 215 in einer Zellengruppe berechnen dieselbe Ausgabe (d. h. für eine Ausgangsmerkmalsabbildung), jede Zelle berechnet jedoch nur eine Teilmenge der Ausgaben, die einer Teilmenge der Zin-Dimension entspricht. Folglich ist die Ausgabe einer MAC-Zelle 215 nun eine Teilsumme, nicht die endgültige lineare Ausgabe. In einer gewissen Implementierung aggregiert die NLU 222 diese Teilsummen zur endgültigen linearen Ausgabe auf der Basis eines Steuersignals, das durch die NLU-Steuerung 238 zur NLU 222 geliefert wird.
  • Wie vorstehend erörtert, ist der Ausgangsbus 218 ein Pipeline-Schieberegister. In verschiedenen Implementierungen, wenn ein erster Teil der Tensorberechnungen endet und die TensorOp-Steuerung 206 (durch Ausführen eines Befehls) angibt, dass eine Teilsumme herausgeschrieben werden muss, besteht eine parallele Last von Teilsummen, die zum Ausgangbus 218 geliefert werden. Die Anzahl von parallelen Lasten entspricht der Anzahl von MAC-Zellen in der Rechenkachel 200. Die TensorOp-Steuerung 206 bewirkt dann, dass die Teilsummengrößen ausgeschoben werden und durch die nicht-lineare Pipeline gesendet werden. In einigen Implementierungen können Umstände vorliegen, unter denen nicht alle MAC-Zellen in einer Kachel tatsächlich verwendet werden, um Berechnungen durchzuführen. Unter einem solchen Umstand sind nicht alle Teilsummen, die auf den Ausgangsbus verschoben werden, gültig. In diesem Beispiel kann die TensorOp-Steuerung 206 ein Steuersignal zur MAC-Anordnung 214 liefern, um die Anzahl von gültigen Zellen anzugeben, die herausgeschoben werden sollten. Die Größen der parallelen Last, die auf den Ausgangsbus 218 geladen werden, entsprechen immer noch der Anzahl von MAC-Zellen in der Rechenkachel, nur gültige Werte werden jedoch herausgeschoben und zum schmalen Arbeitsspeicher 210 übergeben.
  • 6 ist ein Beispielablaufplan des Prozesses 600 zum Durchführen von Tensorberechnungen unter Verwendung einer Neuronalnetz-Rechenkachel (NN-Rechenkachel), wie z. B. der Rechenkachel 200 von 2. Der Prozess 600 beginnt im Block 602 durch Laden von ausreichend Parametern in den zweiten Arbeitsspeicher auf dem Chip, um eine Latenz unter einem festgelegten Niveau und einen Durchsatz über einem festgelegten Niveau für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen. Der Durchsatz ist die maximale Leistungsfähigkeit, die in Gegenwart einer großen Anzahl von Anforderungen/Inferenzen erreicht wird. Die Latenz ist die minimale Zeit, die gebraucht wird, um eine einzelne Anforderung zu berechnen. Der Prozess 600 fährt im Block 604 fort und der schmale Arbeitsspeicher 210 der Rechenkachel 200 sendet (d. h. rundsendet) Aktivierungen nacheinander auf den Eingangsaktivierungsdatenbus 216. Aktivierungswerte werden in einem schmalen Arbeitsspeicher 210 gespeichert. Der schmale Arbeitsspeicher 210 kann eine Sammlung von statischen Direktzugriffsarbeitsspeicherbänken (SRAM-Bänken) sein, die eine Adressierung an spezielle Arbeitsspeicherstellen zum Zugreifen auf Eingangsgrößen ermöglichen. Die aus dem Arbeitsspeicher 210 gelesenen Aktivierungen 210 werden über den Eingangsaktivierungsbus 216 zu linearen Zellen der MAC-Anordnung 214 (d. h. der linearen Einheit) rundgesendet, die mehrere MAC-Operatoren 215 und Summenregister 220 umfassen. Im Block 606 des Prozesses 600 empfangen die MAC-Operatoren 215 der Rechenkachel 200 jeweils zwei Eingaben - eine Eingabe (eine Aktivierung) wird vom Eingangsaktivierungsbus 216 empfangen; und eine andere Eingabe (ein Parameter) wird vom breiten Arbeitsspeicher 212 empfangen. Folglich führen die Aktivierungen eine der Eingaben jedes MAC-Operators 215 zu und jeder MAC-Operator 215 in den Zellen der MAC-Anordnung 214 erhält seine zweite Multiplizierereingabe vom breiten Arbeitsspeicher 212.
  • Im Block 608 des Prozesses 600 führt die MAC-Anordnung 214 der Rechenkachel 200 Tensorberechnungen mit Punktproduktberechnungen auf der Basis von Elementen einer Datenanordnungsstruktur durch, auf die vom Arbeitsspeicher zugegriffen wird. Der breite Arbeitsspeicher 212 kann eine Breite in Bits aufweisen, die gleich der Breite der linearen Einheit ist (z. B. 32 Bits). Die lineare Einheit (LU) ist folglich eine arithmetische SIMD-Vektorlogikeinheit („ALU“), die Daten von einem Vektorarbeitsspeicher (d. h. breiten Arbeitsspeicher 212) empfängt. In einigen Implementierungen können MAC-Operatoren 215 auch ebenso die Akkumulatoreingaben (Teilsummen) vom breiten Arbeitsspeicher 212 erhalten. In einigen Implementierungen besteht eine Zeitteilung relativ zum Port des breiten Arbeitsspeichers 212 für Lesevorgänge und/oder Schreibvorgänge in Bezug auf die zwei verschiedenen Operanden (Parameter und Teilsumme). Um den Bereich zu optimieren, kann der breite Arbeitsspeicher 212 im Allgemeinen eine begrenzte Anzahl von Ports aufweisen. Wenn ein Bedarf besteht, gleichzeitig einen Operanden (z. B. einen Parameter) aus dem breiten Arbeitsspeicher 212 zu lesen und einen Operanden (z. B. eine Teilsumme) in den breiten Arbeitsspeicher 212 zu schreiben, kann folglich eine Pipeline, die einem speziellen Operanden zugeordnet ist, angehalten werden.
  • Im Block 610 erzeugt eine Rechenzelle (mit einem MAC-Operator 215 und einem Summenregister 220) der Rechenkachel 200 mindestens eine Ausgangsaktivierung auf der Basis von Multiplikationsoperationen, die durch die MAC/RechenZelle durchgeführt werden. Das Ergebnis von MAC-Zellenoperationen umfasst entweder Teilsummen, die in den Arbeitsspeicher zurückgeschrieben werden (während arithmetischer Teilsummenoperationen), oder Ausgangsaktivierungen, die zum Ausgangsbus 218 gesendet werden. Die NLU 222 der Rechenkachel 200 kann eine nicht-lineare Aktivierungsfunktion auf die Ausgangsaktivierungen anwenden und die Aktivierungen in den schmalen Arbeitsspeicher 210 schreiben. In einigen Implementierungen ist der Ausgangsbus 218 ein Schieberegister und kann eine parallele Last von Ergebnissen/Ausgangsaktivierungen vom MAC-Operator 215 akkumulieren und sie einzeln für die Anwendung der nicht-linearen Funktion und der Schreiboperation in den schmalen Arbeitsspeicher 210 derselben Kachel herausschieben.
  • Die in dieser Beschreibung beschriebenen Ausführungsformen machen von der folgenden zweigleisigen Beobachtung Gebrauch: 1) Ein Engpass der meisten Neuronalnetzbeschleuniger (NN-Beschleuniger) ist die Arbeitsspeicherbandbreite, die erforderlich ist, um die NN-Gewichte (auch als Parameter bekannt) zu laden; und 2) selbst wenn die Anzahl von Parametern in Produktionsmodellen groß ist, d. h. im Bereich von einigen KB bis einigen GB liegt, wobei die meisten Modelle im Bereich zwischen einigen MB bis einigen hundert MB liegen, liegen diese Zahlen innerhalb der Reichweite dessen, was in Hardware, einschließlich in einem Arbeitsspeicher auf dem Chip, z. B. unter Verwendung eines Arbeitsspeichers, der über Kacheln verteilt ist, implementiert werden kann.
  • Nur das Hinzufügen eines großen Arbeitsspeichers, z. B. eines Caches oder Notizblocks, auf dem Chip, um alle Parameter zu enthalten, ist nicht ausreichend. Das Ziel der Überwindung der Arbeitsspeicherbandbreitenbegrenzung besteht darin, die Leistungsfähigkeit der Architektur zu erhöhen. Dies bedeutet das Erhöhen der Anzahl von Operatoren, typischerweise MACs. Um eine hohe Leistungsfähigkeit zu erreichen, muss man jedoch diese Operatoren in jedem Zyklus mit Parametern versorgen können. Es ist auch wichtig, die „Leistungsfähigkeit“ nicht als nur Durchsatz, sondern auch Latenz zu verstehen, was für viele dem Benutzer gegenüberstehende Anwendungen der Fall ist.
  • Anders ausgedrückt ist es in einen Neuronalnetzbeschleuniger (NN-Beschleuniger) sehr aufwändig, Parameter mit einer Schicht auf einmal zu laden. Wenn die Parameter auf dem Chip vorgeladen werden können, dann ist alles, was geladen werden muss, die Aktivierungen zur Laufzeit. Mit anderen Worten, Ausführungsformen umfassen den Arbeitsspeicher auf dem Chip im großen Maßstab.
  • Die in dieser Beschreibung beschriebenen Ausführungsformen weisen eine Auswirkung auf den Betrieb und die Konstruktion des Neuronalnetzbeschleunigers (NN-Beschleunigers) auf. Ausführungsformen bearbeiten eine der merklichen Begrenzungen von Neuronalnetzbeschleunigerkonstruktionen, die Kombination von geringer Latenz und hohem Durchsatz. Es soll beachtet werden, dass ein NN-Beschleuniger ein ganzes Neuronalnetz darstellen soll. Am Eingang befinden sich einige Daten, z. B. ein kleines Bild oder Klang. Der NN-Beschleuniger führt die Schichten nacheinander aus. Was hinsichtlich der Leistungsfähigkeit und Energie aufwändig ist, besteht darin, die Parameter der Schicht nacheinander zu laden. Der NN-Beschleuniger lädt die Parameter einer Schicht, führt die Berechnung durch, hält die Ausgabe der Schicht und lädt dann die Parameter der nächsten Schicht; genau in diesem Prozess wird die meiste Arbeitsspeicherbandbreite verbraucht.
  • Das Setzen der Parameter resident auf dem Chip verringert drastisch die Latenz in Anbetracht eines hohen Durchsatzes und eines gegebenen NN-Modells und einer gegebenen NN-Architektur. Der Beschleuniger muss nur die wenigen Bytes des Klangs laden, dann kann der Beschleuniger äußerst schnell funktionieren. Der Beschleuniger benötigt keine hohe Arbeitsspeicherbandbreite und die Energie sinkt.
  • Das Von-Neumann-Modell, in dem der Arbeitsspeicher vom Arbeitsspeicher zur CPU geladen wird, ist eine übliche Architektur. Eine solche klassische Von-Neumann-artige Architektur, in der sich der Arbeitsspeicher an einem Ende des Chips und die Rechenoperatoren am anderen Ende des Chips befinden, wäre unpraktisch, wenn nicht unmöglich, mit einer großen Anzahl von Operatoren, da es eine ungeheure Anzahl von Drähten implizieren würde, um die Daten vom Arbeitsspeicher (oder Arbeitsspeicherbänken) zu den Operatoren zu leiten. Stattdessen nutzen Ausführungsformen der Erfindung die Arbeitsspeicherlokalitätseigenschaften von NN-Berechnungen, um die Architektur in einer gekachelten Organisation anzuordnen (wie in 2 und 8 gezeigt), wobei der Arbeitsspeicher über die Kacheln verteilt ist.
  • NNs sind groß, aber nicht riesig, so dass man nahe an den Punkt gelangen kann, an dem man alle Parameter eines oder einiger NNs effektiv auf dem Chip anpassen kann. NN-Beschleuniger bewegen sich zu Architekturen, die eigenständig sind. In Anbetracht einer Kachelarchitektur kann man den Arbeitsspeicher innerhalb des Chips unterteilen. Anstatt einen großen SRAM in einer Ecke des Chips zu haben, weisen Ausführungsformen den richtigen SRAM zu jeder Kachel zu und vermeiden ebenso Bandbreitenprobleme auf dem Chip. In bestimmten Ausführungsformen enthält ein breiter Arbeitsspeicher in jeder Kachel die Parameter und ein breiter Ring (ungefähr mit einer ähnlichen Breite wie der breite Arbeitsspeicher) versorgt die breiten Arbeitsspeicher mit hoher Bandbreite. Die in dieser Beschreibung beschriebenen Ausführungsformen ziehen Architekturvariationen in Betracht. In Abhängigkeit von den NN-Schichteigenschaften können Ausführungsformen mindestens die folgenden zwei NN-Architekturen aufweisen.
  • Für Neuronalnetze, die weitgehend aus vollständig verbundenen Schichten bestehen, besteht weniger Wiederverwendung der Parameter über Schichten. Neuronen in einer vollständig verbundenen Schicht weisen vollständige Verbindungen mit allen Aktivierungen in der vorherigen Schicht auf. Ein vollständig verbundenes Neuronalnetz soll betrachtet werden, in dem Parameter nicht wiederverwendet werden (der Fall einer Nicht-Chargen-Verarbeitung soll betrachtet werden, d. h. Echtzeit-Anwendungen). Wenn alle Parameter nicht innerhalb der breiten Arbeitsspeicher enthalten sind, müssen die Parameter aus einem externen Arbeitsspeicher über einen Ringbus abgerufen werden. In diesem Fall wird die Leistungsfähigkeit der Gesamtkonstruktion durch die Bandbreite des externen Arbeitsspeichers begrenzt. Wenn sich alle Parameter in den breiten Arbeitsspeichern befinden, dann ist kein Zugriff auf den externen Arbeitsspeicher erforderlich, und alle Operatoren können mit Parametern in jedem Zyklus versorgt werden, wobei eine maximale Leistungsfähigkeit erreicht wird. Anstelle der Verwendung nur eines externen Arbeitsspeichers zum Abrufen von Parametern halten in dieser Beschreibung beschriebene Ausführungsformen die Parameter im breiten Arbeitsspeicher resident.
  • Als Beispiel soll ein Modell mit 50M Parametern (oder 50 MB der Einfachheit halber) in vollständig verbundenen Schichten betrachtet werden. Ein Beschleuniger soll betrachtet werden mit 16384 MACs, die mit 1 GHz arbeiten. Es soll betrachtet werden, dass die Eingabe in das Modell 16 KB ist. Alle Werte sind für aktuelle Anwendungen vernünftig. Die maximale Leistungsfähigkeit entspricht der Ausführung des Modells in: 50*10^6 / (16384 * 10^9) = 3,05*10^-6 Sekunden. Dies entspricht wiederum einer Arbeitsspeicherbandbreite von (50*10^6 + 16384) / (3,05*10^-6) = 16.40 TB/s. Als Vergleichspunkt schaffen typische DRAM-Chips ungefähr in der Größenordnung von 10 GB/s, ein Arbeitsspeicher mit hoher Bandbreite (HBM) des Standes der Technik schafft ungefähr 256 GB/s.
  • Faltungsneuronalnetze übergeben Parameter von einer Kachel zur anderen. Für Neuronalnetze, die weitgehend aus Faltungsschichten bestehen, wobei Parameter über Neuronen (auch als Aktivierungen bekannt) wiederverwendet werden, sind die Arbeitsspeicherbandbreiteanforderungen weniger hoch, aber immer noch gewöhnlich höher als ein typischer externer Arbeitsspeicher. Die Ringbandbreite kann ausreichen, um die Parameter in die Kachel zu laden, vorausgesetzt, dass sie mit einem großen Arbeitsspeicher auf dem Chip mit derselben Breite wie der Ring verbunden ist. Anders ausgedrückt, für jede Inferenz müssen die Kacheln auf alle Parameter des Modells zugreifen/diese laden; dies gilt für ein beliebiges Modell. Der einzige Unterschied für vollständig verbundene Schichten in einem Neuronalnetz besteht darin, dass jeder Parameter nur einmal während einer Inferenz verwendet wird; für Faltungsschichten werden die Parameter mehrere Male innerhalb der Schicht verwendet.
  • Als Beispiel soll ein Modell mit 50M Parametern in Faltungsschichten betrachtet werden. Einige dieser Schichten können ziemlich klein, andere groß enden, so dass die Wiederverwendung der Parameter variiert; ein angemessener Mittelwert über das Modell ist ~ 100 Wiederverwendungen pro Parameter. Unter Verwendung derselben Begründung wie vorstehend würde folglich die Bandbreitenanforderung auf 16,40 TB/s / 100 ~ 164 GB/s fallen. Die Bandbreitenanforderung bleibt für kosteneffiziente DRAMs immer noch hoch. Mit der obigen Architektur kann jedoch ein 164*8=1312 Bit breiter Ring, der mit einem großen Arbeitsspeicher mit derselben Breite verbunden ist, die Kacheln mit der zweckmäßigen Geschwindigkeit bedienen.
  • Eine erste Ausführungsform soll betrachtet werden, in der der Arbeitsspeicher groß genug ist, um alle Parameter der Schichten in einem vollständig verbundenen Modell zu enthalten. Wenn alle Kacheln gleichzeitig auf einer Schicht arbeiten sollen, müssen die Parameter über die Kacheln verteilt werden. Ausführungsformen unterteilen die Ausgangs-Neuronen/Aktivierungen jeder Schicht über die Kacheln; während der Ausführung verarbeitet jede Kachel eine Teilmenge der Schicht, berechnet die entsprechende Teilsumme und übergibt sie an ihren Nachbarn, d. h. die Teilsummen rotieren um den Ring, und nach einer vollständigen Rotation erzeugen die Kacheln die Endsumme.
  • Eine zweite Ausführungsform umfasst das Vorladen/Cachen derselben Teilmenge der (aktuell verwendeten) Parameter in allen Kacheln, da die Kacheln dieselben Parameter gleichzeitig verwenden. Während der Ausführung rotieren die Parameter (Teilmenge), nicht die Aktivierungsteilsummen, um den Ring.
  • Die Anzahl von Kacheln ist ein Skalierungsfaktor. Man kann eine starke Skalierung durch Verbessern der Latenz und des Durchsatzes ohne Erhöhen der Arbeitsspeicheranforderungen unter Verwendung der in dieser Beschreibung beschriebenen Ausführungsformen erreichen. Die Stapelverarbeitung von Kacheln zusammen, um die Rechenfähigkeit zu skalieren, erhöht jedoch die Arbeitsspeicheranforderungen und die erforderliche Anzahl von Aktivierungen. Es ist schwierig, eine Skalierung vom Chargentyp durchzuführen, ohne die Arbeitsspeicherbandbreite über herkömmliche Arbeitsspeicheroptionen hinaus zu erhöhen. Die Stapelverarbeitung beinhaltet häufig Echtzeitanwendungen und beinhaltet sowohl Latenzals auch Durchsatzanforderungen.
  • Es ist erwähnenswert, dass das Vorhandensein von Parametern in einem Cache anders ist als das Vorhandensein von Parametern im breiten Arbeitsspeicher als Teil einer Kachelanordnung. Das Vorhandensein einer Kachelanordnung, wie in dieser Beschreibung beschrieben, schafft eine Lokalität vom Kompilierungstyp. Das Setzen von vollständig verbundenen Modellen neben den SRAM führt beispielsweise zu einer größeren internen Bandbreite gegenüber einem Cache-Modell.
  • Die in dieser Beschreibung beschriebenen Ausführungsformen arbeiten schneller als herkömmliche Neuronalnetzbeschleuniger. Bestimmte Ausführungsformen weisen mehr Operatoren auf; um die Operatoren zu versorgen, benötigen die Beschleuniger mehr interne Bandbreite. Um diesen Bedarf anzugehen, verteilt die Architektur den Arbeitsspeicher und bringt die Parameter auf den Beschleuniger.
  • Die größten aktuellen Chips sind etwa 650 Quadratmillimeter. Folglich bestehen Begrenzungen dessen, wie viel SRAM auf dem Chip vorhanden sein kann. Ausführungsformen umfassen die Verwendung eines dichten Arbeitsspeichers in gegebenen Raumeinschränkungen, einschließlich der Verwendung von 3D-Stapelung.
  • Die in dieser Beschreibung beschriebenen Ausführungsformen gelten sowohl für den Inferenzmodus (nachtrainierten Modus) als auch den Trainingsmodus.
  • Als hinzugefügte Abstufung besteht ein anderes Hierarchieniveau; es besteht eine Arbeitsspeicherhierarchie und es besteht auch typischerweise eine Registerdateihierarchie. Parameter werden in das Register geladen und dann wird das Register wiederverwendet, um eine Arbeitsspeicherbandbreitenerweiterung zu erreichen; es gibt Arbeitsspeicherbandbreite in der Registerdatei sowie im Arbeitsspeicher. Mit anderen Worten, es bestehen hinzugefügte Kosteneinsparungen, d. h. die Verringerung der Verdrahtung vom Arbeitsspeicher zur Registerdatei und dann von der Registerdatei zur Berechnung. In Ausführungsformen, die in dieser Beschreibung beschrieben sind, bestehen verringerte Verdrahtungskosten, die der Registerdatei zugeordnet sind; Parameter werden außerhalb des SRAM direkt zur Adressierung verbraucht. Mit anderen Worten, der Arbeitsspeicher versorgt die ALUs direkt.
  • 7 zeigt ein Blockdiagramm einer alternativen Ausführungsform eines Rechensystems 700 zum Beschleunigen von Tensorberechnungen, die tiefen Neuronalnetzen (DNNs) zugeordnet sind. Das System 700 umfasst im Allgemeinen eine Steuereinheit/einen Uncore 702, eine Arbeitsspeicherschnittstelle 708, mehrere Kacheln mit einem ersten Kachelsatz 712 und einem zweiten Kachelsatz 714. Die Steuereinheit 702 umfasst im Allgemeinen einen Datenarbeitsspeicher 704, einen Befehlsarbeitsspeicher 706 und mindestens einen Prozessor, der dazu konfiguriert ist, einen oder mehrere Befehle auszuführen, die in einem computerlesbaren Speichermedium codiert sind. Der Befehlsarbeitsspeicher 706 kann einen oder mehrere maschinenlesbare Befehle speichern, die durch den einen oder die mehreren Prozessoren der Steuereinheit 702 ausführbar sind. Der Datenarbeitsspeicher 704 kann irgendeines von einer Vielfalt von Datenspeichermedien zum Speichern und anschließenden Zugreifen auf eine Vielfalt von Daten in Bezug auf Berechnungen, die innerhalb des Systems 700 stattfinden, sein.
  • Die Steuereinheit 702 ist dazu konfiguriert, einen oder mehrere Befehle in Bezug auf Tensorberechnungen innerhalb des Systems 700 auszuführen, einschließlich Befehlen, die im Befehlsarbeitsspeicher 706 gespeichert sind. In einigen Implementierungen sind der Datenarbeitsspeicher 704 und der Befehlsarbeitsspeicher 706 eine flüchtige Arbeitsspeichereinheit oder flüchtige Arbeitsspeichereinheiten. In gewissen anderen Implementierungen sind der Datenarbeitsspeicher 704 und der Befehlsarbeitsspeicher 706 eine nichtflüchtige Arbeitsspeichereinheit oder nichtflüchtige Arbeitsspeichereinheiten. Der Datenarbeitsspeicher 704 und der Befehlsarbeitsspeicher 706 können auch eine andere Form von computerlesbarem Medium sein, wie z. B. eine Diskettenvorrichtung, eine Festplattenvorrichtung, eine optische Plattenvorrichtung oder eine Bandvorrichtung, ein Flash-Arbeitsspeicher oder eine andere ähnliche Halbleiter-Arbeitsspeichervorrichtung oder eine Anordnung von Vorrichtungen, einschließlich Vorrichtungen in einem Speicherbereichsnetz oder anderen Konfigurationen. In verschiedenen Implementierungen kann die Steuereinheit 702 auch als Kernmanager 702 ausgewiesen oder bezeichnet werden.
  • Die Arbeitsspeicherschnittstelle 708 empfängt Befehle und Datenparameter von einer E/A-Verbindung und liefert Befehle und Parameter zur Steuereinheit 702. Im Allgemeinen können Befehle zu einer oder mehreren Vorrichtungen im System 700 durch den Befehlsbus (der Befehlsbus zwischen der Steuereinheit und den Kacheln ist nicht gezeigt) geliefert werden und Parameter können zu einer oder mehreren Vorrichtungen im System 700 durch den Ringbus 728 geliefert werden. In einigen Implementierungen werden Befehle durch die Steuereinheit 702 von der Host-Schnittstelle 708 zu einer anfänglichen Zeit empfangen und im Befehlsarbeitsspeicher 706 für die Ausführung durch die Steuereinheit 702 zu einer späteren Zeit gespeichert.
  • Der Ringbus 728 entspringt von der Steuereinheit 102 und sieht eine Kommunikationskopplung durch einen Busdatenpfad vor, der die Kacheln 712, 714 in einem Ring zur Steuereinheit 702 zurück verbindet. In verschiedenen Implementierungen verbindet oder koppelt der Ringbus 728 im Allgemeinen alle breiten Arbeitsspeichereinheiten in allen Kacheln 712, 714. Folglich entspricht eine Nutzinformationsbreite des Ringbusses 728 der Breite der breiten Arbeitsspeichereinheiten, die innerhalb jeder Kachel der Kachelsätze 712, 714 angeordnet sind. Wie vorstehend erörtert, umfasst der Ringbus 728 auch einen Bitmap-Kopf, der die Kacheln angibt, die Nutzinformationsdaten mit Befehlen oder Parametern, die über den Ringbus 728 übermittelt werden, verbrauchen müssen.
  • Im Hinblick auf Daten (d. h Nutzinformationen), die an einer speziellen Kachel über den Ringbus 728 empfangen werden, stellt in Reaktion auf das Empfangen der Informationen jede Kachel Positionsdaten auf null (d. h. räumt sie aus), die im Bitmap-Kopf angegeben sind, der für die empfangende Kachel eindeutig ist, vor dem Weiterleiten der Daten zu einer anderen Kachel. Wenn das Kopf-Bitmap keine restlichen Bitsatzdaten aufweist, die eine spezielle Kachel angeben, die die Nutzinformationen empfangen soll, stoppt daher das Weiterleiten der Nutzinformationen zu einer anderen Kachel. Nutzinformationsdaten beziehen sich im Allgemeinen auf Aktivierungen und Gewichte, die von einer oder mehreren Kacheln während Tensorberechnungen verwendet werden, die auf der Basis der Ausführung von tief verschachtelten Schleifen durchgeführt werden.
  • In einigen Implementierungen kann die Steuereinheit 702 als Teil des Ringbusses 728 beschrieben werden. In einem Beispiel kann für DMAOp-Befehle, die innerhalb einer speziellen Kachel ausgeführt werden, die Steuereinheit 702 verwendet werden, um die Daten/Nutzinformationen von Ringbusstopps hervorzuholen und die Nutzinformationen zu einem Ringbusstopp in einer nächsten Kachel im Ring weiterzuleiten. Die Steuereinheit 702 kann auch bewirken, dass die Nutzinformationsdaten zu einer oder mehreren breiten Arbeitsspeichereinheiten der Kachel übergeben werden, wenn eine solche Handlung durch Befehle im Bitmap-Kopf erforderlich ist. Die Adresse der einen oder der mehreren breiten Arbeitsspeichereinheiten, in die die Daten geschrieben werden müssen, können durch DMAOp-Befehle innerhalb der speziellen Kachel erzeugt werden.
  • In verschiedenen Implementierungen kann jede Kachel des Kachelsatzes 712, 714 entweder ein Erzeuger von Nutzinformationsdaten oder ein Verbraucher von Nutzinformationsdaten sein. Wenn eine Kachel ein Erzeuger von Nutzinformationsdaten ist, liest die Kachel die Daten von einer oder mehreren ihrer breiten Arbeitsspeichereinheiten und sendet die Daten per Multicast über den Ringbus 728 für den Verbrauch durch eine oder mehrere andere Kacheln. Wenn eine Kachel ein Verbraucher von Nutzinformationsdaten ist, empfängt und schreibt die Kachel die Daten in eine oder mehrere breite Arbeitsspeichereinheiten innerhalb der Kachel und leitet die Nutzinformationsdaten für den Verbrauch durch eine oder mehrere andere Kacheln weiter. Im Hinblick auf die Bewegung der Nutzinformationsdaten über den Ringbus 728 ist typischerweise nur ein Erzeuger/Master von Daten auf dem Ringbus 728 zu irgendeiner gegebenen Zeit vorhanden. Die DMAOp-Befehlsausführungsreihenfolge (z. B. FIFO-Steuerschema) in allen Kacheln stellt sicher, dass nur ein Erzeuger/Master von Daten auf dem Ringbus 728 zu einer gegebenen Zeit vorhanden ist.
  • In einigen Implementierungen verwendet die Steuereinheit 702 eine Synchronisations-Flag-Steuerarchitektur, um sicherzustellen, dass nur ein Erzeuger/Master von Nutzinformationsdaten auf dem Ringbus 728 zu einer gegebenen Zeit vorhanden ist. In einem Beispiel löst jedes Schreiben durch eine Kachel auf einen Ringausgang ein Inkrement des entsprechenden Synchronisations-Flag-Zählwerts aus. Die Steuereinheit 702 kann die Nutzinformationsdaten untersuchen, um die Anzahl von Datenstücken oder Datensegmenten zu bestimmen, die die Nutzinformationen bilden. Die Steuereinheit 702 überwacht dann die Ausführung durch die Kachel, um sicherzustellen, dass die erwartete Anzahl von Datensegmenten durch die Kachel weitergeleitet und/oder verbraucht wird, bevor eine andere Kachel im Mastermodus ausführt.
  • Eine Ausnahme für das Sicherstellen, dass nur ein Erzeuger/Master von Daten auf dem Ringbus 728 zu einer gegebenen Zeit vorhanden ist, tritt auf, wenn lokale Multicast-Gruppen vorhanden sind, die über den Ringbus 728 verbunden sind, die keinen überlappenden Bereich auf dem Ringbus aufwiesen. Eine wichtige Anforderung dieser dualen Master-Multicast-Methodologie besteht darin, dass verschiedenen Multicast-Gruppen nicht erlaubt werden darf, die gegenseitigen Datenpakete zu sehen, da eine Paketüberlappung auftreten kann und zu einem oder mehreren Datenberechnungsfehlern führen kann.
  • Im Gegensatz zu 1 sind die Kacheln von 7 durch den Ringbus in einer Zickzack- oder Serpentinenweise verbunden, während die Kacheln selbst ein quadratisches Muster bilden. In den dargestellten Ausführungsformen umfasst der Beschleuniger 8 bzw. 16 Kacheln. In alternativen Ausführungsformen kann der Beschleuniger mehr Kacheln umfassen.
  • 8 ist eine vereinfachte Darstellung der Rechenkachel von 2.
  • 9 ist ein Beispielablaufplan eines Prozesses 900 zum Durchführen von Tensorberechnungen unter Verwendung einer Neuronalnetzrechenkachel (NN-Rechenkachel) wie z. B. der Rechenkachel 200 von 2. Der Prozess 900 beginnt im Block 902 durch Laden von NN-Gewichtsparametern in einen NN-Beschleuniger z. B. vor der Ausführung. Der Prozess 900 fährt im Block 904 durch Verarbeiten von Eingaben in den Beschleuniger im Wesentlichen ohne Zugreifen auf Neuronalnetzgewichtsparameter außerhalb des Beschleunigers fort. Im Block 906 erzeugt der Prozess mindestens eine Ausgangsaktivierung auf der Basis der Verarbeitung von Eingaben in den Beschleuniger.
  • Ausführungsformen des Gegenstandes und der Funktionsoperationen, die in dieser Beschreibung beschrieben sind, können in einer digitalen elektronischen Schaltungsanordnung, in konkret verkörperter Computer-Software oder Computer-Firmware, in Computer-Hardware, einschließlich der in dieser Beschreibung offenbarten Strukturen und ihren Strukturäquivalenten, oder in Kombinationen von einem oder mehreren von ihnen implementiert werden. Ausführungsformen des in dieser Beschreibung beschriebenen Gegenstandes können als ein oder mehrere Computerprogramme, d. h. ein oder mehrere Module von Computerprogrammbefehlen, die auf einem konkreten nichttransitorischen Programmträger codiert sind, für die Ausführung durch oder zum Steuern des Betriebs einer Datenverarbeitungseinrichtung implementiert werden. Alternativ oder zusätzlich können die Programmbefehle auf einem künstlich erzeugten ausgebreiteten Signal codiert sein, z. B. einem durch eine Maschine erzeugten elektrischen, optischen oder elektromagnetischen Signal, das erzeugt wird, um Informationen für die Übertragung zu einer geeigneten Empfängereinrichtung für die Ausführung durch eine Datenverarbeitungseinrichtung zu codieren. Das Computerspeichermedium kann eine maschinenlesbare Speichervorrichtung, ein maschinenlesbares Speichersubstrat, eine Direkt- oder Serienzugriffsarbeitsspeichervorrichtung oder eine Kombination von einem oder mehreren von ihnen sein.
  • Die Prozesse und Logikabläufe, die in dieser Beschreibung beschrieben sind, können durch einen oder mehrere programmierbare Computer durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Funktionen durch Verarbeiten von Eingangsdaten und Erzeugen einer (von) Ausgabe(n) durchzuführen. Die Prozesse und Logikabläufe können auch durch eine Speziallogikschaltungsanordnung, z. B. ein FPGA (anwenderprogrammierbares Verknüpfungsfeld), eine ASIC (anwendungsspezifische integrierte Schaltung) oder eine GPGPU (Universalgraphikverarbeitungseinheit) durchgeführt werden und die Einrichtung kann auch als solche implementiert werden.
  • Computer, die für die Ausführung eines Computerprogramms geeignet sind, umfassen als Beispiel, können auf Universal- oder Spezialmikroprozessoren oder beiden oder irgendeiner anderen Art von Zentraleinheit basieren. Im Allgemeinen empfängt eine Zentraleinheit Befehle und Daten von einem Festwertarbeitsspeicher oder einem Direktzugriffsarbeitsspeicher oder beiden. Die wesentlichen Elemente eines Computers sind eine Zentraleinheit zum Durchführen oder Ausführen von Befehlen und eine oder mehrere Arbeitsspeichervorrichtungen zum Speichern von Befehlen und Daten. Im Allgemeinen umfasst ein Computer auch oder ist wirksam gekoppelt zum Empfangen von Daten von oder Übertragen von Daten zu oder beides einer oder mehreren Massenspeichervorrichtungen zum Speichern von Daten, z. B. magnetische, magnetooptische Platten oder optische Platten. Ein Computer muss jedoch nicht solche Vorrichtungen aufweisen.
  • Computerlesbare Medien, die zum Speichern von Computerprogrammbefehlen und Daten geeignet sind, umfassen alle Formen eines nichtflüchtigen Arbeitsspeichers, von Medien und Arbeitsspeichervorrichtungen, einschließlich als Beispiel Halbleiterarbeitsspeichervorrichtungen, z. B. EPROM, EEPROM und Flash-Arbeitsspeichervorrichtungen, Magnetplatten, z. B. interne Festplatten oder entnehmbare Platten. Der Prozessor und der Arbeitsspeicher können durch eine Speziallogikschaltungsanordnung ergänzt sein oder in diese eingebaut sein.
  • Obwohl diese Beschreibung viele spezielle Implementierungsdetails enthält, sollten diese nicht als Begrenzungen für den Schutzbereich irgendeiner Erfindung oder dessen, was beansprucht sein kann, sondern vielmehr als Beschreibungen von Merkmalen, die für spezielle Ausführungsformen von speziellen Erfindungen spezifisch sein können, aufgefasst werden. Bestimmte Merkmale, die in dieser Beschreibung im Zusammenhang mit separaten Ausführungsformen beschrieben sind, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Dagegen können verschiedene Merkmale, die im Zusammenhang mit einer einzelnen Ausführungsform beschrieben sind, auch in mehreren Ausführungsformen separat oder in irgendeiner geeigneten Unterkombination implementiert werden. Obwohl Merkmale vorstehend als in bestimmten Kombinationen wirkend beschrieben sein können und sogar anfänglich als solche beansprucht sein können, können überdies ein oder mehrere Merkmale von einer beanspruchten Kombination in einigen Fällen von der Kombination ausgeschnitten werden und die beanspruchte Kombination kann auf eine Unterkombination oder Variation einer Unterkombination gerichtet sein.
  • Obwohl Operationen in den Zeichnungen in einer speziellen Reihenfolge dargestellt sind, sollte dies ebenso nicht als erfordernd verstanden werden, dass solche Operationen in der gezeigten speziellen Reihenfolge oder in einer sequentiellen Reihenfolge durchgeführt werden, oder dass alle dargestellten Operationen durchgeführt werden, um wünschenswerte Ergebnisse zu erreichen. Unter bestimmten Umständen können Multitasking- und Parallelverarbeitung vorteilhaft sein. Überdies sollte die Trennung von verschiedenen Systemmodulen und Komponenten in den vorstehend beschriebenen Ausführungsformen nicht als eine solche Trennung in allen Ausführungsformen erfordernd verstanden werden und es sollte selbstverständlich sein, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen in einem einzelnen Software-Produkt miteinander integriert sein können oder in mehrere Software-Produkte gepackt sein können.
  • Spezielle Ausführungsformen des Gegenstandes wurden beschrieben. Andere Ausführungsformen liegen innerhalb des Schutzbereichs der folgenden Ansprüche. Die in den Ansprüchen angeführten Handlungen können beispielsweise in einer anderen Reihenfolge durchgeführt werden und dennoch wünschenswerte Ergebnisse erreichen. Als ein Beispiel erfordern die in den begleitenden Figuren dargestellten Prozesse nicht notwendigerweise die gezeigte spezielle Reihenfolge oder sequentielle Reihenfolge, um wünschenswerte Ergebnisse zu erreichen. In bestimmten Implementierungen können Multitasking- und Parallelverarbeitung vorteilhaft sein.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 62544171 [0001]

Claims (20)

  1. Beschleuniger zum Beschleunigen von Tensorberechnungen, der umfasst: a. Eine Recheneinheit; b. eine erste Arbeitsspeicherbank zum Speichern von Eingangsaktivierungen und/oder Ausgangsaktivierungen; c. eine zweite Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern („NN“-Parametern), die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, eine ausreichende Menge der Neuronalnetzparameter in der Recheneinheit zu speichern, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen; d. mindestens eine Zelle mit mindestens einem Multiplikations-Akkumulations-Operator („MAC“-Operator), der Parameter von der zweiten Arbeitsspeicherbank empfängt und Berechnungen durchführt; e. eine erste Durchlaufeinheit in Datenkommunikation mit zumindest der ersten Arbeitsspeicherbank, wobei die erste Durchlaufeinheit dazu konfiguriert ist, ein Steuersignal zur ersten Arbeitsspeicherbank zu liefern, um zu bewirken, dass eine Eingangsaktivierung zu einem Datenbus geliefert wird, der für den MAC-Operator zugänglich ist; und f. wobei der Beschleuniger eine oder mehrere Berechnungen durchführt, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen durch den MAC-Operator durchgeführt werden und teilweise eine Multiplikationsoperation der Eingangsaktivierung, die vom Datenbus empfangen wird, und eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen.
  2. Beschleuniger nach Anspruch 1, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 100000 Parameter zu speichern.
  3. Beschleuniger nach Anspruch 1 oder 2, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 1000000 Parameter zu speichern.
  4. Beschleuniger nach einem der vorangehenden Ansprüche, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 100000000 Parameter zu speichern.
  5. Beschleuniger nach einem der vorangehenden Ansprüche, wobei die zweite Arbeitsspeicherbank einen SRAM umfasst.
  6. Beschleuniger nach einem der vorangehenden Ansprüche, wobei der Beschleuniger mehrere Recheneinheiten umfasst, wobei jede Recheneinheit umfasst: a. eine erste Arbeitsspeicherbank zum Speichern von Eingangsaktivierungen und/oder Ausgangsaktivierungen; b. eine zweite Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern („NN“-Parametern), die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, eine ausreichende Menge der Neuronalnetzparameter in der Recheneinheit zu speichern, um eine Latenz unter einem festgelegten Niveau mit einem Durchsatz über einem festgelegten Niveau für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen; c. mindestens eine Zelle mit mindestens einem Multiplikations-Akkumulations-Operator („MAC“-Operator), der Parameter von der zweiten Arbeitsspeicherbank empfängt und Berechnungen durchführt; d. eine erste Durchlaufeinheit in Datenkommunikation mit zumindest der ersten Arbeitsspeicherbank, wobei die erste Durchlaufeinheit dazu konfiguriert ist, ein Steuersignal zur ersten Arbeitsspeicherbank zu liefern, um zu bewirken, dass eine Eingangsaktivierung zu einem Datenbus geliefert wird, der für den MAC-Operator zugänglich ist; und e. wobei die Recheneinheit eine oder mehrere Berechnungen durchführt, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen durch den MAC-Operator durchgeführt werden und teilweise eine Multiplikationsoperation der Eingangsaktivierung, die vom Datenbus empfangen wird, und eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen.
  7. Beschleuniger nach einem der vorangehenden Ansprüche, wobei die zweite Arbeitsspeicherbank einen 3D-SRAM umfasst.
  8. Computerimplementiertes Verfahren zum Beschleunigen von Tensorberechnungen, das umfasst: a. Senden einer ersten Eingangsaktivierung durch eine erste Arbeitsspeicherbank in Reaktion darauf, dass die erste Arbeitsspeicherbank ein Steuersignal von einer ersten Durchlaufeinheit empfängt, wobei die erste Arbeitsspeicherbank in einer Recheneinheit angeordnet ist, und wobei die erste Eingangsaktivierung durch einen Datenbus geliefert wird, der für mindestens eine Zelle der Recheneinheit zugänglich ist; b. Empfangen von einem oder mehreren Parametern durch die mindestens eine Zelle von einer zweiten Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern („NN“-Parametern), die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank eine ausreichende Menge der Neuronalnetzparameter in der Recheneinheit speichert, um eine Latenz unter einem festgelegten Schwellenwert mit einem Durchsatz über einem festgelegten Schwellenwert für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen, und wobei die mindestens eine Zelle mindestens einen Multiplikations-Akkumulations-Operator („MAC“-Operator) umfasst; und c. Durchführen von einer oder mehreren Berechnungen durch den MAC-Operator, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen teilweise eine Multiplikationsoperation zumindest der ersten Eingangsaktivierung, auf die vom Datenbus zugegriffen wird, und mindestens eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen.
  9. Verfahren nach Anspruch 8, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 100000 Parameter zu speichern.
  10. Verfahren nach Anspruch 8 oder 9, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 1000000 Parameter zu speichern.
  11. Verfahren nach einem der Ansprüche 8 bis 10, wobei die zweite Arbeitsspeicherbank einen SRAM umfasst.
  12. Verfahren nach einem der Ansprüche 8 bis 11, wobei die zweite Arbeitsspeicherbank einen 3D-SRAM umfasst.
  13. Verfahren nach einem der Ansprüche 8 bis 12, das ferner das Laden der Neuronalnetzparameter, die beim Durchführen von Berechnungen verwendet werden, in den zweiten Arbeitsspeicher umfasst.
  14. Computerimplementiertes Verfahren zum Beschleunigen von Tensorberechnungen, das umfasst: a. Senden einer ersten Eingangsaktivierung durch eine erste Arbeitsspeicherbank in Reaktion darauf, dass die erste Arbeitsspeicherbank ein Steuersignal empfängt, wobei die erste Eingangsaktivierung durch einen Datenbus übertragen wird; b. Empfangen von einem oder mehreren Parametern durch mindestens einen Multiplikations-Akkumulations-Operator („MAC“-Operator) von einer zweiten Arbeitsspeicherbank zum Speichern von Neuronalnetzparametern („NN“-Parametern), die beim Durchführen von Berechnungen verwendet werden, wobei die zweite Arbeitsspeicherbank eine ausreichende Menge der Neuronalnetzparameter in der Recheneinheit speichert, um eine Latenz unter einem festgelegten Schwellenwert mit einem Durchsatz über einem festgelegten Schwellenwert für ein gegebenes NN-Modell und eine gegebene NN-Architektur zu ermöglichen; und c. Durchführen von einer oder mehreren Berechnungen durch den MAC-Operator, die mindestens einem Element einer Datenanordnung zugeordnet sind, wobei die eine oder die mehreren Berechnungen teilweise eine Multiplikationsoperation zumindest der ersten Eingangsaktivierung, auf die vom Datenbus zugegriffen wird, und mindestens eines Parameters, der von der zweiten Arbeitsspeicherbank empfangen wird, umfassen.
  15. Verfahren nach Anspruch 14, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 100000 Parameter zu speichern.
  16. Verfahren nach Anspruch 14 oder 15, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 1000000 Parameter zu speichern.
  17. Verfahren nach einem der Ansprüche 14 bis 16, wobei die zweite Arbeitsspeicherbank dazu konfiguriert ist, mehr als 100000000 Parameter zu speichern.
  18. Verfahren nach einem der Ansprüche 14 bis 17, wobei die zweite Arbeitsspeicherbank einen SRAM umfasst.
  19. Verfahren nach einem der Ansprüche 14 bis 18, wobei die zweite Arbeitsspeicherbank einen 3D-SRAM umfasst.
  20. Verfahren nach einem der Ansprüche 14 bis 19, das ferner das Laden der Neuronalnetzparameter, die beim Durchführen von Berechnungen verwendet werden, in den zweiten Arbeitsspeicher umfasst.
DE102018119513.3A 2017-08-11 2018-08-10 Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden Pending DE102018119513A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201762544171P 2017-08-11 2017-08-11
US62/544,171 2017-08-11

Publications (1)

Publication Number Publication Date
DE102018119513A1 true DE102018119513A1 (de) 2019-02-14

Family

ID=63449663

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202018104609.8U Active DE202018104609U1 (de) 2017-08-11 2018-08-10 Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden
DE102018119513.3A Pending DE102018119513A1 (de) 2017-08-11 2018-08-10 Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE202018104609.8U Active DE202018104609U1 (de) 2017-08-11 2018-08-10 Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden

Country Status (9)

Country Link
US (4) US10504022B2 (de)
EP (1) EP3665622A1 (de)
JP (2) JP7171622B2 (de)
KR (3) KR102456464B1 (de)
CN (1) CN109389214A (de)
DE (2) DE202018104609U1 (de)
GB (1) GB2568776B (de)
TW (2) TWI679590B (de)
WO (1) WO2019032808A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019127795A1 (de) * 2019-10-15 2021-04-15 Infineon Technologies Ag Schaltung und ein Verfahren zum Bestimmen einer Lage eines Magneten und Joystick

Families Citing this family (79)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10366328B2 (en) * 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
US10832753B2 (en) * 2017-07-31 2020-11-10 General Electric Company Components including structures having decoupled load paths
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
US10936942B2 (en) * 2017-11-21 2021-03-02 Google Llc Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies
US10803379B2 (en) 2017-12-12 2020-10-13 Amazon Technologies, Inc. Multi-memory on-chip computational network
US10846621B2 (en) 2017-12-12 2020-11-24 Amazon Technologies, Inc. Fast context switching for computational networks
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US11144316B1 (en) 2018-04-17 2021-10-12 Ali Tasdighi Far Current-mode mixed-signal SRAM based compute-in-memory for low power machine learning
US11966835B2 (en) 2018-06-05 2024-04-23 Nvidia Corp. Deep neural network accelerator with fine-grained parallelism discovery
US11640533B2 (en) 2018-08-03 2023-05-02 Arm Limited System, method and apparatus for training neural networks using multiple datasets
US20210201124A1 (en) * 2018-08-27 2021-07-01 Neuralmagic Inc. Systems and methods for neural network convolutional layer matrix multiplication using cache memory
US10747845B2 (en) * 2018-08-31 2020-08-18 Arm Limited System, method and apparatus for computationally efficient data manipulation
US11769040B2 (en) 2018-09-10 2023-09-26 Nvidia Corp. Scalable multi-die deep learning system
CN109359732B (zh) * 2018-09-30 2020-06-09 阿里巴巴集团控股有限公司 一种芯片及基于其的数据处理方法
US20200117988A1 (en) * 2018-10-11 2020-04-16 International Business Machines Corporation Networks for distributing parameters and data to neural network compute cores
US10970201B2 (en) 2018-10-24 2021-04-06 Arm Limited System, method and apparatus for data manipulation
EP3674982A1 (de) * 2018-12-27 2020-07-01 IMEC vzw Hardware-beschleunigerarchitektur für neuronales konvolutionsnetz
US11410014B2 (en) 2019-02-11 2022-08-09 Apple Inc. Customizable chip for AI applications
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
WO2020172829A1 (zh) * 2019-02-27 2020-09-03 华为技术有限公司 一种神经网络模型处理方法及装置
US11061738B2 (en) * 2019-02-28 2021-07-13 Movidius Limited Methods and apparatus to store and access multi dimensional data
US11270197B2 (en) * 2019-03-12 2022-03-08 Nvidia Corp. Efficient neural network accelerator dataflows
CN110032374B (zh) * 2019-03-21 2023-04-07 深兰科技(上海)有限公司 一种参数提取方法、装置、设备及介质
US10534747B2 (en) * 2019-03-29 2020-01-14 Intel Corporation Technologies for providing a scalable architecture for performing compute operations in memory
KR102550451B1 (ko) * 2019-04-04 2023-06-30 캠브리콘 테크놀로지스 코퍼레이션 리미티드 데이터 처리방법과 장치 및 관련 제품
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
CN111831337B (zh) * 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111966401A (zh) * 2019-05-20 2020-11-20 上海寒武纪信息科技有限公司 指令处理方法、装置及相关产品
CN111985628B (zh) * 2019-05-24 2024-04-30 澜起科技股份有限公司 计算装置及包括所述计算装置的神经网络处理器
US11941512B2 (en) 2019-06-26 2024-03-26 Western Digital Technologies, Inc. Neural network engine utilizing a serial bus
CN112148391A (zh) * 2019-06-26 2020-12-29 北京百度网讯科技有限公司 生成基于芯片的计算功能的方法、装置、设备和存储介质
WO2021000281A1 (en) * 2019-07-03 2021-01-07 Huaxia General Processor Technologies Inc. Instructions for operating accelerator circuit
US20220405221A1 (en) * 2019-07-03 2022-12-22 Huaxia General Processor Technologies Inc. System and architecture of pure functional neural network accelerator
KR20210006120A (ko) * 2019-07-08 2021-01-18 에스케이하이닉스 주식회사 데이터 저장 장치, 데이터 처리 시스템 및 이를 위한 가속 장치
CN112541581A (zh) * 2019-09-23 2021-03-23 阿里巴巴集团控股有限公司 一种加速计算单元和加速计算系统
CN110633153A (zh) * 2019-09-24 2019-12-31 上海寒武纪信息科技有限公司 一种用多核处理器实现神经网络模型拆分方法及相关产品
US10915298B1 (en) 2019-10-08 2021-02-09 Ali Tasdighi Far Current mode multiply-accumulate for compute in memory binarized neural networks
US11341086B2 (en) * 2019-11-22 2022-05-24 Rambus Inc. Compute accelerator with 3D data flows
US11127442B2 (en) * 2019-12-06 2021-09-21 Xilinx, Inc. Data transfers between a memory and a distributed compute array
KR20210077352A (ko) * 2019-12-17 2021-06-25 에스케이하이닉스 주식회사 데이터 처리 시스템 및 이를 위한 가속 장치
EP4010848A1 (de) * 2019-12-18 2022-06-15 Google LLC Parameter-cachespeicherung für neuronale netzwerkbeschleuniger
US11610104B1 (en) 2019-12-30 2023-03-21 Ali Tasdighi Far Asynchronous analog accelerator for fully connected artificial neural networks
US11615256B1 (en) 2019-12-30 2023-03-28 Ali Tasdighi Far Hybrid accumulation method in multiply-accumulate for machine learning
US11922292B2 (en) * 2020-01-27 2024-03-05 Google Llc Shared scratchpad memory with parallel load-store
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
EP4100887A4 (de) * 2020-03-05 2023-07-05 Huawei Cloud Computing Technologies Co., Ltd. Verfahren und system zur aufteilung und bitbreitenzuteilung von tiefenlernmodellen für inferenz auf verteilten systemen
US20210295145A1 (en) * 2020-03-23 2021-09-23 Mentium Technologies Inc. Digital-analog hybrid system architecture for neural network acceleration
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
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
CN113568665B (zh) * 2020-04-29 2023-11-17 北京希姆计算科技有限公司 一种数据处理装置
US11501151B2 (en) * 2020-05-28 2022-11-15 Arm Limited Pipelined accumulator
CN113806246A (zh) * 2020-06-16 2021-12-17 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
US20220004399A1 (en) * 2020-07-03 2022-01-06 Mediatek Inc. Dynamic loading neural network inference at dram/on-bus sram/serial flash for power optimization
US11556312B2 (en) 2020-07-10 2023-01-17 International Business Machines Corporation Photonic in-memory co-processor for convolutional operations
US11954580B2 (en) 2020-09-16 2024-04-09 Meta Platforms, Inc. Spatial tiling of compute arrays with shared control
US20220114440A1 (en) * 2020-10-14 2022-04-14 Google Llc Queue Allocation in Machine Learning Accelerators
US11704562B1 (en) 2020-11-04 2023-07-18 Meta Platforms, Inc. Architecture for virtual instructions
US11709783B1 (en) 2020-11-11 2023-07-25 Meta Platforms, Inc. Tensor data distribution using grid direct-memory access (DMA) controller
US11972349B1 (en) 2020-11-12 2024-04-30 Meta Platforms, Inc. Flexible compute array utilization in a tensor processor
KR102673748B1 (ko) * 2020-11-27 2024-06-10 한국전자통신연구원 다차원 직접 메모리 접근 컨트롤러 및 그것을 포함하는 컴퓨터 시스템
JP7485086B2 (ja) 2020-12-10 2024-05-16 日本電信電話株式会社 命令処理方法及び命令処理回路
US20220198249A1 (en) * 2020-12-18 2022-06-23 Hewlett Packard Enterprise Development Lp Execution of neural networks
US12001893B1 (en) 2020-12-28 2024-06-04 Meta Platforms, Inc. Distributed synchronization scheme
US11922306B2 (en) 2020-12-28 2024-03-05 Meta Platforms, Inc. Tensor controller architecture
US11790611B2 (en) 2020-12-30 2023-10-17 Meta Platforms, Inc. Visual editor for designing augmented-reality effects that utilize voice recognition
US11477007B1 (en) * 2021-04-13 2022-10-18 International Business Machines Corporation Packing arbitrary tensors into tiles with descriptive shapes
US11656909B2 (en) 2021-04-15 2023-05-23 National Taiwan University Tensor accelerator capable of increasing efficiency of data sharing
CN114004347A (zh) 2021-08-30 2022-02-01 平头哥(上海)半导体技术有限公司 用于加速图神经网络属性访问的硬件加速器、系统和方法
US11966745B2 (en) 2021-11-15 2024-04-23 Google Llc Sparse SIMD cross-lane processing unit
US11972263B2 (en) 2021-11-22 2024-04-30 Google Llc Cooperative instruction prefetch on multicore system
KR102700292B1 (ko) * 2021-11-26 2024-08-29 건국대학교 산학협력단 신경망 가속기의 통신 특성을 동적으로 재구성하는 프로세서 장치, 및 그의 구동 방법
WO2023139990A1 (ja) * 2022-01-24 2023-07-27 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク演算方法
US11977499B2 (en) * 2022-03-22 2024-05-07 Google Llc Streaming transfers and ordering model
CN114781632B (zh) * 2022-05-20 2024-08-27 重庆科技大学 基于动态可重构脉动张量运算引擎的深度神经网络加速器
US12045612B2 (en) 2022-09-12 2024-07-23 International Business Machines Corporation Special-purpose digital-compute hardware for efficient element-wise aggregation, scaling and offset
CN115586885B (zh) * 2022-09-30 2023-05-05 晶铁半导体技术(广东)有限公司 一种存内计算单元和加速方法
WO2024185925A1 (ko) * 2023-03-06 2024-09-12 주식회사 유엑스팩토리 컨볼루션 신경망 시스템
US11886974B1 (en) * 2023-07-20 2024-01-30 Chromatic Inc. Neural network chip for ear-worn device

Family Cites Families (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03121581A (ja) * 1989-10-04 1991-05-23 Olympus Optical Co Ltd 文字読取装置
JP3102027B2 (ja) 1990-11-20 2000-10-23 日本電気株式会社 ループ制御のネスティング管理機構
US5958048A (en) 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
JP2001117900A (ja) 1999-10-19 2001-04-27 Fuji Xerox Co Ltd ニューラルネットワーク演算装置
GB2359641B (en) 2000-02-25 2002-02-13 Siroyan Ltd Mapping circuitry and method
WO2001090888A1 (en) 2000-05-23 2001-11-29 Theis Jean Paul A data processing system having an address generation unit with hardwired multidimensional memory indexing support
US7117421B1 (en) * 2002-05-31 2006-10-03 Nvidia Corporation Transparent error correction code memory system and method
US6952821B2 (en) 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7107199B2 (en) 2002-10-31 2006-09-12 Hewlett-Packard Development Company, L.P. Method and system for the design of pipelines of processors
US7047480B2 (en) * 2002-11-12 2006-05-16 Microsoft Corporation Matrix multiplication in a Galois field for forward error correction
US7225439B2 (en) 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
CN1259617C (zh) 2003-09-09 2006-06-14 大唐微电子技术有限公司 一种加快rsa加/解密过程的方法及其模乘、模幂运算电路
CN100520714C (zh) 2005-01-25 2009-07-29 Nxp股份有限公司 多线程处理器
US8806183B1 (en) 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
US8904155B2 (en) 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US8438365B2 (en) 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
ATE463788T1 (de) 2007-06-26 2010-04-15 Ericsson Telefon Ab L M Datenverarbeitungseinheit für anweisungen in geschachtelten schleifen
US20100122066A1 (en) 2008-11-12 2010-05-13 Freescale Semiconductor, Inc. Instruction method for facilitating efficient coding and instruction fetch of loop construct
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
CA2684226A1 (en) 2009-10-30 2011-04-30 Ibm Canada Limited - Ibm Canada Limitee Eleminating redundant operations for common properties using shared real registers
US10803009B2 (en) 2011-07-14 2020-10-13 Texas Instruments Incorporated Processor with table lookup processing unit
US9507593B2 (en) 2011-12-23 2016-11-29 Intel Corporation Instruction for element offset calculation in a multi-dimensional array
US9165243B2 (en) * 2012-02-15 2015-10-20 Microsoft Technology Licensing, Llc Tensor deep stacked neural network
US9292787B2 (en) * 2012-08-29 2016-03-22 Microsoft Technology Licensing, Llc Computer-implemented deep tensor neural network
US20140181171A1 (en) 2012-12-24 2014-06-26 Pavel Dourbal Method and system for fast tensor-vector multiplication
US20140188961A1 (en) 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
US9035946B1 (en) 2014-02-13 2015-05-19 Raycast Systems, Inc. Computer hardware architecture and data structures for triangle binning to support incoherent ray traversal
CN105260322B (zh) 2014-06-30 2020-09-01 中兴通讯股份有限公司 一种对循环缓冲区消除循环移位的方法和装置
US20160026912A1 (en) 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
US9830193B1 (en) * 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
EP3035249B1 (de) 2014-12-19 2019-11-27 Intel Corporation Verfahren und Vorrichtung für verteilte und kooperative Berechnung in künstlichen neuronalen Netzen
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
CN105184366B (zh) * 2015-09-15 2018-01-09 中国科学院计算技术研究所 一种时分复用的通用神经网络处理器
US10380479B2 (en) * 2015-10-08 2019-08-13 International Business Machines Corporation Acceleration of convolutional neural network training using stochastic perforation
US10353861B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource
CN105488565A (zh) * 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
US11170294B2 (en) * 2016-01-07 2021-11-09 Intel Corporation Hardware accelerated machine learning
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
CN105892989B (zh) * 2016-03-28 2017-04-12 中国科学院计算技术研究所 一种神经网络加速器及其运算方法
CN108416436B (zh) * 2016-04-18 2021-06-01 中国科学院计算技术研究所 使用多核心处理模块进行神经网络划分的方法及其系统
US11120329B2 (en) * 2016-05-07 2021-09-14 Intel Corporation Multicast network and memory transfer optimizations for neural network hardware acceleration
US10817802B2 (en) * 2016-05-07 2020-10-27 Intel Corporation Apparatus for hardware accelerated machine learning
US10387771B2 (en) * 2016-05-26 2019-08-20 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
US10498855B2 (en) * 2016-06-17 2019-12-03 Cisco Technology, Inc. Contextual services in a network using a deep learning agent
CN106485317A (zh) * 2016-09-26 2017-03-08 上海新储集成电路有限公司 一种神经网络加速器以及神经网络模型的实现方法
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
CN106875011B (zh) * 2017-01-12 2020-04-17 南京风兴科技有限公司 二值权重卷积神经网络加速器的硬件架构及其计算流程
CN106909970B (zh) * 2017-01-12 2020-04-21 南京风兴科技有限公司 一种基于近似计算的二值权重卷积神经网络硬件加速器计算装置
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102019127795A1 (de) * 2019-10-15 2021-04-15 Infineon Technologies Ag Schaltung und ein Verfahren zum Bestimmen einer Lage eines Magneten und Joystick
US11574167B2 (en) 2019-10-15 2023-02-07 Infineon Technologies Ag Circuit and a method for determining an attitude of a magnet, and joystick

Also Published As

Publication number Publication date
JP7546640B2 (ja) 2024-09-06
KR102456464B1 (ko) 2022-10-19
US20230162015A1 (en) 2023-05-25
JP2020532780A (ja) 2020-11-12
KR102662211B1 (ko) 2024-05-07
CN109389214A (zh) 2019-02-26
US20200005128A1 (en) 2020-01-02
TW202044124A (zh) 2020-12-01
US20240078417A1 (en) 2024-03-07
US11501144B2 (en) 2022-11-15
KR20200005638A (ko) 2020-01-15
US20190050717A1 (en) 2019-02-14
US10504022B2 (en) 2019-12-10
JP7171622B2 (ja) 2022-11-15
KR20220143969A (ko) 2022-10-25
JP2023022028A (ja) 2023-02-14
WO2019032808A1 (en) 2019-02-14
EP3665622A1 (de) 2020-06-17
TWI737145B (zh) 2021-08-21
GB2568776A (en) 2019-05-29
GB201812820D0 (en) 2018-09-19
KR20240060857A (ko) 2024-05-08
TW201911140A (zh) 2019-03-16
GB2568776B (en) 2020-10-28
US11727259B2 (en) 2023-08-15
TWI679590B (zh) 2019-12-11
DE202018104609U1 (de) 2018-11-29

Similar Documents

Publication Publication Date Title
DE102018119513A1 (de) Neuronalnetzbeschleuniger mit Parametern, die sich auf einem Chip befinden
DE102017121825A1 (de) Rechenkachel für neuronale Netze
DE102017120588A1 (de) Befehlssatzarchitektur für neuronale Netze
DE19510879C2 (de) Brechnungsverfahren für simultane, lineare Gleichungen und speicherverteilter Parallelprozessor zur Durchführung des Verfahrens
DE112015005597T5 (de) Verknüpfungsfähige Parallelausführungs-Schicht einer Ausgabewarteschlange für einen Prozessor
DE102020112826A1 (de) Verfahren zur effizienten durchführung von datenreduktionen in parallelverarbeitungseinheiten
DE112019005288T5 (de) EFFEKTIVES UND SKALIERBARES AUFBAUEN UND SONDIEREN VON HASHTABELLEN UNTER VERWENDUNG MEHRERER GPUs
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102017120965A1 (de) Prozessor in nichtflüchtigem Ablagespeicher
DE102010044529A1 (de) Autonome Subsystem-Architektur
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE112020000865T5 (de) Speicherverwaltungssystem
DE102023105568A1 (de) Programmatisch gesteuertes daten-multicasting über mehrere rechen-engines
DE102020133667A1 (de) Technologien zum Durchführen von Spaltenleseoperationen an geclusterten Daten in einer DIMM-Architektur
DE102020127704A1 (de) Techniken zum effizienten transferieren von daten an einem prozessor
DE102016104108A1 (de) Systeme und Verfahren zur verteilten skalierbaren Strahlenverarbeitung
DE112021000303T5 (de) Barriere- und schrankenfreie synchronisierung von gemeinsam genutztem speicher
DE102017121298A1 (de) Prozessor in nichtflüchtigem Ablagespeicher
DE102023105554A1 (de) Schnelle Datensynchronisation in Prozessoren und Speicher
DE102023105570A1 (de) Techniken für den skalierbaren Lastausgleich von Thread-Gruppen in einem Prozessor
DE102021127153A1 (de) System und verfahren zur implementierung einer netzwerkschnittstellenbasierten allreduce-operation
DE102023125892A1 (de) Sperrfreie ungeordnete verdichtung an ort und stelle
DE102022124661A1 (de) Systeme und Verfahren zum Vergrössern der Hardware-Beschleuniger-Leistungsfähigkeit in Neuronalnetzanwendungen
DE102024102284A1 (de) Skalarisierung von anweisungen für simt architekturen
DE102022125969A1 (de) Software-geleitete priorisierung divergenter verzweigungsziele

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication