DE112020004625T5 - Transponierte faltung mit systolischem array - Google Patents

Transponierte faltung mit systolischem array Download PDF

Info

Publication number
DE112020004625T5
DE112020004625T5 DE112020004625.7T DE112020004625T DE112020004625T5 DE 112020004625 T5 DE112020004625 T5 DE 112020004625T5 DE 112020004625 T DE112020004625 T DE 112020004625T DE 112020004625 T5 DE112020004625 T5 DE 112020004625T5
Authority
DE
Germany
Prior art keywords
array
input data
weight data
coordinates
weight
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
DE112020004625.7T
Other languages
English (en)
Inventor
Jeffrey T. Huynh
Vignesh Vivekraja
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amazon Technologies Inc
Original Assignee
Amazon Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Amazon Technologies Inc filed Critical Amazon Technologies Inc
Publication of DE112020004625T5 publication Critical patent/DE112020004625T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • 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/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Abstract

In einem Beispiel kann ein Neuronalnetzwerk-Beschleuniger einen Satz von Befehlen ausführen, um: ein erstes Gewichtungsdatenelement aus einem Speicher in ein systolisches Array zu laden, wobei das erste Gewichtungsdatenelement erste Koordinaten aufweist; Informationen aus den Befehlen, zu extrahieren, die eine erste Teilmenge von Eingabedatenelementen angeben, die aus dem Speicher abzurufen sind, wobei die erste Teilmenge auf einer Schrittweite einer transponierten Faltungsoperation und zweiten Koordinaten des ersten Gewichtungsdatenelements in einem gedrehten Array von Gewichtungsdatenelementen basiert; auf der Grundlage der Informationen die erste Teilmenge von Eingabedatenelementen aus dem Speicher abzurufen; die erste Teilmenge von Eingabedatenelementen in das systolische Array zu laden; und das systolische Array zu steuern, um erste Berechnungen auf der Grundlage des ersten Gewichtungsdatenelements und der ersten Teilmenge von Eingabedatenelementen durchzuführen, um Ausgabedatenelemente eines Arrays von Ausgabedatenelementen zu erzeugen.

Description

  • HINTERGRUND
  • Künstliche neuronale Netzwerke sind Rechensysteme mit einer Architektur, die biologischen neuronalen Netzwerken nachempfunden ist. Künstliche neuronale Netzwerke können anhand von Trainingsdaten trainiert werden, um zu lernen, wie eine bestimmte Rechenaufgabe für eine Anwendung auszuführen ist.
  • Ein Hardware-Beschleuniger, wie z. B. ein Neuronalnetzwerk-Prozessor, kann so programmiert werden, dass er ein künstliches neuronales Netzwerk zur Durchführung der Rechenaufgabe implementiert. Eine häufige Rechenaufgabe ist eine Faltungsoperation zwischen einer Gewichtungsmatrix und einer Eingabedatenmatrix. Bei einer Faltungsoperation kann die Gewichtungsmatrix die Eingabedatenmatrix in mehreren Schrittweiten durchlaufen und mit ihr überlagert werden, bis die gesamte Eingabedatenmatrix durchlaufen worden ist. Für jede Schrittweite kann eine Summe von Multiplikationen zwischen der Gewichtungsmatrix und den überlagerten Teilen der Eingabedatenmatrix als Ausgabe der Faltungsoperation erzeugt werden, und mehrere Ausgaben der Faltungsoperation können bei den mehreren Schrittweiten erzeugt werden. Es gibt viele Anwendungen für Faltungsoperationen, wie z. B. das Extrahieren von Merkmalen aus einem Bild, die Bilderkennung usw.
  • Es gibt verschiedene Arten von Faltungsoperationen für andere Anwendungen. Ein Beispiel ist die transponierte Faltung, die auf einer normalen Faltungsoperation zwischen einer gedrehten Gewichtungsmatrix und einer dilatierten Eingabedatenmatrix basieren kann. Es gibt verschiedene Anwendungen für eine transponierte Faltungsoperation. Beispielsweise kann die transponierte Faltungsoperation Teil einer Upsampling-Operation sein, bei der Elemente der Original-Eingabedatenmatrix auf der Grundlage der gedrehten Gewichtungsmatrix interpoliert werden können, um eine Ausgabedatenmatrix zu bilden. Ein weiteres Beispiel: Die transponierte Faltung kann Teil einer Rückwärtspropagationsoperation während eines Trainingsprozesses sein, um die Gewichte der Gewichtungsmatrix zu trainieren.
  • Figurenliste
  • Verschiedene Ausführungsformen der vorliegenden Offenbarung werden in Bezug auf die Zeichnungen beschrieben, in denen:
    • 1 ein Beispiel für eine Klassifizierungsvorrichtung veranschaulicht, die die hierin offenbarten Techniken zur Datenverarbeitung verwendet;
    • 2A - 2F vereinfachte Blockdiagramme zur Veranschaulichung eines Vorhersagemodells und der Berechnungen sind, die die hier offengelegten Techniken verwenden, gemäß bestimmten Aspekten der vorliegenden Offenbarung;
    • 3 ein Beispiel für die Implementierung der transponierten Faltungsoperation veranschaulicht;
    • 4A - 4C einen beispielhaften Neuronalnetzwerk-Prozessor und seine Operationen gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulichen;
    • 5A - 5D die Operationen im beispielhaften Neuronalnetzwerk-Prozessor aus 4A - 4C für eine normalen Faltungsoperation gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulichen;
    • 6A - 6G die Operationen im beispielhaften Neuronalnetzwerk-Prozessor aus 4A - 4C für eine transponierte Faltungsoperation gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulichen;
    • 7A und 7B Blockdiagramme zusätzlicher Merkmale des beispielhaften Neuronalnetzwerk-Prozessors von 4A - 4C für die Unterstützung einer transponierten Faltungsoperation gemäß bestimmten Aspekten der vorliegenden Offenbarung enthalten;
    • 8 Blockdiagramme eines Beispiels für ein Host-System gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulicht;
    • 9 ein beispielhaftes Verfahren zur Durchführung einer dilatierten Faltungsoperation in einem Neuronalnetzwerk-Prozessor gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulicht;
    • 10 ein beispielhaftes Verfahren zur Vorbereitung von Befehlen für einen Neuronalnetzwerk-Prozessor zur Durchführung einer transponierten Faltungsoperation gemäß bestimmten Aspekten der vorliegenden Offenbarung veranschaulicht; und
    • 11 ein Diagramm eines beispielhaften Netzwerks umfasst.
  • DETAILLIERTE BESCHREIBUNG
  • Beispiele der vorliegenden Offenbarung beziehen sich auf die Verarbeitung von neuronalen Netzwerken und insbesondere auf die Durchführung einer transponierten Faltungsoperation in einem Neuronalnetzwerk-Prozessor sowie auf Hardware- und/oder Softwaresysteme zur Unterstützung der transponierten Faltungsoperation in dem Neuronalnetzwerk-Prozessor.
  • Ein Hardware-Beschleuniger, wie z. B. ein Neuronalnetzwerk-Prozessor, kann so programmiert werden, dass er ein künstliches neuronales Netzwerk zur Durchführung einer Rechenaufgabe implementiert. Eine häufige Rechenaufgabe ist eine Faltungsoperation zwischen einer als Filter konfigurierten Gewichtungsmatrix und einer Eingabedatenmatrix. Die Eingabedatenmatrix kann Pixeln eines Bildes entsprechen, während das Filter eine Reihe von Filterelementen enthalten kann, die beispielsweise so konfiguriert sind, dass sie ein Zielmerkmal aus dem Bild extrahieren. Als Teil der Faltungsoperation kann das Filter verschiedene Stellen des Bildes in mehreren Schrittweiten durchlaufen. An jeder Schrittposition kann eine Summe der Produkte zwischen jedem Filterkoeffizienten und einem überlappenden Pixel des Bildes als Faltungsausgabe für diese Schrittposition erzeugt werden. Das Ergebnis der Faltung kann z. B. anzeigen, ob das Bild das Zielmerkmal enthält, wo sich das Zielmerkmal im Bild befindet usw.
  • Es gibt verschiedene Arten von Faltungsoperationen für andere Anwendungen. Ein Beispiel ist die transponierte Faltung, die auf einer normalen Faltungsoperation zwischen einer gedrehten Gewichtungsmatrix und einer dilatierten Eingabedatenmatrix basieren kann. Es gibt verschiedene Anwendungen für eine transponierte Faltungsoperation. Die transponierte Faltungsoperation kann zum Beispiel Teil einer Upsampling-Operation sein. Als Teil der Upsampling-Operation kann die dilatierte Eingabedatenmatrix mit der gedrehten Gewichtungsmatrix gefaltet werden, um Elemente der Original-Eingabedatenmatrix auf der Grundlage der gedrehten Gewichtungsmatrix zu interpolieren und neue Elemente zu bilden. Die neuen Elemente können in eine Ausgabedatenmatrix aufgenommen werden, um deren Größe und Elementanzahl im Vergleich zur Original-Eingabedatenmatrix zu erweitern. Die transponierte Faltungsoperation kann in einem neuronalen Netzwerk durchgeführt werden, in dem die Gewichtungskoeffizienten trainiert werden können, um die Interpolationsoperation zu verbessern. Ein weiteres Beispiel: Die transponierte Faltung kann Teil einer Rückwärtspropagationsoperation in einem neuronalen Netzwerk während eines Trainingsprozesses sein, um die Gewichtungsmatrix zu trainieren.
  • Trotz ihrer Nützlichkeit kann eine transponierte Faltungsoperation eine große Anzahl von Speicheroperationen erfordern, was die Effizienz der Operation in einem Prozessor für neuronale Netzwerke beeinträchtigen kann. Um beispielsweise eine dilatierte Eingabedatenmatrix zu erzeugen, können Elemente der Original-Eingabedatenmatrix von einem Satz von Speicherplätzen in einen anderen Satz von Speicherplätzen kopiert werden, wobei zwischen den Elementen der Eingabedatenmatrix an den neuen Speicherplätzen Nullen eingefügt werden, um die dilatierte Eingabedatenmatrix zu bilden. Ein weiteres Beispiel ist, dass die Elemente der Gewichtungsmatrix von einem Satz von Speicherplätzen in einen anderen Satz von Speicherplätzen kopiert werden können, um die Drehung durchzuführen. In diesen Fällen kann das Kopieren der Elemente des Eingabedaten-Arrays, das Einfügen von Nullen sowie das Kopieren der Elemente der Gewichtungsmatrix eine große Anzahl von Speicheroperationen erfordern, was die Leistung des Prozessors des neuronalen Netzwerks beeinträchtigen kann.
  • Beispiele der vorliegenden Offenbarung beziehen sich auf die Verarbeitung von neuronalen Netzwerken und insbesondere auf die Durchführung einer transponierten Faltungsoperation in einem neuronalen Netzwerkprozessor sowie auf Hardware- und/oder Softwaresysteme zur Unterstützung einer transponierten Faltungsoperation in dem neuronalen Netzwerkprozessor. Die transponierte Faltungsoperation kann auf einer normalen Faltungsoperation zwischen einem gedrehten Gewichtungsdaten-Array und einem dilatierten Eingabedaten-Array beruhen. Das gedrehte Gewichtungsdaten-Array kann eine um 180 Grad gedrehte Version eines Original-Gewichtungsdaten-Arrays sein, während das dilatierte Eingabedaten-Array durch Auffüllen einer Anzahl von Nullen zwischen benachbarten Eingabedatenelementen eines Original-Eingabedaten-Arrays erhalten werden kann. Die Anzahl der Nullen kann auf einer Schrittweite der transponierten Faltungsoperation basieren. Zum Beispiel kann in einem Fall, in dem die Schrittweite der transponierten Faltungsoperation zwei beträgt, jedes Eingabedatenelement von einer Null (Schrittweite minus eins) umgeben werden, um das Original-Eingabedaten-Array zu erweitern, und die Faltungsausgaben können erzeugt werden, indem das dilatierte Ausgabedaten-Array mit dem gedrehten Gewichtungsdaten-Array mit einer Schrittweite von eins in einer normalen Faltungsoperation durchlaufen wird. Die vorliegende Offenbarung bezieht sich auf die Konfiguration eines neuronalen Netzwerkprozessors zur Durchführung einer normalen Faltungsoperation zwischen dem Original-Gewichtungsdaten-Array und dem Original-Eingabedaten-Array, um ein Ausgabedaten-Array der transponierten Faltung zu erzeugen.
  • In einigen Beispielen umfasst der Neuronalnetzwerk-Prozessor einen Speicher, ein systolisches Array, einen Summationspuffer und einen Controller. Der Speicher kann Eingabedatenelemente des Original-Eingabedaten-Arrays und Gewichtungsdatenelemente des Original-Gewichtungsdaten-Arrays speichern. Sowohl das Eingabedaten-Array als auch das Gewichtungsdaten-Array können mehrdimensional sein. Das Eingabedaten-Array kann beispielsweise eine oder mehrere zweidimensionale Eingabedatenmatrizen enthalten, wobei jede Eingabedatenmatrix einem Eingabekanal entspricht. Außerdem kann das Gewichtungsdaten-Array eine oder mehrere zweidimensionale Gewichtungsdatenmatrizen enthalten, wobei jede Gewichtungsdatenmatrix einem Eingabekanal und einem Ausgabekanal entspricht. Die Eingabedatenelemente können in Adressen im Speicher gespeichert werden, die auf ihren Koordinaten im Original-Eingabedaten-Array basieren, während die Gewichtungsdatenelemente in Adressen im Speicher gespeichert werden können, die auf ihren Koordinaten im Original-Gewichtungsdaten-Array basieren.
  • Um eine transponierte Faltungsoperation durchzuführen, kann der Controller ein erstes Gewichtungsdatenelement aus dem Speicher auf der Grundlage der ersten Koordinaten des ersten Gewichtungsdatenelements in dem Original-Gewichtungsdaten-Array erhalten und das erste Gewichtungsdatenelement in das systolische Array laden. Die ersten Koordinaten können durch eine Abbildung, die eine 180-Grad-Drehung der Gewichtungsmatrizen des Arrays von Gewichtungsdatenelementen darstellt, in zweite Koordinaten übersetzt werden. Der Controller kann auch auf der Grundlage eines Befehls eine erste Teilmenge der Eingabedatenelemente des Original-Eingabedaten-Arrays auswählen und die erste Teilmenge der Eingabedatenelemente in das systolische Array laden, um erste Teilsummen zwischen dem ersten Gewichtungsdatenelement und der ersten Teilmenge der Eingabedatenelemente zu berechnen. Die Auswahl kann auf einer Schrittweite der transponierten Faltungsoperation, den zweiten Koordinaten, die aus der Abbildung gewonnen wurden, sowie auf Dimensionsinformationen des Summationspuffers basieren. Insbesondere kann die erste Teilmenge der in das systolische Array geladenen Eingabedatenelemente Eingabedatenelemente des dilatierten Eingabedaten-Arrays darstellen, die sich mit dem ersten Gewichtungsdatenelement überschneiden, wenn sich das gedrehte Gewichtungsdaten-Array an verschiedenen Schrittpositionen über dem dilatierten Eingabedaten-Array befindet, und dass eine Anzahl der ersten Teilsummen, die aus der ersten Teilmenge der Eingabedatenelemente erzeugt werden, in den Summationspuffer passen. Die erste Teilmenge der Eingabedatenelemente liegt im Original-Eingabedaten-Array vor der Dilatation nebeneinander. Darüber hinaus können die ersten Teilsummen an Stellen innerhalb des Summationspuffers gespeichert werden, die auf den zweiten Koordinaten und der Schrittweite basieren. Der Controller kann das systolische Array so steuern, dass andere Gewichtungsdatenelemente und andere Teilmengen von Eingabedatenelementen für die anderen Gewichtungsdatenelemente geladen werden, um andere Teilsummen zu erzeugen. Die Teilsummen können im Summationspuffer akkumuliert und/oder überlagert werden, um Ausgabedatenelemente eines Ausgabedaten-Arrays zu erzeugen, das auch mehrdimensional sein und mehrere zweidimensionale Ausgabedatenmatrizen enthalten kann, die mehreren Ausgabekanälen entsprechen.
  • Wie oben beschrieben, kann jede Untergruppe von Eingabedatenelementen auf der Grundlage der Bestimmung von Eingabedatenelementen ausgewählt werden, die sich mit einem Gewichtungsdatenelement überschneiden („überlappende Eingabedatenelemente“) in der transponierten Faltungsoperation auf der Grundlage der Schrittweite und der zweiten Koordinaten eines Gewichtungsdatenelements in dem gedrehten Array von Gewichtungsdatenelementen. Außerdem basieren die Positionen des Summationspuffers für die Aufnahme der Teilsummen ebenfalls auf der Schrittweite und den zweiten Koordinaten. Die Bestimmung der sich überschneidenden Eingabedatenelemente sowie der Ziele der Teilsummen im Summationspuffer für ein Gewichtungsdatenelement kann von einem Compiler durchgeführt werden, der die Informationen über die sich überschneidenden Eingabedatenelemente und die Ziele in eines Berechnungsbefehls für dieses Gewichtungsdatenelement kodieren kann. Der Controller kann dann die Berechnungsbefehle für die Gewichtungsdatenelemente ausführen.
  • In einigen Beispielen umfasst der Neuronalnetzwerk-Prozessor ferner Mechanismen, die so konfiguriert sind, dass sie in einem Fall, in dem die Schrittweite der transponierten Faltungsoperation größer ist als die Dimension des Gewichtungsdaten-Arrays, Null-Ausgabedatenelemente erzeugen, so dass das dilatierte Ausgabedaten-Array durch Einfügen einer Anzahl von Nullen zwischen Eingabedatenelementen erzeugt wird, die größer ist als die Dimensionen des Gewichtungsdaten-Arrays. Zum Beispiel in einem Fall, in dem die Schrittweite der transponierten Faltungsoperation zwei beträgt und eine Null zwischen benachbarten Eingabedatenelementen aufgefüllt wird, um das dilatierte Eingabedaten-Array zu bilden, und ein Gewichtungs-Array, das ein einzelnes Gewichtungsdatenelement umfasst, das dilatierte Eingabedaten-Array mit einer Schrittweite von eins durchläuft, Null-Ausgabedatenelemente an Schrittpositionen, wo sich das einzelne Gewichtungsdatenelement mit den aufgefüllten Nullen überlappt. Um die Berechnungseffizienz zu verbessern, kann der Controller den Summationspuffer so steuern, dass er für ein Datenelement mit Nullausgabe eine Null ausgibt, ohne dass das systolische Array die Nullpartialsummen für dieses Datenelement mit Nullausgabe auf der Grundlage verschiedener Techniken berechnet. Beispielsweise kann der Controller den Summationspuffer vor den Berechnungen für den Start einer Ausgabekachel mit Nullen initialisieren, so dass die Ziele des Summationspuffers, die während der Berechnungen keine Teilsummen aus dem systolischen Array erhalten, Nullen ausgeben können. Ein weiteres Beispiel: Die Summationspuffer können ein Register für jedes Ziel und einen Multiplexer enthalten, der von den Ausgaben der Register gesteuert wird. Das Register kann eine Angabe darüber speichern, ob das Ziel während der Berechnungen für eine Ausgabekachel eine Teilsumme erhält (z. B. eine Schreiboperation). Das Register kann vor dem Beginn der Berechnungen einer Ausgabekachel zurückgesetzt werden. Am Ende der Berechnungen, wenn der Summationspuffer eine Leseoperation für ein Ziel empfängt, kann der Summationspuffer auf das Register für dieses Ziel verweisen, und der Multiplexer kann so gesteuert werden, dass er den Inhalt des Ziels oder eine Null ausgibt, je nachdem, ob das Register anzeigt, dass das Ziel während der Berechnungen eine Teilsumme (oder eine Schreiboperation) erhalten hat.
  • Die Bestimmung der sich überschneidenden Eingabedatenelemente und des Ziels der Teilsummen kann auf einem Schrittmuster basieren, das einen Satz von Musterkoordinaten definieren kann, wobei benachbarte Musterkoordinaten durch einen Abstand voneinander getrennt sind, der dem Schrittmuster entspricht. Bei einer Schrittweite von zwei können benachbarte Musterkoordinaten beispielsweise einen Abstand von eins haben. Für das erste Gewichtungsdatenelement kann der Compiler einen ersten Bereich im Ausgabedaten-Array bestimmen, der den Zielen der Teilsummen im Summationspuffer entspricht, und zwar auf der Grundlage der Verschiebung des Schrittmusters um einen Offset entsprechend den zweiten Koordinaten (den gedrehten Koordinaten des ersten Gewichtungsdatenelements). Die Abmessungen des Summationspuffers (z. B. die Anzahl der Spalten und Zeilen) können eine Ausgabekachel definieren, die Ausgabedatenelemente des ersten Bereichs im Ausgabedaten-Array umfasst. Der Compiler kann das Schrittmuster in Bezug auf eine Referenzposition auf der Grundlage eines auf den zweiten Koordinaten basierenden Offsets verschieben. Die Referenzposition kann an einem ersten Ausgabedatenelement der Ausgabekachel liegen, das auf ein Ziel des Summationspuffers abgebildet ist, oder an einer imaginären Position des Ausgabedaten-Arrays mit Nord- und West-Padding, die auf die Ziele des Summationspuffers abgebildet sind. Die Abmessungen des Summationspuffers (z. B. die Anzahl der Zeilen und Spalten) können auch einen Koordinatenbereich für die Ausgabedatenelemente der Ausgabekachel festlegen. Der Compiler kann die verschobenen Musterkoordinaten mit dem Koordinatenbereich vergleichen, um einen Satz überlappender Koordinaten zu ermitteln. Die sich überschneidenden Koordinaten können die Ziele (z. B. Adressen) des Summationspuffers für den Empfang der ersten Teilsummen angeben. Die Ziele können den ersten Bereich definieren, während eine Anzahl der Ziele eine Anzahl benachbarter Eingabedatenelemente definieren kann, die in der ersten Teilmenge von Eingabedatenelementen enthalten sind. Der Compiler kann erste Informationen über die Ziele im Berechnungsbefehl kodieren. Die erste Information kann beispielsweise eine Zieladresse, die einer ersten der sich überschneidenden Koordinaten von Ausgabedatenelementen entspricht, einen auf der Schrittweite basierenden Schrittparameter, der den Abstand zwischen benachbarten Zielen angibt, und die Anzahl der sich überschneidenden Koordinaten umfassen.
  • Der Compiler kann dann die überlappenden Eingabedatenelemente auf der Grundlage einer Projektionsoperation vom ersten Bereich zurück zu einem zweiten Bereich im Eingabedaten-Array bestimmen. Der Compiler kann auf der Grundlage der zweiten Koordinaten des ersten Gewichtungsdatenelements in der gedrehten Gewichtungsdatenmatrix dritte Koordinaten eines ersten der Eingabedatenelemente in der dilatierten Eingabedatenmatrix berechnen, das sich mit dem ersten Gewichtungsdatenelement überlappt, wenn sich die gedrehte Gewichtungsdatenmatrix an einer ersten Schrittposition in Bezug auf die dilatierte Eingabedatenmatrix befindet. Als Teil der Projektionsoperation kann der Compiler die dritten Koordinaten mit dem Kehrwert der Schrittweite skalieren, um vierte Koordinaten des ersten Eingabedatenelements im Original-Eingabedaten-Array zu bestimmen, während die Anzahl der Ziele eine Anzahl der benachbarten Eingabedatenelemente liefern kann, die für die erste Teilmenge ausgehend von den vierten Koordinaten ausgewählt werden sollen. Die vierten Koordinaten und die Anzahl der Eingabedatenelemente können den zweiten Bereich definieren. Der Compiler kann eine zweite Information, die die vierten Koordinaten und die Anzahl der Eingabedatenelemente angibt, im Berechnungsbefehl kodieren. Die zweite Information kann z. B. eine den vierten Koordinaten entsprechende Quelladresse und die Anzahl der aus dem Original-Eingabedaten-Array auszuwählenden benachbarten Eingabedatenelemente umfassen.
  • Beispiele der vorliegenden Offenbarung können die Effizienz eines Neuronalnetzwerk-Prozessors bei der Durchführung einer transponierten Faltungsoperation durch Reduzierung der Speicheroperationen verbessern. Beispielsweise können die beschriebenen Techniken die zusätzlichen Speicheroperationen vermeiden, die mit dem Kopieren von Elementen der Original-Eingabedatenmatrix in den Speicher verbunden sind, um die dilatierte Eingabedatenmatrix/-Array zu erzeugen. Darüber hinaus können die beschriebenen Techniken auch die zusätzlichen Speicheroperationen vermeiden, die mit dem Kopieren von Elementen der Original-Gewichtungsdatenmatrix in den Speicher verbunden sind, um die gedrehte Gewichtungsdatenmatrix/-Array zu erzeugen. All dies kann die Anzahl der Speicheroperationen reduzieren, was die Speicherzugriffslatenz verringert und die Geschwindigkeit der transponierten Faltungsoperation verbessert.
  • In der folgenden Beschreibung werden verschiedene Beispiele beschrieben. Zu Erklärungszwecken werden spezifische Konfigurationen und Details angegeben, um ein gründliches Verständnis der Beispiele zu ermöglichen. Für den Fachmann ist es jedoch auch offensichtlich, dass das Beispiel ohne die spezifischen Details ausgeführt werden kann. Weiterhin können bekannte Merkmale weggelassen oder vereinfacht werden, um die beschriebenen Ausführungsformen nicht zu verdecken.
  • 1 veranschaulicht ein Beispiel für eine Klassifizierungsvorrichtung 100, die die hierin offenbarten Techniken zur Datenverarbeitung verwendet. Bei der Klassifizierungsvorrichtung 100 kann es sich beispielsweise um eine Computervorrichtung handeln, die eine Softwareanwendung 102 und ein Vorhersagemodell 103 betreibt, um in einer Datensequenz enthaltene Informationen vorherzusagen und eine vorbestimmte Funktion auf der Grundlage der Vorhersage auszuführen. Die Klassifizierungsvorrichtung 100 kann z. B. Teil eines Bilderkennungsdienstes sein, der bestimmte Objekte (z. B. Text, eine Person usw.) aus einem Bild identifizieren soll. Es versteht sich, dass der Bilderkennungsdienst lediglich als veranschaulichendes Beispiel dient und dass die hier offenbarten Techniken auch für andere Datenverarbeitungsanwendungen verwendet werden können, z. B. für textbasierte Datenverarbeitung (z. B. Verarbeitung von Suchanfragen), Audiodatenverarbeitung usw. Darüber hinaus kann die Klassifizierungsvorrichtung 100 eine Reihe von verschiedenen Vorhersagemodellen betreiben, um verschiedene Eingabedaten zu verarbeiten, entweder parallel oder zu verschiedenen Zeiten.
  • In einigen Beispielen kann der Bilderkennungsdienst in einem Multi-Tenant-Rechendienstsystem bereitgestellt werden. Das Multi-Tenant-Rechendienstsystem kann typischerweise eine Vielzahl von Servern umfassen, die Daten hosten und von mehreren Kunden oder Organisationen genutzt werden können, um Instanzen auszuführen, wie z. B. Instanzen virtueller Maschinen oder Bare-Metal-Instanzen (z. B. Betriebssysteme, die direkt auf der Server-Hardware laufen). In den meisten Fällen, wie z. B. bei Bare-Metal- oder virtuellen Maschineninstanzen, kann ein Multi-Tenant-Rechendienstsystem einem Kunden zugewiesen werden, wenn der Kunde sie benötigt, und außer Betrieb genommen werden, wenn sie nicht mehr benötigt werden, so dass die Ressourcen anderen Kunden neu zugewiesen werden können. In der vorliegenden Offenbarung können die Begriffe „Tenant“ und „Kunde“ austauschbar verwendet werden, obwohl diese Begriffe nicht notwendigerweise das Bestehen einer bestimmten Geschäftsvereinbarung implizieren. Der Begriff „Instanz“ kann sich z. B. auf eine Instanz beziehen, die direkt auf der Serverhardware oder als virtuelle Maschine ausgeführt wird. Unterschiedliche Typen von Instanzen entsprechen im Allgemeinen unterschiedlichen Hardwarefunktionen und/oder Anordnungen von Hardware (z. B. unterschiedliche Mengen an verfügbarem Speicher und/oder Verarbeitungshardware). Im Beispiel von 1 kann das Multi-Tenant-Rechendienstsystem den Bilderkennungsdienst bereitstellen, wenn der Kunde ihn benötigt, und der Dienst wird außer Betrieb genommen, wenn er nicht mehr benötigt wird, so dass die Ressourcen, die den Bilderkennungsdienst unterstützen (z. B. der Zugriff auf die Softwareanwendung 102 und die zugrunde liegenden Hardwareressourcen für die Verarbeitung der Softwareanwendung 102), anderen Kunden neu zugewiesen werden können. Verschiedene Kunden (oder ein Kunde) können die Anwendung 102 auffordern, die Verarbeitung verschiedener Eingabedaten unter Verwendung desselben oder verschiedener Vorhersagemodelle einschließlich des Vorhersagemodells 103 durchzuführen.
  • Im Beispiel von 1 kann die Softwareanwendung 102 Pixeldaten eines Bildes 104 von einem Benutzer empfangen. Das Bild 104 kann ein Pixel-Array enthalten. Die Softwareanwendung 102 kann eine Analyse der Pixeldaten durchführen und ein oder mehrere Objekte 106 vorhersagen, die im Bild 104 dargestellt sind. Die Analyse kann z. B. den Vergleich der Pixeldaten mit einem Satz vorgegebener Merkmalsdaten beinhalten. Die vorgegebenen Merkmalsdaten können Daten enthalten, die einem Satz vorgegebener visueller Bildmerkmale zugeordnet sind, wie z. B. einem Nasenobjekt, einem Mundobjekt usw. Die vorbestimmten Merkmalsdaten können auch Daten enthalten, die mit nicht-visuellen Bildmerkmalen oder einer Kombination aus visuellen und nicht-visuellen Bildmerkmalen verbunden sind. Wie im Folgenden näher erläutert wird, kann die Softwareanwendung 102 das Vorhersagemodell 103 verwenden, um einen Satz von Bewertungen auf der Grundlage der Pixeldaten des Bildes 104 zu berechnen. Der Satz von Bewertungen kann z. B. die Wahrscheinlichkeit darstellen, dass Bild 104 die durch die Merkmalsdaten dargestellten Bildmerkmale enthält. Die Softwareanwendung 102 kann dann auf der Grundlage der Bewertungen weitere Informationen über den Inhalt des Bildes 104 ermitteln. Beispielsweise kann die Softwareanwendung 102 auf der Grundlage der Bewertungen feststellen, dass das Bild 104 ein Bild von z. B. einem Panda, einer Katze oder anderen Objekten ist.
  • Das Vorhersagemodell 103 kann in Form eines künstlichen neuronalen Netzwerks vorliegen. Das künstliche neuronale Netzwerk kann eine Vielzahl von Verarbeitungsknoten enthalten, wobei jeder Verarbeitungsknoten so konfiguriert ist, dass er einen Teil der Eingabepixeldaten verarbeitet oder die Zwischenausgaben von anderen Verarbeitungsknoten weiterverarbeitet. 1 veranschaulicht ein Beispiel für ein Vorhersagemodell 103, das die hierin offenbarten Techniken verwendet. In 1 kann das Vorhersagemodell 103 ein mehrschichtiges neuronales Netzwerk sein, wie z. B. ein Deep Neural Network (DNN), ein Convolutional Neural Network (CNN), usw. Das Vorhersagemodell 103 kann eine Eingabeschicht 207, einen Satz von Zwischenschichten, einschließlich der Zwischenschichten 209 und 211, und eine Ausgabeschicht (in 2A nicht gezeigt) umfassen. Es versteht sich, dass das Vorhersagemodell 103 auch andere verschiedene Typen von neuronalen Netzwerken enthalten kann, z. B. Long Short Memory (LSTM), Multilayer Perception (MTP), Multiscale Densenet (MSDNET) usw.
  • Schicht 207 kann Pixeldaten verarbeiten, die verschiedene Teile des Bildes 104 darstellen. Zum Beispiel kann im Beispiel von 2A die Schicht 207 die Pixeldaten des Bildes 204 verarbeiten. Jeder Verarbeitungsknoten der Schicht 207 hat die Aufgabe, einen Pixelwert (z. B. x0, x1, x2, ... xn) zu empfangen, der einem vorbestimmten Pixel innerhalb des Bildes 104 entspricht, und eine oder mehrere Gewichtungen mit dem empfangenen Pixelwert an die Schicht 209 zu übertragen. In einem Fall, in dem das Vorhersagemodell 203 ein DNN ist, kann jedem Verarbeitungsknoten der Schicht 207 ein Satz von Gewichtungen zugewiesen werden, die auf der Grundlage einer Matrix W1 definiert sind. Jeder Verarbeitungsknoten der Schicht 207 kann den empfangenen Pixelwert und die zugewiesenen Gewichtungen an jeden Verarbeitungsknoten der Schicht 209 senden. In einem Fall, in dem das Vorhersagemodell 103 ein CNN ist, können Gruppen der Verarbeitungsknoten der Schicht 207 einen Satz von Gewichtungen gemeinsam nutzen, und jede Gruppe kann den Satz von Gewichtungen und die von der Gruppe von Verarbeitungsknoten empfangenen Pixelwerte an einen einzelnen Verarbeitungsknoten der Schicht 209 senden. Verschiedene Neuronalnetzwerkmodelle können unterschiedliche Topologien enthalten (z. B. eine unterschiedliche Anzahl von Schichten, unterschiedliche Verbindungen zwischen den Schichten usw.) und/oder einen unterschiedlichen Satz von Gewichtungen für jede Schicht enthalten.
  • Schicht 209 kann die skalierten Ausgaben von Schicht 207 verarbeiten, um einen Satz von Zwischenausgaben zu erzeugen. Angenommen, der Verarbeitungsknoten 210a der Schicht 209 ist mit n Verarbeitungsknoten in der Schicht 207 verbunden, so kann der Verarbeitungsknoten 210a eine Summe der skalierten Ausgaben, die er von der Schicht 207 erhält, basierend auf der folgenden Gleichung erzeugen:
  • sum 210a = i = 0 n ( W1 i × x i )
    Figure DE112020004625T5_0001
  • Hier stellt sum210a eine Zwischenausgabe dar, die vom Verarbeitungsknoten 210a erzeugt wird. W1i × xi stellt eine Skalierung eines bestimmten Pixelwerts (z. B. xo) mit dem zugehörigen Gewicht (z. B. W10) durch einen Verarbeitungsknoten der Schicht 207 dar. In einem Fall, in dem das Vorhersagemodell 103 ein DNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Summe basierend auf der Skalierung der Pixelwerte von jedem Verarbeitungsknoten der Schicht 207 erzeugen und dann eine Summe (z. B. Sum210a) durch Summieren der skalierten Pixelwerte erzeugen. Die Summe kann auch ein Punktprodukt zwischen einem Eingabevektor, der eine Anzahl von Elementen (z. B. Pixelwerte) umfasst, und einem Gewichtungsvektor (z. B. W1) darstellen. In einigen Beispielen kann den skalierten Ausgaben auch eine Vorspannung hinzugefügt werden, um die Zwischenausgabe zu erzeugen.
  • In einem Fall, in dem das Vorhersagemodell 103 ein CNN ist, kann jeder Verarbeitungsknoten der Schicht 209 die Zwischenausgabe basierend auf der Skalierung der Pixelwerte aus einer Gruppe von Verarbeitungsknoten der Schichten 207 erzeugen. Die Zwischenausgabe kann ein Faltungsergebnis zwischen einer Gruppe von Pixelwerten und einem Filter mit den Gewichtungswerten darstellen. 2B zeigt ein Beispiel für eine Faltungsoperation, die Schicht 209 durchführen kann. In 2B kann Filter 230 ein zweidimensionales Array von Gewichtungen enthalten. Die Gewichtungen im Filter 230 können eine räumliche Verteilung von Pixeln für bestimmte zu erkennende Merkmale aus dem Bild darstellen. Das zweidimensionale Array kann eine Höhe von R Zeilen und eine Breite von S Spalten haben und ist typischerweise kleiner als ein Eingabebild mit einer Höhe von H Pixel und einer Breite von W Pixel. Jedes Gewicht kann auf ein Pixel in einem rechteckigen Block von Pixelwerten mit den gleichen R-Zeilen und S-Spalten abgebildet werden. Ein Verarbeitungsknoten der Schicht 209 (z. B. Verarbeitungsknoten 210a) kann von einer Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 240 von Pixelwerten empfangen, die einem ersten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, der einer ersten Schrittposition des Filters 230 entspricht, und eine Faltungsausgabe 242 auf der Grundlage einer Summierung von Multiplikationsergebnissen zwischen jedem Gewicht des Filters 230 und jedem entsprechenden Pixel in der Gruppe 240 gemäß Gleichung 1 erzeugen, um ein Punktprodukt zwischen einer durch das Filter 230 dargestellten Matrix und einer durch die Gruppe 240 dargestellten Matrix zu erzeugen. Ein anderer Verarbeitungsknoten der Schicht 209 kann auch von einer anderen Gruppe von Verarbeitungsknoten der Eingabeschicht 207 eine Gruppe 244 von Pixelwerten empfangen, die einem zweiten rechteckigen Block von Pixeln aus dem Eingabebild entsprechen, das einer zweiten Schrittposition des Filters 230 entspricht, und eine Faltungsausgabe 246 erzeugen, die auf einer Summierung von Multiplikationsergebnissen zwischen jedem Gewicht des Filters 230 und jedem entsprechenden Pixel in der Gruppe 244 gemäß Gleichung 1 basiert, um ein Punktprodukt zwischen der Matrix des Filters 230 und einer durch die Gruppe 240 dargestellten Matrix zu erzeugen. In einigen Beispielen kann jede Faltungsausgabe in 2B (z. B. Faltungsausgabe 242, Faltungsausgabe 346, usw.) der Ausgabe eines Verarbeitungsknotens der Schicht 209 entsprechen. In einigen Beispielen können die Pixeldaten im Eingabebild als Eingabemerkmalskarte bezeichnet werden, um anzuzeigen, dass die Pixel von demselben Filter (oder denselben Filtersätzen) verarbeitet werden, der/die bestimmten Merkmalen entspricht/entsprechen. Die Faltungsausgaben können als Ausgabemerkmalskarte bezeichnet werden, um anzuzeigen, dass die Ausgabe das Ergebnis der Verarbeitung einer Eingabemerkmalskarte mit dem Filter ist.
  • Wie in 2B gezeigt, können die Faltungsoperationen in einem Schiebefenster so angeordnet werden, dass der zweite rechteckige Block den ersten rechteckigen Block im Eingabebild überlappt oder anderweitig benachbart ist. Zum Beispiel kann im Beispiel von 2B D ein Schrittweitenabstand (in Pixeln) des Schiebefensters für jede Faltungsoperation sein, so dass der Block von Pixeln, der der Gruppe 244 entspricht, in einem Abstand D (in Form von Pixeln) von dem Block von Pixeln, der der Gruppe 240 entspricht, liegen kann, und der nächste Block von Pixeln kann auch in demselben Abstand D von der Gruppe 244 liegen. Andere Verarbeitungsknoten der Schicht 209 können auch Gruppen von Pixeln empfangen, die anderen rechteckigen Blöcken entsprechen, und andere Zwischenausgaben erzeugen. Die Faltungsausgaben können Teil eines Faltungsausgaben-Arrays sein. Das Array der Faltungsausgaben kann eine kleinere Höhe und eine kleinere Breite haben als das Eingabebild. Rechteckige Blöcke der Faltungsausgaben können weiter gruppiert werden, und Faltungsoperationen können auf Schicht 211 zwischen den Gruppen von Faltungsausgaben und einem weiteren Satz von Filtergewichten durchgeführt werden, um einen weiteren Satz von Faltungsausgaben zu erzeugen.
  • In einigen Beispielen können die Faltungsoperationen zwischen mehreren Bildern und mehreren Filtern durchgeführt werden. Zum Beispiel können unter Bezugnahme auf 2C ein Satz von C Filtern 260 einer Anzahl (C) von Bildern 270 entsprechen, und Faltungsoperationen können zwischen jedem Filter des Filtersatzes 260 und Pixelblöcken auf dem entsprechenden Bild der Bilder 270 durchgeführt werden. Jedes der Bilder 270 kann einem Eingabekanal entsprechen. Die Faltungsergebnisse für jedes Filter-Bild-Paar können wie folgt summiert werden, um eine Faltungsausgabe zu erzeugen:
  • O e , f = r = 0 R 1 s = 0 S 1 c = 0 C 1 X c e D + r , f D + s × W c r , s
    Figure DE112020004625T5_0002
  • Hier werden die Bilder (oder Pixelmatrizen) gefaltet. Xc eD+r,ƒD+s kann sich auf den Wert eines Pixels in einem Bild mit dem Index c innerhalb der Anzahl (C) der Bilder 270 beziehen, mit einer Zeilenkoordinate von eD+r und einer Spaltenkoordinate von fD+s. Im weiteren Verlauf der Offenbarung können die Koordinaten des Elements Xc eD+r,ƒD+s in der Form (eD+r, fD+s) dargestellt werden. Der Index c kann einen bestimmten Eingabekanal bezeichnen. D ist der Schiebefenster-Schrittweitenabstand, während e und f der Position des Datenelements in der Faltungsausgabematrix entsprechen, die auch einem bestimmten Schiebefenster entsprechen kann. Außerdem entsprechen r und s einer bestimmten Position innerhalb des Schiebefensters. Ein Pixel an einem Ort (r, s) und eines Bildes mit dem Index c kann auch einer Gewichtung Wc r,s in einem entsprechenden Filter mit demselben Index c am selben Ort (r, s) entsprechen. Gleichung 2 zeigt, dass zur Berechnung des Faltungsergebnisses Oe,ƒ jedes Pixel innerhalb eines Schiebefensters (indiziert durch (e,f)) mit einer entsprechenden Gewichtung multipliziert werden kann Wc r,s. Eine Teilsumme der Multiplikationsprodukte innerhalb jedes Schiebefensters für jedes Bild innerhalb der Bildmenge kann berechnet werden. Dann kann eine Summe der Teilsummen für alle Bilder der Bildmenge berechnet werden.
  • Darüber hinaus können in einigen Beispielen mehrere Filtersätze verwendet werden, um Faltungsoperationen mit einer Bildmenge durchzuführen, um eine Menge von Faltungsausgabe-Arrays zu erzeugen, wobei jedes Faltungsausgabe-Array einem Filtersatz entspricht. Jeder Filtersatz kann einem Ausgabekanal entsprechen. Beispielsweise können die mehreren Filtersätze mehreren Merkmalen entsprechen, die aus der Bildmenge zu erkennen sind, und jedes Faltungsausgabe-Array kann den Erkennungsergebnissen für jedes Merkmal aus der Bildmenge entsprechen. Wenn zum Beispiel M Filtersätze auf C Bilder angewendet werden, um M Faltungsausgabe-Arrays zu erzeugen, kann Gleichung 2 wie folgt aktualisiert werden:
  • O e , f m = r = 0 R 1 s = 0 S 1 c = 0 C 1 X c e D + r , f D + s × W c , m r , s
    Figure DE112020004625T5_0003
  • Hier haben Faltungsausgabe Oe,ƒ m und die Gewichtung Wc,m r,s einen Index m, der einer der M Filtersätzen entspricht. Der Index m kann einen bestimmten Ausgabekanal bezeichnen.
  • 2D veranschaulicht ein Beispiel von C Sätzen von Eingabedatensätzen (mit C = 3), die mit M Filtersätzen (mit M = 2) gefaltet werden. Jeder Satz von Eingabedaten entspricht den Einträgen eines Pixel-Arrays. Jeder der M Filtersätze umfasst einen Satz von C Filtern, die den C Sätzen von Eingabepixel-Arrays entsprechen. Die Faltungsoperationen erzeugen M Sätze von Ausgabedatenelementen, wobei jeder Satz von Ausgabedatenelementen einem Faltungsausgabe-Array entspricht. Jedes Faltungsausgabe-Array entspricht der Faltung eines Satzes (von M Sätzen) von Filtern mit den Eingabepixel-Arrays. Zum Beispiel kann O0,0 0 durch eine Summe des Punktprodukts zwischen der Pixelgruppe 282 und dem Filter-Array 284, des Punktprodukts zwischen der Pixelgruppe 286 und dem Filter-Array 288 und des Punktprodukts zwischen der Pixelgruppe 289 und dem Filter-Array 292 erzeugt werden.
  • Unter Bezugnahme auf 2A kann ein Verarbeitungsknoten der Schicht 209 so konfiguriert sein, dass er die Faltungsausgabeelemente eines Faltungsausgabe-Arrays erzeugt, und eine Menge M von Verarbeitungsknoten der Schicht 209 kann einer Menge M von Faltungsausgabe-Arrays entsprechen. Der Verarbeitungsknoten der Schicht 209 kann auch jede Faltungsausgabe mit einer Aktivierungsfunktion verarbeiten, um eine Aktivierungsausgabe zu erzeugen. Die Aktivierungsfunktion kann die Faltungsausgabe in eine Entscheidung übersetzen, ob die Faltungsausgabe an die Zwischenschicht 211 weitergeleitet werden soll, um die Klassifizierungsentscheidung zu beeinflussen (analog zum Feuern eines biologischen Neurons).
  • Ein Beispiel für die Aktivierungsfunktion kann eine gleichgerichtete lineare Einheit (ReLU) sein, die gemäß der folgenden Gleichung definiert ist:
  • R e L U ( x ) = { x f o r x 0 0 f o r x < 0
    Figure DE112020004625T5_0004
  • Zusätzlich zu ReLU können auch andere Formen von Aktivierungsfunktionen verwendet werden, z. B. eine Softplus-Funktion (die eine glatte Annäherung an eine ReLU-Funktion sein kann), eine hyperbolische Tangensfunktion (tanh), eine Arcustangensfunktion (arctan), eine Sigmoidfunktion, eine Gaußfunktion usw.
  • Ein Verarbeitungsknoten der Schicht 209 (z. B. Verarbeitungsknoten 210a) kann die Summe mit der ReLU-Funktion verarbeiten, um eine erste Ausgabe der Schicht 209 basierend auf der folgenden Gleichung zu erzeugen:
  • first_output 210 a = ReLU ( Sum 210 a )
    Figure DE112020004625T5_0005
  • Die Schicht 211 kann die skalierten Zwischenausgaben der Schicht 209 weiterverarbeiten, indem sie z. B. zusätzliche Faltungsoperationen auf der Grundlage verschiedener Filtersätze durchführt. Die Ausgaben von jedem Verarbeitungsknoten der Schicht 211 können an andere höhere Zwischenschichten oder an eine Ausgabeschicht (in 2A nicht gezeigt) weitergeleitet werden. Die Ausgabeschicht kann einen Ausgabevektor bilden, der z. B. eine Wahrscheinlichkeit darstellt, dass bestimmte Merkmale in Bild 104 enthalten sind, und/oder eine Wahrscheinlichkeit, dass Bild 204 ein Bild eines Pandas enthält. Beispielsweise kann der Ausgabevektor mit einem Referenzvektor verglichen werden, der einem Nasenobjekt eines Pandas zugeordnet ist, oder mit einem Referenzvektor, der einem Panda zugeordnet ist. Anhand des Vergleichsergebnisses kann entschieden werden, ob Bild 104 ein Bild eines Pandas ist.
  • Die Faltungsoperationen von 2B bis 2D können verwendet werden, um verschiedene Arten von Faltungsoperationen für verschiedene Anwendungen zu unterstützen, wie z. B. eine transponierte Faltungsoperation. 2E und 2F veranschaulichen Beispiele für eine transponierte Faltungsoperation. Wie in 2E und 2F gezeigt, kann eine transponierte Faltungsoperation auf einer normalen Faltungsoperation zwischen einer gedrehten Gewichtungsmatrix, wie dem gedrehten Filter 260, und einer dilatierten Eingabedatenmatrix, wie dem dilatierten Bild 270, basieren. Die gedrehte Gewichtungsmatrix kann durch eine 180-Grad-Drehung der Original-Gewichtungsmatrix (z. B. des Original-Filters 260) gebildet werden, was ein Umdrehen der Elemente entlang einer vertikalen Dimension (z. B. der R-Dimension in 2E), gefolgt von einer Umdrehung entlang einer horizontalen Dimension (z. B. die Dimension S in 2E enthält. Eine Abbildung der (r, s)-Koordinaten eines Original-Filters 260 mit (r, s)-Koordinaten zwischen (0, 0) und (R-1, S-1) und des gedrehten Filters 260 kann auf den folgenden Gleichungen basieren:
  • r rotate = R 1 r original
    Figure DE112020004625T5_0006
  • s rotate = S 1 s original
    Figure DE112020004625T5_0007
  • In Gleichungen 6 steht roriginal für die r-Koordinate eines Filterelements im Original-Filter 260, während rrotate die r-Koordinate dieses Filterelements im gedrehten Filter 260 darstellt. Außerdem steht soriginal für die s-Koordinate eines Filterelements im Original-Filter 260, während srotate für die s-Koordinate dieses Filterelements im gedrehten Filter 260 steht. Wie beispielsweise in 2E gezeigt, hat ein Gewichtungsdatenelement W0,0 im Original-Filter 260 die Koordinaten (0, 0), aber im gedrehten Filter 260 hat das gleiche Gewichtungsdatenelement W0,0 die Koordinaten (2, 2).
  • Darüber hinaus kann ein dilatiertes Bild 270 durch Einfügen einer Anzahl von Nullen zwischen jedem Datenelement des Originalbildes 270 erstellt werden. Die Anzahl der Nullen kann auf einer Schrittweite der transponierten Faltungsoperation basieren. Wie beispielsweise in 2E gezeigt, wird für eine transponierte Faltungsoperation mit einer Schrittweite von 2 eine Null (Schrittweite minus eins) zwischen jedes Eingabedatenelement des Originalbildes 270 eingefügt, um das dilatierte Bild 270 zu bilden, so dass eine Reihe von Nullen oberhalb (nördlich) der ersten Reihe von Eingabedatenelementen des Originalbildes 270 (z. B. X0,0, X0,1, etc.)), zwischen benachbarten Reihen von Eingabedatenelementen und unterhalb der letzten Reihe von Eingabedatenelementen des Originalbildes 270 entlang der H-Dimension eingefügt wird. Außerdem wird links (westlich) von der ersten Spalte der Eingabedatenelemente des Originalbildes 270 (z. B. X0,0, X2,0, etc.)) zwischen benachbarten Spalten von Eingabedatenelementen und rechts von der letzten Spalte der Eingabedatenelemente des Originalbildes 270 eine Nullspalte eingefügt. Genauer gesagt, wie in 2F gezeigt, werden bei einer transponierten Faltungsoperation mit einer Schrittweite von 4 drei Nullen zwischen jedes Eingabedatenelement des Originalbildes 270 eingefügt, um das dilatierte Bild 270 zu erzeugen.
  • Eine normale Faltungsoperation kann dann zwischen dem gedrehten Filter 260 und dem dilatierten Bild 270 durchgeführt werden, um ein Faltungsausgabe-Array 280 zu erzeugen. Die normale Faltungsoperation kann durchgeführt werden, indem das gedrehte Filter 260 im dilatierten Bild 270 mit einer Schrittweite (D in 2B) von 1 durchlaufen wird. Ein Ausgabedatenelement kann durch die Summe der Produkte zwischen dem gedrehten Filter 260 und den überlappenden Eingabedatenelementen (einschließlich der aufgefüllten Nullen) des dilatierten Bildes 270 gebildet werden. In einem Fall, in dem die Schrittweite der transponierten Faltungsoperation größer ist als die Abmessungen des gedrehten Filters 260, wie in 2F gezeigt, enthält das Faltungsausgabe-Array 280 keine Ausgabedatenelemente.
  • 3 veranschaulicht eine Beispielsequenz 300 für die Implementierung einer transponierten Faltungsoperation in einer Rechenumgebung. Wie in 3 gezeigt, können die Filterelemente des Original-Filters 260 in einem Speicher 302 gespeichert werden. Die Adressen der einzelnen Filterelemente im Speicher 302 können auf den (r,s)-Koordinaten des Filterelements basieren. In einigen Beispielen kann ein Prozessor 304 (z. B. ein Host-Gerät) Leseoperationen 306 im Speicher 302 durchführen, um die Filterelemente des Original-Filters 260 zu erhalten, und Rotationsoperationen 308 durchführen, um die gedrehten (r, s)-Koordinaten jedes Filterelements basierend auf den Gleichungen 6 und 7 zu berechnen. In einigen Beispielen können die Filterelemente des Original-Filters 260 in der gedrehten Form (basierend auf den Gleichungen 6 und 7) im Speicher 302 gespeichert werden, und die Drehoperationen 308 können übersprungen werden. Der Hardware-Prozessor 304 kann Schreiboperationen 310 durchführen, um die Filterelemente an Adressen, die auf ihren gedrehten (r, s)-Koordinaten basieren, im Speicher 302 zu speichern. Darüber hinaus können auch Eingabedatenelemente des Originalbildes 270 im Speicher 302 abgelegt werden. Die Adressen der einzelnen Eingabedatenelemente können auf den Koordinaten der Eingabedatenelemente im Originaldilatierten Bild 270 basieren. Der Prozessor 304 kann Leseoperationen 316 im Speicher 302 durchführen, um die Eingabedatenelemente des Originalbildes 270 zu erhalten, und Schreiboperationen 318 im Speicher 302 durchführen, um die Eingabedatenelemente an Adressen/Koordinaten zu speichern, die dem vergrößerten Bild 270 entsprechen. Eine Faltungsoperation 320 kann dann zwischen dem gedrehten Filter 260 und dem dilatierten Bild 270 aus dem Speicher 302 für die transponierte Faltungsoperation durchgeführt werden.
  • Die Sequenz 300 kann eine große Anzahl von Lese- und Schreiboperationen im Speicher beinhalten. Beispielsweise kann eine große Anzahl von Leseoperationen 306 und Schreiboperationen 310 für die Rotation eines großen und/oder mehrdimensionalen Filters 360 (z. B. mit mehreren Eingabe- und Ausgabekanälen, wie in 2D gezeigt) durchgeführt werden. Außerdem kann für die Dilatation eines großen und/oder mehrdimensionalen Bildes 270 eine große Anzahl von Leseoperationen 316 und Schreiboperationen 318 durchgeführt werden. All diese zusätzlichen Lese- und Schreiboperationen im Speicher können zu einer zusätzlichen Latenz führen und die für die Durchführung der transponierten Faltungsoperation in der Computerumgebung benötigte Zeit erhöhen.
  • 4A ist ein Blockdiagramm, das ein Beispiel für eine integrierte Schaltung zeigt, die so konfiguriert werden kann, dass sie verschiedene Arten von Faltungsoperationen, einschließlich normaler und transponierter Faltungsoperationen, durchführt. Das Beispiel von 4 veranschaulicht einen Beschleuniger 402. In verschiedenen Beispielen kann der Beschleuniger 402 für einen Satz von Eingabedaten (z. B. Eingabedaten 450) Berechnungen unter Verwendung eines Verarbeitungsmaschinen-Arrays 410, einer Aktivierungsmaschine 416 und/oder einer Poolingmaschine 418 ausführen. In einigen Beispielen kann der Beispiel-Beschleuniger 402 eine integrierte Schaltkreiskomponente eines Prozessors sein, wie z. B. ein Neuronalnetzwerk-Prozessor. Der Prozessor kann weitere integrierte Schaltkreiskomponenten haben, einschließlich zusätzlicher Beschleunigungsmaschinen. Der Beschleuniger 402 kann einen Controller 422 enthalten, um den Betrieb des Verarbeitungsmaschinen-Arrays 410, der Aktivierungsmaschine 416 und/oder der Poolingmaschine 418 zu steuern.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 404 mehrere Speicherbänke 414 enthalten. In diesen Implementierungen kann jede Speicherbank 414 unabhängig zugänglich sein, was bedeutet, dass das Lesen einer Speicherbank nicht vom Lesen einer anderen Speicherbank abhängig ist. Ebenso hat das Schreiben in eine Speicherbank keinen Einfluss auf das Schreiben in eine andere Speicherbank bzw. schränkt dieses nicht ein. In einigen Fällen kann jede Speicherbank gleichzeitig gelesen und geschrieben werden. Es können verschiedene Techniken verwendet werden, um unabhängig voneinander zugängliche Speicherbänke 414 zu haben. Zum Beispiel kann jede Speicherbank eine physikalisch getrennte Speicherkomponente sein, die einen Adressraum hat, der getrennt und unabhängig von den Adressräumen jeder anderen Speicherbank ist. In diesem Beispiel kann jede Speicherbank mindestens einen Lesekanal und mindestens einen separaten Schreibkanal haben, die gleichzeitig verwendet werden können. In diesen Beispielen kann das Speicher-Subsystem 404 den gleichzeitigen Zugriff auf die Lese- oder Schreibkanäle mehrerer Speicherbänke ermöglichen. Als weiteres Beispiel kann das Speicher-Subsystem 404 eine Arbitrierungslogik enthalten, so dass die Arbitrierung zwischen z. B. den Ausgaben mehrerer Speicherbänke 414 dazu führen kann, dass die Ausgabe von mehr als einer Speicherbank verwendet wird. In diesen und anderen Beispielen kann jede Speicherbank, obwohl sie global vom Speicher-Subsystem 404 verwaltet wird, unabhängig von den anderen betrieben werden.
  • Die Tatsache, dass die Speicherbänke 414 unabhängig voneinander zugänglich sind, kann die Effizienz des Beschleunigers 402 erhöhen. Beispielsweise können Werte gleichzeitig gelesen und jeder Zeile des Verarbeitungsmaschinen-Arrays 410 zur Verfügung gestellt werden, so dass das gesamte Verarbeitungsmaschinen-Array 410 in einem Taktzyklus in Gebrauch sein kann. Als weiteres Beispiel können die Speicherbänke 414 zur gleichen Zeit gelesen werden, in der die von dem Verarbeitungsmaschinen-Array 410 berechneten Ergebnisse in das Speicher-Subsystem 404 geschrieben werden. Im Gegensatz dazu kann ein einzelner Speicher möglicherweise nur ein Lesen oder Schreiben zur gleichen Zeit bedienen. Bei einem einzelnen Speicher können z. B. mehrere Taktzyklen erforderlich sein, um Eingabedaten für jede Zeile des Verarbeitungsmaschinen-Arrays 410 zu lesen, bevor das Verarbeitungsmaschinen-Array 410 gestartet werden kann.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 404 so konfiguriert werden, dass es gleichzeitig mehrere Clients bedient, einschließlich des Verarbeitungsmaschinen-Arrays 410, der Aktivierungsmaschine 416, der Poolingmaschine 418 und aller externen Clients, die über eine Kommunikationsstruktur 420 auf das Speicher-Subsystem 404 zugreifen. In einigen Implementierungen kann die Fähigkeit, mehrere Clients zu bedienen, bedeuten, dass das Speicher-Subsystem 404 mindestens so viele Speicherbänke hat, wie es Clients gibt. In einigen Fällen kann jede Zeile des Verarbeitungsmaschinen-Arrays 410 als ein separater Client zählen. In manchen Fällen kann jede Spalte des Verarbeitungsmaschinen-Arrays 410 ein Ergebnis ausgeben, so dass jede Spalte als separater Schreibclient zählen kann. In einigen Fällen kann die Ausgabe vom Verarbeitungsmaschinen-Array 410 in die Speicherbänke 414 geschrieben werden, die dann anschließend Eingabedaten für das Verarbeitungsmaschinen-Array 410 bereitstellen können. Als weiteres Beispiel können die Aktivierungsmaschine 416 und die Pooling-Maschine 418 mehrere Ausführungskanäle enthalten, von denen jeder ein separater Speicher-Client sein kann. Die Speicherbänke 414 können z. B. mit statischem Direktzugriffsspeicher (SRAM) realisiert werden.
  • In verschiedenen Implementierungen kann das Speicher-Subsystem 404 Steuerlogik enthalten. Die Steuerlogik kann z. B. die Adressräume jeder der Speicherbänke 414 verfolgen, Speicherbänke 414 zum Lesen oder Schreiben identifizieren und/oder Daten zwischen den Speicherbänken 414 bewegen. In einigen Implementierungen können die Speicherbänke 414 mit bestimmten Clients fest verdrahtet werden. Zum Beispiel kann ein Satz von Speicherbänken 414 fest verdrahtet werden, um Werte für die Zeilen des Verarbeitungsmaschinen-Arrays 410 bereitzustellen, wobei eine Speicherbank jede Zeile bedient. Als weiteres Beispiel kann ein Satz von Speicherbänken fest verdrahtet werden, um Werte von Spalten des Verarbeitungsmaschinen-Arrays 410 zu empfangen, wobei eine Speicherbank Daten für jede Spalte empfängt.
  • Das Verarbeitungsmaschinen-Array 410 ist die Berechnungsmatrix des Beispielbeschleunigers 402. Das Verarbeitungsmaschinen-Array 410 kann z. B. parallele Integration, Faltung, Korrelation und/oder Matrixmultiplikation ausführen. Das Verarbeitungsmaschinen-Array 410 umfasst mehrere Verarbeitungsmaschinen 411, die in Zeilen und Spalten angeordnet sind, so dass die von einer Verarbeitungsmaschine 411 ausgegebenen Ergebnisse direkt in eine andere Verarbeitungsmaschine 411 eingegeben werden können. Verarbeitungsmaschinen 411, die sich nicht an den Außenkanten des Verarbeitungsmaschinen-Arrays 410 befinden, können daher Daten zur Bearbeitung von anderen Verarbeitungsmaschinen 411 und nicht vom Speicher-Subsystem 404 erhalten.
  • In verschiedenen Beispielen verwendet das Verarbeitungsmaschinen-Array 410 eine systolische Ausführung, bei der die Daten in regelmäßigen Abständen aus verschiedenen Richtungen an jeder Verarbeitungsmaschine 411 ankommen. In einigen Beispielen können die Eingabedaten von links in das Verarbeitungsmaschinen-Array 410 fließen und die Gewichtungswerte können oben geladen werden. In einigen Beispielen können Gewichtungen und Eingabedaten von links und Teilsummen von oben nach unten fließen. In diesen und anderen Beispielen bewegt sich eine Multiplikations- und Akkumulationsoperation als diagonale Wellenfront durch das Verarbeitungsmaschinen-Array 410, wobei sich die Daten nach rechts und unten über das Array bewegen. Steuersignale können gleichzeitig mit den Gewichtungen links eingegeben werden und mit der Berechnung quer und abwärts fließen.
  • In verschiedenen Implementierungen bestimmt die Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 die Rechenkapazität des Verarbeitungsmaschinen-Arrays 410, und die Anzahl der Zeilen bestimmt die erforderliche Speicherbandbreite zum Erreichen einer maximalen Auslastung des Verarbeitungsmaschinen-Arrays 410. Das Verarbeitungsmaschinen-Array 410 kann z. B. 64 Spalten und 428 Zeilen oder eine andere Anzahl von Spalten und Zeilen haben.
  • Ein Beispiel für eine Verarbeitungsmaschine 411 ist in 4 in einem Beispieldiagramm dargestellt. Wie in diesem Beispiel dargestellt, kann eine Verarbeitungsmaschine 411 eine Multiplikator-Akkumulator-Schaltung enthalten. Eingaben von links können z. B. Eingabedaten i und einen Gewichtungswert w enthalten, wobei die Eingabedaten ein Wert sind, der entweder aus einem Satz von Eingabedaten oder einem Satz von Zwischenergebnissen entnommen wird, und der Gewichtungswert aus einem Satz von Gewichtungswerten stammt, die eine Schicht des neuronalen Netzwerks mit der nächsten verbinden. Ein Satz von Eingabedaten kann z. B. ein Bild sein, das zum Identifizieren oder zur Objekterkennung eingereicht wird, ein Audioclip, der für die Spracherkennung bereitgestellt wird, eine Textfolge für die Verarbeitung natürlicher Sprache oder die maschinelle Übersetzung, oder der aktuelle Zustand eines Spiels, der analysiert werden muss, um den nächsten Zug zu bestimmen, unter anderem. In einigen Beispielen werden die Eingabedaten und der Gewichtungswert nach rechts ausgegeben, zur Eingabe in die nächste Verarbeitungsmaschine 411.
  • Im dargestellten Beispiel kann eine Eingabe von oben eine Teilsumme, p_in, enthalten, die entweder von einer anderen Verarbeitungsmaschine 411 oder von einer vorherigen Berechnungsrunde durch das Verarbeitungsmaschinen-Array 410 bereitgestellt wird. Beim Starten einer Berechnung für einen neuen Satz von Eingabedaten kann die oberste Zeile des Verarbeitungsmaschinen-Arrays 410 einen festen Wert für p_in erhalten, z. B. Null. Wie in diesem Beispiel dargestellt, werden i und w miteinander multipliziert und das Ergebnis wird mit p_in summiert, um eine neue Teilsumme, p_out, zu erzeugen, die in eine andere Verarbeitungsmaschine 411 eingegeben werden kann. Verschiedene andere Implementierungen der Verarbeitungsmaschine 411 sind möglich.
  • Die Ausgaben der letzten Zeile im Verarbeitungsmaschinen-Array 410 können im Summationspuffer 412 zwischengespeichert werden. Bei den Ergebnissen kann es sich um Zwischenergebnisse handeln, die in die Speicherbänke 414 geschrieben werden können, um sie dem Verarbeitungsmaschinen-Array 410 für weitere Berechnungen zur Verfügung zu stellen. Alternativ können die Ergebnisse Endergebnisse sein, die, nachdem sie in die Speicherbänke 414 geschrieben wurden, über die Kommunikationsstruktur 420 aus dem Speicher-Subsystem 404 gelesen werden können, um vom System ausgegeben zu werden.
  • In einigen Implementierungen umfasst der Beschleuniger 402 eine Aktivierungsmaschine 416. In diesen Implementierungen kann die Aktivierungsmaschine 416 die Ergebnisse aus dem Verarbeitungsmaschinen-Array 410 zu einer oder mehreren Ausgabeaktivierungen kombinieren. Bei einem neuronalen Faltungsnetzwerk können z. B. die Faltungen von mehreren Kanälen summiert werden, um eine Ausgabeaktivierung für einen einzelnen Kanal zu erzeugen. In anderen Beispielen kann die Akkumulation von Ergebnissen aus einer oder mehreren Spalten im Verarbeitungsmaschinen-Array 410 erforderlich sein, um eine Ausgabeaktivierung für einen einzelnen Knoten im neuronalen Netzwerk zu erzeugen. In einigen Beispielen kann die Aktivierungsmaschine 416 umgangen werden.
  • In verschiedenen Beispielen kann die Aktivierungsmaschine 416 mehrere separate Ausführungskanäle enthalten. In diesen Beispielen können die Ausführungskanäle den Spalten des Verarbeitungsmaschinen-Arrays 410 entsprechen und eine Operation an den Ausgaben einer Spalte ausführen, deren Ergebnis im Speicher-Subsystem 404 gespeichert werden kann. In diesen Beispielen kann die Aktivierungsmaschine 416 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 ist. In einigen Fällen können eine oder mehrere der Berechnungen gleichzeitig ausgeführt werden. Beispiele für Berechnungen, die jeder Ausführungskanal ausführen kann, sind u. a. Exponentiale, Quadrate, Quadratwurzeln, Identitäten, Binärschritte, Bipolarschritte, Sigmoidale und Rampen.
  • In einigen Implementierungen umfasst der Beschleuniger 402 eine Poolingmaschine 418. Pooling ist das Zusammenfassen von Ausgaben der Spalten des Verarbeitungsmaschinen-Arrays 410. Das Zusammenfassen kann z. B. die Berechnung eines Maximalwerts, eines Minimalwerts, eines Mittelwerts, eines Medianwerts, einer Summierung, einer Multiplikation oder einer anderen logischen oder mathematischen Kombination umfassen. In verschiedenen Beispielen kann die Poolingmaschine 418 mehrere Ausführungskanäle enthalten, die auf Werte aus entsprechenden Spalten des Verarbeitungsmaschinen-Arrays 410 arbeiten können. In diesen Beispielen kann die Poolingmaschine 418 in der Lage sein, zwischen 1 und n parallele Berechnungen durchzuführen, wobei n gleich der Anzahl der Spalten im Verarbeitungsmaschinen-Array 410 ist. In verschiedenen Beispielen können die Ausführungskanäle der Poolingmaschine 418 parallel und/oder gleichzeitig arbeiten. In einigen Beispielen kann die Poolingmaschine 418 umgangen werden.
  • Hierin können die Aktivierungsmaschine 416 und die Poolingmaschine 418 gemeinsam als Ausführungsmaschinen bezeichnet werden. Das Verarbeitungsmaschinen-Array 410 ist ein weiteres Beispiel für eine Ausführungsmaschine. Ein weiteres Beispiel für eine Ausführungsmaschine ist eine Direct Memory Access (DMA)-Maschine, die sich außerhalb des Beschleunigers 402 befinden kann.
  • Eingabedaten 450 können über die Kommunikationsstruktur 420 ankommen. Die Kommunikationsstruktur 420 kann den Beschleuniger 402 mit anderen Komponenten eines Prozessors verbinden, z. B. mit einer DMA-Maschine, die Eingabedaten 450 von einer Eingabe-/Ausgabevorrichtung (E/A), einem Speicherlaufwerk oder einer Netzwerkschnittstelle erhalten kann. Die Eingabedaten 450 können z. B. eindimensionale Daten sein, wie eine Zeichenkette oder eine numerische Sequenz, oder zweidimensionale Daten, wie ein Array von Pixelwerten für ein Bild oder Frequenz- und Amplitudenwerte über die Zeit für ein Audiosignal. In einigen Beispielen können die Eingabedaten 450 dreidimensional sein, wie es z. B. bei den von einem selbstfahrenden Auto verwendeten Situationsinformationen oder Virtual-Reality-Daten der Fall sein kann. In einigen Implementierungen kann das Speicher-Subsystem 404 einen separaten Puffer für die Eingabedaten 450 enthalten. In einigen Implementierungen können die Eingabedaten 450 in den Speicherbänken 414 gespeichert werden, wenn der Beschleuniger 402 die Eingabedaten 450 empfängt.
  • In einigen Beispielen kann der Beschleuniger 402 eine Maschine zur Verarbeitung neuronaler Netzwerke implementieren. In diesen Beispielen kann Beschleuniger 402 für einen Satz von Eingabedaten 450 ein neuronales Netzwerk ausführen, um eine Aufgabe durchzuführen, für die das neuronale Netzwerk trainiert wurde. Das Ausführen eines neuronalen Netzwerks auf einem Satz von Eingabedaten kann als Schlussfolgerung oder Durchführen von Schlussfolgerung bezeichnet werden.
  • Die Gewichtungen für das neuronale Netzwerk können im Speicher-Subsystem 404 gespeichert werden, zusammen mit den Eingabedaten 450, auf denen das neuronale Netzwerk arbeiten wird. Die Adressen der Gewichtungen und Eingabedaten 450 im Speichersubsystem 404 können auf den Koordinaten der Gewichtungen und Eingabedaten 450 in einem Gewichtungsdaten-Array bzw. einem Eingabedaten-Array basieren oder darauf abgebildet werden, so dass die Gewichtung und die Eingabedaten auf der Grundlage von aus ihren Koordinaten abgeleiteten Adressen abgerufen werden können. Das neuronale Netzwerk kann auch Befehle enthalten, die vom Controller 422 ausgeführt werden können, um das Verarbeitungsmaschinen-Array 410 dahingehend zu steuern, verschiedene Berechnungen mit den Gewichtungen und den Eingabedaten durchzuführen. Die f können von einem Compiler generiert und auch im Speicher-Subsystem 404, in den Speicherbänken 414 oder in einem separaten Befehlspuffer gespeichert werden. Das Verarbeitungsmaschinen-Array 410 kann Zwischenergebnisse ausgeben, die die Ausgaben der einzelnen Schichten des neuronalen Netzwerks darstellen. In einigen Fällen kann die Aktivierungsmaschine 416 und/oder die Poolingmaschine 418 für Berechnungen aktiviert werden, die von bestimmten Schichten des neuronalen Netzwerks gefordert werden. Der Beschleuniger 402 kann die Zwischenergebnisse im Speicher-Subsystem 404 speichern, um sie in das Verarbeitungsmaschinen-Array 410 einzugeben, um die Ergebnisse für die nächste Schicht des neuronalen Netzwerks zu berechnen. Das Verarbeitungsmaschinen-Array 410 kann außerdem Endergebnisse aus einer letzten Schicht des neuronalen Netzwerks ausgeben. Die Endergebnisse können im Speicher-Subsystem 404 gespeichert und dann in den Speicher des Host-Prozessors oder an einen anderen Ort kopiert werden.
  • 4B und 4C veranschaulichen Beispiele für den Betrieb des Beschleunigers 402. Wie in 4B gezeigt, kann das Speicher-Subsystem 404 in mehrere Reihen unterteilt werden, z. B. in die Speicherreihen 425, 426 usw. Jede Speicherzeile kann die Eingabedatenelemente eines bestimmten Eingabekanals speichern. Eine Speicherzugriffsschaltung (z. B. die Speicherzugriffsschaltung 427) kann so gesteuert werden, dass sie die Eingabedatenelemente auf der Grundlage eines Satzes von Speicherabrufparametern 430, einschließlich einer Startadresse, eines Schritts und der Anzahl der Elemente, sequentiell in das Verarbeitungsmaschinen-Array 410 holt. Der Parameter „Startadresse“ kann die Position des ersten aus der Speicherzeile zu lesenden Eingabedatenelements definieren, der Parameter „Schritt“ kann eine Anzahl von Eingabedatenelementen definieren, die zwischen den abgerufenen Eingabedatenelementen übersprungen werden, während der Parameter „Anzahl der abzurufenden Elemente“ eine Gesamtzahl von abzurufenden Eingabedatenelementen definieren kann. Da die Eingabedatenelemente in einem zusammenhängenden Raum gespeichert werden, kann die Zugriffsschaltung 427 die Adressen der abzurufenden Eingabedatenelemente bestimmen und den Zähler auf der Grundlage dieses Schritts aktualisieren. Beispielsweise kann die Zugriffsschaltung 427 damit beginnen, das erste Eingabedatenelement von der Startadresse abzurufen, einen auf dem Schritt basierenden Adressoffset zur Startadresse hinzufügen, um das nächste Eingabedatenelement abzurufen, während eine Anzahl von Eingabedatenelementen übersprungen wird, und dies wiederholen, bis die Anzahl der Abrufelemente erreicht ist. Wie weiter unten näher beschrieben wird, können die Speicherabrufparameter 430 in einen Befehl zur Berechnung einer Reihe von Teilsummen aufgenommen werden. Der Befehl kann von einem Compiler generiert und vom Controller 422 geparst werden, um Speicherabrufparameter 430 zu extrahieren. Controller 422 kann dann das Abrufen von Eingabedatenelementen aus dem Speicher-Subsystem 400 auf der Grundlage der extrahierten Speicherabrufparameter 430 steuern. Wie im Folgenden näher beschrieben, können die Parameter Startadresse, Schritt und Anzahl der Elemente so konfiguriert werden, dass sie verschiedene Arten von Faltungsoperationen unterstützen, z. B. eine normale Faltungsoperation, eine dilatierte Faltungsoperation usw.
  • Die Verarbeitungsmaschinen 411 des Verarbeitungsmaschinen-Arrays 410 können in Zeilen, wie z. B. Zeile 431, und Spalten, wie z. B. Spalte 432, organisiert werden. Jede Reihe von Verarbeitungsmaschinen 411 ist einem Eingabekanal zugeordnet und kann nacheinander Eingabedatenelemente aus einer Speicherreihe des Speichersystems 404 empfangen, die dem Eingabekanal zugeordnet ist, während jede Spalte von Verarbeitungsmaschinen 411 einem Ausgabekanal zugeordnet werden kann. Eingabedatenelemente werden in einem zusammenhängenden Adressraum und in einer Reihenfolge gespeichert, die auf ihren Koordinaten im Eingabedaten-Array basiert. Jedes Verarbeitungsmodul 411 kann ein Gewichtungsdatenelement für einen Eingabekanal und einen Ausgabekanal, dem das Verarbeitungsmodul zugeordnet ist, speichern. Jede Spalte der Verarbeitungsmotoren 411. Unter Bezugnahme auf 4A und 4B kann eine Verarbeitungsmaschine 411 innerhalb einer Maschine Eingabedatenelemente eines Eingabekanals empfangen (z. B. Eingabedaten i von 4A), sie mit der gespeicherten Gewichtung multiplizieren (z. B. Gewichtungsdaten w aus 4A), um ein Produkt zu erzeugen, das Produkt zur eingegebenen Teilsumme p_in addieren, um die neue Teilsumme p_out zu erzeugen, und die neue Teilsumme p_out an die Verarbeitungsmaschine 411 unterhalb derselben Spalte übergeben. Die unterste Verarbeitungsmaschine 411 einer Spalte kann eine Teilsumme erzeugen, die eine Summe von Produkten zwischen den in der Spalte der Verarbeitungsmaschinen 411 gespeicherten Gewichtungsdatenelementen und den von der Speicherunterstation 404 empfangenen Eingabedatenelementen verschiedener Eingabekanäle darstellt.
  • In einem Fall, in dem die Speicherabrufparameter 430 angeben, dass die Startadresse am äußersten rechten Eingabedatenelement jeder Zeile liegt, ein Schritt von eins (was in diesem Beispiel ein Überspringen anzeigen kann), und eine bestimmte Anzahl von Eingabedatenelementen abgerufen werden soll, kann die Spalte 432 der Verarbeitungsmaschinen 411 in einer ersten Iteration eine erste Teilsumme auf der Grundlage der gespeicherten Gewichtungsdatenelemente und der Eingabedatenelemente, die vom Speicher-Subsystem 404 bereitgestellt werden, wie folgt erzeugen:
  • Erste Teilsumme = X 0 0,0 × W 0,0 0,0 × W 1,0 0,0 + X C 0,0 × W C ,0 0,0
    Figure DE112020004625T5_0008
  • In einer zweiten Iteration kann die Spalte 432 der Verarbeitungsmaschine 411 eine zweite Teilsumme auf der Grundlage der gespeicherten Gewichtungsdatenelemente und der vom Speicher-Subsystem 404 bereitgestellten Eingabedatenelemente wie folgt erzeugen:
  • Zweite Teilsumme = X 0 0,1 × W 0,0 0,1 × W 1,0 0,0 + X C 0,1 × W C ,0 0,0
    Figure DE112020004625T5_0009
  • Jede Spalte der Verarbeitungsmaschinen 411 kann die in den Iterationen erzeugten Teilsummen an einen Spaltensummationspuffer liefern, wie die Spaltensummationspuffer 442, 443 usw., die beide Teil des Summationspuffers 412 sind. Die Teilsummen werden auf der Grundlage von Gewichtungsdatenelementen an denselben Koordinaten verschiedener Filter-Arrays erzeugt, die mit verschiedenen Eingabe- und Ausgabekanälen verbunden sind, und die Teilsummen entsprechen verschiedenen Ausgabedatenelementen. Unter Bezugnahme auf 4C enthält jeder der Spaltensummationspuffer 442 und 443 eine Anzahl von Einträgen, wie z. B. E0,0, E0,2, E0,2, usw. Jeder Eintrag kann Koordinaten haben, die den Koordinaten einer Ausgabekachel zugeordnet sind, die einen Bereich eines Ausgabe-Arrays darstellen kann. Jeder Eintrag hat einen Addierer (in 4C nicht dargestellt), die es dem Eintrag ermöglicht, eine empfangene Teilsumme zur gespeicherten Teilsumme zu addieren, um eine kumulierte Teilsumme zu bilden. Der Eintrag kann dann die kumulierte Teilsumme speichern. Die Operationen in den Spaltensummationspuffern 442 und 443 können durch einen Satz von Pufferschreibparametern 452 gesteuert werden, die einen Zieloffset, einen Schritt und eine Anzahl von Schreibelementen enthalten. Der Parameter Zieloffset kann den Eintrag angeben, zu dem die erste Teilsumme (der ersten Iteration) addiert werden soll. Der Schrittparameter kann eine Anzahl von Einträgen angeben, die zwischen benachbarten Einträgen, die Teilsummen erhalten, übersprungen werden. Der Schrittparameter kann einer Lücke zwischen Eingabedatenelementen ungleich Null entsprechen, die sich mit einem Gewichtungsdatenelement überlappen, wenn sich das Gewichtungsdaten-Array an verschiedenen Schrittpositionen befindet. Außerdem gibt die Anzahl der Schreibelemente die Anzahl der Teilsummen an, die zu den Einträgen des Summationspuffers ab der Startadresse zu addieren sind, wobei benachbarte Einträge wie oben beschrieben anhand des Schrittparameters getrennt werden.
  • Als anschauliches Beispiel kann in einem Fall, in dem der Ziel-Offset 2 und der Schritt ebenfalls 2 ist, die erste Teilsumme aus Spalte 432 bei Eintrag E0,2 gespeichert werden, die zweite Teilsumme kann bei E0,4 gespeichert werden (wobei Eintrag E0,3 übersprungen wird), die dritte Teilsumme kann bei E0,6 gespeichert werden (wobei Eintrag E0,5 übersprungen wird), usw., bis eine durch die Anzahl der Schreibelemente festgelegte Anzahl von Teilsummen gespeichert ist. Wie weiter unten näher beschrieben wird, können die Speicherabrufparameter 452 in einen Befehl zur Berechnung einer Reihe von Teilsummen aufgenommen werden. Der Befehl kann vom Controller 422 geparst werden, um Pufferschreibparameter 452 zu extrahieren. Der Controller 422 kann dann die Operationen der Summationspuffer auf der Grundlage der extrahierten Pufferschreibparameter 452 steuern. Wie weiter unten beschrieben, können die Pufferschreibparameter 452 so konfiguriert werden, dass sie Faltungsoperationen unterstützen.
  • Nach der Berechnung der Teilsummen aus einem ersten Satz von Gewichtungsdatenelementen (gleiche Koordinaten in ihren jeweiligen Filter-Arrays, aber unterschiedliche Eingabe- und Ausgabekanäle) kann die Verarbeitungsmaschine 410 einen neuen Satz von Gewichtungsdatenelementen mit anderen Koordinaten laden und die Berechnungen der Teilsummen wiederholen. Die neuen Teilsummen können zu den im Summationspuffer 412 gespeicherten Teilsummen addiert werden, die aus dem ersten Satz von Gewichtungsdatenelementen berechnet wurden. Die Berechnungen und Akkumulierungen der Teilsummen können für den Rest der Gewichtungsdatenelemente fortgesetzt werden, um die Datenelemente der Ausgabekachel zu erzeugen. Nachdem die Datenelemente der Ausgabekachel erzeugt wurden, kann der Summationspuffer 412 die Datenelemente der Ausgabekachel der Aktivierungsmaschine 416 und/oder der Poolingmaschine 418 zur Nachbearbeitung zur Verfügung stellen, und die nachbearbeiteten Ausgabedatenelemente können im Speicher-Subsystem 404 gespeichert werden. Vom Speicher-Subsystem 404 können die nachbearbeiteten Ausgabedaten an die Kommunikationsstruktur 420 gesendet und/oder als Eingabedaten für eine nachfolgende Verarbeitung einer Neuronalnetzwerkschicht an das Verarbeitungsmodul 410 übertragen werden.
  • 5A - 5D veranschaulichen Beispielkonfigurationen des Beschleunigers 402 zur Durchführung einer normalen Faltungsoperation. 5A veranschaulicht die Überlappung zwischen verschiedenen Gewichtungsdatenelementen des 3x3-Filter-Arrays 504, bei dem es sich um das Original-Filter 260 von 3 handeln kann, und den Eingabedatenelementen eines Eingabedaten-Arrays 502, bei dem es sich um das Originalbild 270 handeln kann. In 5A kann das Eingabedaten-Array 502 mit einer Reihe 506 von Nullen am oberen Rand und einer Spalte 508 von Nullen am linken Rand aufgefüllt werden (Padding). Die Anzahl der Zeilen mit Nullen kann durch einen pad_north-Parameter angegeben werden, wobei pad_north gleich eins ist, was bedeutet, dass eine Zeile mit Nullen am oberen Rand (Norden) des Eingabedaten-Arrays 502 aufgefüllt wird. Darüber hinaus kann die Anzahl der Spalten, in denen Nullen aufgefüllt werden, durch einen pad_west-Parameter angegeben werden, wobei pad_west gleich eins ist, was bedeutet, dass eine Spalte mit Nullen auf der linken Seite (Westen) des Eingabedaten-Arrays 502 aufgefüllt wird. Die normale Faltungsoperation kann zwischen dem mit Nullen aufgefüllten Eingabedaten-Array 502 und dem Filter-Array 504 mit einer Schrittweite von 2 erfolgen. Einige der Eingabedatenelemente/Padding-Nullen, die sich mit einem bestimmten Gewichtungsdatenelement an verschiedenen Schrittpositionen überlappen, sind schattiert. Wie in 5A gezeigt, können sich einige der Padding-Nullen sowie das Eingabedatenelement an den Koordinaten (1, 1) mit dem Gewichtungsdatenelement (0, 0) an verschiedenen Schrittpositionen überlappen. Darüber hinaus können sich die Eingabedatenelemente (0, 0), (0, 2) und (2, 2) mit dem Gewichtungsdatenelement (1, 1) an verschiedenen Schrittpositionen überlappen. Darüber hinaus können sich die Eingabedatenelemente (1, 1), (1, 3) und (3, 3) mit dem Gewichtungsdatenelement (2, 2) an verschiedenen Schrittpositionen überlappen. In jedem Fall gibt es eine Lücke zwischen den einzelnen Eingabedatenelementen, die sich mit den Gewichtungsdatenelementen überlappen. Die Lücke kann auf der Grundlage des Schrittweitenabstands der Faltungsoperation definiert werden. Bei einem Schrittweitenabstand von zwei umfasst die Lücke ein Eingabedatenelement.
  • Unter Bezugnahme auf 4B und 4C kann, um die normale Faltungsoperation von 5A durchzuführen, der Controller 422 mit Speicherabrufparametern 430 versehen werden, die einen Satz sich überlappender Nicht-Null-Eingabedatenelemente für ein Gewichtungsdatenelement definieren, das in eine Verarbeitungsmaschine 411 geladen wird. Die Menge der überlappenden Nicht-Null-Eingabedatenelemente kann anhand der Parameter Startadresse, Schritt und Anzahl der Abrufelemente definiert werden. Die Startadresse kann die Adresse des ersten überlappenden Eingabedatenelements (ungleich Null) im Speichersubsystem 404 sein. Die Adresse kann auf der Grundlage einer Zuordnung zwischen den Adressen des Speicher-Teilsystems 404 und den Koordinaten der im Speicher-Teilsystem 404 gespeicherten Eingabedatenelemente bestimmt werden. Außerdem kann der Schritt der oben beschriebenen Lücke entsprechen und auf dem Schrittweitenabstand basieren. Außerdem kann die Anzahl der Abrufelemente auf den Abmessungen der Ausgabekachel für die Faltungsoperation basieren, die wiederum auf den Abmessungen des Summationspuffers basieren kann, wie weiter unten beschrieben wird. Basierend auf den Speicherabrufparametern 430 für jedes Gewichtungsdatenelement kann der Controller 422 die korrekte Teilmenge von Eingabedatenelementen in das Verarbeitungsmaschinen-Array 410 abrufen, um sie mit diesem Gewichtungsdatenelement zu multiplizieren und so Teilsummen zu erzeugen.
  • Darüber hinaus kann der Controller 422 mit Pufferschreibparametern 452 versehen werden, um von Null abweichende Teilsummen für verschiedene Schrittpositionen an Einträgen eines Spaltensummationspuffers (z. B. Spaltensummationspuffer 442) zu speichern, die den Schrittpositionen entsprechen. Zum Beispiel unter Bezugnahme auf 4C kann die Teilsumme für eine Schrittposition (0, 0) am Eintrag Eo,o akkumuliert werden, die Teilsumme für eine Schrittposition (0, 1) kann am Eintrag E0,1 akkumuliert werden, usw. Der Zieloffset der Puffer-Schreibparameter 452 kann auch auf der Menge der sich überlappenden Nicht-Null-Eingabedatenelemente für ein Gewichtungsdatenelement basieren. Insbesondere kann der Ziel-Offset dem Spaltensummationspuffer zugeführt werden, um eine Anzahl von Einträgen zu überspringen, die Null-Teilsummen entsprechen, was einer Anzahl von Padding-Nullen entspricht, die sich mit dem Gewichtungsdatenelement überlappen, bis zu dem Eintrag, der der Schrittweite entspricht, bei der sich das Gewichtungsdatenelement mit einem Eingabedatenelement überschneidet. Unter Bezugnahme auf das Beispiel von 5A überschneidet sich das Gewichtungsdatenelement (0, 0) mit den Padding-Nullen an den ersten Schrittpositionen, bis es sich mit dem Eingabedatenelement bei (1, 1) überschneidet. Der Zieloffset der Puffer-Schreibparameter 452 kann so konfiguriert werden, dass die aus dem Eingabedatenelement bei (1, 1) erzeugte Teilsumme an einem Eintrag gespeichert wird, der die Schrittposition des Filter-Arrays 504 widerspiegelt, wenn sich das Gewichtungsdatenelement (0, 0) mit dem Eingabedatenelement (1, 1) überschneidet.
  • 5B veranschaulicht Beispieloperationen zur Bestimmung der überlappenden Eingabedatenelemente für ein bestimmtes Gewichtungsdatenelement, die von einem Compiler durchgeführt werden können. Unter Bezugnahme auf 5B kann der Compiler auf der Grundlage der Abmessungen eines Spaltensummationspuffers (z. B. Anzahl der Zeilen und Spalten von Einträgen) die Abmessungen einer Ausgabekachel sowie die Gesamtzahl der Einträge des Spaltensummationspuffers bestimmen. Wie oben beschrieben, umfasst die Ausgabekachel Ausgabedatenelemente eines Bereichs 520 im Ausgabedaten-Array, und die Ausgabekachel kann durch einen Koordinatenbereich des ersten Bereichs im Ausgabedaten-Array definiert werden.
  • In Operation 522 kann der Compiler eine Projektionsoperation von Bereich 520, die durch die Ausgabekachel repräsentiert wird, durchführen, um einen Bereich 530 im Eingabedaten-Array 502 zu bestimmen, die die Eingabedatenelemente liefern kann, die mit einem Gewichtungsdatenelement gefaltet werden sollen, um die Ausgabekachel zu erzeugen. Bei der Projektion können die Abmessungen des ersten Bereichs sowie der Schrittweitenabstand der Faltungsoperation berücksichtigt werden. Wie oben beschrieben, kann der Schrittweitenabstand die Lücke zwischen den sich überlappenden Eingabedatenelementen definieren, wobei ein Schrittweitenabstand von zwei zu einer Lücke eines Eingabedatenelements führt. Die Größe des Bereichs 530 kann auf der Grundlage der Größe des Bereichs 520 und der Lücke bestimmt werden. Zum Beispiel können unter Bezugnahme auf 5B ausgehend von der Ausgabekachel mit 10 Ausgabedatenelementen pro Zeile und drei Zeilen (insgesamt 30 Einträge) können die Abmessungen des Bereichs 530 durch Skalierung der Abmessungen des Bereichs 520 um zwei bestimmt werden, so dass der Bereich 520 20 Eingabedatenelemente pro Zeile und sechs Zeilen aufweist. Da bei einer solchen Anordnung ein Eingabedatenelement zwischen zwei Eingabedatenelementen übersprungen wird, kann die Gesamtzahl der Eingabedatenelemente (und der sich daraus ergebenden Teilsummen) gleich der Gesamtzahl der Ausgabedatenelemente in der Ausgabekachel sowie der Anzahl der Einträge im Spaltensummationspuffer sein.
  • Nachdem die Abmessungen des Bereichs 520 bestimmt wurden, kann der Compiler den Bereich 530 mit dem aufgefüllten Eingabedaten-Array 502 abgleichen. Die Ausrichtung kann auf den Koordinaten des Gewichtungsdatenelements sowie auf den Parametern pad_north und pad_west basieren. Die Koordinaten der linken oberen Ecke des Bereichs 530, bezogen auf das Original-Eingabedaten-Array 502, können auf den folgenden Gleichungen basieren:
  • Start_coordinate region530 = ( weight_r pad_west ,weight_s pad_north )
    Figure DE112020004625T5_0010
  • In Gleichung 10 beziehen sich start_coordinatesregion530 auf die Koordinaten der linken oberen Ecke des Bereichs 530, weight_r auf die Zeilenkoordinaten des Gewichtungsdatenelements, weight_s auf die Spaltenkoordinaten des Gewichtungsdatenelements, pad_west auf die Anzahl der Spalten mit Nullen, die links vom Eingabedaten-Array 502 hinzugefügt werden, während pad_north sich auf die Anzahl der Zeilen mit Nullen bezieht, die oben vom Eingabedaten-Array 502 hinzugefügt werden.
  • Wie in 5A gezeigt, kann für das Gewichtungsdatenelement (0, 0) die obere linke Ecke des Bereichs 530 mit der oberen linken Ecke des mit Nullen aufgefüllten Eingabedaten-Arrays 502 übereinstimmen. Bei einer solchen Ausrichtung überlappt das Gewichtungsdatenelement (0, 0) mit dem Filter-Array 504 an der Schrittposition (0, 0) das oberste linke Element des Bereichs 530, die das erste mit dem Gewichtungsdatenelement zu multiplizierende Eingabedatenelement darstellt und sich in Bezug auf das Original-Eingabedaten-Array 502 an den Koordinaten (-1, -1) befindet. Anhand der Ausrichtungsoperation kann der Compiler einen Bereich von Zielkoordinaten des Bereichs 520 in Bezug auf das Original-Eingabedaten-Array 502 bestimmen. In 5B kann der Bereich der Zielkoordinaten des Bereichs 530 zwischen (-1, -1) und (4, 18) liegen, bezogen auf die linke obere Ecke des Original-Eingabedaten-Arrays 502, das die Koordinaten (0, 0) hat.
  • In Operation 540 kann der Compiler nach Bestimmung der Zielkoordinaten des Bereichs 530 ein Schrittmuster 550 über den Bereich 530 legen. Das Schrittmuster 550 kann die Lücke zwischen sich überlappenden Eingabedatenelementen auf der Grundlage des Schrittweitenabstands definieren. Jedes dunkle Kästchen im Schrittmuster 550 kann ein sich überlappendes Eingabedatenelement darstellen. Wie oben beschrieben, umfasst die Lücke bei einem Schrittweitenabstand von zwei ein Eingabedatenelement. Beim Überlagern des Schrittmusters 550 über den Bereich 530 wird die obere linke Ecke des Schrittmusters 550 mit der oberen linken Ecke des Bereichs 530 ausgerichtet. Auf der Grundlage der Ausrichtung und der Lücke im Schrittmuster 550 kann der Compiler die Koordinaten des Schrittmusters 550 in Bezug auf das Original-Eingabedaten-Array 502 auf der Grundlage der Koordinaten des obersten linken Elements des Bereichs 530 (-1, -1) sowie der Lückeninformationen berechnen. Beispielsweise überlappt ein erstes Element des Schrittmusters mit dem obersten linken Element des Bereichs 530 und hat die Koordinaten (-1, -1), ein zweites Element des Schrittmusters in derselben Zeile wie das erste Element hat einen Abstand von 1 zum ersten Element und kann die Koordinaten (-1, 1) haben, usw. Auf der Grundlage der Koordinaten des Schrittmusters sowie der Abmessungen des Original-Eingabedaten-Arrays 502, die einen Koordinatenbereich der im Original-Eingabedaten-Array 502 enthaltenen Eingabedatenelemente definieren können, kann der Compiler eine erste Teilmenge der Koordinaten, die sich innerhalb des Null-Padding-Bereichs befinden, und eine zweite Teilmenge der Koordinaten, die sich innerhalb des Original-Eingabedaten-Arrays 502 befinden, identifizieren. Die erste Teilmenge der Koordinaten liegt im Null-Padding-Bereich und kann Null-Eingabedatenelemente darstellen, die zu Null-Teilsummen führen (da Multiplikation von Null), während die zweite Teilmenge der Koordinaten Nicht-Null-Eingabedatenelemente darstellen kann, die zu Nicht-Null-Teilsummen führen. Die durch die zweite Teilmenge der Koordinaten dargestellten Eingabedatenelemente, die nicht Null sind, können die Eingabedatenelemente sein, die sich mit dem Gewichtungsdatenelement (0, 0) im Original-Eingabedaten-Array 502 überlappen.
  • Der Compiler kann die Parameter Startadresse, Schritt, Anzahl der Abrufelemente der Speicherabrufparameter 430 auf der Grundlage der ersten Teilmenge der Koordinaten im Null-Padding-Bereich und der zweiten Teilmenge der Koordinaten im Original-Eingabedaten-Array 502 bestimmen. Insbesondere kann der Startadressparameter der Speicherabrufparameter 430 den ersten Koordinaten in der zweiten Teilmenge von Koordinaten entsprechen. Im Beispiel von 5B kann die Startadresse den Koordinaten (1, 1) des Eingabedaten-Arrays 502 entsprechen, die in eine Adresse im Speicher-Subsystem 404 übersetzt werden können. Außerdem basiert der Schritt auf dem oben beschriebenen Schrittweitenabstand. Der Parameter für die Anzahl der Abrufelemente kann sich an der Größe der zweiten Teilmenge der Koordinaten orientieren. Im Beispiel von 5B kann die Größe der zweiten Teilmenge der Koordinaten 18 betragen, da es im Original-Eingabedaten-Array 502 18 Eingabedatenelemente ungleich Null gibt, die sich mit dem Gewichtungsdatenelement (0, 0) überlappen können. Daher kann der Parameter Anzahl der Abrufelemente auch auf 18 gesetzt werden.
  • Der Compiler kann auch die Parameter für den Zieloffset, den Schritt und die Anzahl der Schreibelemente der Puffer-Schreibparameter 452 auf der Grundlage der ersten Teilmenge der Koordinaten im Null-Padding-Bereich und der zweiten Teilmenge der Koordinaten in dem Original-Eingabedaten-Array 502 bestimmen. Insbesondere kann der Compiler auf der Grundlage der ersten Teilmenge der Koordinaten feststellen, dass die ersten 11 Eingabedatenelemente Null sind, was bedeutet, dass die ersten 11 Einträge des Spaltensummationspuffers übersprungen werden müssen, und der Parameter für den Zielversatz kann auf 11 gesetzt werden. Da außerdem 18 Eingabedatenelemente abgeholt werden sollen, werden 18 Teilsummen gebildet, und der Parameter Anzahl der Schreibelemente kann auf 18 gesetzt werden. Darüber hinaus werden die Nicht-Null-Eingabedatenelemente, die sich mit dem Gewichtungsdatenelement überlappen, durch die Schrittweite getrennt, was bedeutet, dass es keine Lücke zwischen den sich überlappenden Nicht-Null-Eingabedatenelementen gibt, wenn sich das Gewichtungsdaten-Array an verschiedenen Schrittpositionen im Eingabedaten-Array befindet. Daher kann der Schrittparameter der Pufferschreibparameter 452 auf eins gesetzt werden.
  • Unter Bezugnahme auf Operation 522 und Gleichung 10 kann der Compiler die Ausrichtung des Bereichs 530 in Bezug auf das aufgefüllte Eingabedaten-Array 502 auf der Grundlage der Koordinaten des Gewichtungsdatenelements durch Hinzufügen eines Versatzes entlang der Zeilen- und Spaltenabmessung anpassen. Zum Beispiel können unter Bezugnahme auf 5C der Compiler für das Gewichtungsdatenelement (1, 1) die Koordinaten der linken oberen Ecke des Bereichs 530 unter Verwendung von Gleichung 8 berechnen und erhält (0, 0). Das heißt, dass der Bereich 530 im Vergleich zum Gewichtungsdatenelement (0, 0) um eine Einheit von der oberen linken Ecke des aufgefüllten Eingabedaten-Arrays 502 nach rechts und unten verschoben ist. Die Koordinaten der linken oberen Ecke des Bereichs 530 können (0, 0) werden, und der Koordinatenbereich des Bereichs 530 kann (0, 0) bis (5, 19) werden. Bei einer solchen Ausrichtung überschneidet sich das oberste linke Element des Bereichs 530, das das erste mit dem Gewichtungsdatenelement (1, 1) zu multiplizierende Eingabedatenelement darstellt, mit dem Gewichtungsdatenelement, wenn sich das Filter-Array 504 an der Schrittweite (0, 0) befindet. Für das Gewichtungsdatenelement (1, 1) überschneidet sich der Bereich 530 ebenso wie das Schrittmuster 550 mit dem Original-Eingabedaten-Array 502, nicht aber mit dem Null-Padding. Das erste Eingabedatenelement beginnt bei den Koordinaten (0, 0), und es können insgesamt 30 Eingabedatenelemente abgerufen werden. Da es keine Null-Eingabedatenelemente gibt, werden keine Einträge im Spaltensummationspuffer übersprungen.
  • Der Compiler kann außerdem für das Gewichtungsdatenelement (2, 2) die Koordinaten der linken oberen Ecke des Bereichs 530 unter Verwendung von Gleichung 10 berechnen und erhält (1, 1). Das heißt, der Compiler kann der Bereich 530 um zwei Einheiten von der linken oberen Ecke des aufgefüllten Eingabedaten-Arrays 502 nach rechts und unten verschieben. Der Koordinatenbereich des Bereichs 530 reicht von (1, 1) bis (6, 20). Bei einer solchen Ausrichtung überschneidet sich das oberste linke Element des Bereichs 530, das das erste mit dem Gewichtungsdatenelement (2, 2) zu multiplizierende Eingabedatenelement darstellt, mit dem Gewichtungsdatenelement, wenn sich das Filter-Array 504 an der Schrittweite (0, 0) befindet. Für das Gewichtungsdatenelement (2, 2) überschneidet sich der Bereich 530 ebenso wie das Schrittmuster 550 mit dem Original-Eingabedaten-Array 502, nicht aber mit dem Null-Padding. Das erste Eingabedatenelement beginnt bei den Koordinaten (1, 1), und es können insgesamt 27 Eingabedatenelemente abgerufen werden. Da es keine Null-Eingabedatenelemente gibt, werden auch keine Einträge im Spaltensummationspuffer übersprungen.
  • 5D zeigt Beispiele von Speicherabrufparametern 430 und Pufferschreibparametern 452 für die Gewichtungsdatenelemente (0, 0), (1, 1) und (2, 2) für die in 5A - 5C gezeigten Faltungsoperationen, wie oben beschrieben.
  • 6A - 6F veranschaulichen Beispielkonfigurationen des Beschleunigers 402 zur Durchführung einer beispielhaften transponierten Faltungsoperation. Wie in 6A gezeigt, kann der Beschleuniger 402 auf der Grundlage von Speicherabrufparametern 430 und Pufferschreibparametern 452 so konfiguriert werden, dass er eine transponierte Faltungsoperation zwischen dem Original-Eingabedaten-Array 502 und dem Original-Filter-Array 504 durchführt, um das gleiche transponierte Faltungsausgabe-Array 280 zu erzeugen, das durch die Faltungsoperation 320 zwischen dem dilatierten Eingabedaten-Array 502 und dem gedrehten Filter-Array 504 erzeugt wurde, wie in 3 beschrieben. In den Beispielen von 6A - 6F hat die beispielhafte transponierte Faltungsoperation eine Schrittweite von zwei.
  • Um eine transponierte Faltungsoperation durchzuführen, kann der Controller 422 des Beschleunigers 402 ein erstes Gewichtungsdatenelement aus dem Speichersystem 404 auf der Grundlage der ersten Koordinaten des ersten Gewichtungsdatenelements im Original-Filter-Array 504 erhalten und das erste Gewichtungsdatenelement in das systolische Array laden. Aber die Speicherabrufparameter 430, die die Startadresse und die Anzahl der Abrufelemente enthalten, um die Teilmenge der Eingabedatenelemente anzugeben, die in das Verarbeitungsmaschinen-Array 410 für das erste Gewichtungsdatenelement geladen werden sollen, sowie die Pufferschreibparameter 452, die den Zieloffset und die Anzahl der Schreibelemente der Pufferschreibparameter enthalten, um die Einträge des Summationspuffers 412 anzugeben, der die Teilsummen vom Verarbeitungsmaschinen-Array 410 empfangen soll, können auf den zweiten Koordinaten des ersten Gewichtungsdatenelements im gedrehten Filter-Array 504 basieren. Ein Compiler kann erste Koordinaten in zweite Koordinaten übersetzen und auf der Grundlage der zweiten Koordinaten und der Rate der transponierten Faltung Speicherabrufparameter 430 und Pufferschreibparameter 452 erzeugen.
  • 6B veranschaulicht eine Koordinatenerzeugungsoperation 600, die von einem Compiler durchgeführt werden kann. Die Koordinatengenerierungsoperation 600 kann die Original-Koordinaten 604 eines Gewichtungsdatenelements im Original-Filter-Array 504 in gedrehte Koordinaten 606 des Gewichtungsdatenelements im gedrehten Filter-Array 504 übersetzen. Die Übersetzung kann durch ein Koordinatenzuordnungsmodul 602 (das Schaltkreise zur Durchführung von Operationen auf der Grundlage von z. B. den obigen Gleichungen 6 und 7 umfassen kann) sowie Dimensionsinformationen 608 durchgeführt werden, die die maximalen r- und s-Koordinaten (z. B. R und S in den Gleichungen 6 und 7) des Original-Filter-Arrays 504 definieren können. Der Compiler kann dann auf der Grundlage der gedrehten Koordinaten 606 Speicherabrufparameter 430 und Pufferschreibparameter 452 bestimmen. Der Compiler kann einen Berechnungsbefehl generieren, der die Steuerung 422 steuert, um ein Gewichtungsdatenelement aus dem Speichersubsystem 404 und/oder aus einem externen Speicher auf der Grundlage einer von den Original-Koordinaten 604 abgeleiteten Adresse zu laden, während er Speicherabrufparameter 430 und Pufferschreibparameter 452 auf der Grundlage der gedrehten Koordinaten 606 in denselben Berechnungsbefehl einbezieht, um die Steuerung 422 in die Lage zu versetzen, Eingabedatenelemente auf der Grundlage der gedrehten Koordinaten 606 auszuwählen, um mit diesem Gewichtungsdatenelement Teilsummen zu berechnen und die Teilsummen an Einträgen des Summationspuffers 412 auf der Grundlage der gedrehten Koordinaten 606 zu speichern.
  • 6C bis 6E veranschaulichen Operationen zur Bestimmung der Einträge des Summationspuffers 412 für den Empfang von Teilsummen aus dem Array 410 der Verarbeitungsmaschine für ein Gewichtungsdatenelement, die auch vom Compiler durchgeführt werden können. Die Operationen zur Bestimmung der Einträge eines Spaltensummationspuffers können ähnlich wie die Operationen 522 und 540 von 5B sein und auf der Verschiebung eines Schrittmusters (z. B. Schrittmuster 550) um einen Versatz auf der Grundlage der Koordinaten des Gewichtungsdatenelements basieren, aber die Ausrichtung des Schrittmusters erfolgt in Bezug auf den Spaltensummationspuffer, um Lücken zwischen den Einträgen zu berücksichtigen, die durch die aufgefüllten Nullen des dilatierten Eingabedaten-Arrays 502 verursacht werden, wie unten beschrieben. In den in 6C bis 6E gezeigten Beispielen kann der Spaltensummenpuffer 442 18 Spalten und 4 Zeilen an Einträgen haben und eine Ausgabekachel speichern.
  • Unter Bezugnahme auf 6C: Als Teil einer transponierten Faltungsoperation mit einer Schrittweite von 2 kann das gedrehte Filter-Array 504 das dilatierte Eingabedaten-Array 502 mit einer Schrittweite von 1 durchlaufen. Ein Gewichtungsdatenelement bei (0, 0) des gedrehten Filter-Arrays 504 überschneidet sich mit den Eingabedatenelementen des Original-Eingabedaten-Arrays 502 (dargestellt durch graue Quadrate) an den Schrittpositionen (1, 1), (1, 3) usw., wobei die überlappenden Eingabedatenelemente in 6C mit einem Kreuz markiert sind. Die Schrittpositionen können den Einträgen E1,1, E1,3 usw. des Spaltensummationspuffers 442 (dargestellt durch schattierte Quadrate) entsprechen, um Teilsummen aus der Multiplikation des Gewichtungsdatenelements und der überlappenden Eingabedatenelemente in der Spalte 432 des Verarbeitungsmaschinen-Arrays 410 zu empfangen. Darüber hinaus erhalten die entsprechenden Einträge des Spaltensummationspuffers 442 (z. B. Eo,o) für andere Schrittpositionen, bei denen sich das Gewichtungsdatenelement mit den aufgefüllten Nullen des dilatierten Eingabedaten-Arrays 502 überschneidet, keine Teilsummen vom Verarbeitungsmaschinen-Array 410. Wie in 6C gezeigt, sind benachbarte Einträge, die die Teilsummen erhalten, durch eine Lücke von einem Eintrag getrennt, die der Lücke (eine Null) zwischen Nicht-Null-Eingabedatenelementen des dilatierten Eingabedaten-Arrays 502 und der Schrittweite der transponierten Faltung entspricht. 6C zeigt auch, dass Einträge des Spaltensummationspuffers 442, die Teilsummen für Gewichtungsdatenelemente bei (1, 1) und (2, 2) des gedrehten Filter-Arrays 504 erhalten, eine Lücke von eins zwischen benachbarten Einträgen haben, was auch dem Schritt der transponierten Faltung entspricht.
  • Der Compiler kann die Einträge eines Spaltensummationspuffers zur Aufnahme der Teilsummen auf der Grundlage des Ausrichtens des Schrittmusters 550 (oder eines anderen Schrittmusters, das mit dem Schritt der transponierten Faltung übereinstimmt) mit einem Bereich bestimmen, der einen Teil des Ausgabe-Arrays 280 der transponierten Faltung darstellt, und der Bereich kann auf der Grundlage der zweiten Koordinaten des ersten Gewichtungsdatenelements in Bezug auf eine Referenzposition des Spaltensummenpuffers verschoben werden. Die Operationen können ähnlich wie in die in 5B und 5C beschriebenen sein, außer dass der zu verschiebende Bereich ein Bereich des Ausgabedaten-Arrays ist. Im Einzelnen, unter Bezugnahme auf 6D, als Teil der Operation 622, basierend auf den Dimensionen des Spaltensummationspuffers 442 (z. B. Anzahl der Zeilen und Spalten der Einträge), sowie dem Padding des Ausgabedaten-Arrays, kann der Compiler einen Bereich 630 bestimmen, der einen Teil des transponierten Faltungsausgabe-Arrays 280 enthält, das durch die transponierte Faltungsoperation erzeugt werden soll. Der Bereich 630 umfasst eine Ausgabekachel maximaler Größe, die im Spaltensummationspuffer 442 gespeichert werden kann, einen Null-Padding-Bereich einschließlich des nördlichen Padding-Bereichs 636 oberhalb der Ausgabekachel und eines westlichen Padding-Bereichs 638 links von der Ausgabekachel. Der nördliche Padding-Bereich 636 kann eine oder mehrere Zeilen mit Nullen enthalten, die auf dem Parameter pad_north basieren, während der westliche Padding-Bereich 638 eine oder mehrere Spalten mit Nullen enthalten kann, die auf dem Parameter pad_west basieren.
  • Der Compiler kann dann den Bereich 630 in Bezug auf eine Referenzposition ausrichten. Die Referenzposition kann eine imaginäre Position außerhalb des Spaltensummenpuffers 442 sein, wobei die nördlichen und westlichen Padding-Bereiche berücksichtigt werden. Die Ausrichtung kann auf den Koordinaten des Gewichtungsdatenelements sowie auf den Parametern pad_north und pad_west basieren. Die Koordinaten der linken oberen Ecke des Bereichs 630 können anhand der folgenden Gleichung bestimmt werden: Start_coordinate region_630 = ( rotate_weight_r pad_west ,rotate_weight_s pad_north )
    Figure DE112020004625T5_0011
  • In Gleichung 11 bezieht sich start_coordinatesregion_630 auf die Koordinaten der linken oberen Ecke des Bereichs 630 in Bezug auf die Padding-Bereiche oben und links im Summationspuffer 442, rotate_weight_r auf die Zeilenkoordinaten des Gewichtungsdatenelements im gedrehten Filter-Array 504, rotate_weight_s bezieht sich auf die Zeilenkoordinaten des Gewichtungsdatenelements in dem gedrehten Filter-Array 504, pad_west bezieht sich auf die Anzahl der Spalten mit Nullen, die der linken Seite der Ausgabekachel hinzugefügt wurden, während pad_north sich auf die Anzahl der Zeilen mit Nullen bezieht, die der oberen Seite der Ausgabekachel hinzugefügt wurden.
  • Wie in 6D gezeigt, für das Gewichtungsdatenelement bei (0, 0) des gedrehten Filter-Arrays 504 kann die obere linke Ecke des Bereichs 630 mit der oberen linken Ecke des Null-Padding-Bereichs ausgerichtet werden, der die Bereiche 636 und 638 umfasst, die sich bei den Koordinaten (-1, -1) in Bezug auf den Spaltensummationspuffer 442 befinden können. Bei einer solchen Ausrichtung überlappt das Gewichtungsdatenelement W2,2 bei (0, 0) des gedrehten Filter-Arrays 504 mit dem gedrehten Filter-Array 504 an der Schrittweitenposition (0, 0) das oberste linke Element des Bereichs 630, das das erste Ausgabedatenelement der zwischen der Multiplikation des Gewichtungsdatenelements und einem ersten Eingabedatenelement des dilatierten Eingabedaten-Arrays 502 erzeugten Ausgabekachel darstellen kann. Das erste Ausgabedatenelement kann sich bei den Koordinaten (-1, -1) in Bezug auf den Spaltensummationspuffer 442 befinden. Aus der Ausrichtungsoperation kann der Compiler einen Bereich von Ausgabekoordinaten des Bereichs 630 bestimmen, der innerhalb des Spaltensummationspuffers 442 liegt, was der Ausgabekachel für dieses Gewichtungsdatenelement entspricht, die in den Spaltensummationspuffer 442 passt. In 6D, wobei der Spaltensummationspuffer 442 4 Zeilen und 18 Spalten hat, kann der Bereich der Ausgabekoordinaten des Bereichs 630 innerhalb des Spaltensummationspuffers 442 zwischen (0, 0) und (3, 17) liegen.
  • In Operation 640 kann der Compiler nach Bestimmung des Bereichs der Ausgabekoordinaten des Bereichs 630 ein Schrittmuster 550 über den Bereich 630 legen. Das Schrittmuster 550 kann eine Lücke zwischen benachbarten Einträgen definieren, die Teilsummen erhalten. Da die Schrittweite der transponierten Faltung zwei beträgt, haben benachbarte Einträge einen Abstand von eins. Unter Bezugnahme auf 6C spiegelt dies die Anzahl der Padding-Nullen zwischen Nicht-Null-Eingabedatenelementen des dilatierten Eingabedaten-Arrays 502 wider. Beim Überlagern des Schrittmusters 550 über den Bereich 630 wird die obere linke Ecke des Schrittmusters 550 mit der oberen linken Ecke des Bereichs 630 ausgerichtet. Auf der Grundlage der Ausrichtung und der Lücke im Schrittmuster 550 kann der Compiler die Koordinaten des Schrittmusters 550 in Bezug auf das Original-Eingabedaten-Array 502 auf der Grundlage der Koordinaten des obersten linken Elements des Bereichs 630 (-1, -1) sowie der Lückeninformationen berechnen. Beispielsweise überlappt ein erstes Element des Schrittmusters mit dem oberen linken Element des Bereichs 630 und hat die Koordinaten (-1, -1), ein zweites Element des Schrittmusters in derselben Zeile wie das erste Element hat einen Abstand von 1 zum ersten Element und kann die Koordinaten (-1, 1) haben, usw. Auf der Grundlage der Koordinaten des Schrittmusters sowie des Bereichs der Ausgabekoordinaten des Bereichs 630 innerhalb des Spaltensummationspuffers 442 kann der Compiler bestimmen, dass die Einträge (und die zugehörigen Koordinaten) des Spaltensummationspuffers 442, die Teilsummen ungleich Null erhalten. Der erste Eintrag des Spaltensummenpuffers 442, der eine Teilsumme erhalten soll, ist beispielsweise E1,1 an den Koordinaten (1, 1), und die ersten 19 Einträge (18 Einträge in der ersten Zeile plus Eintrag E0,1) erhalten keine Teilsummen und sollen übersprungen werden, was zu einem Zielversatz von 19 in den Pufferschreibparametern 452 führt. Darüber hinaus sollen 18 Einträge Teilsummen erhalten, woraus sich eine Anzahl von Schreibelementen von 18 in den Pufferschreibparametern 452 ergibt. Außerdem werden benachbarte Einträge, die Teilsummen erhalten sollen, durch eine Lücke von 1 getrennt, was zu einem Schritt von 2 in den Pufferschreibparametern 452 führt.
  • 6E veranschaulicht die Ausrichtung des Bereichs 630 in Bezug auf die mit Nullen aufgefüllte Ausgabekachel für andere Gewichtungsdatenelemente. Im Falle von 5C kann der Compiler die Ausrichtung des Bereichs 630 in Bezug auf den Null-Padding-Bereich, der die Bereiche 636 und 638 umfasst, auf der Grundlage der Koordinaten des Gewichtungsdatenelements im gedrehten Filter-Array 504 anpassen. Die Anpassung kann durch Hinzufügen eines Versatzes entlang der Zeilen- und Spaltenabmessungen erfolgen. Zum Beispiel kann unter Bezugnahme auf 6E, für das Gewichtungsdatenelement W1,1 bei (1, 1) des gedrehten Filter-Arrays 504, der Compiler die Koordinaten der linken oberen Ecke des Bereichs 630 unter Verwendung der obigen Gleichung 11 berechnen und erhält (0, 0). Das heißt, der Bereich 630 ist um eine Einheit von der linken oberen Ecke der mit Null aufgefüllten Ausgabekachel nach rechts und unten verschoben. Die Koordinaten der linken oberen Ecke des Bereichs 630 können zu (0, 0) werden, und der Bereich der Ausgabekoordinaten des Bereichs 630 im Summationspuffer 442 reicht von (0, 0) bis (3, 17). Das erste Ausgabedatenelement beginnt bei den Koordinaten (0, 0), und insgesamt sind 18 Teilsummen im Summationspuffer 442 zu speichern, wobei benachbarte Einträge einen Abstand von 1 haben. Der Compiler kann in den Pufferschreibparametern 452 einen Zielversatz von 0, eine Anzahl von Schreibelementen von 18 und einen Schritt von 2 festlegen.
  • Außerdem kann der Compiler für das Gewichtungsdatenelement W0,0 bei (2, 2) des gedrehten Filter-Arrays 504 die Koordinaten der linken oberen Ecke des Bereichs 630 unter Verwendung der obigen Gleichung 11 berechnen und erhält (1, 1). Das heißt, der Bereich 630 wird um zwei Einheiten von der linken oberen Ecke des Null-Padding-Bereichs, der die Bereiche 636 und 638 umfasst, nach rechts und unten verschoben. Die Koordinaten der linken oberen Ecke des Bereichs 630 können zu (1, 1) werden, und der Bereich der Ausgabekoordinaten des Bereichs 630 innerhalb des Summationspuffers 442 liegt zwischen (0, 0) und (3, 17). Das erste Ausgabedatenelement beginnt bei den Koordinaten (1, 1), und insgesamt sind 18 Teilsummen im Summationspuffer 442 zu speichern, wobei benachbarte Einträge einen Abstand von 1 haben. Der Compiler kann in den Pufferschreibparametern 452 einen Zielversatz von 19, eine Anzahl von Schreibelementen von 18 und einen Schritt von 2 festlegen.
  • Der Compiler kann dann die überlappenden Eingabedatenelemente auf der Grundlage einer Projektionsoperation bestimmen, die den Teil des Bereichs 630 innerhalb des Spaltensummationspuffers 442 auf einen Bereich des Original-Eingabedaten-Arrays 502 projiziert, um die Eingabedatenelemente zu identifizieren, die in das Verarbeitungsmaschinen-Array 410 geladen werden sollen. 6F veranschaulicht die Projektionsoperation. Wie in 6F gezeigt, kann der Bereich 632, der einem Bereich von Ausgabekoordinaten des Bereichs 630 entspricht, der sich innerhalb des Spaltensummationspuffers 442 befindet, auf einen Bereich 645 innerhalb des Original-Eingabedaten-Arrays 502 projiziert werden. Die Projektionsoperation ist ähnlich wie die Operation 522 in 5B, aber die Größe des Bereichs 645 wird um einen Faktor verkleinert, der dem Schrittweitenfaktor der transponierten Faltung entspricht, um der Tatsache Rechnung zu tragen, dass das Original-Eingabedaten-Array 502 um denselben Schrittweitenfaktor dilatiert wird, um das dilatierte Eingabedaten-Array 502 zu erhalten. Da der Bereich 630 eine Dimension von 4 Zeilen und 18 Spalten hat, kann der projizierte Bereich 645 im Original-Eingabedaten-Array 502 2 Zeilen und 9 Spalten haben und 18 aufeinanderfolgende Eingabedatenelemente enthalten, ohne dass dazwischen etwas übersprungen wird. Der Compiler kann eine Anzahl von Abrufelementen von 18 und einen Schritt von 1 für die Speicherabrufparameter 430 festlegen.
  • Der Compiler kann auch einen Versatz 650 berechnen, der das erste Eingabedatenelement im Bereich 630 angibt. Der Versatz 650 kann in Bezug auf die linke obere Ecke des Original-Eingabedaten-Arrays 502 erfolgen. Der Compiler kann den Versatz 650 auf der Grundlage der Koordinaten des ersten Eingabedatenelements im dilatierten Eingabedaten-Array 502 bestimmen, das sich mit dem Gewichtungsdatenelement überschneidet, wenn sich das gedrehte Filter-Array 504 an einer ersten Schrittposition mit dem dilatierten Eingabedaten-Array 502 befindet, und die Koordinaten auf der Grundlage der Rate der transponierten Faltung herunterskalieren (durch Durchführung einer ganzzahligen Division). Der Compiler kann die Startadresse der Speicherabrufparameter 430 anhand des Versatzes 650 bestimmen.
  • Die Koordinaten des ersten überlappenden Eingabedatenelements im dilatierten Eingabedaten-Array 502 können auf der Grundlage der gedrehten Koordinaten des Gewichtungsdatenelements im dilatierten Eingabedaten-Array 502 bestimmt werden. Zum Beispiel unter Bezugnahme auf 6C, für das Gewichtungsdatenelement W2,2 bei (0, 0) des gedrehten Filter-Arrays 504, sind die Koordinaten des ersten Eingabedatenelements in dem dilatierten Eingabedatenarray (1, 1). Versatz 650 kann durch Verkleinerung von (1, 1) um den Faktor 2 (die Schrittweite der transponierten Faltung) bestimmt werden, um (0, 0) für die Koordinaten des ersten Eingabedatenelements im Original-Eingabedaten-Array 502 zu erhalten. Auf der Grundlage der gleichen Techniken kann der Compiler die Koordinaten des ersten Eingabedatenelements im Original-Eingabedaten-Array 502 für das Gewichtungsdatenelement W1,1 und W0,0 als (0, 0) bzw. (1, 1) bestimmen.
  • 6G zeigt Beispiele von Speicherabrufparametern 430 und Pufferschreibparametern 452 für Gewichtungsdatenelemente Wo,o, Wi,i und W2,2 für die transponierten Faltungsoperationen, die in 6A - 6F gezeigt sind, wie oben beschrieben. Controller 422 kann die Gewichtungsdatenelemente W0,0, W1,1 und W2,2 auf der Grundlage ihrer Koordinaten im Original-Filter-Array 504 abrufen, aber die Parameter in den Speicherabrufparametern 430 und den Pufferschreibparametern 452 werden auf der Grundlage ihrer gedrehten Koordinaten im gedrehten Filter-Array 504 bestimmt, wie oben beschrieben.
  • Wie oben beschrieben, kann eine transponierte Faltungsoperation Null-Ausgabedatenelemente erzeugen. Wie in 2F gezeigt, kann dies geschehen, wenn das dilatierte Ausgabedaten-Array durch Einfügen einer Anzahl von Nullen zwischen Eingabedatenelementen erzeugt wird, die größer ist als die Abmessungen des Gewichtungsdaten-Arrays. Zum Beispiel ist in 2F die Schrittweite der transponierten Faltungsoperation vier und drei Nullen werden zwischen benachbarten Eingabedatenelementen eingefügt, um das dilatierte Bild 270 zu bilden, während das gedrehte Filter 260 eine Dimension von 3x3 hat und Null-Ausgabedatenelemente erzeugt werden können, wenn das gedrehte Filter 260 vollständig mit den eingefügten Nullen überlappt.
  • Um die Berechnungseffizienz zu verbessern, kann der Controller 422 einen Spaltensummationspuffer (z. B. den Spaltensummationspuffer 442) so steuern, dass er eine Null von einem Eintrag ausgibt, um ein Null-Ausgabedatenelement darzustellen, ohne die Null-Eingabedatenelemente in das Verarbeitungsmaschinen-Array 410 zur Berechnung von Null-Teilsummen weiterzuleiten. 7A und 7B veranschaulichen Beispieltechniken, die im Beschleuniger 402 zur Ausgabe von Null-Ausgabedatenelementen verwendet werden können. Wie in 7A gezeigt, kann Controller 422 den Summationspuffer für Spalten (und den gesamten Summationspuffer 412) vor der Durchführung der ersten Berechnungen für eine transponierte Faltung zurücksetzen. Der Controller 422 kann das Zurücksetzen auf der Grundlage eines vom Compiler generierten Befehls durchführen. In einem solchen Beispiel kann der Controller den Rücksetzungsbefehl ausführen, um den Inhalt des Summationspuffers der Spalte (und des gesamten Summationspuffers 412) auf Null zu initialisieren, gefolgt von Berechnungsbefehlen zur Berechnung von Teilsummen für jedes Gewichtungsdatenelement. Einträge, die bei den Berechnungen keine Teilsumme erhalten, können Nullen als Ausgabedatenelemente ausgeben.
  • 7B zeigt ein weiteres Verfahren zur Ausgabe von Nullen als Ausgabedatenelemente. Wie in 7B gezeigt, enthält der Summationspuffer 412 eine Zugriffsschaltung 702 zur Durchführung von Lese-/Schreiboperationen auf einen Summationspuffer für Spalten (z. B. den Spalten-Summationspuffer 442). Die Zugriffsschaltung 702 kann eine Lese-/Schreibanforderung empfangen, die eine Adresse enthält, und eine Lese-/Schreiboperation für einen Eintrag des Spaltensummenpuffers auf der Grundlage der Adresse durchführen. Eine Schreibanforderung kann beispielsweise eine Adresse enthalten, die auf dem Zielversatzparameter der Pufferschreibparameter 452 basiert. Ein weiteres Beispiel: Eine Leseanforderung kann eine Adresse für jeden Eintrag enthalten, um die Ausgabedatenelemente einer Ausgabekachel auszulesen und die Ausgabedatenelemente z. B. Aktivierungsmaschine 416, Poolingmaschine 418 usw. zur weiteren Verarbeitung zuzuführen.
  • In einigen Beispielen, wie in 7B gezeigt, kann der Summationspuffer 412 einen Satz von Schreibstatusregistern 704 und einen Multiplexer 706 enthalten. In den Schreibstatusregistem 704 kann ein Flag für jeden Eintrag gespeichert werden, das anzeigt, ob dieser Eintrag eine Schreiboperation von der Zugriffsschaltung 702 erhalten hat, und zwar auf der Grundlage der in der Schreibanforderung enthaltenen Adresse. Wenn die Zugriffsschaltung 702 eine Schreibanforderung empfängt, die eine Adresse für einen Eintrag enthält, kann die Zugriffsschaltung 702 auf der Grundlage der Adresse ein diesem Eintrag zugeordnetes Flag in den Schreibstatusregistern 704 aktivieren. Wenn die Zugriffsschaltung 702 eine Leseanforderung mit der Adresse dieses Eintrags empfängt, können die Schreibstatusregister 704 das bestätigte Flag auf der Grundlage der Adresse an den Multiplexer 706 weitergeben, der den in diesem Eintrag gespeicherten Inhalt ausgeben kann. Andererseits, wenn dieser Eintrag vor der Leseanforderung keine Schreiboperation erhalten hat, bleibt das Flag für diesen Eintrag deaktiviert, und die Schreibstatusregister 704 können das deaktivierte Flag an den Multiplexer 706 weitergeben, der auf der Grundlage des deaktivierten Flags Nullen ausgeben kann. In einigen Beispielen können die Schreibstatusregister 704 vom Controller 422 zurückgesetzt werden, bevor der erste Berechnungsbefehl für die transponierte Faltungsoperation ausgeführt wird, und das Zurücksetzen der Schreibstatusregister 704 erfordert nicht, dass der Controller einen zusätzlichen Rücksetzbefehl ausführt.
  • 8 umfasst ein Blockdiagramm, das ein Beispiel für ein Host-System 800 zeigt, auf dem ein Compiler 830, wie im Vorliegenden beschrieben, laufen kann. Das abgebildete Host-System 800 ist ein Beispiel für eine Computervorrichtung und umfasst einen Prozessor 802, einen Prozessorspeicher 804, mindestens eine Speichervorrichtung 806, verschiedene Eingabe/Ausgabevorrichtungen 808 und mindestens eine Netzwerkschnittstelle 810. Im Beispiel von 8 enthält das Host-System 800 auch eine Beschleunigungsmaschine 812, die den Beschleuniger 402 aus 4A bis 4C eingefügt wird. In verschiedenen Beispielen kann das Host-System 800 unter anderem als Server in einem Rechenzentrum, als Desktop-Computer, Laptop, Tablet-Computer oder Smartphone implementiert sein. In einigen Beispielen können Operationen oder Komponenten, die im Folgenden als im Host-System 800 ausgeführt oder enthalten beschrieben werden, auch in anderen Computervorrichtungen ausgeführt oder enthalten sein. So kann beispielsweise der Compiler 830 auf dem Host-System 800 ausgeführt werden, während sich die Beschleunigungsmaschine 812 auf einem anderen Host-System befindet.
  • Der Prozessor 802 ist eine integrierte Schaltung, die Programmcode in Form von Befehlen ausführen kann. Der Programmcode kann für verschiedene Softwareanwendungen oder -tools verwendet werden, z. B. für das Betriebssystem 820 oder den veranschaulichten Compiler 830. Während der Prozessor 802 ein Programm ausführt, können die Befehle für das Programm im Prozessorspeicher 804 gespeichert werden. Die Befehle können auch an anderer Stelle gespeichert werden, z. B. auf der Speichervorrichtung 806, und bei Bedarf vom Prozessor 802 in den Prozessorspeicher 804 geladen werden. Der Prozessor 802 kann den Prozessorspeicher 804 auch zur vorübergehenden Speicherung anderer Daten nutzen, mit denen der Prozessor 802 arbeitet. In verschiedenen Beispielen handelt es sich bei dem Prozessorspeicher 804 um einen flüchtigen Speicher, z. B. einen Direktzugriffsspeicher, obwohl alternativ oder zusätzlich auch nichtflüchtige Speichertypen für den Prozessorspeicher 804 verwendet werden können.
  • Die Speichervorrichtung 806 ist ein Beispiel für eine Vorrichtung, die einen nichtflüchtigen Speicher enthalten kann. Die Speichervorrichtung 806 kann zum Beispiel ein Magnetplattenlaufwerk, ein Festkörperlaufwerk oder ein optisches Laufwerk sein, um nur einige Beispiele zu nennen. Die Speichervorrichtung 806 kann außerdem nichtflüchtig sein, so dass Programmcode und andere auf der Speichervorrichtung 806 gespeicherte Daten vorhanden bleiben, wenn die Speichervorrichtung 806 nicht eingeschaltet ist.
  • Die Speichervorrichtung 806 ist ein Beispiel für eine Peripherievorrichtung, d. h. für Komponenten, die mit dem Host-System 800 verbunden werden können, um dem Host-System 800 zusätzliche Funktionalität zu verleihen. Weitere Beispiele für Peripherievorrichtungen sind die Eingabe-/Ausgabevorrichtungen 808 und die Netzwerkschnittstelle 810. Die Eingabe-/Ausgabevorrichtungen 808 können Benutzer-Eingabe- und Ausgabevorrichtungen wie Tastaturen, Mäuse, Touchscreens, Mikrofone, Bildschirme, Lautsprecher, Drucker und Scanner und andere Beispiele umfassen. Die Netzwerkschnittstelle 810, die mit einer Netzwerkkarte implementiert werden kann, kann den Zugang zu einem oder mehreren Netzwerken ermöglichen. Die Netzwerkschnittstelle 810 kann beispielsweise einen physischen Port zum Anschluss eines Netzwerkkabels und/oder drahtlose Antennen für die Kommunikation mit WiFi und/oder Mobilfunknetzen umfassen. Die Netzwerkschnittstelle 810 kann auch als E/A-Vorrichtung bezeichnet werden.
  • Die Beschleunigungsmaschine 812 ist ebenfalls eine andere Art von Peripherievorrichtung oder E/A-Vorrichtung. Die Beschleunigungsmaschine 812 ist eine Vorrichtung, die speziell für das Ausführen bestimmter Operationen entwickelt wurde, die vom Prozessor 802 ausgeführt werden können, aber durch die Beschleunigungsmaschine 812 schneller ausgeführt werden können. Die Beschleunigungsmaschine 812 kann beispielsweise ein Beschleuniger für neuronale Netzwerke sein und als solcher in der Lage sein, die groß angelegten, parallelen Berechnungen eines neuronalen Netzwerks effizienter durchzuführen, als wenn die Berechnungen vom Prozessor 802 ausgeführt werden. Ein weiteres Beispiel: Die Beschleunigungsmaschine 812 kann eine Grafikverarbeitungseinheit (GPU) sein, die für das Ausführen der für die Grafikwiedergabe erforderlichen Berechnungen optimiert ist. Weitere Beispiele für Vorrichtungen, die von der Beschleunigungsmaschine 812 implementiert werden können, sind kryptografische Beschleuniger, Kompressions- und Dekompressionsbeschleuniger, 3D-Beschleuniger, Beschleuniger für reguläre Ausdrücke, Sicherheitsbeschleuniger und andere.
  • In verschiedenen Beispielen kann die Beschleunigungsmaschine 812 Programmcode ausführen, um bestimmte Operationen durchzuführen. Wenn es sich bei der Beschleunigungsmaschine 812 beispielsweise um einen Beschleuniger für neuronale Netzwerke handelt, kann die Beschleunigungsmaschine 812 so programmiert werden, dass sie ein bestimmtes neuronales Netzwerk ausführt, z. B. eines, das Bilderkennung oder maschinelle Übersetzung ausführt. Um das Ausführen eines neuronalen Netzwerks zu unterstützen, kann die Beschleunigungsmaschine 812 beispielsweise so programmiert werden, dass sie Operationen wie das Kopieren von Daten für das neuronale Netzwerk aus dem Prozessorspeicher 804 (zum Beispiel) in die Beschleunigungsmaschine 812, das Kopieren von Eingabedaten für das neuronale Netzwerk aus dem Prozessorspeicher 804 in die Beschleunigungsmaschine 812 und/oder das Kopieren von Ergebnissen von der Beschleunigungsmaschine 812 in den Prozessorspeicher 804 ausführt, neben anderen Beispielen.
  • Um Programmcode für die Beschleunigungsmaschine 812 zu erzeugen, kann das Host-System 800 in verschiedenen Beispielen den Compiler 830 ausführen. Bei Compilern handelt es sich im Allgemeinen um Softwareprogramme, die den in einer für Menschen lesbaren Sprache geschriebenen Programmcode in ein Format (z. B. Maschinenbefehle) übersetzen, das von einem integrierten Schaltkreis gelesen und verarbeitet werden kann. Im Beispiel von 8 ist die Beschleunigungsmaschine 812 ein Beschleuniger für neuronale Netzwerke und der Compiler 830 dient zum Kompilieren einer Beschreibung eines neuronalen Netzwerks in Befehle, die durch die Beschleunigungsmaschine 812 ausgeführt werden sollen. Wenn die Beschleunigungsmaschine 812 einen anderen Typ von Beschleuniger implementiert, kann ein anderer Compiler verwendet werden.
  • Der Compiler 830 kann z. B. aktiviert werden, wenn das Betriebssystem 820 Tastatur-, Maus-, Touchscreen-, Sprachbefehle oder andere Eingaben von den Eingabe-/Ausgabevorrichtungen 708 erhält. Die Eingaben können auch Parameter für den Compiler 830 enthalten, wie den zu kompilierenden Eingabecode 842 und Konfigurationsoptionen für den Kompilierungsprozess. Sobald der Compiler 830 aktiviert ist, kann der Prozessor 802 die Befehle für den Compiler 830 in den Prozessorspeicher 804 laden und die Befehle ausführen.
  • Im Beispiel von 8 umfasst der Compiler 830 eine erste Stufe 832, eine zweite Stufe 836 und eine dritte Stufe 840, die jeweils unterschiedliche Operationen ausführen, um den kompilierten Code 844 zu erzeugen. In anderen Beispielen kann der Compiler 830 die Operationen der ersten Stufe 832, der zweiten Stufe 836 und/oder der dritten Stufe 840 in weniger Stufen kombinieren oder die Operationen einer der Stufen in mehrere Stufen aufteilen.
  • Die erste Stufe 832 kann den Eingabecode 842 empfangen und verarbeiten. Der Eingabecode 842 kann ein Programm in einer höheren Programmiersprache beschreiben, wie Java, C++ oder Tensorflow, neben vielen anderen Beispielen. Der Eingabecode 842 kann z. B. Schritte zur Ausführung von Bilderkennung, Spracherkennung, maschineller Übersetzung oder anderen Operationen beschreiben. Der Eingabecode 842 kann z. B. von der Speichervorrichtung 806 bezogen werden. Alternativ, aber hier nicht dargestellt, kann sich der Eingabecode 842 im Prozessorspeicher 804 befinden oder über die Netzwerkschnittstelle 810 von einem Netzwerkstandort abgerufen werden. Die Verarbeitung des Eingabecodes 842 kann die Sortierung der im Eingabecode 842 beschriebenen Operationen in Schichten umfassen, wobei die Ausgaben einer Schicht die Eingaben für eine nächste Schicht liefern. Die Verarbeitung kann auch das Identifizieren von Schritten umfassen, die vom Prozessor 802 und nicht von der Beschleunigungsmaschine 812 ausgeführt werden. So muss der Prozessor 802 durch das Ausführen eines Treibers 822 unter Umständen Schritte wie die Konfiguration von Direct Memory Access(DMA)-Deskriptoren für die Übertragung von Daten in die oder aus der Beschleunigungsmaschine 812 ausführen, neben anderen Beispielen.
  • Die Ausgabe 834 der ersten Stufe 832 kann z. B. in den Schichten, Knoten und Verbindungen zwischen den Knoten eines neuronalen Netzwerks organisiert werden. Die zweite Stufe 836 kann eine Zwischenverarbeitung dieser Ausgabe 834 vornehmen. So können beispielsweise die in einer Ebene oder an einem Knoten in einer Ebene ausgeführten Operationen zu viele sein, als dass die Beschleunigungsmaschine 812 sie gleichzeitig ausführen könnte. Die Beschleunigungsmaschine 812 kann beispielsweise nur über eine begrenzte Menge an lokalem Speicherplatz für die Daten verfügen, die für eine Berechnung benötigt werden, oder die Berechnungen können mehr sein, als die Beschleunigungsmaschine 812 auf einmal ausführen kann. In diesem Beispiel kann die erste Stufe 832 die Operationen der Ebene oder des Knotens in kleinere Operationen aufteilen, die in den lokalen Speicher der Beschleunigungsmaschine und/oder in die Rechenkapazität der Beschleunigungsmaschine 812 passen. Die Verarbeitung der Ausgabe 834 der ersten Stufe 832 kann weitere Schritte umfassen, wie z. B. die Zeitplanung oder die Festlegung der Reihenfolge, in der die Beschleunigungsmaschine 812 und/oder der Prozessor 802 Operationen ausführen, neben anderen Beispielen.
  • In verschiedenen Beispielen umfasst die Ausgabe 838 der zweiten Stufe 836 die verschiedenen Schritte, die von den Komponenten der Beschleunigungsmaschine 812 in der Reihenfolge ausgeführt werden sollen, in der die Schritte ausgeführt werden sollen. Die Ausgabe 838 kann z. B. als Datenflussdiagramm dargestellt werden, wobei die Knoten im Diagramm Speicheroperationen, Berechnungen und andere Operationen darstellen und die Kanten oder Verbindungen zwischen den Knoten Abhängigkeiten zwischen den Knoten darstellen, wie z. B. Datenabhängigkeiten, Speicherabhängigkeiten oder betriebliche Abhängigkeiten, neben anderen Beispielen.
  • Die dritte Stufe 840 kann mit der Ausgabe 838 der zweiten Stufe 836 arbeiten und verschiedene Schritte ausführen, bevor sie die Befehle erzeugt, die von der Beschleunigungsmaschine 812 ausgeführt werden sollen. Diese Schritte können z. B. das Entfernen redundanter Abhängigkeiten, das Auflösen oder Behandeln von Abhängigkeiten zwischen Knoten durch Einfügen von Synchronisationsbefehlen in den Code, das Erkennen möglicher Optimierungen bei der Speichernutzung oder der Nutzung der Speicherbandbreite und andere Operationen umfassen.
  • In einigen Beispielen kann die dritte Stufe 840 einen Datenplaner 850 enthalten, um die Bewegung von Daten, wie z. B. Eingabedaten und Gewichtungsdaten, in der Beschleunigungsmaschine 812 zu planen, um verschiedene Operationen zu unterstützen, wie z. B. die Faltungsoperation und die dilatierte Faltung, wie oben beschrieben. Beispielsweise kann der Datenplaner 850 einen Befehl (z. B. aus dem Datenflussgraphen) erhalten, eine Faltungsoperation (z. B. normale Faltung, dilatierte Faltung usw.) zwischen einem Eingabedaten-Array und einem Filter-Array durchzuführen, um ein Faltungsausgabe-Array zu erzeugen. Basierend auf der Größe des Summationspuffers in der Beschleunigungsmaschine 812 kann der Datenplaner 850 die Ausgabekacheln bestimmen, die in den Summationspuffer passen, und Befehlssequenzen für die Durchführung der Faltungsoperationen festlegen, um jeweils eine Ausgabekachel zu erzeugen. Für jeden Befehl kann der Datenplaner 850 eine Reihenfolge des Ladens der Gewichtungsdatenelemente des Filter-Arrays in das Verarbeitungsmaschinen-Array 410 bestimmen und Teilmengen der in die Verarbeitungsmaschine 410 zu ladenden Eingabedaten für jedes Gewichtungsdatenelement auf der Grundlage der oben in 5A bis 6G für verschiedene Arten von Faltungsoperationen, wie z. B. eine normale Faltungsoperation, eine transponierte Faltungsoperation usw. beschriebenen Techniken bestimmen. Beispielsweise kann der Datenplaner 850 eine Übersetzung der Koordinaten eines Gewichtungsdatenelements in gedrehte Koordinaten durchführen, wie in 6B gezeigt. Der Datenplaner 850 kann dann einen ersten Bereich (z. B. Bereich 632 in 6F) in der Ausgabedatenmatrix bestimmen, die den Zielen der Teilsummen im Summenpuffer auf der Grundlage des Versatzes eines Schrittmusters gemäß den gedrehten Koordinaten entspricht, wie in 6C bis 6E beschrieben, und dann den ersten Bereich zurück auf das Eingabedaten-Array projizieren, um einen zweiten Bereich zu erhalten (z. B. den Bereich 645 in 6F) mit den für die Multiplikation mit diesem Gewichtungsdatenelement auszuwählenden Eingabedatenelementen, wie in 6F beschrieben. Die Projektion kann auf der Basis der Schrittweite der transponierten Faltungsoperation erfolgen, wobei die Dimension des zweiten Bereichs auf dem ersten Bereich basiert, die um die Schrittweite der transponierten Faltungsoperation skaliert ist. Der Datenplaner 850 kann auf der Grundlage der Projektionsoperation auch den Satz von Pufferschreibparametern 452 einschließlich eines Zieloffsets und einer Anzahl von Schreibelementen bestimmen. Der Datenplaner 850 kann dann Befehle generieren, um die Beschleunigungsmaschine 812 so zu steuern, dass sie die Gewichtungsdatenelemente und die entsprechenden Untergruppen der Eingabedatenelemente lädt, um die transponierte Faltungsoperation durchzuführen.
  • Das Ergebnis der dritten Stufe 840 ist ein kompilierter Code 844, der Maschinenbefehle im Binärformat enthalten kann. In einigen Beispielen kann der kompilierte Code 844 im Prozessorspeicher 804 gespeichert werden. Alternativ oder zusätzlich kann der kompilierte Code 844 auf die Speichervorrichtung 806 oder in ein Netzwerk kopiert werden. Wie bereits erwähnt, kann sich die Beschleunigungsmaschine 812 auf einem anderen Host-System befinden. In diesem Fall kann der kompilierte Code 844 über die Netzwerkschnittstelle 810 an das andere Host-System gesendet werden.
  • Im Beispiel von 8 kann das Host-System 800 einen Treiber 822 ausführen, der auch als Gerätetreiber oder Laufzeittreiber bezeichnet werden kann und der die Beschleunigungsmaschine 812 verwaltet. Der Treiber 822 kann eine Schnittstelle zwischen Anwendungen, die auf dem Host-System 800 (oder einem anderen Host-System) ausgeführt werden, und der Beschleunigungsmaschine 812 bilden. So kann der Treiber 822 beispielsweise eine Anwendungsprogrammschnittstelle (API) bereitstellen, die Funktionen für die Eingabe von Daten in die Beschleunigungsmaschine 812 und die Definition der mit den Eingabedaten durchzuführenden Operation definiert. In diesem und anderen Beispielen kann der Treiber 822 die Beschleunigungsmaschine 812 so konfigurieren, dass sie die Operation ausführt. Beispielsweise kann der Treiber 822 ein neuronales Netzwerk identifizieren, das die Beschleunigungsmaschine 812 ausführen soll, sowie den Ort im Prozessorspeicher 804 oder auf der Speichervorrichtung 806, an dem sich der kompilierte Code 844 für das neuronale Netzwerk befindet. Der Treiber 822 kann ferner den kompilierten Code 844 in die Beschleunigungsmaschine 812 laden oder die Beschleunigungsmaschine 812 dazu veranlassen, den kompilierten Code zu laden, er kann die Eingabedaten laden oder die Beschleunigungsmaschine 812 dazu veranlassen, die Eingabedaten zu laden, mit denen das neuronale Netzwerk arbeiten soll, und/oder er kann die Beschleunigungsmaschine 812 veranlassen, die Eingabedaten auszuführen. Sobald die Beschleunigungsmaschine 812 fertig ist, kann die Beschleunigungsmaschine 812 den Treiber 822 benachrichtigen, und der Treiber 822 kann ein Ergebnis an die Anwendung zurückliefern, die das Ergebnis angefordert hat.
  • 9 veranschaulicht ein Flussdiagramm eines Beispielverfahrens 900 zur Durchführung einer transponierten Faltungsoperation. Das Verfahren 900 kann beispielsweise von verschiedenen Komponenten des Beschleunigers 402 durchgeführt werden, darunter das Speicher-Subsystem 404, das Verarbeitungsmaschinen-Array 410, der Summationspuffer 412 und der Controller 422.
  • Verfahren 900 beginnt mit Schritt 902, in dem ein Controller (z. B. Controller 422) aus einem Speicher (z. B. Speicher-Subsystem 404) ein erstes Gewichtungsdatenelement eines Arrays von Gewichtungsdatenelementen basierend auf ersten Koordinaten des ersten Gewichtungsdatenelements in dem Array von Gewichtungsdatenelementen erhalten kann. Die Gewichtungsdatenelemente können im Speicher-Subsystem 404 unter Adressen gespeichert werden, die die Koordinaten der Gewichtungsdatenelemente in dem Array der Gewichtungsdatenelemente widerspiegeln. Der Controller 422 kann mit einer Adresse des ersten Gewichtungsdatenelements in einem ersten Berechnungsbefehl versorgt werden und kann das erste Gewichtungsdatenelement basierend auf der Adresse aus dem Speicher-Subsystem 404 bei der Ausführung des ersten Berechnungsbefehls erhalten.
  • In Schritt 904 kann der Controller das erste Gewichtungsdatenelement in ein systolisches Array (z. B. das Array 410 der Verarbeitungsmaschine) laden. Wie oben beschrieben, kann jede Verarbeitungsmaschine 411 ein Gewichtungsdatenelement speichern, und der Controller kann das erste Gewichtungsdatenelement zur Speicherung an eine Verarbeitungsmaschine 411 senden.
  • In Schritt 906 kann der Controller eine erste Teilmenge von Eingabedatenelementen aus einem Array von Eingabedatenelementen auf der Grundlage von zweiten Koordinaten des ersten Gewichtungsdatenelements in einer um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen und einer Schrittweite einer transponierten Faltungsoperation auswählen. Die erste Teilmenge von Eingabedatenelementen ist in der Verarbeitungsmaschine 411 mit dem ersten Gewichtungsdatenelement zu multiplizieren, um erste Teilsummen zu erzeugen, die an einen Spaltensummationspuffer (z. B. Spaltensummationspuffer 442) des Summationspuffers 412 weitergeleitet werden können. Die erste Teilmenge kann auf der Grundlage des ersten Berechnungsbefehls ausgewählt werden, die einen ersten Satz von Speicherabrufparametern 430 enthält, die eine Startadresse, einen Schritt und eine Anzahl von Elementen umfassen können. Die Startadresse und die Anzahl der Elemente können Eingabedatenelemente widerspiegeln, die sich mit dem ersten Eingabedatenelement überschneiden, wenn sich das um 180 Grad gedrehte Eingabedatenelemente-Array an verschiedenen Schrittpositionen innerhalb eines dilatierten Eingabedatenelemente-Arrays in der transponierten Faltungsoperation befindet. Die Bestimmung der ersten Teilmenge von Eingabedatenelementen kann das Verschieben eines Schrittmusters in Bezug auf eine Referenzposition des Spaltensummenpuffers 442 auf der Grundlage der zweiten Koordinaten umfassen, um einen ersten Bereich zu bestimmen, der eine Ausgabekachel darstellt, die in den Spaltensummenpuffer 442 passen kann, und das Zurückprojizieren des ersten Bereichs auf einen zweiten Bereich in dem Array von Eingabedatenelementen, um eine Anzahl der in der ersten Teilmenge enthaltenen Eingabedatenelemente zu bestimmen. Das Schrittmuster kann einen Satz von Musteradressen enthalten, wobei der Abstand zwischen den Musteradressen den Schritt der transponierten Faltungsoperation widerspiegelt. Die Größe des zweiten Bereichs, der die Anzahl der in der ersten Teilmenge enthaltenen Eingabedatenelemente bestimmt, kann auf der Grundlage des ersten Bereichs (der die Abmessungen des Spaltensummenpuffers 442 widerspiegelt) und einer Verkleinerung um den Kehrwert der Schrittweite der transponierten Faltungsoperation bestimmt werden. Die Startadresse der ersten Teilmenge kann auf der Grundlage von Koordinaten eines Nicht-Null-Eingabedatenelements in dem dilatierten Array von Eingabedatenelementen bestimmt werden, die sich mit dem ersten Gewichtungsdatenelement überschneiden, wenn sich das um 180 Grad gedrehte Array von Gewichtungsdatenelementen an einer ersten Schrittposition innerhalb des dilatierten Arrays der Eingabedatenelemente befindet, und die Koordinaten um einen Kehrwert der Schrittweite der transponierten Faltungsoperation verkleinert werden.
  • In Schritt 908 kann der Controller jedes Eingabedatenelement der ersten Teilmenge ab einer ersten Adresse aus dem Speicher in das systolische Array einspeisen, um es mit dem ersten Gewichtungsdatenelement zu multiplizieren, um erste Teilsummen zu berechnen. Die Eingabedatenelemente können nacheinander an die Verarbeitungsmaschine 411 gesendet werden, die das erste Gewichtungsdatenelement in Schritt 904 speichert. Die Verarbeitungsmaschine 411 kann die einzelnen Eingabedatenelemente mit dem ersten Gewichtungsdatenelement multiplizieren, um die ersten Teilsummen zu erzeugen. Die erste Adresse kann die Startadresse der oben beschriebenen ersten Teilmenge sein. Die ersten Teilsummen können an erste Zieladressen im Spaltensummationspuffer auf der Grundlage des ersten Berechnungsbefehls gesendet werden, der einen ersten Satz von Pufferschreibparametern 452 enthält, die einen Zieloffset, einen Schritt und eine Anzahl von Schreibelementen umfassen können. Die ersten Teilsummen können zu den unter den ersten Zieladressen gespeicherten Daten addiert werden. Der erste Satz von Pufferschreibparametern 452 kann auf dem verschobenen Schrittmuster basieren wie oben in Schritt 906 beschrieben.
  • In Schritt 910 kann der Controller aus dem Speicher ein zweites Gewichtungsdatenelement des Arrays von Gewichtungsdatenelementen auf der Grundlage von dritten Koordinaten des zweiten Gewichtungsdatenelements in dem Array von Gewichtungsdatenelementen abrufen. Wie oben beschrieben, können die Gewichtungsdatenelemente im Speicher-Subsystem 404 unter Adressen gespeichert werden, die die Koordinaten der Gewichtungsdatenelemente in dem Array von Gewichtungsdatenelementen widerspiegeln. Der Controller 422 kann mit einer Adresse des zweiten Gewichtungsdatenelements in einem ersten Berechnungsbefehl versorgt werden und kann das zweite Gewichtungsdatenelement basierend auf der Adresse aus dem Speicher-Subsystem 404 bei der Ausführung des ersten Berechnungsbefehls erhalten.
  • In Schritt 912 kann der Controller das zweite Gewichtungsdatenelement in das systolische Array laden. Das zweite Gewichtungsdatenelement kann das in der Verarbeitungsmaschine 411 von Schritt 904 gespeicherte erste Gewichtungsdatenelement ersetzen.
  • In Schritt 914 kann der Controller eine zweite Teilmenge von Eingabedatenelementen aus dem Array von Eingabedatenelementen auf der Grundlage von vierten Koordinaten des zweiten Gewichtungsdatenelements in der um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen und der Schrittweite der transponierten Faltungsoperation auswählen. Die zweite Teilmenge der Eingabedatenelemente ist in der Verarbeitungsmaschine 411 mit dem zweiten Gewichtungsdatenelement zu multiplizieren, um zweite Teilsummen zu bilden, die an den Spaltensummationspuffer weitergeleitet werden können. Die zweite Teilmenge kann auf der Grundlage des zweiten Berechnungsbefehls ausgewählt werden, der einen zweiten Satz von Speicherabrufparametern 430 enthält. Bei der zweiten Teilmenge kann es sich um diejenigen Eingabedatenelemente handeln, die sich mit dem zweiten Gewichtungsdatenelement überschneiden, wenn sich das um 180 Grad gedrehte Array von Gewichtungsdatenelementen an verschiedenen Schrittpositionen innerhalb des dilatierten Arrays der Eingabedatenelemente bei der transponierten Faltungsoperation befindet. Die Bestimmung der zweiten Teilmenge von Eingabedatenelementen kann das Verschieben des Schrittmusters in Bezug auf eine Referenzposition des Spaltensummenpuffers 442 auf der Grundlage der vierten Koordinaten beinhalten, um die Ausgabekachel zu bestimmen, und das Projizieren der Ausgabekachel zurück auf das Array von Eingabedatenelementen, um eine Anzahl der in der zweiten Teilmenge enthaltenen Eingabedatenelemente zu bestimmen. Die Startadresse der zweiten Teilmenge kann auf der Grundlage von Koordinaten eines von Null verschiedenen Eingabedatenelements im dilatierten Array von Eingabedatenelementen bestimmt werden, die sich mit dem zweiten Gewichtungsdatenelement überschneiden, wenn sich das um 180 Grad gedrehte Array von Gewichtungsdatenelementen an der ersten Schrittposition mit dem dilatierten Array von Eingabedatenelementen befindet.
  • In Schritt 916 kann der Controller jedes Eingabedatenelement der zweiten Teilmenge ab einer zweiten Adresse aus dem Speicher in das systolische Array einspeisen, um es mit dem zweiten Gewichtungsdatenelement zu multiplizieren und zweite Teilsummen zu berechnen. Die Eingabedatenelemente können nacheinander an die Verarbeitungsmaschine 411 gesendet werden, die das zweite Gewichtungsdatenelement in Schritt 912 speichert. Die Verarbeitungsmaschine 411 kann die einzelnen Eingabedatenelemente mit dem zweiten Gewichtungsdatenelement multiplizieren, um die zweiten Teilsummen zu erzeugen. Die zweite Adresse kann die Startadresse der oben beschriebenen zweiten Teilmenge sein. Die zweiten Teilsummen können auf der Grundlage des zweiten Berechnungsbefehls, der einen zweiten Satz von Pufferschreibparametern 452 enthält, an zweite Zieladressen im Spaltensummationspuffer gesendet werden. Die zweiten Teilsummen können zu den unter den zweiten Zieladressen gespeicherten Daten addiert werden, die sich teilweise oder ganz mit den ersten Zieladressen überlappen können. Der zweite Satz von Pufferschreibparametern 452 kann auf dem verschobenen Schrittmuster basieren wie oben in Schritt 914 beschrieben.
  • In Schritt 918 kann der Controller ein Ausgabedaten-Array der transponierten Faltungsoperation basierend auf den ersten Teilsummen und den zweiten Teilsummen erzeugen. Wie oben beschrieben, können sich einige der ersten Zieladressen und der zweiten Zieladressen überlappen, und einige der Ausgabedatenelemente des Ausgabedaten-Arrays können aus Summen der ersten Teilsummen und der zweiten Teilsummen bestehen. Weitere Ausgabedatenelemente des Ausgabedaten-Arrays können durch Überlagerung der ersten Teilsummen und der zweiten Teilsummen gebildet werden.
  • 10 veranschaulicht ein Flussdiagramm eines Beispielverfahrens 1000 zur Erzeugung von Befehlen für einen Neuronalnetzwerk-Prozessor zur Durchführung einer transponierten Faltungsoperation. Verfahren 1000 kann von einem Compiler durchgeführt werden, z. B. dem Compiler 830 in 8.
  • Verfahren 1000 beginnt in Schritt 1002, in dem der Compiler erste Informationen empfangen kann, die eine Schrittweite einer transponierten Faltungsoperation anzeigen, die von einem systolischen Array (z. B. Verarbeitungsmaschinen-Array 410) auf der Grundlage eines Gewichtungsdaten-Arrays und eines Eingabedaten-Arrays durchgeführt werden soll, um ein Ausgabedaten-Array zu erzeugen. Die erste Information kann z. B. vom Eingabecode 842 empfangen werden, der eine Anwendung (eine Upsampling-Operation, eine Rückwärtspropagationsoperation usw.) darstellen kann, die die Ergebnisse der transponierten Faltungsoperation verwendet.
  • In Schritt 1004 kann der Compiler eine zweite Information erhalten, die eine Dimension eines Summationspuffers, z. B. des Spaltensummationspuffers 442, angibt. Der Summationspuffer akkumuliert und speichert Teilsummen aus dem systolischen Array für die transponierte Faltungsoperation. Die zweite Information kann z. B. auch über den Eingabecode 842 empfangen werden. Wie oben beschrieben, können die Dimensionsinformationen verwendet werden, um eine Ausgabekachel zu bestimmen und über eine Projektionsoperation eine Teilmenge der Eingabedatenelemente des Eingabedaten-Arrays für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays zu bestimmen.
  • In Schritt 1006 kann der Compiler eine Zuordnung von Koordinaten zwischen dem Gewichtungsdaten-Array und einer um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays erhalten. Die Zuordnung kann beispielsweise durch das Koordinatenzuordnungsmodul 602 erfolgen, das die Original-Koordinaten 604 jedes Gewichtungsdatenelements im Gewichtungsdaten-Array in gedrehte Koordinaten 606 des Gewichtungsdatenelements in der um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays umwandeln kann.
  • In Schritt 1008 kann der Compiler für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays Zieladressen des Summationspuffers für den Empfang von Teilsummen bestimmen. Die Teilsummen ergeben sich aus der transponierten Faltungsoperation der einzelnen Gewichtungsdatenelemente. Die Bestimmung kann auf der Schrittweite der transponierten Faltung, den Dimensionsinformationen des Summationspuffers, den Koordinaten der einzelnen Gewichtungsdatenelemente im Array der Gewichtungsdaten und der Zuordnung der Koordinaten basieren. Im Einzelnen kann, unter Bezugnahme auf 6B, der Compiler die Koordinaten jedes Gewichtungsdatenelements im Gewichtungsdaten-Array in gedrehte Koordinaten des Gewichtungsdatenelements im gedrehten Gewichtungsdaten-Array übersetzen. Der Compiler kann einen ersten Bereich im Ausgabedaten-Array bestimmen, der den Zielen der Teilsummen im Summationspuffer entspricht, indem er ein Schrittmuster entsprechend den gedrehten Koordinaten verschiebt. Das Schrittmuster kann einen Satz von Musterkoordinaten definieren, wobei benachbarte Musterkoordinaten durch einen Abstand voneinander getrennt sind, der dem Schritt der transponierten Faltungsoperation entspricht. Die Abmessungen des Summationspuffers (z. B. die Anzahl der Spalten und Zeilen) können eine Ausgabekachel definieren, die Ausgabedatenelemente des ersten Bereichs im Ausgabedaten-Array umfasst. Der Compiler kann das Schrittmuster in Bezug auf eine Referenzposition auf der Grundlage eines auf den zweiten Koordinaten basierenden Offsets versetzen. Die Referenzposition kann an einem ersten Ausgabedatenelement der Ausgabekachel liegen, das auf ein Ziel des Summationspuffers abgebildet ist, oder an einer imaginären Position des Ausgabedaten-Arrays mit Nord- und West-Padding, die auf die Ziele des Summationspuffers abgebildet sind. Die Abmessungen des Summationspuffers (z. B. die Anzahl der Zeilen und Spalten) können auch einen Koordinatenbereich für die Ausgabedatenelemente der Ausgabekachel festlegen. Der Compiler kann die verschobenen Musterkoordinaten mit dem Koordinatenbereich vergleichen, um einen Satz überlappender Koordinaten zu ermitteln. Die sich überlappenden Koordinaten können die Zieladressen des Summationspuffers für die Aufnahme der Teilsummen angeben.
  • In Schritt 1010 kann der Compiler für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays eine Teilmenge von Eingabedatenelementen des Eingabedaten-Arrays bestimmen, die mit dem jeweiligen Gewichtungsdatenelement zu multiplizieren sind, um die Teilsummen zu berechnen. Die Teilmenge der Eingabedatenelemente wird auf der Grundlage einer Projektionsoperation aus den Zieladressen, den Koordinaten der einzelnen Gewichtungsdatenelemente im Array der Gewichtungsdaten und der Zuordnung der Koordinaten bestimmt. Unter Bezugnahme auf 6F kann der Compiler den ersten Bereich bestimmen, der eine an den Zieladressen des Summationspuffers zu speichernde Ausgabekachel umfasst, und den ersten Bereich auf einen zweiten Bereich des Eingabedaten-Arrays zurückprojizieren, um die Anzahl der in die Teilmenge aufzunehmenden Eingabedatenelemente zu bestimmen. Die Projektion kann auf einer Verkleinerung des ersten Bereichs um den Kehrwert der Schrittweite der transponierten Faltung beruhen. Der Compiler kann auch auf der Grundlage der zweiten Koordinaten des ersten Gewichtungsdatenelements in der gedrehten Gewichtungsdatenmatrix dritte Koordinaten eines ersten der Eingabedatenelemente in der dilatierten Eingabedatenmatrix berechnen, das sich mit dem ersten Gewichtungsdatenelement überlappt, wenn sich die gedrehte Gewichtungsdatenmatrix an einer ersten Schrittposition in Bezug auf die dilatierte Eingabedatenmatrix befindet. Als Teil der Projektionsoperation kann der Compiler die dritten Koordinaten um einen Kehrwert des Schrittes skalieren, um vierte Koordinaten des ersten Eingabedatenelements im Original-Eingabedaten-Array zu bestimmen.
  • In Schritt 1012 kann der Compiler einen Berechnungsbefehl für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays erzeugen, um Informationen einzuschließen, die die Zieladressen und die Teilmenge der Eingabedatenelemente angeben. Die Informationen können z. B. eine Start-Quelladresse und eine Zählung der Eingabedatenelemente auf der Grundlage der Projektionsoperation in Schritt 1010 umfassen. Die Informationen können z. B. auch eine Start-Zieladresse, einen Schritt von eins, um anzuzeigen, dass eine Lücke zwischen benachbarten Zieladressen besteht, und eine Zählung der Zieladressen auf der Grundlage der Operation in Schritt 1012 umfassen. Der Berechnungsbefehl kann auch eine Adresse des jeweiligen Gewichtungsdatenelements im Speicher enthalten, die auf den Koordinaten des jeweiligen Gewichtungsdatenelements im Gewichtungsdaten-Array basiert.
  • Ausführungsformen der Offenbarung können im Hinblick auf die folgenden Abschnitte beschrieben werden:
    1. 1. Ein nichtflüchtiges computerlesbares Medium, das Befehle speichert, die, wenn sie von einem oder mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen:
      • Laden eines ersten Gewichtungsdatenelements eines Arrays von Gewichtungsdatenelementen aus einem Speicher in ein systolisches Array, wobei das erste Gewichtungsdatenelement erste Koordinaten innerhalb des Arrays von Gewichtungsdatenelementen hat;
      • Extrahieren von Informationen aus den Befehlen, die eine erste Teilmenge von Eingabedatenelementen angeben, die aus dem Speicher zu erhalten sind, wobei die erste Teilmenge auf einer Schrittweite einer transponierten Faltungsoperation und zweiten Koordinaten eines ersten Gewichtungsdatenelements in einem gedrehten Array von Gewichtungsdatenelementen basiert;
      • Abrufen, auf der Grundlage der Informationen, der ersten Teilmenge von Eingabedatenelementen aus dem Speicher;
      • Laden der ersten Teilmenge von Eingabedatenelementen in das systolische Array; und
      • Steuern des systolischen Arrays, um erste Berechnungen auf der Grundlage des ersten Gewichtungsdatenelements und der ersten Teilmenge von Eingabedatenelementen durchzuführen, um Ausgabedatenelemente eines Arrays von Ausgabedatenelementen zu erzeugen.
    2. 2. Das nichtflüchtige computerlesbare Medium nach Abschnitt 1, wobei die Befehle Folgendes umfassen:
      • eine Gewichtungsadresse des ersten Gewichtungsdatenelements in dem Speicher auf der Grundlage der ersten Koordinaten; und
      • eine Quelladresse der ersten Teilmenge von Eingabedatenelementen in dem Speicher auf der Grundlage der zweiten Koordinaten,
      • wobei die Ausführung der Befehle den einen oder die mehreren Hardware-Prozessoren veranlasst, das erste Gewichtungsdatenelement aus dem Speicher auf der Grundlage der ersten Adresse zu erhalten und die erste Teilmenge von Eingabedatenelementen aus dem Speicher auf der Grundlage der zweiten Adresse zu erhalten.
    3. 3. Das nichtflüchtige computerlesbare Medium nach Abschnitt 2, wobei die Eingabedatenelemente in einem zusammenhängenden Adressraum innerhalb des Speichers gespeichert sind.
    4. 4. Das nichtflüchtige computerlesbare Medium nach Anspruch 3, wobei die Quelladresse eine erste Quelladresse ist, die mit einem ersten Teil des zusammenhängenden Adressraums verbunden ist, der die erste Teilmenge von Eingabedatenelementen speichert; wobei die Befehle Folgendes umfassen:
      • die erste Quelladresse;
      • eine erste Anzahl von Eingabedatenelementen in der ersten Teilmenge von Eingabedatenelementen;
      • eine zweite Quelladresse, die mit einem zweiten Teil des zusammenhängenden Adressraums verbunden ist, der eine zweite Teilmenge von Eingabedatenelementen speichert; und
      • eine zweite Anzahl von Eingabedatenelementen in der zweiten Teilmenge von Eingabedatenelementen;
      wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen:
      • Abrufen der ersten Teilmenge der Eingabedatenelemente aus dem Speicher auf der Grundlage der ersten Quelladresse und der ersten Anzahl;
      • Steuern des systolischen Arrays, um die ersten Berechnungen zwischen der ersten Teilmenge von Eingabedatenelementen und dem ersten Gewichtungsdatenelement durchzuführen, um erste Teilsummen zu erzeugen;
      • Abrufen der zweiten Teilmenge der Eingabedatenelemente aus dem Speicher auf der Grundlage der zweiten Quelladresse und der zweiten Anzahl;
      • Abrufen eines zweiten Gewichtungsdatenelements aus dem Speicher; und
      • Steuern des systolischen Arrays, um zweite Berechnungen zwischen der zweiten Teilmenge der Eingabedatenelemente mit dem zweiten Gewichtungsdatenelement durchzuführen, um zweite Teilsummen zu erzeugen; und
      wobei die Ausgabedatenelemente aus den ersten Teilsummen und den zweiten Teilsummen erzeugt werden.
    5. 5. Das nichtflüchtige computerlesbare Medium nach Abschnitt 4, wobei die Befehle erste Zieladressen eines Summationspuffers zum Empfang der ersten Teilsummen und zweite Zieladressen des Summationspuffers zum Empfang der zweiten Teilsummen enthalten; wobei die ersten Zieladressen auf einem Schrittmuster basieren, das von einer Referenzposition um einen ersten Versatz verschoben ist, wobei der erste Versatz auf den ersten Koordinaten basiert; wobei die zweiten Zieladressen darauf beruhen, dass das Schrittmuster von der Referenzposition um einen zweiten Versatz verschoben ist, wobei der zweite Versatz auf den zweiten Koordinaten basiert; und wobei das Schrittmuster auf dem Schritt der transponierten Faltungsoperation basiert.
    6. 6. Das nichtflüchtige computerlesbare Medium nach Abschnitt 5, wobei die Referenzposition auf einer Größe des Nord-Paddings und einer Größe des West-Paddings des Arrays von Ausgabedatenelementen basiert.
    7. 7. Das nichtflüchtige computerlesbare Medium nach Abschnitt 5 oder 6, wobei:
      • Zieladressen des Summationspuffers auf einen Koordinatenbereich von Ausgabedatenelementen im Array von Ausgabedatenelementen abgebildet werden;
      • das Schrittmuster Musterkoordinaten definiert;
      • ein Abstand zwischen benachbarten Musterkoordinaten des Schrittmusters auf der Schrittweite basiert;
      • die Verschiebung des Schrittmusters eine Verschiebung der Musterkoordinaten beinhaltet; und
      • die ersten Zieladressen und die zweiten Zieladressen erste Musterkoordinaten bzw. zweite Musterkoordinaten der verschobenen Schrittmuster enthalten, die innerhalb des Koordinatenbereichs der Ausgabedatenelemente liegen, die den Zieladressen des Summationspuffers zugeordnet sind.
    8. 8. Das nichtflüchtige computerlesbare Medium nach Abschnitt 7, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren veranlassen, den Summationspuffer zu Folgendem veranlassen:
      • Addieren der ersten Teilsummen zu den an den ersten Zieladressen gespeicherten Daten; und
      • Addieren der zweiten Teilsummen zu den an den zweiten Zieladressen gespeicherten Daten.
    9. 9. Das nichtflüchtige computerlesbare Medium nach Abschnitt 7 oder 8, wobei:
      • das gedrehte Array von Gewichtungsdatenelementen auf einer 180-Grad-Drehung des Arrays von Gewichtungsdatenelementen basiert;
      • die transponierte Faltungsoperation eine Faltungsoperation zwischen dem gedrehten Array von Gewichtungsdatenelementen und einem dilatierten Array von Eingabedatenelementen umfasst, wobei das dilatierte Array der Eingabedatenelemente auf der Grundlage des Paddings einer Anzahl von Nullen zwischen Eingabedatenelementen des Arrays von Eingabedatenelementen gemäß der Schrittweite dilatiert wird;
      • die erste Quelladresse auf einer ersten Position eines ersten Eingabeelements in dem dilatierten Array von Eingabedaten basiert, das sich mit dem ersten Gewichtungsdatenelement des gedrehten Arrays von Gewichtungsdatenelementen überlappt, wenn sich das gedrehte Array von Gewichtungsdatenelementen an einer Startschrittposition in Bezug auf das dilatierte Array von Eingabedatenelementen befindet;
      • die erste Anzahl der Eingabedatenelemente in der ersten Teilmenge der Eingabedatenelemente auf einer Anzahl der ersten Zieladressen basiert;
      • die zweite Quelladresse auf einer zweiten Position eines zweiten Eingabeelements in dem dilatierten Array von Eingabedatenelementen basiert, die sich mit dem zweiten Gewichtungsdatenelement des gedrehten Arrays von Gewichtungsdatenelementen überlappt, wenn sich das gedrehte Array von Gewichtungsdatenelementen an der Anfangsschrittposition in Bezug auf das dilatierte Array von Eingabedaten befindet; und
      • die zweite Zählung der Eingabedatenelemente in der zweiten Teilmenge der Eingabedatenelemente auf einer Anzahl der zweiten Zieladressen basiert.
    10. 10. Das nichtflüchtige computerlesbare Medium nach einem der Abschnitte 5-9, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardwareprozessoren ausgeführt werden, den einen oder die mehreren Hardwareprozessoren veranlassen, den Summationspuffer auf Null zu initialisieren.
    11. 11. Das nichtflüchtige computerlesbare Medium nach einem der Abschnitte 5-10, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen:
      • Steuern des Summationspuffers zur Ausgabe einer Null für ein Ausgabedatenelement an einer dritten Zieladresse auf der Grundlage einer Anzeige, dass die dritte Zieladresse seit Beginn der transponierten Faltungsoperation keine Schreiboperation erhalten hat.
    12. 12. Eine Vorrichtung, umfassend:
      • einen Speicher, der einen Befehlssatz speichert; und
      • einen oder mehrere Hardware-Prozessoren, die so konfiguriert sind, dass sie den Befehlssatz ausführen, um:
        • erste Informationen zu empfangen, die eine Schrittweite einer transponierten Faltungsoperation angeben, die von einem systolischen Array auf der Grundlage eines Gewichtungsdaten-Arrays und eines Eingabedaten-Arrays durchgeführt werden soll, um ein Ausgabedaten-Array zu erzeugen;
        • zweite Informationen zu empfangen, die eine Dimension eines Summationspuffers angeben;
        • eine Koordinatenzuordnung zwischen dem Gewichtungsdaten-Arrays und einer um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays zu erhalten;
        • Zieladressen des Summationspuffers für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays zu bestimmen, um Teilmengen von der transponierten Faltungsoperation zu empfangen, die jedes Gewichtungsdatenelement einbezieht, wobei die Zieladressen auf der Grundlage des Schrittes der transponierten Faltung, der Dimensionsinformationen des Summationspuffers, der Koordinaten jedes Gewichtungsdatenelements in dem Gewichtungsdaten-Array und der Koordinatenzuordnung bestimmt werden;
        • für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays eine Teilmenge von Eingabedatenelementen des Eingabedaten-Arrays zu bestimmen, die mit jedem Gewichtungsdatenelement zu multiplizieren sind, um Teilsummen zu berechnen, wobei die Teilmenge von Eingabedatenelementen auf der Grundlage einer Projektionsoperation aus dem Summationspuffer und auf der Grundlage der Rate der dilatierten Faltung, der Schrittweite der dilatierten Faltung, der Dimension des Summationspuffers und der Koordinaten jedes Gewichtungsdatenelements in dem Gewichtungsdaten-Array bestimmt wird;
        • einen Berechnungsbefehl für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays zu erzeugen, um dritte Informationen einzuschließen, die die Zieladressen und die Teilmenge der Eingabedatenelemente angeben.
    13. 13. Die Vorrichtung nach Abschnitt 12, wobei der eine oder die mehreren Hardware-Prozessoren konfiguriert sind, um den Satz von Befehlen auszuführen, um für jedes Gewichtungsdatenelement:
      • gedrehte Koordinaten der Gewichtungsdaten in der um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays auf der Grundlage der Abbildung von Koordinaten und Koordinaten des jeweiligen Gewichtungsdatenelements in dem Gewichtungsdaten-Array zu bestimmen;
      • Einen Versatz basierend auf den gedrehten Koordinaten zu bestimmen;
      • Ein Schrittmuster in Bezug auf eine Referenzposition basierend auf dem Versatz zu verschieben; und
      • basierend auf der Dimension des Summationspuffers und dem verschobenen Schrittmuster, die Zieladressen des Summationspuffers zu bestimmen, um Teilsummen von dem systolischen Array zu empfangen.
    14. 14. Die Vorrichtung nach Abschnitt 13, wobei die transponierte Faltungsoperation eine Faltungsoperation zwischen der um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays und einem dilatierten Eingabedaten-Array umfasst, wobei das dilatierte Eingabedaten-Array auf der Grundlage des Paddings einer Anzahl von Nullen zwischen Eingabedatenelementen des Eingabedaten-Arrays gemäß der Schrittweite dilatiert wird; wobei der eine oder die mehreren Hardware-Prozessoren so konfiguriert sind, dass sie den Satz von Befehlen ausführen, um die Projektionsoperation durchzuführen, wobei die Projektionsoperation für jedes Gewichtungsdatenelement umfasst:
      • Bestimmen einer ersten Position eines ersten Eingabeelements in dem dilatierten Eingabedaten-Array, das sich mit dem jeweiligen Gewichtungsdatenelement überlappt, wenn sich das um 180 Grad gedrehte Gewichtungsdaten-Array an einer Anfangsschrittposition in Bezug auf das dilatierte Eingabedaten-Array befindet;
      • Bestimmen einer zweiten Position des ersten Eingabeelements in dem Eingabedaten-Array auf der Grundlage der Skalierung der ersten Position mit einem Kehrwert des Schrittes; und
      • Bestimmen, basierend auf einer Anzahl der Zieladressen, einer Anzahl von Eingabedatenelementen, die in der Teilmenge von Eingabedatenelementen enthalten sind, beginnend mit dem ersten Eingabeelement.
    15. 15. Die Vorrichtung nach Abschnitt 13 oder 14, wobei die Referenzposition auf einer Größe des Nord-Paddings und einer Größe des West-Paddings des Ausgabedaten-Arrays basiert.
    16. 16. Ein Verfahren zur Durchführung einer transponierten Faltungsoperation in einem Neuronalnetzwerk-Beschleuniger, umfassend:
      • Abrufen eines ersten Gewichtungsdatenelements eines Arrays von Gewichtungsdatenelementen aus einem Speicher, wobei das Abrufen auf ersten Koordinaten des ersten Gewichtungsdatenelements in dem Array von Gewichtungsdatenelementen basiert;
      • Laden des ersten Gewichtungsdatenelements in ein systolisches Array des Neuronalnetzwerk-Beschleunigers;
      • Empfangen einer Auswahl einer ersten Teilmenge von Eingabedatenelementen eines Arrays von Eingabedatenelementen, die mit dem ersten Gewichtungsdatenelement zu multiplizieren sind, wobei die erste Teilmenge auf der Grundlage von zweiten Koordinaten des ersten Gewichtungsdatenelements in einer um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen und auf einer Schrittweite der transponierten Faltungsoperation ausgewählt wird;
      • Einspeisen jedes Eingabedatenelements der ersten Teilmenge, beginnend mit einer ersten Quelladresse aus dem Speicher, in das systolische Array, um erste Teilsummen zu berechnen;
      • Abrufen eines zweiten Gewichtungsdatenelements des Arrays von Gewichtungsdatenelementen aus einem Speicher, wobei das Abrufen auf dritten Koordinaten des zweiten Gewichtungsdatenelements in dem Array von Gewichtungsdatenelementen basiert;
      • Laden des zweiten Gewichtungsdatenelements in das systolische Array;
      • Empfangen einer Auswahl einer zweiten Teilmenge von Eingabedatenelementen des Arrays von Eingabedatenelementen, die mit dem zweiten Gewichtungsdatenelement zu multiplizieren sind, wobei die zweite Teilmenge auf der Grundlage von vierten Koordinaten des zweiten Gewichtungsdatenelements in der um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen und auf der Schrittweite der transponierten Faltungsoperation ausgewählt wird;
      • Einspeisen jedes Eingabedatenelements der zweiten Teilmenge, beginnend mit einer zweiten Adresse aus dem Speicher, in das systolische Array, um zweite Teilsummen zu berechnen; und
      • Erzeugen eines Ausgabedaten-Arrays der transponierten Faltungsoperation auf der Grundlage der ersten Teilsummen und der zweiten Teilsummen.
    17. 17. Das Verfahren nach Abschnitt 16, ferner umfassend:
      • Addieren der ersten Teilsummen zu Teilsummen, die an ersten Zieladressen in einem Summationspuffer gespeichert sind, wobei die ersten Zieladressen auf dem Schritt und den zweiten Koordinaten des ersten Gewichtungsdatenelements in der um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen basieren; und
      • Addieren der zweiten Teilsummen zu Teilsummen, die an zweiten Zieladressen in dem Summationspuffer gespeichert sind, wobei die zweiten Zieladressen auf dem Schritt und den vierten Koordinaten des zweiten Gewichtungsdatenelements in der um 180 Grad gedrehten Version des Arrays von Gewichtungsdatenelementen basieren,
      • wobei eine Größe der ersten Teilmenge von Eingabedatenelementen auf der Grundlage einer Größe des Summationspuffers und der Schrittweite der transponierten Faltung ausgewählt wird.
    18. 18. Das Verfahren nach Abschnitt 17, wobei die ersten Zieladressen im Summationspuffer auf einem Schrittmuster basieren, das von einer Referenzposition um einen ersten Versatz auf der Grundlage der zweiten Koordinaten verschoben ist; wobei die zweiten Zieladressen im Summationspuffer darauf beruhen, dass das Schrittmuster von der Referenzposition um einen zweiten Versatz basierend auf den vierten Koordinaten verschoben ist; und wobei jedes Element des Schrittmusters durch eine auf dem Schritt basierende Lücke getrennt ist.
    19. 19. Das Verfahren nach Abschnitt 18, wobei die transponierte Faltungsoperation eine Faltungsoperation zwischen einem ersten Array, das die um 180 Grad gedrehte Version des Arrays von Gewichtungsdatenelementen umfasst, und einem zweiten Array, das eine dilatierte Version des Arrays von Eingabedatenelementen umfasst, umfasst, wobei die dilatierte Version des Arrays durch Auffüllen einer Anzahl von Nullen zwischen benachbarten Eingabedatenelementen des Arrays von Eingabedatenelementen erzeugt worden ist, wobei die Anzahl der aufgefüllten Nullen auf der Schrittweite basiert; wobei die erste Quelladresse auf der Skalierung von fünften Koordinaten eines ersten Eingabedatenelements in dem zweiten Array mit einem Kehrwert der Schrittweite basiert, wobei das erste Eingabedatenelement mit dem ersten Gewichtungsdatenelement des ersten Arrays überlappt, wenn sich das erste Array an einer Anfangsschrittweitenposition in Bezug auf das zweite Array befindet; und wobei die zweite Quelladresse auf der Skalierung sechster Koordinaten eines zweiten Eingabedatenelements in dem zweiten Array mit einem Kehrwert der Schrittweite basiert, wobei sich das zweite Eingabedatenelement mit dem zweiten Gewichtungsdatenelement des ersten Arrays überlappt, wenn sich das erste Array an der Anfangsschrittweitenposition in Bezug auf das zweite Array befindet.
    20. 20. Das Verfahren nach einem der Abschnitte 16 bis 19, ferner umfassend:
      • Rücksetzen des Summationspuffers vor der Berechnung der ersten Teilsummen und der zweiten Teilsummen.
    21. 21. Das Verfahren nach einem der Abschnitte 16 bis 20, ferner umfassend:
      • Speichern eines Flags in jedem Register, das mit jeder Zieladresse verbunden ist, um anzuzeigen, ob die jeweilige Zieladresse eine Teilsumme von dem systolischen Array erhalten hat; und
      • Steuern des Summationspuffers, um eine Null für eine dritte Zieladresse auszugeben, basierend auf dem Flag, das in dem mit der dritten Zieladresse verbundenen Register gespeichert ist und anzeigt, dass die dritte Zieladresse keine Teilsumme von dem systolischen Array erhalten hat.
  • 11 umfasst ein Diagramm eines Beispielnetzwerks 1100, das ein oder mehrere Host-Systeme umfassen kann, wie das in 8. Zum Beispiel umfasst das Beispielnetzwerk 1100 von 11 mehrere Knoten 1102a-1102h, von denen einer oder mehrere ein Host-System sein können, wie in 8 gezeigt. Andere der Knoten 1102a-1102h können andere Computervorrichtungen sein, von denen jede mindestens einen Speicher zum Speichern von Programmbefehle, einen Prozessor zum Ausführen der Befehle und eine Netzwerkschnittstelle zum Verbinden mit dem Netzwerk 1100 enthält.
  • In verschiedenen Beispielen kann das Netzwerk 1100 zur Verarbeitung von Daten verwendet werden. Beispielsweise können Eingabedaten an einem der Knoten 1102a-1102h oder von anderen Netzwerken 1108, mit denen das Netzwerk 1100 kommunizieren kann, empfangen werden. In diesem Beispiel können die Eingabedaten an einen Knoten im Netzwerk 1100 geleitet werden, der eine Beschleunigungsmaschine enthält, damit die Beschleunigungsmaschine darauf arbeitet und ein Ergebnis erzeugt. Das Ergebnis kann dann an den Knoten oder ein anderes Netzwerk übertragen werden, von dem die Eingabedaten empfangen wurden. In verschiedenen Beispielen können Eingabedaten von verschiedenen Quellen gesammelt werden, einschließlich eines oder mehrerer der Knoten 1102a-1102h und/oder Computervorrichtungen, die sich in den anderen Netzwerken 1108 befinden, und die gesammelten Eingabedaten können an ein oder mehrere Host-Systeme im Netzwerk 1100 geleitet werden. Die Ergebnisse aus den Host-Systemen können dann zurück an die Quellen verteilt werden, aus denen die Eingabedaten gesammelt wurden.
  • In verschiedenen Beispielen können einer oder mehrere der Knoten 1102a-1102h für Operationen wie das Sammeln von Eingabedaten für Host-Systeme, die bearbeitet werden sollen, das Verfolgen, welche Host-Systeme ausgelastet sind und welche mehr Arbeit annehmen können, das Bestimmen, ob die Host-Systeme korrekt und/oder möglichst effizient arbeiten, das Überwachen der Netzwerksicherheit und/oder andere Verwaltungsoperationen verantwortlich sein.
  • Im Beispiel von 11 sind die Knoten 1102a-1102h über eine Switched-Architektur mit Punkt-zu-Punkt-Verbindungen miteinander verbunden. Die Switched-Architektur umfasst mehrere Switches 1104a-1104d, die in einem mehrschichtigen Netzwerk wie einem Clos-Netzwerk angeordnet sein können. Eine Netzwerkvorrichtung, die Pakete zwischen LAN-Segmenten (Local Area Network) filtert und weiterleitet, kann als Switch bezeichnet werden. Switches arbeiten im Allgemeinen auf der Datenverbindungsschicht (Schicht 2) und manchmal auf der Netzwerkschicht (Schicht 3) des Open System Interconnect (OSI)-Referenzmodells und können mehrere Paketprotokolle unterstützen. Die Switches 1104a-1104d von 11 können mit mehreren Knoten 1102a-1102h verbunden werden und bieten mehrere Pfade zwischen zwei beliebigen Knoten.
  • Das Netzwerk 1100 kann auch ein oder mehrere Netzwerkvorrichtungen zur Verbindung mit anderen Netzwerken 1108 enthalten, wie z. B. einen Router 1106. Router verwenden Header und Weiterleitungstabellen, um den besten Pfad für die Weiterleitung der Pakete zu bestimmen, und verwenden Protokolle wie das Internet Control Message Protocol (ICMP), um miteinander zu kommunizieren und die beste Route zwischen zwei beliebigen Vorrichtungen zu konfigurieren. Der Router 1106 von 11 kann zur Verbindung mit anderen Netzwerken 1108 wie Subnetzen, LANs, Wide Area Networks (WANs) und/oder dem Internet verwendet werden.
  • In einigen Beispielen kann das Netzwerk 1100 ein beliebiges oder eine Kombination von vielen verschiedenen Arten von Netzwerken enthalten, wie beispielsweise Kabelnetzwerke, das Internet, drahtlose Netzwerke, zellulare Netzwerke und andere private und/oder öffentliche Netzwerke. Die zusammengeschalteten Switches 1104a-1104d und Router 1106, falls vorhanden, können als Switch-Fabric 1110, Fabric, Network-Fabric oder einfach als Netzwerk bezeichnet werden. Im Rahmen eines Computernetzwerks können die Begriffe „Fabric“ und „Netzwerk“ hierin austauschbar verwendet werden.
  • Die Knoten 1102a-1102h können eine beliebige Kombination von Host-Systemen, Prozessorknoten, Speichersubsystemen und E/A-Chassis sein, die Benutzervorrichtungen, Dienstanbietercomputer oder Computer von Drittanbietern darstellen.
  • Benutzervorrichtungen können Computervorrichtungen enthalten, um auf eine Anwendung 1132 zuzugreifen (z. B. einen Webbrowser oder eine Anwendung für mobile Vorrichtungen). In einigen Aspekten kann die Anwendung 1132 von einem Rechenzentrums- oder Dienstanbieter gehostet, verwaltet und/oder bereitgestellt werden. Die Anwendung 1132 kann es den Benutzern ermöglichen, mit den Computern des Dienstanbieters zu interagieren, um beispielsweise auf Webinhalte (z. B. Webseiten, Musik, Videos usw.) zuzugreifen. Die Benutzervorrichtung(en) kann (können) eine Computervorrichtung wie beispielsweise ein Mobiltelefon, ein Smartphone, ein Personal Digital Assistant (PDA), ein Laptop-Computer, ein Netbook-Computer, ein Desktop-Computer, eine Thin-Client-Vorrichtung, ein Tablet-Computer, ein elektronisches Buch (E-Book-Lesevorrichtung), eine Spielkonsole usw. sein. In einigen Beispielen kann (können) die Benutzervorrichtung(en) über ein anderes Netzwerk 1108 mit den Dienstanbietercomputern kommunizieren. Darüber hinaus kann (können) die Benutzervorrichtung(en) Teil des verteilten Systems sein, das von den Dienstanbietercomputern verwaltet, kontrolliert wird oder anderweitig Teil der Dienstanbietercomputer ist (z. B. eine mit den Dienstanbietercomputern integrierte Konsolenvorrichtung).
  • Der oder die Knoten von 11 können auch einen oder mehrere Dienstanbietercomputer darstellen. Ein oder mehrere Dienstanbietercomputer können eine native Anwendung bereitstellen, die so konfiguriert ist, dass sie auf den Benutzervorrichtungen ausgeführt wird, mit denen die Benutzer interagieren können. Die Dienstanbietercomputer können in einigen Beispielen Computerressourcen bereitstellen, wie z. B. Client-Einheiten, Datenspeicher mit niedriger Latenzzeit, dauerhafte Datenspeicherung, Datenzugriff, Verwaltung, Virtualisierung, Cloud-basierte Softwarelösungen, elektronisches Content Performance Management und so weiter. Der oder die Dienstanbietercomputer können auch so betrieben werden, dass sie dem oder den Benutzer(n) Webhosting, Datenbanken, Computeranwendungsentwicklungs- und/oder Implementierungsplattformen, Kombinationen aus dem Vorstehenden oder dergleichen bereitstellen. In einigen Beispielen können der oder die Dienstanbietercomputer als eine oder mehrere virtuelle Maschinen bereitgestellt werden, die in einer gehosteten Computerumgebung implementiert sind. Die gehostete Computerumgebung kann eine oder mehrere schnell bereitgestellte und freigegebene Computerressourcen enthalten. Zu diesen Computerressourcen können Computer-, Netzwerk- und/oder Speichervorrichtungen gehören. Eine gehostete Computerumgebung kann auch als Cloud-Computing-Umgebung bezeichnet werden. Der oder die Dienstanbietercomputer können einen oder mehrere Server enthalten, die möglicherweise in einem Cluster, als Serverfarm oder als einzelne Server, die nicht miteinander verbunden sind, angeordnet sind, und können die Anwendung 1132 und/oder Cloud-basierte Softwaredienste hosten. Diese Server können als Teil einer integrierten, verteilten Computerumgebung konfiguriert werden. In einigen Aspekten können die Dienstanbietercomputer zusätzlich oder alternativ Computervorrichtungen wie z. B. ein Mobiltelefon, ein Smartphone, einen persönlichen digitalen Assistenten (PDA), einen Laptop-Computer, einen Desktop-Computer, einen Netbook-Computer, einen Server-Computer, eine Thin-Client-Vorrichtung, einen Tablet-Computer, eine Spielkonsole usw. enthalten. In einigen Fällen können die Dienstanbietercomputer mit einem oder mehreren Computern von Drittanbietern kommunizieren.
  • In einer Beispielkonfiguration können die Knoten 1102a-1102h mindestens einen Speicher 1118 und eine oder mehrere Verarbeitungseinheiten (oder Prozessoren 1120) enthalten. Der oder die Prozessor(en) 1120 können in Hardware, computerausführbaren Befehlen, Firmware oder Kombinationen davon implementiert sein. Computerausführbare Befehle oder Firmware-Implementierungen des/der Prozessors(en) 1120 können computerausführbare oder maschinenausführbare Befehle enthalten, die in jeder geeigneten Programmiersprache geschrieben sind, um die verschiedenen beschriebenen Funktionen auszuführen.
  • In einigen Fällen kann (können) der oder die Hardware-Prozessor(en) 1120 ein Single-Core-Prozessor oder ein Multi-Core-Prozessor sein. Ein Multi-Core-Prozessor kann mehrere Verarbeitungseinheiten innerhalb desselben Prozessors enthalten. In einigen Beispielen können sich die Multi-Core-Prozessoren bestimmte Ressourcen wie Busse und Caches der zweiten oder dritten Ebene teilen. In einigen Fällen kann jeder Kern in einem Single- oder Multi-Core-Prozessor auch mehrere ausführende logische Prozessoren (oder ausführende Threads) enthalten. In einem solchen Kern (z. B. mit mehreren logischen Prozessoren) können auch mehrere Stufen der Ausführungspipeline und auch untergeordnete Caches gemeinsam genutzt werden.
  • Der Speicher 1118 kann Programmbefehle speichern, die auf dem/den Prozessor(en) 1120 ladbar und ausführbar sind, sowie Daten, die während der Ausführung dieser Programme erzeugt werden. Je nach Konfiguration und Typ der Knoten 1102a-1102h kann der Speicher 1118 flüchtig (z. B. RAM) und/oder nichtflüchtig (z. B. ROM, Flash-Speicher, etc.) sein. Der Speicher 1118 kann ein Betriebssystem 1128, einen oder mehrere Datenspeicher 1130, ein oder mehrere Anwendungsprogramme 1132, einen oder mehrere Treiber 1134 und/oder Dienste zur Implementierung der hierin offenbarten Funktionen enthalten.
  • Das Betriebssystem 1128 kann die Grundfunktionen der Knoten 1102a-1102h unterstützen, wie z. B. die Planung von Aufgaben, das Ausführen von Anwendungen und/oder die Steuerung von Peripherievorrichtungen. In einigen Implementierungen kann ein Dienstanbietercomputer eine oder mehrere virtuelle Maschinen bereitstellen. In diesen Implementierungen kann jede virtuelle Maschine dazu konfiguriert sein, ihr eigenes Betriebssystem auszuführen. Beispiele für Betriebssysteme sind Unix, Linux, Windows, Mac OS, iOS, Android und dergleichen. Das Betriebssystem 1128 kann auch ein proprietäres Betriebssystem sein.
  • Die Datenspeicher 1130 können permanente oder flüchtige Daten enthalten, die vom Betriebssystem 1128, den Anwendungsprogrammen 1132 oder den Treibern 1134 verwendet und/oder betrieben werden. Beispiele für solche Daten sind Webseiten, Videodaten, Audiodaten, Bilder, Benutzerdaten und so weiter. Die Informationen in den Datenspeichern 1130 können in einigen Implementierungen über das/die Netzwerk(e) 1108 an die Benutzervorrichtungen übermittelt werden. In einigen Fällen können die Datenspeicher 1130 zusätzlich oder alternativ gespeicherte Anwendungsprogramme und/oder Treiber enthalten. Alternativ oder zusätzlich können die Datenspeicher 1130 Standard- und/oder proprietäre Softwarebibliotheken und/oder Standard- und/oder proprietäre Application User Interface (API)-Bibliotheken speichern. In den Datenspeichern 1130 gespeicherte Informationen können maschinenlesbarer Objektcode, Quellcode, interpretierter Code oder Zwischencode sein.
  • Die Treiber 1134 enthalten Programme, die die Kommunikation zwischen Komponenten in einem Knoten ermöglichen. So können beispielsweise einige Treiber 1134 die Kommunikation zwischen dem Betriebssystem 1128 und dem zusätzlichen Speicher 1122, der Netzwerkvorrichtung 1124 und/oder der E/A-Vorrichtung 1126 ermöglichen. Alternativ oder zusätzlich können einige Treiber 1134 die Kommunikation zwischen den Anwendungsprogrammen 1132 und dem Betriebssystem 1128 und/oder den Anwendungsprogrammen 1132 und Peripherievorrichtungen ermöglichen, die für den Dienstanbietercomputer zugänglich sind. In vielen Fällen können die Treiber 1134 Treiber enthalten, die eine gut verstandene Funktionalität bieten (z. B. Druckertreiber, Anzeigetreiber, Festplattentreiber, Solid-State-Device-Treiber). In anderen Fällen können die Treiber 1134 proprietäre oder spezielle Funktionen bereitstellen.
  • Die Dienstanbietercomputer oder -server können auch zusätzlichen Speicher 1122 enthalten, der Wechselspeicher und/oder nicht entfernbaren Speicher enthalten kann. Der zusätzliche Speicher 1122 kann Magnetspeicher, optische Platten, Solid-State-Disks, Flash-Speicher und/oder Bandspeicher enthalten. Der zusätzliche Speicher 1122 kann im gleichen Gehäuse wie die Knoten 1102a-1102h oder in einem externen Gehäuse untergebracht sein. Der Speicher 1118 und/oder der zusätzliche Speicher 1122 und die zugehörigen computerlesbaren Medien können eine nichtflüchtige Speicherung von computerlesbaren Befehlen, Datenstrukturen, Programmmodulen und anderen Daten für die Computervorrichtungen bereitstellen. In einigen Implementierungen kann der Speicher 1118 mehrere verschiedene Speichertypen enthalten, wie beispielsweise SRAM, DRAM oder ROM.
  • Der Speicher 1118 und die zusätzliche Speicherung 1122, sowohl wechselbar als auch nicht wechselbar, sind Beispiele für computerlesbare Speichermedien. So können beispielsweise computerlesbare Speichermedien flüchtige oder nichtflüchtige, entfernbare oder nicht entfernbare Medien enthalten, die in einem Verfahren oder einer Technologie zur Speicherung von Informationen implementiert sind, wobei die Informationen beispielsweise computerlesbare Befehle, Datenstrukturen, Programmodule oder andere Daten enthalten. Der Speicher 1118 und der zusätzliche Speicher 1122 sind Beispiele für Computerspeichermedien. Zusätzliche Arten von Computerspeichermedien, die in den Knoten 1102a-1102h vorhanden sein können, können unter anderem PRAM, SRAM, DRAM, RAM, ROM, EEPROM, Flash-Speicher oder andere Speichertechnologien, CD-ROM, DVD oder andere optische Speicher, Magnetkassetten, Magnetbänder, Magnetplattenspeicher oder andere magnetische Speichervorrichtungen, Solid-State-Laufwerke oder andere Medien enthalten, die zum Speichern der gewünschten Informationen verwendet werden können und auf die die Knoten 1102a-1102h zugreifen können. Computerlesbare Medien umfassen auch Kombinationen aus einem der oben genannten Medientypen, einschließlich mehrerer Einheiten eines Medientyps.
  • Alternativ oder zusätzlich können computerlesbare Kommunikationsmedien computerlesbare Befehle, Programmmodule oder andere innerhalb eines Datensignals übertragene Daten, wie beispielsweise eine Trägerwelle oder eine andere Übertragung, enthalten. Der hier verwendete Begriff „computerlesbare Speichermedien“ schließt jedoch keine computerlesbaren Kommunikationsmedien ein.
  • Die Knoten 1102a-1102h können auch (eine) E/A-Vorrichtung(en) 1126 enthalten, wie beispielsweise eine Tastatur, eine Maus, einen Stift, eine Spracheingabevorrichtung, eine Touch-Eingabevorrichtung, eine Anzeige, Lautsprecher, einen Drucker und dergleichen. Die Knoten 1102a-1102h können auch einen oder mehrere Kommunikationskanäle 1136 enthalten. Ein Kommunikationskanal 1136 kann ein Medium bereitstellen, über das die verschiedenen Komponenten des/der Knoten 1102a-1102h kommunizieren können. Der oder die Kommunikationskanäle 1136 können die Form eines Busses, eines Rings, einer Schaltanlage oder eines Netzwerks annehmen.
  • Die Knoten 1102a-1102h können auch eine Netzwerkvorrichtung 1124 enthalten, die es den Knoten 1102a-1102h ermöglicht, mit einer gespeicherten Datenbank, einer anderen Computervorrichtung oder einem Server, Benutzerendvorrichtungen und/oder anderen Vorrichtungen im Netzwerk/in den Netzwerken 1100 zu kommunizieren.
  • In einigen Implementierungen ist die Netzwerkvorrichtung 1124 eine Peripherievorrichtung, wie beispielsweise eine PCI-basierte Vorrichtung. In diesen Implementierungen beinhaltet die Netzwerkvorrichtung 1124 eine PCI-Schnittstelle zur Kommunikation mit einer Hostvorrichtung. Der Begriff „PCI“ oder „PCI-basiert“ kann verwendet werden, um jedes Protokoll in der PCI-Busprotokollfamilie zu beschreiben, einschließlich des Original-PCI-Standards, PCI-X, Accelerated Graphics Port (AGP) und PCI-Express(PCIe) oder andere Verbesserungs- oder abgeleitete Protokolle, die auf den hierin beschriebenen PCI-Protokollen basieren. Die PCI-basierten Protokolle sind Standardbusprotokolle für die Verbindung von Vorrichtungen, wie z. B. einer lokalen Peripherievorrichtung mit einer Hostvorrichtung. Ein Standardbusprotokoll ist ein Datenübertragungsprotokoll, für das eine Spezifikation definiert und von verschiedenen Anbietern übernommen wurde. Die Anbieter stellen sicher, dass konforme Vorrichtungen mit Computersystemen kompatibel sind, die das Busprotokoll implementieren, und umgekehrt. Wie hierin verwendet, enthalten PCI-basierte Vorrichtungen auch Vorrichtungen, die über Non-Volatile Memory Express (NVMe) kommunizieren. NVMe ist eine Vorrichtungsschnittstellenspezifikation für den Zugriff auf nichtflüchtige Speichermedien, die an ein Computersystem mit PCIe angeschlossen sind. So kann beispielsweise das Bus-Schnittstellenmodul NVMe implementieren, und die Netzwerkvorrichtung 1124 kann über eine PCIe-Schnittstelle mit einem Computersystem verbunden werden.
  • Die hierin beschriebenen Module können Softwaremodule, Hardwaremodule oder eine geeignete Kombination davon sein. Wenn es sich bei den Modulen um Softwaremodule handelt, können die Module auf einem nichtflüchtigen, computerlesbaren Medium verkörpert und von einem Prozessor in einem der hierin beschriebenen Computersysteme verarbeitet werden. Es ist zu beachten, dass die beschriebenen Prozesse und Architekturen entweder in Echtzeit oder in einem asynchronen Modus vor jeder Benutzerinteraktion ausgeführt werden können. Die Module können auf die in den vorausgegangenen Figuren vorgeschlagene Weise konfiguriert werden, und/oder die hierin beschriebenen Funktionen können von einem oder mehreren Modulen bereitgestellt werden, die als separate Module existieren und/oder die hierin beschriebenen Modulfunktionen können auf mehrere Module verteilt werden.
  • Die Beschreibung und die Zeichnungen sind dementsprechend eher veranschaulichend als einschränkend zu verstehen. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne vom breiteren Geist und Umfang der Offenbarung abzuweichen, wie sie in den Ansprüchen dargelegt sind.
  • Weitere Variationen liegen im Geist der vorliegenden Offenbarung. Während die offenbarten Techniken für verschiedene Modifikationen und alternative Konstruktionen anfällig sind, sind bestimmte veranschaulichte Beispiele davon in den Zeichnungen gezeigt und wurden oben im Detail beschrieben. Es versteht sich jedoch, dass nicht beabsichtigt ist, die Offenbarung auf die bestimmte Form oder die bestimmten offenbarten Formen zu beschränken, sondern dass im Gegenteil beabsichtigt ist, alle Modifikationen, alternativen Konstruktionen und Äquivalente abzudecken, die in den Geist und Umfang der Offenbarung fallen, wie in den beigefügten Ansprüchen definiert.
  • Die Verwendung der Begriffe „ein“ und „eine/r“ und „der/die/das“ und ähnlicher Verweise im Zusammenhang mit der Beschreibung der offenbarten Beispiele (insbesondere im Zusammenhang mit den folgenden Ansprüchen) soll so ausgelegt werden, dass sie sowohl den Singular als auch den Plural abdeckt, sofern hierin nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Begriffe „umfassen“, „haben“, „aufweisen“ und „enthalten“ sind als nicht einschränkende Begriffe zu verstehen (d. h. bedeuten „einschließlich, aber nicht darauf beschränkt“), sofern nicht anders angegeben. Der Begriff „verbunden“ ist so zu verstehen, dass etwas teilweise oder vollständig in etwas enthalten ist, daran angehängt oder zusammengefügt ist, selbst wenn etwas dazwischen liegt. Die Angabe von Wertebereichen hierin soll lediglich als Kurzform dienen, um sich einzeln auf jeden einzelnen Wert zu beziehen, der in den Bereich fällt, sofern hier nichts anderes angegeben ist, und jeder einzelne Wert wird in die Beschreibung aufgenommen, als ob er hier einzeln angegeben wäre. Alle hier beschriebenen Verfahren können in jeder geeigneten Reihenfolge ausgeführt werden, sofern hier nichts anderes angegeben ist oder der Kontext dem eindeutig widerspricht. Die Verwendung aller hierin bereitgestellten Beispiele oder beispielhaften Ausdrücke (z. B. „wie“) soll lediglich Beispiele der Offenbarung besser veranschaulichen und stellt keine Einschränkung des Umfangs der Offenbarung dar, sofern nicht anders beansprucht. Keine Sprache in der Beschreibung sollte so ausgelegt werden, dass sie ein nicht beanspruchtes Element anzeigt, das für die Ausübung der Offenbarung wesentlich ist.
  • Eine disjunktive Sprache wie der Ausdruck „mindestens eines von X, Y oder Z“ soll, sofern nicht ausdrücklich anders angegeben, in dem Kontext verstanden werden, der allgemein verwendet wird, um darzustellen, dass ein Artikel, Begriff usw. entweder X, Y oder Z sein kann oder eine beliebige Kombination davon (z. B. X, Y und / oder Z). Somit soll und sollte eine solche disjunktive Sprache nicht generell bedeuten, dass bei bestimmten Beispielen mindestens eines von X, mindestens eines von Y oder mindestens eines von Z vorhanden sein muss.
  • Verschiedene Beispiele der vorliegenden Offenbarung werden hierin beschrieben, einschließlich der den Erfindern bekannten besten Art zum Ausführen der Offenbarung. Variationen dieser Beispiele können für den Fachmann beim Lesen der vorstehenden Beschreibung offensichtlich werden. Die Erfinder erwarten von Fachleuten, dass sie solche Variationen nach Bedarf anwenden, und die Erfinder beabsichtigen, dass die Offenbarung anders als hier spezifisch beschrieben praktiziert wird. Dementsprechend umfasst diese Offenbarung alle Modifikationen und Äquivalente des in den beigefügten Ansprüchen angegebenen Artikels, soweit dies nach geltendem Recht zulässig ist. Darüber hinaus ist jede Kombination der oben beschriebenen Elemente in allen möglichen Variationen davon von der Offenbarung umfasst, es sei denn, es ist hierin anders angegeben oder durch den Kontext klar widersprüchlich.

Claims (15)

  1. Nichtflüchtiges computerlesbares Medium, das Befehle speichert, die, wenn sie von einem oder mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen: Laden eines ersten Gewichtungsdatenelements eines Arrays von Gewichtungsdatenelementen aus einem Speicher in ein systolisches Array, wobei das erste Gewichtungsdatenelement erste Koordinaten innerhalb des Arrays von Gewichtungsdatenelementen hat; Extrahieren von Informationen aus den Befehlen, die eine erste Teilmenge von Eingabedatenelementen angeben, die aus dem Speicher zu erhalten sind, wobei die erste Teilmenge auf einer Schrittweite einer transponierten Faltungsoperation und zweiten Koordinaten eines ersten Gewichtungsdatenelements in einem gedrehten Array von Gewichtungsdatenelementen basiert; Abrufen, auf der Grundlage der Informationen, der ersten Teilmenge von Eingabedatenelementen aus dem Speicher; Laden der ersten Teilmenge von Eingabedatenelementen in das systolische Array; und Steuern des systolischen Arrays, um erste Berechnungen auf der Grundlage des ersten Gewichtungsdatenelements und der ersten Teilmenge von Eingabedatenelementen durchzuführen, um Ausgabedatenelemente eines Arrays von Ausgabedatenelementen zu erzeugen.
  2. Nichtflüchtiges computerlesbares Medium nach Anspruch 1, wobei die Befehle Folgendes umfassen: eine Gewichtungsadresse des ersten Gewichtungsdatenelements in dem Speicher auf der Grundlage der ersten Koordinaten; und eine Quelladresse der ersten Teilmenge von Eingabedatenelementen in dem Speicher auf der Grundlage der zweiten Koordinaten, wobei die Ausführung der Befehle den einen oder die mehreren Hardware-Prozessoren veranlasst, das erste Gewichtungsdatenelement aus dem Speicher auf der Grundlage der ersten Adresse zu erhalten und die erste Teilmenge von 1 Eingabedatenelementen aus dem Speicher auf der Grundlage der zweiten Adresse zu 1 erhalten.
  3. Nichtflüchtiges computerlesbares Medium nach Anspruch 2, wobei die Eingabedatenelemente in einem zusammenhängenden Adressraum innerhalb des Speichers gespeichert sind.
  4. Nichtflüchtiges computerlesbares Medium nach Anspruch 3, wobei die Quelladresse eine erste Quelladresse ist, die mit einem ersten Teil des zusammenhängenden Adressraums verbunden ist, der die erste Teilmenge von Eingabedatenelementen speichert; wobei die Befehle Folgendes umfassen: die erste Quelladresse; eine erste Anzahl von Eingabedatenelementen in der ersten Teilmenge von Eingabedatenelementen; eine zweite Quelladresse, die mit einem zweiten Teil des zusammenhängenden Adressraums verbunden ist, der eine zweite Teilmenge von Eingabedatenelementen speichert; und eine zweite Anzahl von Eingabedatenelementen in der zweiten Teilmenge von Eingabedatenelementen; wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen: Abrufen der ersten Teilmenge der Eingabedatenelemente aus dem Speicher auf der Grundlage der ersten Quelladresse und der ersten Anzahl; Steuern des systolischen Arrays, um die ersten Berechnungen zwischen der ersten Teilmenge von Eingabedatenelementen und dem ersten Gewichtungsdatenelement durchzuführen, um erste Teilsummen zu erzeugen; Abrufen der zweiten Teilmenge der Eingabedatenelemente aus dem Speicher auf der Grundlage der zweiten Quelladresse und der zweiten Anzahl; Abrufen eines zweiten Gewichtungsdatenelements aus dem Speicher; und Steuern des systolischen Arrays, um zweite Berechnungen zwischen der zweiten Teilmenge der Eingabedatenelemente mit dem zweiten Gewichtungsdatenelement durchzuführen, um zweite Teilsummen zu erzeugen; und wobei die Ausgabedatenelemente aus den ersten Teilsummen und den zweiten Teilsummen erzeugt werden.
  5. Nichtflüchtiges computerlesbares Medium nach Anspruch 4, wobei die Befehle erste Zieladressen eines Summationspuffers zum Empfang der ersten Teilsummen und zweite Zieladressen des Summationspuffers zum Empfang der zweiten Teilsummen enthalten; wobei die ersten Zieladressen auf einem Schrittmuster basieren, das von einer Referenzposition um einen ersten Versatz verschoben ist, wobei der erste Versatz auf den ersten Koordinaten basiert; wobei die zweiten Zieladressen darauf beruhen, dass das Schrittmuster von der Referenzposition um einen zweiten Versatz verschoben ist, wobei der zweite Versatz auf den zweiten Koordinaten basiert; und wobei das Schrittmuster auf dem Schritt der transponierten Faltungsoperation basiert.
  6. Nichtflüchtiges computerlesbares Medium nach Anspruch 5, wobei die Referenzposition auf einer Größe des Nord-Paddings und einer Größe des West-Paddings des Arrays von Ausgabedatenelementen basiert.
  7. Nichtflüchtiges computerlesbares Medium nach Anspruch 5 oder 6, wobei: Zieladressen des Summationspuffers auf einen Koordinatenbereich von Ausgabedatenelementen im Array von Ausgabedatenelementen abgebildet werden; das Schrittmuster Musterkoordinaten definiert; ein Abstand zwischen benachbarten Musterkoordinaten des Schrittmusters auf der Schrittweite basiert; die Verschiebung des Schrittmusters eine Verschiebung der Musterkoordinaten beinhaltet; und die ersten Zieladressen und die zweiten Zieladressen erste Musterkoordinaten bzw. zweite Musterkoordinaten der verschobenen Schrittmuster enthalten, die innerhalb des Koordinatenbereichs der Ausgabedatenelemente liegen, die den Zieladressen des Summationspuffers zugeordnet sind.
  8. Nichtflüchtiges computerlesbares Medium nach Anspruch 7, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren veranlassen, den Summationspuffer zu Folgendem veranlassen: Addieren der ersten Teilsummen zu den an den ersten Zieladressen gespeicherten Daten; und Addieren der zweiten Teilsummen zu den an den zweiten Zieladressen gespeicherten Daten.
  9. Nichtflüchtiges computerlesbares Medium nach Anspruch 7 oder 8, wobei: das gedrehte Array von Gewichtungsdatenelementen auf einer 180-Grad-Drehung des Arrays von Gewichtungsdatenelementen basiert; die transponierte Faltungsoperation eine Faltungsoperation zwischen dem gedrehten Array von Gewichtungsdatenelementen und einem dilatierten Array von Eingabedatenelementen umfasst, wobei das dilatierte Array der Eingabedatenelemente auf der Grundlage des Paddings einer Anzahl von Nullen zwischen Eingabedatenelementen des Arrays von Eingabedatenelementen gemäß der Schrittweite dilatiert wird; die erste Quelladresse auf einer ersten Position eines ersten Eingabeelements in dem dilatierten Array von Eingabedaten basiert, das sich mit dem ersten Gewichtungsdatenelement des gedrehten Arrays von Gewichtungsdatenelementen überlappt, wenn sich das gedrehte Array von Gewichtungsdatenelementen an einer Startschrittposition in Bezug auf das dilatierte Array von Eingabedatenelementen befindet; die erste Anzahl der Eingabedatenelemente in der ersten Teilmenge der Eingabedatenelemente auf einer Anzahl der ersten Zieladressen basiert; die zweite Quelladresse auf einer zweiten Position eines zweiten Eingabeelements in dem dilatierten Array von Eingabedatenelementen basiert, die sich mit dem zweiten Gewichtungsdatenelement des gedrehten Arrays von Gewichtungsdatenelementen überlappt, wenn sich das gedrehte Array von Gewichtungsdatenelementen an der Anfangsschrittposition in Bezug auf das dilatierte Array von Eingabedaten befindet; und die zweite Zählung der Eingabedatenelemente in der zweiten Teilmenge der Eingabedatenelemente auf einer Anzahl der zweiten Zieladressen basiert.
  10. Nichtflüchtiges computerlesbares Medium nach einem der Ansprüche 5 bis 9, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardwareprozessoren ausgeführt werden, den einen oder die mehreren Hardwareprozessoren veranlassen, den Summationspuffer auf Null zu initialisieren.
  11. Nichtflüchtiges computerlesbares Medium nach einem der Ansprüche 5 bis 10, wobei die Befehle, wenn sie von dem einen oder den mehreren Hardware-Prozessoren ausgeführt werden, den einen oder die mehreren Hardware-Prozessoren zu Folgendem veranlassen: Steuern des Summationspuffers zur Ausgabe einer Null für ein Ausgabedatenelement an einer dritten Zieladresse auf der Grundlage einer Anzeige, dass die dritte Zieladresse seit Beginn der transponierten Faltungsoperation keine Schreiboperation erhalten hat.
  12. Vorrichtung, umfassend: einen Speicher, der einen Befehlssatz speichert; und einen oder mehrere Hardware-Prozessoren, die so konfiguriert sind, dass sie den Befehlssatz ausführen, um: erste Informationen zu empfangen, die eine Schrittweite einer transponierten Faltungsoperation angeben, die von einem systolischen Array auf der Grundlage eines Gewichtungsdaten-Arrays und eines Eingabedaten-Arrays durchgeführt werden soll, um ein Ausgabedaten-Array zu erzeugen; zweite Informationen zu empfangen, die eine Dimension eines Summationspuffers angeben; eine Koordinatenzuordnung zwischen dem Gewichtungsdaten-Arrays und einer um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays zu erhalten; Zieladressen des Summationspuffers für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays zu bestimmen, um Teilmengen von der transponierten Faltungsoperation zu empfangen, die jedes Gewichtungsdatenelement einbezieht, wobei die Zieladressen auf der Grundlage des Schrittes der transponierten Faltung, der Dimensionsinformationen des Summationspuffers, der Koordinaten jedes Gewichtungsdatenelements in dem Gewichtungsdaten-Array und der Koordinatenzuordnung bestimmt werden; für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays eine Teilmenge von Eingabedatenelementen des Eingabedaten-Arrays zu bestimmen, die mit jedem Gewichtungsdatenelement zu multiplizieren sind, um Teilsummen zu berechnen, wobei die Teilmenge von Eingabedatenelementen auf der Grundlage einer Projektionsoperation aus dem Summationspuffer und auf der Grundlage der Rate der dilatierten Faltung, der Schrittweite der dilatierten Faltung, der Dimension des Summationspuffers und der Koordinaten jedes Gewichtungsdatenelements in dem Gewichtungsdaten-Array bestimmt wird; einen Berechnungsbefehl für jedes Gewichtungsdatenelement des Gewichtungsdaten-Arrays zu erzeugen, um dritte Informationen einzuschließen, die die Zieladressen und die Teilmenge der Eingabedatenelemente angeben.
  13. Vorrichtung nach Anspruch 12, wobei der eine oder die mehreren Hardware-Prozessoren so konfiguriert sind, dass sie den Befehlssatz für jedes Gewichtungsdatenelement ausführen, um: gedrehte Koordinaten der Gewichtungsdaten in der um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays auf der Grundlage der Abbildung von Koordinaten und Koordinaten des jeweiligen Gewichtungsdatenelements in dem Gewichtungsdaten-Array zu bestimmen; einen Versatz basierend auf den gedrehten Koordinaten zu bestimmen; ein Schrittmuster in Bezug auf eine Referenzposition basierend auf dem Versatz zu verschieben; und basierend auf der Dimension des Summationspuffers und dem verschobenen Schrittmuster, die Zieladressen des Summationspuffers zu bestimmen, um Teilsummen von dem systolischen Array zu empfangen.
  14. Vorrichtung nach Anspruch 13, wobei die transponierte Faltungsoperation eine Faltungsoperation zwischen der um 180 Grad gedrehten Version des Gewichtungsdaten-Arrays und einem dilatierten Eingabedaten-Array umfasst, wobei das dilatierte Eingabedaten-Array auf der Grundlage des Paddings einer Anzahl von Nullen zwischen Eingabedatenelementen des Eingabedaten-Arrays gemäß der Schrittweite dilatiert wird; wobei der eine oder die mehreren Hardware-Prozessoren so konfiguriert sind, dass sie den Satz von Befehlen ausführen, um die Projektionsoperation durchzuführen, wobei die Projektionsoperation für jedes Gewichtungsdatenelement umfasst: Bestimmen einer ersten Position eines ersten Eingabeelements in dem dilatierten Eingabedaten-Array, das sich mit dem jeweiligen Gewichtungsdatenelement überlappt, wenn sich das um 180 Grad gedrehte Gewichtungsdaten-Array an einer Anfangsschrittposition in Bezug auf das dilatierte Eingabedaten-Array befindet; Bestimmen einer zweiten Position des ersten Eingabeelements in dem Eingabedaten-Array auf der Grundlage der Skalierung der ersten Position mit einem Kehrwert des Schrittes; und Bestimmen, basierend auf einer Anzahl der Zieladressen, einer Anzahl von Eingabedatenelementen, die in der Teilmenge von Eingabedatenelementen enthalten sind, beginnend mit dem ersten Eingabeelement.
  15. Vorrichtung nach einem der Ansprüche 13 oder 14, wobei die Referenzposition auf einer Größe des Nord-Paddings und einer Größe des West-Paddings des Ausgabedaten-Arrays basiert.
DE112020004625.7T 2019-09-27 2020-09-21 Transponierte faltung mit systolischem array Pending DE112020004625T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/586,764 US11681902B2 (en) 2019-09-27 2019-09-27 Transposed convolution using systolic array
US16/586,764 2019-09-27
PCT/US2020/051787 WO2021061566A1 (en) 2019-09-27 2020-09-21 Transposed convolution using systolic array

Publications (1)

Publication Number Publication Date
DE112020004625T5 true DE112020004625T5 (de) 2022-08-04

Family

ID=75161559

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020004625.7T Pending DE112020004625T5 (de) 2019-09-27 2020-09-21 Transponierte faltung mit systolischem array

Country Status (4)

Country Link
US (2) US11681902B2 (de)
CN (1) CN114430837A (de)
DE (1) DE112020004625T5 (de)
WO (1) WO2021061566A1 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112334915A (zh) * 2018-06-25 2021-02-05 奥林巴斯株式会社 运算处理装置
TWI727641B (zh) * 2020-02-03 2021-05-11 華邦電子股份有限公司 記憶體裝置及其操作方法
KR20210101903A (ko) * 2020-02-11 2021-08-19 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20210105053A (ko) * 2020-02-18 2021-08-26 에스케이하이닉스 주식회사 연산 회로 및 그것을 포함하는 딥 러닝 시스템
US11520853B2 (en) * 2020-02-28 2022-12-06 Meta Platforms, Inc. Mapping convolution to a partition channel convolution engine
CN113570028A (zh) * 2020-04-28 2021-10-29 超威半导体公司 用于在神经网络中处理数据的静态生成的经编译表示
GB2599098B (en) * 2020-09-22 2024-04-10 Imagination Tech Ltd Hardware implementation of windowed operations in three or more dimensions
TW202247046A (zh) * 2021-05-19 2022-12-01 神盾股份有限公司 基於卷積運算的資料處理方法及電路
CN117642738A (zh) * 2021-09-24 2024-03-01 英特尔公司 加速卷积的方法和装置
CN114090956A (zh) * 2021-11-18 2022-02-25 深圳市比昂芯科技有限公司 一种矩阵数据处理方法、装置、设备及存储介质
US11953966B1 (en) * 2021-11-22 2024-04-09 Meta Platforms Technologies, Llc Data-driven column-wise clock gating of systolic arrays
CN114792132B (zh) * 2022-06-22 2022-11-29 苏州浪潮智能科技有限公司 一种脉冲神经网络加速计算系统、方法、设备及介质
CN114995782B (zh) * 2022-08-03 2022-10-25 上海登临科技有限公司 数据处理方法、装置、设备和可读存储介质
CN115374935B (zh) * 2022-09-15 2023-08-11 重庆大学 一种神经网络的剪枝方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US11386644B2 (en) 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
KR20190051697A (ko) * 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US10678508B2 (en) 2018-03-23 2020-06-09 Amazon Technologies, Inc. Accelerated quantized multiply-and-add operations
CN112308107A (zh) * 2019-07-25 2021-02-02 智力芯片有限责任公司 可重构和时间编码卷积尖峰神经网络中基于事件的特征分类
US11449739B2 (en) * 2019-08-22 2022-09-20 Google Llc General padding support for convolution on systolic arrays

Also Published As

Publication number Publication date
CN114430837A (zh) 2022-05-03
US20210097375A1 (en) 2021-04-01
US11681902B2 (en) 2023-06-20
WO2021061566A1 (en) 2021-04-01
US11954583B2 (en) 2024-04-09
US20230306249A1 (en) 2023-09-28

Similar Documents

Publication Publication Date Title
DE112020004625T5 (de) Transponierte faltung mit systolischem array
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
DE112020003127T5 (de) Erweiterung von dynamischem Verarbeitungselement-Array
DE112020003066T5 (de) Transponierungsoperationen mit verarbeitungselementarray
DE202017103725U1 (de) Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102017121257A1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE102017124573A1 (de) Systeme und verfahren zum beschneiden von neuronalen netzen für eine betriebsmitteleffiziente folgerung
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102019133028A1 (de) Für neuronale netzwerke geeignetes effizientes matrixformat
DE202017104127U1 (de) Superpixel für faltende neuronale Netze
DE102020122943A1 (de) Hardware-basierte beschleunigung eines optischen flusses
US11500958B2 (en) Method and apparatus for performing convolution operation on folded feature data
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE102017113867A1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE112020005789T5 (de) Hierarchische partitionierung von operatoren
DE102021107509A1 (de) Multi-modell-trainingspipeline in verteilten systemen
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102020118860A1 (de) Techniken zum vorladen von texturen beim rendering von graphik
DE102021107586A1 (de) Spekulatives training unter verwendung der aktualisierung partieller gradienten
DE102022105748A1 (de) Effiziente optimierung für den einsatz und die ausführung neuronaler netze
DE102018114799A1 (de) Halbüberwachtes lernen zur orientierungspunktlokalisierung
DE102023105565A1 (de) VERFAHREN UND VORRICHTUNG FÜR EFFIZIENTEN ZUGRIFF AUF MEHRDIMENSIONALE DATENSTRUKTUREN UND/ODER ANDERE GROßE DATENBLÖCKE

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: ZACCO LEGAL RECHTSANWALTSGESELLSCHAFT MBH, DE