DE112018002566T5 - Verfahren, systeme und vorrichtungen zur verbesserung der faltungseffizienz - Google Patents

Verfahren, systeme und vorrichtungen zur verbesserung der faltungseffizienz Download PDF

Info

Publication number
DE112018002566T5
DE112018002566T5 DE112018002566.7T DE112018002566T DE112018002566T5 DE 112018002566 T5 DE112018002566 T5 DE 112018002566T5 DE 112018002566 T DE112018002566 T DE 112018002566T DE 112018002566 T5 DE112018002566 T5 DE 112018002566T5
Authority
DE
Germany
Prior art keywords
dpe
exemplary
folding
dpes
load
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
DE112018002566.7T
Other languages
English (en)
Inventor
Sean POWER
David Moloney
Brendan BARRY
Fergal CONNOR
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.)
Movidius Ltd Ireland
Movidius Ltd Netherland
Original Assignee
Movidius Ltd Ireland
Movidius Ltd Netherland
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 Movidius Ltd Ireland, Movidius Ltd Netherland filed Critical Movidius Ltd Ireland
Publication of DE112018002566T5 publication Critical patent/DE112018002566T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • 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
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/95Hardware or software architectures specially adapted for image or video understanding structured as a network, e.g. client-server architectures

Landscapes

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

Abstract

Verfahren, Vorrichtungen, Systeme und Herstellungsgegenstände sind offenbart, die die Faltungseffizienz neuronaler Faltungsnetze verbessern. Eine beispielhafte Vorrichtung umfasst eine Datenverarbeitungselement (DPE)-Verzeichnis-Engine zum Identifizieren von DPEs, die in einem einer Plattform zur Verfügung stehenden DPE-Anordnung enthalten sind, einen Modusselektor zum Bestimmen einer Faltungsanordnung der identifizierten DPEs, einen DPE-Konfigurationsoptimierer zum Bestimmen einer DPE-Auslastung basierend auf den identifizierten DPEs, und eine Faltungs-Engine, um einen Faltungsvorgang unter Verwendung der identifizierten DPEs zu ermöglichen, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erfüllt.

Description

  • Dieses Patent ergibt sich aus einer Anmeldung, die den Vorteil der U.S. Provisional Patent Application Serial No. 62/508,896 beansprucht und am 19. Mai 2017 eingereicht wurde. Die U.S. Provisional Patent Application Serial No. 62/508,896 wird hierin durch Verweis in ihrer Gesamtheit aufgenommen. Die Priorität der U.S. Provisional Patent Application Serial No. 62/508,896 wird hiermit beansprucht.
  • FELD DER OFFENBARUNG
  • Diese Offenbarung bezieht sich allgemeinen auf Bildverarbeitung und insbesondere auf Verfahren, Systeme und Vorrichtungen zur Verbesserung der Faltungseffizienz.
  • HINTERGRUND
  • In den letzten Jahren ist die Nachfrage nach Bildverarbeitungsfunktionen über leistungsstarke dedizierte Desktop-Hardware hinausgegangen und zu einer Erwartung für persönliche und/oder anderweitig mobile Geräte geworden. Mobile Geräte beinhalten typischerweise Verarbeitungsmöglichkeiten, die durch Größenbeschränkungen, Temperaturmanagements-beschränkungen und/oder Stromversorgungsbeschränkungen begrenzt sind.
  • Figurenliste
    • 1 veranschaulicht eine beispielhafte Faltungsoperation eines exemplarischen Eingangsvolumens und eines exemplarischen Ausgangsvolumens unter Anwendung einer Faltung.
    • 2 veranschaulicht ein Beispiel für eine Mehrkanal-Faltungsoperation auf Basis einer „je Ausgangsposition“.
    • 3 veranschaulicht eine schematische Darstellung eines exemplarischen Pooling-Vorgangs.
    • 4 veranschaulicht eine schematische Darstellung eine beispielhafte vollständig verbundene Operation.
    • 5 veranschaulicht ein Blockdiagramm eines exemplarischen Beschleunigers für ein neuronales Faltungsnetzwerk (CNN).
    • 6 veranschaulicht ein Beispiel für ein Datenpfad- oder Datenverarbeitungselement (DPE).
    • 7 ist eine Veranschaulichung eines exemplarischen Koeffizientenspeichers.
    • 8 ist eine beispielhafte Tabelle, die ein exemplarisches Adressierungsmodell für einen exemplarischen Koeffizientenspeicher darstellt.
    • 9 ist eine beispielhafte Tabelle, die ein exemplarisches Adressierungsmodell für einen exemplarischen Koeffizientenspeicher auf Basis von Nicht-FP16-Formaten darstellt.
    • 10 veranschaulicht eine exemplarische Faltungsoperation zur Umsetzung der hierin offenbarten Beispiele.
    • 11 veranschaulicht eine beispielhafte Operation eines exemplarischen Verbindungsmultiplexers anhand einer exemplarischen 1*256-Faltungsanordnung.
    • 12 veranschaulicht eine beispielhafte Operation eines exemplarischen Verbindungsmultiplexers anhand einer exemplarischen 2*128-Faltungsanordnung.
    • 13 ist ein Blockdiagramm einer beispielhaften Implementierung eines anderen exemplarischen CNN-Beschleunigers zur Implementierung des exemplarischen CNN-Beschleunigers von 5.
    • 14 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen steht, die ausgeführt werden können, um den CNN-Beschleuniger von 5 und/oder den CNN-Beschleuniger von 13 zu implementieren, um Bilddaten zu verarbeiten, die einem Eingangsbild zugeordnet sind.
    • 15 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen steht, die ausgeführt werden können, um den CNN-Beschleuniger von 5 und/oder den CNN-Beschleuniger von 13 zu implementieren, um einen Faltungsvorgang mit optionalem Pooling durchzuführen.
    • 16 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen steht, die ausgeführt werden können, um den CNN-Beschleuniger von 5 und/oder den CNN-Beschleuniger von 13 zu implementieren, um eine überlappende Poolingoperation durchzuführen.
    • 17 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen steht, die ausgeführt werden können, um den CNN-Beschleuniger von 5 und/oder den CNN-Beschleuniger von 13 zu implementieren, um eine vollständig verbundene Operation durchzuführen.
    • 18 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen steht, die ausgeführt werden können, um den CNN-Beschleuniger von 5 und/oder den CNN-Beschleuniger von 13 zu implementieren, um einen exemplarischen Akkumulator zu konfigurieren.
    • 19 ist ein Blockdiagramm einer exemplarischen Prozessorplattform, die so strukturiert ist, dass sie die exemplarischen maschinenlesbaren Anweisungen der 14-18 zur Implementierung des exemplarischen CNN-Beschleunigers von 13 ausführt.
  • Die Figuren sind nicht maßstabsgetreu. Im Allgemeinen werden in den Figuren und in der dazugehörigen schriftlichen Beschreibung dieselben Referenznummern verwendet, um auf dieselben oder ähnliche Teile zu verweisen.
  • DETAILLIERTE BESCHREIBUNG
  • Typische Computersysteme, einschließlich persönlicher und/oder anderweitig mobiler Geräte, verwenden fortschrittliche Bildverarbeitungsalgorithmen oder Algorithmen zum maschinellen Sehen, um Aufgaben zu automatisieren, die menschliche visuelle Systeme ausführen können. Zu den Aufgaben der Bildverarbeitung gehören das Erfassen, Verarbeiten, Analysieren und Verstehen von digitalen Bildern, was zum Teil die Extraktion von Maßangaben aus den digitalen Bildern zur Erzeugung numerischer und/oder symbolischer Informationen erleichtert. Algorithmen zum maschinellen Sehen können die numerischen und/oder symbolischen Informationen verwenden, um Entscheidungen zu treffen und/oder anderweitig Operationen durchzuführen, die unter anderem mit dreidimensionaler (3D-)Einschätzung der räumlichen Lage, Ereigniserkennung, Objekterkennung, Videoüberwachung usw. verbunden sind.
  • Fortgeschrittene Bildverarbeitungsalgorithmen oder Algorithmen zum maschinellen Sehen können ein neuronales Faltungsnetzwerk (CNN, oder ConvNet) verwenden. Ein CNN ist ein tiefes, künstliches neuronales Netzwerk, das typischerweise verwendet wird, um Bilder zu klassifizieren, die Bilder nach Ähnlichkeit zu gruppieren (z.B. eine Fotosuche) und eine Objekterkennung innerhalb der Bilder mittels Faltung durchzuführen. Wie hierin verwendet, bezieht sich die Faltung auf eine Funktion, die von zwei gegebenen Funktionen durch Integration abgeleitet ist, die ausdrückt, wie eine Form einer der Funktionen durch eine Form der anderen Funktion verändert wird. So kann beispielsweise ein CNN verwendet werden, um Gesichter, Personen, Straßenschilder, Tiere usw. zu identifizieren, die in einem Eingangsbild enthalten sind, indem ein oder mehrere Filter, die einem Bildmerkmal entsprechen (z.B. eine horizontale Linie, eine zweidimensionale (2-D-)Form usw.), über das Eingangsbild geführt werden, um Übereinstimmungen des Bildmerkmals innerhalb des Eingangsbildes zu identifizieren.
  • In einigen Beispielen nehmen CNNs Bilder auf und/oder verarbeiten sie anderweitig als Tensoren, die Matrizen von Zahlen mit zusätzlichen Dimensionen sind. So kann beispielsweise ein CNN ein Eingangsbild erhalten, das durch 3D-Tensoren dargestellt wird, wobei eine erste und eine zweite Dimension einer Breite und einer Höhe einer Matrix entsprechen und eine dritte Dimension einer Tiefe der Matrix entspricht. So kann beispielsweise die Breite und Höhe der Matrix einer Breite und einer Höhe eines Eingangsbildes entsprechen und die Tiefe der Matrix einer Farbtiefe (z.B. einer Farbschicht) oder einer Farbkodierung des Bildes (z.B. einer Rot-Grün-Blau (RGB) Kodierung).
  • Im Vergleich zu neuronalen Netzen skalieren CNNs gut bis zu Vollbildern. Zum Beispiel empfängt ein typisches neuronales Netzwerk eine Eingabe (z.B. einen einzelnen Vektor) und transformiert die Eingabe durch eine Reihe von versteckten Schichten, wobei jede versteckte Schicht einen Satz von Neuronen enthält, wobei jedes Neuron vollständig mit allen Neuronen in der vorherigen Schicht verbunden ist und wobei Neuronen in einer einzelnen Schicht völlig unabhängig funktionieren und keine Verbindungen teilen. In solchen Beispielen kann das typische neuronale Netzwerk ein Bild von 200x200x3 (z.B. 200 Pixel x 200 Pixel x 3 Farbtiefen) in 120.000 Gewichte übersetzen, wobei jedes Gewicht mehr als ein Neuron haben kann. So kann beispielsweise das Bild drei Eingangskanäle aufweisen, die jeweils einer Farbtiefe entsprechen, wobei jeder Eingangskanal eine Abmessung von 200 Pixel x 200 Pixel hat.
  • Ein typischer CNN kann auch eine Eingabe empfangen und die Eingabe durch eine Reihe von versteckten Schichten transformieren. So kann beispielsweise ein CNN eine Vielzahl von Faltungsschichten, Pooling-Schichten und/oder vollständig verbundenen Schichten aufweisen. In solchen Beispielen kann ein CNN eine Vielzahl von Schichttripeln aufweisen, einschließlich einer Faltungsschicht, einer Pooling-Schicht und einer vollständig verbundenen Schicht. In einigen Beispielen weist ein CNN eine Vielzahl von Faltungs- und Pooling-Schichtpaaren auf, die an eine oder mehrere vollständig verbundene Schichten ausgeben. In einigen Beispielen kann ein CNN 20 Schichten, 30 Schichten usw. beinhalten.
  • Eine Faltungsschicht wendet eine Faltungsfunktion oder -operation an, um Bilder einer Eingangs-(vorherigen) Schicht der nächsten Schicht in einem CNN zuzuordnen. Die Faltung ist 3-D, da jede Eingangsschicht mehrere Eingangsmerkmale (z.B. Eingangskanäle) aufweisen kann, die einem Eingangsbild zugeordnet sind. Die Faltungsschicht führt eine Faltung durch, indem sie in jedem einzelnen Eingangskanal ein regionales Filterfenster bildet und Ausgangsdaten oder Aktivierungen erzeugt, indem sie ein Produkt aus (1) einem dem regionalen Filterfenster zugeordneten Filtergewicht und (2) den vom regionalen Filterfenster abgedeckten Eingangsdaten berechnet. So kann beispielsweise ein Ausgabemerkmal eines Eingangsbildes bestimmt werden, indem der Faltungsfilter verwendet wird, um eine Vielzahl von Eingangskanälen einschließlich einer Vielzahl der regionalen Filterfenster zu scannen.
  • Eine Pooling-Schicht extrahiert Informationen aus einer Reihe von Aktivierungen in jedem Ausgabekanal. Die Pooling-Schicht kann eine Maximum Poolingoperation durchführen, die einer Maximum Pooling-Schicht entspricht, oder eine Durchschnitt Poolingoperation, die einer Durchschnitt Pooling-Schicht entspricht. Die Maximum Poolingoperation beinhaltet die Auswahl eines Maximalwerts von Aktivierungen innerhalb eines Pooling-Fensters. Die Durchschnitt Poolingoperation beinhaltet das Berechnen eines Durchschnittswerts der Aktivierungen innerhalb des Pooling-Fensters.
  • Eine vollständig verbundene Schicht erhält die von der/den Faltungsschicht(en) und/oder der/den Pooling-Schicht(en) berechneten Daten und klassifiziert die Daten in eine oder mehrere Klassen. Die vollständig verbundene Schicht bestimmt, ob die klassifizierten Daten einem bestimmten Bildmerkmal des Eingangsbildes entsprechen. So kann beispielsweise die vollständig verbundene Schicht bestimmen, ob die klassifizierten Daten einem einfachen Bildmerkmal (z.B. einer horizontalen Linie) oder einem komplexeren Bildmerkmal wie einem Tier (z.B. einer Katze) entsprechen.
  • In einigen Fällen führt ein CNN eine Nachbearbeitung durch, wie z.B. eine Operation durch eine parametrische gleichrichtende Lineareinheit (Parametric Rectified Linear Unit PReLU) oder eine Operation durch eine gleichrichtende Lineareinheit (Rectified Linear Unit ReLU), die nach einer Faltungsschicht, einer Pooling-Schicht usw. eingeleitet wird. Eine PReLU-Betrieb und eine ReLU-Operation entsprechen Aktivierungsfunktionen, die auf die Ausgänge der CNN-Neuronen angewendet werden. Nachdem beispielsweise ein CNN eine Ausgabe aus einer Faltungsschicht, einer Pooling-Schicht usw. erzeugt hat, kann die PReLU-Operation oder die ReLU-Operation die Anwendung einer elementweisen Aktivierungsfunktion auf die Aktivierung beinhalten. So kann beispielsweise eine PReLU-Operation das Multiplizieren und/oder anderes Skalieren der Aktivierung mit einem ersten PReLU-Parameter beinhalten, wenn die Ausgabe kleiner als ein PReLU-Basisparameter ist. In anderen Fällen kann die PReLU-Operation das Multiplizieren und/oder anderes Skalieren der Aktivierung mit einem zweiten PReLU-Parameter beinhalten, wenn die Aktivierung größer als der PReLU-Basisparameter ist. Eine ReLU-Operation kann die Anwendung einer Maximumfunktion auf die Aktivierung beinhalten, wobei die ReLU-Operation einen Maximumwert zwischen Null und der Aktivierung zurückgibt. In solchen Fällen kann die ReLU-Operation das Setzen negativer Elemente auf Null beinhalten und somit den Lernvorgang des CNN beschleunigen, indem zusätzliche Exponential-, Multiplikations- oder Divisionsoperation auf der Aktivierung eliminiert und/oder anderweitig vermieden werden.
  • Die verborgenen Schichten des CNN können jedoch Neuronen haben, die in drei Dimensionen angeordnet sind, einschließlich Breite, Höhe und Tiefe. Jedes der Neuronen in einer Schicht des CNN ist nur mit einem Abschnitt (z.B. einem relativ kleinen Bereich (z.B. einer 2x2 Aktivierungskarte, einer 3x3 Aktivierungskarte, etc.)) der vorhergehenden Schicht verbunden. Im Vergleich zu einem typischen neuronalen Netzwerk, bei dem alle Neuronen einer Schicht mit allen Neuronen einer vorhergehenden Schicht verbunden sind, führen Neuronen einer CNN-Schicht aufgrund der wesentlich geringeren Anzahl von Verbindungen zwischen Schichten zu wesentlich weniger Gewichten.
  • Die hierin offenbarten Beispiele verbessern die Effizienz von CNN-Operationen. Ein hierin offenbartes Beispiel eines CNN-Beschleunigers implementiert mehrkanalige CNN-Matrix-Matrix-Faltungen mit optionalem, nicht überlappendem Maximum und Durchschnitt Pooling auf jeder Schicht, einschließlich vollständig verbunden, mit optionalem PReLU/ReLU/ ReLU-X und Per-Aktivierung-Skalierung und Bias. Im Vergleich zu früheren Implementierungen, die einzelne Faltungsoperationen nacheinander durchführten, führen die hierin offenbarten CNN-Beschleuniger eine Vielzahl von Faltungsoperationen im Wesentlichen parallel durch. Darüber hinaus kann der exemplarische CNN-Beschleuniger überlappende Poolingoperationen (z.B. Maximum Pooling, Durchschnitt-Pooling, usw.) implementieren.
  • 1 veranschaulicht eine exemplarische Faltungsoperation 100 eines exemplarischen Eingangsvolumens 102 und eines exemplarischen Ausgangsvolumens 104 unter Verwendung der Faltung. Das exemplarische Eingabevolumen 102 von 1 entspricht einem exemplarischen Eingangsbild (z.B. ein Foto, ein Videobild, etc.) 106, das durch Pixelwerte dargestellt wird, die in multidimensionalen Matrizen gespeichert sind. So kann beispielsweise das Eingangsbild 106 von einer Vorrichtung wie einer Kamera oder aus einem Speicher (z.B. nichtflüchtiger Speicher, flüchtiger Speicher usw.) abgerufen werden. Das exemplarische Eingangsvolumen 102 beinhaltet einen Satz von exemplarischen Eingangskanälen (C1, CC, etc.) 110, 112, die eine mehrdimensionale Matrix darstellen. Das exemplarische Eingangsvolumen 102 wird durch X x Y x C dargestellt, wobei X und Y die Abmessungen jedes der exemplarischen Eingangskanäle 110, 112 in exemplarischen Pixeln 108 sind und C eine Anzahl von Eingangskanälen oder eine Tiefe des Eingangsvolumens 102 darstellt. Jedes der Beispielpixel 108 wird durch eine Zahl dargestellt. So kann beispielsweise die Zahl einer Intensität einer Farbe (z.B. einer Intensität von Rot, Grün oder Blau) des Pixels 108 entsprechen.
  • In dem veranschaulichten Beispiel von 1 beinhaltet das Eingabevolumen 102 eine Vielzahl von mehrdimensionalen Matrizen, darunter den ersten Kanal 110 mit den Abmessungen X und Y und den C-Kanal 112 mit den Abmessungen X und Y. In einigen Beispielen entspricht die Anzahl der Eingabekanäle C einer Farbkodierung des Eingangsbildes (z.B. eine Rot-Grün-Blau (RGB)-Kodierung). So kann beispielsweise das Eingangsvolumen 102 dem Eingangsbild 106 mit einer Größe von 200x200x3 entsprechen, wobei das Eingangsbild 106 200 Pixel hoch (z.B. Y = 200), 200 Pixel breit (z.B. X = 200) ist und 3 kodierte Farben (z.B. C = 3) aufweist.
  • Im veranschaulichten Beispiel von 1 wird das Ausgangsvolumen 104 erzeugt, indem das Eingangsvolumen 102 mit exemplarischen Filtern, wie beispielsweise einem ersten exemplarischen Filter (FILTER 1) 114 und einem zweiten exemplarischen Filter (FILTER K) 116, gefaltet wird. Die exemplarischen Filter 114, 116 von 1 entsprechen den Bildmerkmalen. Ein Bildmerkmal kann beispielsweise eine horizontale Linie, eine vertikale Linie, eine diagonale Linie usw. sein, die in dem Eingangsbild 106 enthalten sein kann. Alternativ werden die exemplarischen Filter 114, 116 als Merkmalsdetektoren oder Kernel bezeichnet. In dem veranschaulichten Beispiel von 1 sind die Filter 114, 116 mehrdimensionale Matrizen der Abmessungen Fw, Fh, C, wobei Fw eine Breite der Filter 114, 116 in Koeffizienten oder Gewichten darstellt (z.B. erste Koeffizienten 118, die dem ersten Filter 114 zugeordnet sind, zweite Koeffizienten 120, die dem zweiten Filter 116 zugeordnet sind, usw.), Fh eine Höhe der Filter 114, 116 in Koeffizienten 118, 120 darstellt und C eine Tiefe der Filter 114, 116 darstellt. Im veranschaulichten Beispiel von 1 entspricht die Tiefe des Eingangsvolumens 102 der Tiefe der Filter 114, 116. So ist beispielsweise die Anzahl der Filterkanäle gleich der Anzahl der durch C dargestellten Eingangskanäle. Die Beispielkoeffizienten 118, 120 stellen lernfähige Werte dar, die angepasst werden können, um die im exemplarischen Eingangsbild 106 enthaltenen Bildmerkmale zu identifizieren.
  • Im veranschaulichten Beispiel von 1 sind die jeweiligen Kanäle (z.B. C1, C2, CC, etc.) der Filter 114, 116 eine 3x3-Matrix mit neun beispielhaften Koeffizienten 118, 120. Alternativ können die Kanäle der exemplarischen Filter 114, 116 eine unterschiedliche Matrixgröße mit einer unterschiedlichen Anzahl von Koeffizienten aufweisen. In dem veranschaulichten Beispiel von 1 beinhaltet der erste Filter (FILTER 1) 114 die ersten Koeffizienten 118 und der zweite Filter (FILTER K) 116 beinhaltet die zweiten Koeffizienten 120, wobei die ersten Koeffizienten 118 von den zweiten Koeffizienten 120 verschieden sind. Alternativ können einer oder mehrere der ersten Beispielkoeffizienten 118 und einer oder mehrere der zweiten Beispielkoeffizienten 120 gleich sein. Im veranschaulichten Beispiel von 1 beinhalten die Filter 114, 116 unterschiedliche Koeffizienten für jeden Kanal. Im veranschaulichten Beispiel von 1 verwendet die Faltungsoperation 100 die K-Filter 114, 116. So kann beispielsweise die Faltungsoperation 100 50 Filter (z.B. K = 50), 100 Filter (z.B. K = 100) usw. verwenden.
  • Im Betrieb werden exemplarische Ausgangspositionen 122 oder auch Ausgabepositionen 122 erzeugt, indem ein Skalarprodukt aus exemplarischen Eingangskanalabschnitten 124 und den exemplarischen Filtern 114, 116 durchgeführt wird. In einem typischen CNN können Ausgangspositionen wie die exemplarischen Ausgangspositionen 122 auch als Aktivierungen bezeichnet werden. So kann beispielsweise der Faltungsvorgang 100 ein Berechnen eines ersten Skalarprodukts aus einem ersten Filterkanal des ersten Filters 114 und dem Eingangskanalabschnitt 124 des ersten Eingangskanals 110 beinhalten. Die exemplarische Faltungsoperation 100 kann ein Berechnen eines zweiten Skalarprodukts eines zweiten Filterkanals des ersten beispielhaften Filters 114 und des exemplarischen Eingangskanalabschnitts 124 des zweiten exemplarischen Eingangskanals 112 beinhalten. Zusätzliche Skalarprodukte werden berechnet, bis für jeden der Eingangskanäle 124 ein Skalarprodukt berechnet wurde.
  • In dem veranschaulichten Beispiel von 1 werden C Skalarprodukte für jeden der Ausgangspositionen 122 basierend auf den Filtern 114, 116 mit jeweils einer Tiefe C berechnet. In solchen Beispielen wird die Ausgangsposition 122 eines ersten exemplarischen Ausgabekanals (K1) 126 der exemplarischen Ausgabekanäle 128 berechnet, indem eine Summe aus dem ersten Skalarprodukt, dem zweiten Skalarprodukt usw. bis zu C Skalarprodukten bestimmt wird. In einem typischen CNN können Ausgabekanäle wie der erste exemplarische Ausgabekanal 126 auch als Aktivierungskarte, Merkmalskarte oder ein Faltungsmerkmal bezeichnet werden.
  • Als Reaktion auf das Berechnen der exemplarischen Ausgangsposition 122 des ersten exemplarischen Ausgabekanals 126 werden Skalarprodukte für einen zweiten exemplarischen Eingangskanalabschnitt 130, einen dritten exemplarischen Eingangskanalabschnitt 132 usw. berechnet, bis eine Gesamtheit des ersten exemplarischen Eingangskanals 110 verarbeitet ist. Als Reaktion auf die Verarbeitung einer Gesamtheit des ersten exemplarischen Eingangskanals 110 fährt der exemplarische Faltungsvorgang 100 fort, die oben beschriebene Operation für jeden der verbleibenden Eingangskanäle (z.B. C2, C3 usw., bis CC) durchzuführen, um entsprechende der exemplarischen Ausgangskanäle 128 zu erzeugen.
  • Im veranschaulichten Beispiel von 1 greift der Faltungsvorgang 100 nur einmal auf die Eingangskanalabschnitte 124 zu. Wird der erste exemplarische Ausgangskanal 122 betrachtet, so müssen nur die Eingangsdaten und die zugehörige Filterung gelesen werden und können für alle nachfolgenden Ausgangskanäle 128 wiederholt werden, jedoch mit entsprechend unterschiedlichen Filtern. Durch die parallele und nicht sequentielle Ausführung der exemplarischen Faltungsoperation 100 wird eine Menge an benötigten Daten reduziert. Mehrere Kanäle von Eingangsdaten werden mit den entsprechenden Beispielfiltern 114, 116 gefaltet, um die exemplarischen Ausgangspositionen 122 für eine Vielzahl der exemplarischen Ausgangskanäle 128 parallel zu erzeugen, die in einigen Beispielen jeweils optional gepoolt werden.
  • 2 veranschaulicht ein Beispiel für eine mehrkanalige Faltungsoperation 200 auf der Basis von „je Ausgangsposition“. Die mehrkanalige Faltungsoperation 200 kann beispielsweise auf Basis je Aktivierung durchgeführt werden. Die beispielhafte mehrkanalige Faltungsoperation 200 von 2 stellt eine exemplarische Faltungsschicht eines exemplarischen CNN dar (z.B. ein CNN-Beschleuniger, ein CNN-Hardwarebeschleuniger, etc.). Zum Beispiel kann die mehrkanalige Faltungsoperation 200 Aktivierungen für eine Pooling-Schicht bereitstellen, die wiederum Aktivierungen für eine vollständig verbundene Schicht (z.B. eine nichtlineare Schicht) oder eine andere Faltungsschicht bereitstellen kann. In solchen Beispielen kann die vollständig verbundene Schicht Aktivierungen für ein anderes Schichttriplett bereitstellen, einschließlich einer weiteren Faltungs-, Poolings- und vollständig verbundenen Schicht.
  • Im veranschaulichten Beispiel von 2 werden exemplarische Eingabedaten 202 mit den Dimensionen X in Spalten oder Wörtern (z.B. 16-Bit-Wörter) und Y in Zeilen mit einer Vielzahl von exemplarischen Filtern 204 der Dimensionen Fw und Fh gefaltet, wobei Fw und Fh beide drei (3) sind. So können beispielsweise die Eingabedaten 202 aus dem Eingangsbild 106 von 1 und/oder aus einem Speicher bezogen werden. In dem veranschaulichten Beispiel von 2 beinhalten die Eingabedaten 202 L Beispielzeilen 206 von lokal gespeicherten Daten für eine Vielzahl von zu faltenden Eingangskanälen. Im veranschaulichten Beispiel von 2 wird für jeden Eingangskanal ein Teil der Zeilen 206 gespeichert. In einigen Beispielen beinhalten die Zeilen 206 alle Daten für einen Eingangskanal, während in anderen Beispielen die Zeilen 206 einen Teil der Daten für den Eingangskanal beinhalten.
  • Im veranschaulichten Beispiel von 2 beinhaltet die mehrkanalige Faltungsoperation 200 das Erzeugen jeder der exemplarischen Ausgangspositionen 208 der exemplarischen Ausgabekanäle 210 im Wesentlichen parallel. So wird beispielsweise eine erste der Datenzeilen 206 unter Verwendung eines ersten der Filter 204 gefaltet, um eine erste der Ausgangspositionen 208 zu erzeugen, die in einem ersten der Ausgabekanäle 210 enthalten sind, und zwar im Wesentlichen parallel zu der ersten der Datenzeilen 206, die unter Verwendung eines zweiten der Filter 204 gefaltet werden, um eine zweite der Ausgangspositionen 208 zu erzeugen, die in einem zweiten der Ausgabekanäle 210 enthalten ist.
  • Im veranschaulichten Beispiel von 2 weist jeder der Ausgangskanäle 210 einen eigenen Akkumulator auf und/oder ist anderweitig mit diesem verbunden (z.B. ein in Hardware und/oder maschinenlesbaren Anweisungen implementierter Akkumulator). In einigen Beispielen wird Maximum Pooling oder Durchschnitt Pooling auf den Ausgabekanälen 210 implementiert, indem eine Vergleichsoperation, eine Speichervorgangsoperation und eine Aufsummierungsoperation auf jedem Element in einem exemplarischen Poolbereich 212 durchgeführt werden und nur das Ergebnis ausgegeben wird.
  • Im veranschaulichten Beispiel von 2 ist der Poolbereich 212 ein 2x2-Bereich der Ausgangspositionen 208. Alternativ kann der exemplarische Poolbereich 212 auch eine andere beliebige Größe haben. So kann beispielsweise eine Poolingoperation beinhalten, dass ein Maximalwert, ein Durchschnittswert usw. der im Poolbereich 212 enthaltenen Werte genommen und der resultierende Maximalwert, der Durchschnittswert usw. ausgegeben wird. In einigen Beispielen beinhaltet die Poolingoperation ein Überlappen. In anderen Beispielen beinhaltet der Pooling-Vorgang kein Überlappen. So kann beispielsweise der Poolbereich 212 keinen anderen Poolbereich überlappen, da jede Position nur einmal gelesen werden muss, wenn die Poolingoperation keine Überlappung beinhaltet.
  • 3 veranschaulicht eine schematische Darstellung einer exemplarischen Poolingoperation 300. Die exemplarische Poolingoperation 300 von 3 stellt eine Pooling-Schicht eines exemplarischen CNN dar. So kann beispielsweise die Poolingoperation 300 Ausgaben für eine vollständig verbundene Schicht des CNN oder eine andere Faltungsschicht des CNN bereitstellen. Im veranschaulichten Beispiel von 3 beinhaltet die Poolingoperation 300 die Verarbeitung der Ausgangskanäle 210 aus der mehrkanaligen Faltungsoperation 200 von 2. Im veranschaulichten Beispiel von 3 haben die Ausgangskanäle 210 die Abmessungen H, W und C, die einer Höhe, Breite und Tiefe der Ausgangskanäle 210 entsprechen.
  • Im veranschaulichten Beispiel von 3 verarbeitet die Poolingoperation 300 den Poolbereich 212 von 2, indem er einen Maximalwert (z.B. Maximumpooling) oder einen Mittelwert (z.B. Durchschnittspooling) des Poolbereichs 212 berechnet und den Maximalwert oder den Mittelwert an jeweiligen der exemplarischen Ausgangspositionen 302 der jeweiligen der exemplarischen gepoolten Ausgabekanäle 304 ausgibt. Im veranschaulichten Beispiel von 3 haben die gepoolten Ausgangskanäle 304 die Abmessungen H, W und C, um den Ausgangskanälen 210 von 2 zu entsprechen.
  • Die exemplarische Poolingoperation 300 von 3 verarbeitet (z.B. iterativ) eine Vielzahl der Poolbereiche 212 basierend auf einem Schritt (z.B. einer Schrittlänge) der Poolingoperation 300. Im veranschaulichten Beispiel von 3 ist die Schrittlänge eine, die dem Poolbereich 212 entspricht, die benachbart um einen Index, eine Spalte usw. verschoben wird (z.B. auf die rechte Seite der Ausgabekanäle 210). Im veranschaulichten Beispiel von 3 ist die Poolingoperation 300 eine überlappender Poolingoperation. So befindet sich beispielsweise der in 3 dargestellte Poolbereich 212 an einer ersten Stelle. Nachdem die ersten der Ausgangspositionen 302 berechnet wurden, wird der Poolbereich 212 an eine zweite Position verschoben, wobei die zweite Position ein Index oder eine Spalte auf der rechten Seite der ersten Position ist, wenn die Schrittlänge eins ist. In solchen Beispielen überlappt die zweite Spalte des Poolbereichs 212 an der ersten Position die erste Spalte des Poolbereichs 212 an der zweiten Position. Die exemplarische Poolingoperation 300 berechnet den Maximalwert oder den Durchschnittswert des Poolbereichs 212 über eine Gesamtheit der Ausgabekanäle 210.
  • 4 veranschaulicht eine schematische Darstellung eines Beispiels für eine vollständig verbundene Operation 400. Das Beispiel der vollständig verbundenen Operation 400 von 4 ist eine vollständig verbundene Schicht eines exemplarischen CNN. So kann beispielsweise die vollständig verbundene Operation 400 Ausgaben für eine weitere CNN-Triplettschicht bereitstellen, einschließlich einer weiteren Faltungs-, einer Poolings- und einer vollständig verbundenen Schicht. In einem CNN hat die vollständig verbundene Schicht vollständige Verbindungen zu allen Aktivierungen in der vorherigen Schicht. Die vollständig verbundene Schicht ist ähnlich wie eine Kanalfaltung, um eine Vektormatrixmultiplikation durchzuführen.
  • Im veranschaulichten Beispiel von 4 ist ein Dateneingang 402 als 1xM-Array und ein Koeffizienten- oder Gewichtsarray 404 von VxM dargestellt. Ein entsprechendes beispielhaftes Ausgabearray 406 hat die Größe 1xV. Jede Spalte (der Größe M) wird mit jedem Element multipliziert, um eine Summe zu erhalten, und dies wird V-mal durchgeführt. In einigen Beispielen wertet das CNN das Ausgabearray 406 aus, um eine prozentuale Wahrscheinlichkeit zu bestimmen, dass ein Bildmerkmal in dem Eingangsbild 106 von 1 enthalten ist. Das CNN kann beispielsweise eine prozentuale Wahrscheinlichkeit dafür bestimmen, dass eine Vielzahl einfacher Bildmerkmale, wie z.B. eine horizontale Linie, eine diagonale Linie usw., im Eingangsbild 106 enthalten sind. In anderen Beispielen kann das CNN eine prozentuale Wahrscheinlichkeit für eine Vielzahl von komplexen Bildmerkmalen bestimmen, wie z.B. eine Katze, ein Hund, ein Elefant usw., die im Eingangsbild 106 enthalten sind.
  • 5 veranschaulicht ein Blockdiagramm eines exemplarischen CNN-Beschleunigers 500. Im veranschaulichten Beispiel von 5 ist der CNN-Beschleuniger 500 eine Plattform (z.B. eine Hardwareplattform) oder ein Hardwarebeschleuniger verwendet zur Beschleunigung von Bildklassifikationsalgorithmen und/oder anderen Arten von Prozessen in Bild- und Videoerkennung, Empfehlungssystemen und natürlicher Sprachverarbeitung. Zusätzlich oder alternativ könnte der CNN-Beschleuniger 500 durch Software implementiert sein, die auf einem Hardwareprozessor ausgeführt wird. Der exemplarische CNN-Beschleuniger 500 implementiert mindestens eine der exemplarischen Faltungsoperationen 100 von 1, die exemplarische mehrkanalige Faltungsoperation 200 von 2, die exemplarische Poolingoperation 300 von 3 oder die vollständig verbundene Operation 400 von 4. In dem veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 eine beispielhafte Steuerung 502, eine beispielhafte Steuerung für direkten Speicherzugriff (DMA) 504, einen beispielhaften Datenspeicher 506, einen beispielhaften Koeffizientenspeicher 508, einen beispielhaften Verbindungsmultiplexer (CONXTN MUX) 510, eine beispielhafte Datenpfadelement bzw. Datenverarbeitungselement (DPE) Anordnung 512, bzw. ein beispielhaftes Datenpfadelement (DPE) Array 512 und einen beispielhaften Ausgangspuffer 514.
  • Im veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 die Steuerung 502, um einen Operationsmodus und einen Operationsablauf des CNN-Beschleunigers 500 zu bestimmen. So kann die Steuerung 502 beispielsweise den CNN-Beschleuniger 500 anweisen, in einem Faltungsmodus (mit optionalem Pooling), einem Pooling-Modus (z.B. einem überlappenden Pooling-Modus) oder einem vollständig verbundenen Modus (z.B. einem nicht-linearen Modus) zu arbeiten. In einigen Beispielen bestimmt die Steuerung 502, ob eine Nachbearbeitungsoperation (z.B. eine PReLU-Operation, eine ReLU-Operation usw.) an einer Ausgabe durchgeführt werden soll, die durch einen oder mehrere Modi erzeugt ist. Die exemplarische Steuerung 502 weist die exemplarische DMA-Steuerung 504 an, Koeffizientendaten und Bilddaten abzurufen, die den Eingangskanälen zugeordnet sind, die gefaltet und/oder anderweitig verarbeitet werden sollen. So kann beispielsweise die Steuerung 502 die DMA-Steuerung 504 anweisen, die Eingabedaten 202 und die den Filtern 204 von 2 zugeordneten Koeffizientendaten aus einem exemplarischen Hauptspeicher 516 abzurufen.
  • In einigen Beispielen konfiguriert die Steuerung 502 eine oder mehrere Komponenten des CNN-Beschleunigers 500 basierend auf dem Modus. So kann beispielsweise die Steuerung 502 den Datenspeicher 506 und/oder den Koeffizientenspeicher 508 konfigurieren, indem sie den Datenspeicher 506 und/oder den Koeffizientenspeicher 508 in einen oder mehrere RAM-Blöcke (Random Access Memory) (z.B. statischer RAM (SRAM), dynamischer RAM (DRAM) usw.) organisiert. In weiteren Beispielen konfiguriert die Steuerung 502 Matrizen des Verbindungsmultiplexers 510, um Daten aus dem Datenspeicher 506 in einer bestimmten Konfiguration, Reihenfolge und/oder Weise zu empfangen (z.B. Empfang einer 1x256, einer 2x128, einer 4x64, etc., Datenmatrix aus dem Datenspeicher 506). In anderen Beispielen konfiguriert die Steuerung 502 die DPE-Anordnung 512 für eine Betrieb in einem Faltungsmodus, einem Pooling-Modus oder einem vollständig verbundenen Modus.
  • In einigen Beispielen bestimmt die Steuerung 502 eine Faltungsanordnung des Faltungsmodus. So kann beispielsweise die Steuerung 502 eine 1x256, eine 2x128, eine 4x64, eine 8x32, etc. Faltungsanordnung des Faltungsmodus bestimmen. So werden beispielsweise in einer 2x128-Faltungsanordnung zwei Ströme von Eingangskanälen nacheinander für eine einzige Position für 128 Ausgangskanäle summiert, wobei das Endergebnis eine Summierung der beiden Ströme ist. In einigen Beispielen bestimmt die Steuerung 502 eine Faltungsanordnung basierend auf dem Bestimmen einer Menge der DPEs 520, die während eines Faltungsvorgangs ungenutzt bleiben.
  • In einem Beispiel, in dem ein Faltungsvorgang 64 Eingangskanäle und 192 Ausgangskanäle erfordert, kann die Steuerung 502 bestimmen, dass eine 4*64-Faltungsanordnung im Vergleich zu einer 1*256-Faltungsanordnung verwendet wird. Durch die Bestimmung der Verwendung der 4*64-Faltungsanordnung kann der CNN-Beschleuniger 500 beispielsweise alle 256 der DPEs 520 nutzen. In solchen Beispielen können die 192 Ausgangskanäle in drei Chargen von 64 Ausgangskanälen verarbeitet werden, wobei jeder der 64 Ausgangskanäle von 4 der DPEs 520 (z.B. 256 DPEs = 4 DPEs * 64 Ausgangskanäle) verarbeitet wird, um eine volle DPE-Auslastung zu erreichen. Durch die Bestimmung der Verwendung der 1*256-Faltungsanordnung hätte der exemplarische CNN-Beschleuniger 500 64 ungenutzte DPEs 520, da die 192 Ausgangskanäle parallel verarbeitet würden, wobei jeder der 192 Ausgangskanäle von 1 DPE 520 verarbeitet wird und somit nur 75% DPE-Auslastung erreicht wird. Die Beispielsteuerung 502 kann bestimmen, die 4*64-Faltungsanordnung zu verwenden, indem sie bestimmt, dass die 4*64-Faltungsanordnung zu einer höheren DPE-Auslastung führt als andere Faltungsanordnungen.
  • In einigen Beispielen bestimmt und/oder in anderer Weise steuert die Steuerung 502 eine Reihenfolge der Operationen des CNN-Beschleunigers 500. So kann beispielsweise die Steuerung 502 eine oder mehrere Datenzeilen des Datenspeichers 506 zur Verarbeitung auswählen, einen oder mehrere Koeffizientenblöcke des Koeffizientenspeichers 508 zur Verarbeitung, etc. Zum Beispiel kann die Steuerung 502 eine Reihenfolge der Operationen des CNN-Beschleunigers 500 steuern, indem sie Adressbefehle erzeugt und/oder anderweitig zu verarbeitende Daten auswählt, indem sie Adressen des Datenspeichers 506, des Koeffizientenspeichers 508 und/oder des Ausgangspuffers 514 auswählt.
  • Im veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 die DMA-Steuerung 504, um Daten aus dem Hauptspeicher 516 eines Computersystems abzurufen. Im veranschaulichten Beispiel von 5 ist der Hauptspeicher 516 DRAM. Alternativ kann der exemplarische Hauptspeicher 516 auch SRAM oder ein anderer Typ von nichtflüchtigem oder flüchtigem Speicher sein. Im veranschaulichten Beispiel von 5 ist die DMA-Steuerung 504 eine Speicherschnittstelle. So fragt beispielsweise die DMA-Steuerung 504 Daten (z.B. Bilddaten, Koeffizientendaten usw.) aus dem Hauptspeicher 516 ab, empfängt und/oder ruft sie anderweitig ab und überträgt die abgerufenen Daten über eine exemplarische Dateneingabeschnittstelle 518 an den Datenspeicher 506, den Koeffizientenspeicher 508 usw..
  • Im veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 den Datenspeicher 506 zum Speichern einer Datenmatrix und zum Bereitstellen von Teilen der Datenmatrix an den Verbindungsmultiplexer 510 zur Verarbeitung. Im veranschaulichten Beispiel von 5 ist der Datenspeicher 506 DRAM. Alternativ kann der Beispieldatenspeicher 506 auch SRAM oder ein anderer Typ von nichtflüchtigem oder flüchtigem Speicher sein. Der exemplarische Datenspeicher 506 beinhaltet 16 Speicherinstanzen, wobei jede Instanz 8kB groß ist, um 128kB im Gesamtspeicher zu erhalten. Der beispielhafte Datenspeicher 506 ist zu 512 Datenzeilen mit 128 Bit pro Datenzeile konfiguriert. Alternativ kann der exemplarische Datenspeicher 506 mit einer anderen Anzahl von Speicherinstanzen, einer anderen Größe der Speicherinstanz, einer anderen Anzahl von Datenzeilen und/oder einer anderen Anzahl von Bits pro Datenzeile konfiguriert werden. Zusätzliche Details, die den exemplarischen Datenspeicher 506 betreffen, werden im Folgenden in Verbindung mit den 11 und/oder 12 beschrieben.
  • Im veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 den Koeffizientenspeicher 508, um eine Datenmatrix von Koeffizienten (z.B. Filterkoeffizienten, Kernelkoeffizienten usw.) zu speichern und Teile der Datenmatrix dem DPE Array 512 bzw. der DPE Anordnung 512 zur Verarbeitung bereitzustellen. In einigen Beispielen speichert der Koeffizientenspeicher 508 einen oder mehrere Biaswerte und/oder einen oder mehrere Skalierungswerte. Im veranschaulichten Beispiel von 5 ist der Koeffizientenspeicher 508 ein DRAM. Alternativ kann der exemplarische Koeffizientenspeicher 508 auch SRAM oder ein anderer Typ von nichtflüchtigem oder flüchtigem Speicher sein. Zusätzliche Details, die dem Beispiel Koeffizientenspeicher 508 entsprechen, werden im Folgenden in Verbindung mit den 7, 8 und/oder 9 beschrieben.
  • Im veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 den Verbindungsmultiplexer 510, um Teile der im Datenspeicher 506 gespeicherten Daten auszuwählen. In einigen Beispielen wählt der Verbindungsmultiplexer 510 Daten aus dem Datenspeicher 506 basierend auf der Faltungsanordnung des CNN-Beschleunigers 500 aus. Zum Beispiel kann der Verbindungsmultiplexer 510 als Reaktion auf die Steuerung 502, die den CNN-Beschleuniger 500 konfiguriert, um basierend auf einer 2x128-Faltungsanordnung zu arbeiten, zwei Sätze von 128 Floating Point (FP) 16-Bit (FP16)-Wörtern (z.B. 2x128 FP16-Wörter) aus dem Datenspeicher 506 auswählen und die 256 FP16-Wörter zur Verarbeitung an die DPE-Anordnung 512 senden.
  • In dem veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 die DPE-Anordnung 512, um eine oder mehrere Faltungsoperationen, eine oder mehrere Poolingoperationen oder eine oder mehrere vollständig verbundene Operationen durchzuführen. In einigen Beispielen führt das DPE-Array 512 Nachbearbeitungsoperationen durch, wie z.B. Bias-Operationen, parametrische gleichgerichtete Lineareinheiten (PReLU), gleichgerichtete Lineareinheiten (ReLU) (z.B. ReLU-X-Operationen) oder Skalierungsoperationen. In solchen Beispielen führt die DPE-Anordnung 512 eine der Operationen (z.B. den Faltungsvorgang usw.) oder eine der Nachbearbeitungen basierend auf einem Befehl, einer Anweisung usw. durch, der von der Steuerung 502 empfangen wird. In dem veranschaulichten Beispiel von 5 beinhaltet die DPE-Anordnung 512 256 exemplarische DPEs 520, wobei jede der 256 DPEs 520 eine Operation (z.B. eine Faltungsoperation, eine Poolingoperation usw.), eine Nachbearbeitungsoperation (z.B. eine PReLU-Operation, eine ReLU-Operation usw.) usw. im Wesentlichen parallel zu den anderen DPEs 520 der DPE-Anordnung 512 durchführen kann. Alternativ können auch weniger oder mehr als die in 5 dargestellten 256 DPEs 520 verwendet werden. Zusätzliche Details, die die DPEs 520 betreffen, werden im Folgenden in Verbindung mit 6 beschrieben.
  • In dem veranschaulichten Beispiel von 5 beinhaltet der CNN-Beschleuniger 500 den exemplarischen Ausgangspuffer 514, um Ausgaben aus der DPE-Anordnung 512 zu speichern und die Ausgaben zur weiteren Verarbeitung an eine externe Rechenvorrichtung, Hardware, System usw. zu übertragen. Der exemplarische Ausgangspuffer 514 von 5 beinhaltet separate Lese- und Schreibports. Der exemplarische Ausgangspuffer 514 hat 256 Kanäle, wobei jeder der Kanäle ein 16-Bit-Ein/Ausgangs-(I/O)-Kanal ist. Der exemplarische Ausgabepuffer 514 ist eine Instanz eines 8 Kilobyte (kB)-Speicher, der als 2x8*4096bit-Datenmatrix konfiguriert ist. Der Ausgangspuffer 514 arbeitet beispielsweise als Ping-Pong-Puffer. Alternativ kann der exemplarische Ausgabepuffer 514 mehr als eine Instanz und/oder weniger oder mehr als 8 kB Speicherplatz beinhalten. Alternativ kann der exemplarische Ausgabepuffer 514 in jeder beliebigen anderen Konfiguration konfiguriert werden (z.B. 4x4*4096bit Datenmatrizen, 8x2*4096bit Datenmatrizen, etc.).
  • Während in 5 eine exemplarische Art und Weise der Implementierung des exemplarischen CNN-Beschleunigers 500 dargestellt ist, können eines oder mehrere der in 5 dargestellten Elemente, Prozesse und/oder Vorrichtungen kombiniert, geteilt, neu angeordnet, weggelassen, eliminiert und/oder auf andere Weise implementiert werden. Weiterhin können die exemplarische Steuerung 502, die exemplarische DMA-Steuerung 504, der exemplarische Datenspeicher 506, der exemplarische Koeffizientenspeicher 508, der exemplarische Verbindungsmultiplexer 510, das exemplarische DPE-Array 512, der exemplarische Ausgabepuffer 514, die exemplarischen DPEs 520 und/oder ganz allgemein der exemplarische CNN-Beschleuniger 500 von 5 durch Hardware, Software, Firmware und/oder eine beliebige Kombination von Hardware, Software und/oder Firmware implementiert werden. So könnte beispielsweise die exemplarische Steuerung 502, die exemplarische DMA-Steuerung 504, der exemplarische Datenspeicher 506, der exemplarische Koeffizientenspeicher 508, der exemplarische Verbindungsmultiplexer 510, die exemplarische DPE-Anordnung 512, der exemplarische Ausgangspuffer 514, die exemplarische DPEs 520 und/oder allgemeiner, der exemplarische CNN-Beschleuniger 500 durch eine oder mehrere analoge oder digitale Schaltung(en), logische Schaltungen, programmierbare(n) Prozessor(en), programmierbare(n) Steuerung(en), Grafikverarbeitungseinheit(en) (GPU(en)), digitale(r) Signalprozessor(en) (DSP(en)), anwendungsspezifische integrierte(r) Schaltung(en) (ASIC(en)), programmierbare(r) Logikgerät(e) (PLD(e)) und/oder feldprogrammierbare(r) Logikgerät(e) (FPLD(e)) implementiert werden. Beim Lesen eines der Vorrichtungs- oder Systemansprüche dieses Patents, um eine reine Software- und/oder Firmware-Implementierung abzudecken, wird hiermit explizit mindestens eine/eines/einer von der beispielhaften Steuerung 502, der beispielhaften DMA-Steuerung 504, des beispielhaften Datenspeichers 506, des beispielhaften Koeffizientenspeichers 508, des beispielhaften Verbindungsmultiplexers 510, des beispielhaften DPE-Arrays 512, des exemplarischen Ausgabepuffers 514 und/oder des beispielhaften DPEs 520 ausdrücklich definiert als eine nicht-flüchtige computerlesbare Speichervorrichtung oder Speicherplatte wie einen Speicher, eine digitale vielseitige Festplatte (DVD), eine kompakte Festplatte (CD), eine Blu-ray-Disk usw. enthaltend, einschließlich der Software und/oder Firmware. Weiterhin kann der exemplarische CNN-Beschleuniger 500 von 5 ein oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu oder anstelle von den in 5 dargestellten beinhalten und/oder mehr als eines der dargestellten Elemente, Prozesse und Vorrichtungen beinhalten. Wie hierin verwendet, umfasst der Begriff „in Kommunikation“, einschließlich seiner Variationen, die direkte Kommunikation und/oder indirekte Kommunikation über eine oder mehrere Zwischenkomponenten und erfordert keine direkte physische (z.B. drahtgebundene) Kommunikation und/oder konstante Kommunikation, sondern zusätzlich eine selektive Kommunikation in periodischen Intervallen, geplanten Intervallen, aperiodischen Intervallen und/oder einmaligen Ereignissen.
  • 6 veranschaulicht ein beispielhaftes DPE 600. Das DPE 600 von 6 kann beispielsweise einem oder mehreren der DPEs 520 von 5 entsprechen. Das beispielhafte DPE 600 von 6 führt eine Faltungsoperation, eine Poolingoperation oder eine vollständig verbundene Operation durch. In einigen Beispielen führt das DPE 600 von 6 eine Nachbearbeitungsoperation wie eine Biasoperation, PReLU-Operation, eine ReLU-Operation (z.B. eine ReLU-X-Operation), eine Skalierungsoperation usw. basierend auf einem Modus (z.B. einen Operationsmodus) des exemplarischen CNN-Beschleunigers 500 von 5 durch. In dem veranschaulichten Beispiel von 6 beinhaltet das DPE 600 einen exemplarischen Multiplikator (MULT) 602, einen exemplarischen Akkumulator (ACCUM) 604, ein exemplarisches Register (REG) 606 und einen exemplarischen Vergleicher (COMP) 608.
  • Im veranschaulichten Beispiel von 6 beinhaltet das DPE 600 den Multiplikator 602, um eine Multiplikation von zwei Werten durchzuführen. In einigen Beispielen multipliziert der Multiplikator 602 einen ersten Wert, der von einer ersten beispielhaften Schnittstelle (DATA IN) 610 erhalten wurde, mit einem zweiten Wert, der von einer zweiten beispielhaften Schnittstelle (COEFF/BIAS/SCALE) 612 erhalten wurde. Im veranschaulichten Beispiel von 6 ist die erste Schnittstelle 610 eine Datenspeicherschnittstelle. Zum Beispiel können die von der ersten Schnittstelle 610 empfangenen Daten den Daten von dem Datenspeicher 506 über den Verbindungsmultiplexer 510 von 5 entsprechen. Im veranschaulichten Beispiel von 6 ist die zweite Schnittstelle 612 eine Koeffizientenspeicherschnittstelle. Beispielsweise können die von der zweiten Schnittstelle 612 empfangenen Daten ein Bias-Wert, ein Koeffizientenwert, ein Skalierungswert usw. aus dem Koeffizientenspeicher 508 von 5 sein.
  • Im veranschaulichten Beispiel von 6 ist der Multiplikator 602 ein binärer Multiplikator (z.B. ein oder mehrere binäre oder logische Addierer). Der exemplarische Multiplikator 602 wird basierend auf einem Signal aktiviert, das von einer exemplarischen Freigabeschnittstelle (ENABLE) 614 empfangen wird. So kann beispielsweise das von der Freigabeschnittstelle 614 empfangene Signal einem Binärwert (z.B. ein niedriges Signal oder Low-Signal, das einer 0 zugeordnet ist, oder ein hohes Signal oder High-Signal, das einer 1 zugeordnet ist) entsprechen, der von der Steuerung 502 von 5 erzeugt wird. Der exemplarische Multiplikator 602 wird basierend auf einem Signal von einer exemplarischen Bypass-Selektor-Schnittstelle (BYPASS SEL) 616 umgangen. Beispielsweise kann das von der Bypass-Selektor-Schnittstelle 616 empfangene Signal einem von der Steuerung 502 aus 5 erzeugten Binärwert entsprechen. Beispielsweise können ein oder mehrere Werte von der ersten Schnittstelle 610 und/oder der zweiten Schnittstelle 612 über eine erste exemplarische Bypass-Schnittstelle (BYPASS) 618 übertragen werden, wenn das Signal von der Bypass-Selektor-Schnittstelle 616 ein High-Signal ist (z.B. ist die erste Bypass-Schnittstelle 618 aktiviert). Beispielsweise kann die Steuerung 502 ein Signal an die Bypass-Selektor-Schnittstelle 616 für eine Geschwindigkeitserhöhung und/oder Leistungsreduzierung senden, wenn eine oder mehrere Operationen des DPE 600 durchgeführt werden.
  • Im veranschaulichten Beispiel von 6 beinhaltet das DPE 600 den Akkumulator 604, um Additions- oder Akkumulationsoperationen durchzuführen. Der exemplarische Akkumulator 604 von 6 ist ein 24-Bit-Akkumulator, der einen vorzeichenbehafteten Festpunktwert enthält. In einigen Beispielen wird die Anzahl der ganzzahligen und gebrochenen Bits im FP-Format während der Akkumulation dynamisch angepasst, um ein angemessenes Verhältnis von Bereich und Genauigkeit zu gewährleisten. So kann beispielsweise der Akkumulator 604 so eingestellt werden, dass er mindestens einen Bereich (z.B. eine Größe von Daten, die im Akkumulator 604 gespeichert und/oder anderweitig gespeichert werden können) oder eine Genauigkeit des Akkumulators 604 ändert. So kann beispielsweise der Akkumulator 604 zunächst konfiguriert werden, um 12 Integer-Bits zu erhalten, zu verarbeiten und/oder anderweitig zu handhaben. Der exemplarische Akkumulator 604 kann die 12 Integer-Bits anpassen, wenn ein Eingang zum Akkumulator 604 eine größere Anzahl von Bits erfordert als die verfügbare Anzahl von Integer-Bits. In solchen Beispielen erhöht sich der Akkumulator 604 von 12 Integer-Bits auf eine Anzahl von Integer-Bits, um die Eingabe auf Kosten von fraktionalen Bits anzupassen (z.B. wird der Bereich erhöht, aber die Genauigkeit verringert).
  • In einigen Beispielen passt der Akkumulator 604 eine Anzahl von ganzzahligen Bits an, die der Akkumulator 604 verarbeiten kann, wenn ein Resultat der Speicheraddition überläuft. So kann beispielsweise der Akkumulator 604 die Anzahl der Integer-Bits um eins erhöhen und somit die Anzahl der fraktionalen Bits um eins reduzieren (z.B. der Bereich wird erhöht, aber die Genauigkeit verringert). In einigen Beispielen passt der Akkumulator 604 die Anzahl der Integer-Bits an und/oder ändert sie anderweitig, die der Akkumulator 604 verarbeiten kann, wenn das Ergebnis der Speicheraddition nicht den vollen Bereich der ganzzahligen Bits verwendet. So kann beispielsweise der Akkumulator 604 die Anzahl der Integer-Bits um eins verringern, bei einem Minimum von 12 Bits, und somit die Anzahl der gebrochenen Bits um eins erhöhen (z.B. der Bereich wird verringert, aber die Genauigkeit erhöht). Alternativ kann der beispielhafte Akkumulator 604 die Anzahl der Integer-Bits um mehr als eins erhöhen (z.B. iterativ erhöhen) oder verringern (z.B. iterativ verringern).
  • In Beispielen, in denen ein Bereich und/oder eine Genauigkeit des exemplarischen Akkumulators 604 eingestellt ist, kann der Akkumulator 604 einen Näherungswert, einen Schätzwert usw. erzeugen. Als Reaktion auf die Durchführung einer Genauigkeitsausbalancierungsoperation durch den Akkumulator 604, bei der der Akkumulator 604 entweder eine Genauigkeit des Akkumulators 604 erhöht oder verringert (z.B. Erhöhung einer Anzahl von Bits (z.B. Bruchbits), Verringerung einer Anzahl von Bits usw.), um einen Bereich des Akkumulators 604 einzustellen oder zu ändern, kann die Ausgabe des Akkumulators 604 zu einem Näherungswert oder einem Schätzwert im Vergleich zu einer Ausgabe führen, bei der der Akkumulator 604 nicht geändert wurde. Der vom Akkumulator 604 erzeugte Näherungswert, Schätzwert usw. ist jedoch im Wesentlichen gleichwertig und/oder anderweitig angemessen zu einer Ausgabe, bei der der Akkumulator 604 nicht verändert wurde. Zum Beispiel wird eine Ausführung und/oder eine Erzeugung von einer oder mehreren Operationen, Prozessen, Ausgaben usw. des DPE 600 aus 6 nicht dadurch beeinflusst, dass die Genauigkeit, der Bereich usw. des Akkumulators 604 angepasst wurde. In solchen Beispielen ist jede Änderung in Operation oder Ausgaben im Wesentlichen vernachlässigbar.
  • Im veranschaulichten Beispiel von 6 erzeugt der Multiplikator 602 eine Ausgabe an den Akkumulator 604, basierend auf der Multiplikation zweier Werte. Der exemplarische Akkumulator 604 empfängt die Ausgabe vom Multiplikator 602 und berechnet eine Summe aus der Ausgabe und einer zuvor berechneten Summe, wenn ein Signal von einer zweiten exemplarischen Freigabeschnittstelle (ENABLE) 620 anzeigt, dass der Akkumulator 604 aktiviert ist. So kann beispielsweise das von der zweiten Freigabeschnittstelle 620 empfangene Signal einem von der Steuerung 502 von 5 erzeugten Binärwert entsprechen. Beispielsweise wird der Akkumulator 604 aktiviert, wenn von der zweiten Freigabeschnittstelle 620 ein High-Signal empfangen wird.
  • In einigen Beispielen wird der Akkumulator 604 basierend auf einem Signal von der Bypass-Selektor-Schnittstelle 616 umgangen. Beispielsweise kann ein Wert von dem Multiplikator 602 den Akkumulator 604 über eine zweite exemplarische Bypass-Schnittstelle (BYPASS) 622 umgehen, wenn ein High-Signal von der Bypass-Selektor-Schnittstelle 616 empfangen wird (z.B. ist die zweite Bypass-Schnittstelle 622 aktiviert). In einigen Beispielen wird der Akkumulator 604 basierend auf einem Signal von einer exemplarischen Clear Accumulator Interface (CLR) 624 gelöscht und/oder anderweitig geleert. Beispielsweise kann das von der Clear Accumulator Interface 624 empfangene Signal einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird.
  • Im veranschaulichten Beispiel von 6 wird der Ausgang des Akkumulators 604 an mindestens eines der Register 606 oder an eine exemplarische Datenausgabeschnittstelle 626 übertragen. Die exemplarische Datenausgabeschnittstelle 626 von 6 ist eine Ausgangspuffer-Schnittstelle. So kann beispielsweise die Datenausgabeschnittstelle 626 Daten an den Ausgangspuffer 514 von 5 übertragen. Das beispielhafte Register 606 von 6 ist ein Zwischenspeicherelement, das verwendet wird, um Ergebnisse (z.B. Einzelergebnisse) zu speichern, bevor sie auf die exemplarische Datenausgabeschnittstelle 626 geschrieben werden. So kann beispielsweise das DPE 600 das Register 606 verwenden, um Werte für einen Durchschnitt Pooling-Vorgang zu speichern. Das beispielhafte Register 606 wird basierend auf einem Signal von einer exemplarischen Clear Register-Schnittstelle (STORE_CLR) 628 gelöscht und/oder anderweitig geleert. So kann beispielsweise das von der Clear Register Interface 628 empfangene Signal einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird. So kann beispielsweise ein im Register 606 gespeicherter Wert gelöscht werden, wenn ein High-Signal von der Clear Register Interface 628 empfangen wird.
  • Im veranschaulichten Beispiel von 6 ist das DPE 600 für den Faltungsmodus konfiguriert. Im Betrieb multipliziert der exemplarische Multiplikator 602 einen Dateneingangswert (z.B. einen Aktivierungswert, einen Pixelwert usw., dargestellt in FP16) von der ersten Schnittstelle 610 und einen Koeffizientenwert von der zweiten Schnittstelle 612, um einen Faltungsausgabewert oder auch Faltungsausgangswert (z.B. eine Aktivierung, einen Aktivierungswert, eine Aktivierungsausgabe usw.) zu erzeugen. Der exemplarische Multiplikator 602 sendet den Faltungsausgabewert an den exemplarischen Akkumulator 604. Als Reaktion auf das Empfangen des Faltungsausgabewertes sendet der exemplarische Akkumulator 604 den Faltungsausgabewert an die Datenausgangsschnittstelle 626, die wiederum an den Ausgangspuffer 514 von 5 sendet.
  • In einigen Beispielen ist das DPE 600 im Faltungsmodus für optionales Pooling konfiguriert. So kann beispielsweise das DPE 600 für eine Maximum Poolingoperation im Faltungsmodus konfiguriert werden, basierend auf dem Empfangen eines High-Signals von einer Maximum Pooling-Schnittstelle (MP_POOL) 627. Als Reaktion auf den Empfang des High-Signals wartet das DPE 600, bis ein ganzer Poolbereich verarbeitet ist, bevor ein im beispielhaften Register 606 gespeicherter Poolausgabewert (z.B. der Maximalwert für den Poolbereich 212 aus 2) an die Datenausgabeschnittstelle 626 gesendet wird.
  • In einer exemplarischen Maximum Poolingoperation multipliziert der exemplarische Multiplikator 602 einen ersten Dateneingangswert von der ersten Schnittstelle 610 und einen ersten Koeffizientenwert von der zweiten Schnittstelle 612, um einen ersten Faltungsausgabewert zu erzeugen. So kann beispielsweise der erste Dateneingabewert ein erster Pixelwert, ein erster Aktivierungswert usw. in FP16 aus den Eingabedaten 202 von 2 sein und der erste Koeffizientenwert kann ein erster Koeffizientenwert in FP16 eines ersten der Filter 204 von 2 sein. Beispielsweise kann der erste Faltungsausgabewert ein erster der Ausgangspositionen 208 des Poolbereichs 212 von 2 sein. Der exemplarische Multiplikator 602 sendet den ersten Faltungsausgabewert an den exemplarischen Akkumulator 604, der den ersten Faltungsausgabewert an das exemplarische Register 606 sendet. Das beispielhafte Register 606 sendet den ersten Faltungswert an einen ersten beispielhaften Eingang 629 des exemplarischen Vergleichers 608.
  • Als Reaktion auf das Speichern multipliziert der exemplarische Multiplikator 602 einen zweiten Dateneingabewert von der ersten Schnittstelle 610 und einen zweiten Koeffizientenwert von der zweiten Schnittstelle 612, um einen zweiten Faltungsausgabewert zu erzeugen. So kann beispielsweise der zweite Dateneingabewert ein zweiter Pixelwert, ein zweiter Aktivierungswert usw. aus den Eingabedaten 202 von 2 sein und der zweite Koeffizientenwert kann ein zweiter Koeffizient des ersten der Filter 204 von 2 sein. Der exemplarische Multiplikator 602 sendet den zweiten Ausgangswert der Faltung an den exemplarischen Akkumulator 604. Der beispielhafte Akkumulator 604 sendet den zweiten Faltungsausgabewert an einen zweiten beispielhaften Eingang 631 des Vergleichers 608, wenn er ein High-Signal von einer beispielhaften Pooling-Schnittstelle (POOL) 630 empfängt. So kann beispielsweise das von der Pooling-Schnittstelle 630 empfangene Signal einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird. Die exemplarische Pooling-Schnittstelle 630 erzeugt bei aktiviertem Pooling ein High-Signal (z.B. Durchschnitt Pooling oder Maximum Pooling ist aktiviert) und erzeugt ein Low-Signal, wenn das Pooling nicht aktiviert ist. So sendet beispielsweise der Akkumulator 604 den zweiten Faltungsausgabewert an den zweiten Eingang 631 des Vergleichers 608, wenn ein High-Signal von der Pooling-Schnittstelle 630 empfangen wird. So kann beispielsweise der zweite Faltungsausgabewert ein zweiter der Ausgangspositionen 208 des Poolbereichs 212 von 2 sein.
  • Im veranschaulichten Beispiel von 6 bestimmt der Vergleicher 608 einen Maximalwert des ersten Faltungsausgabewerts und des zweiten Faltungsausgabewerts, wenn das DPE 600 eine Maximum Poolingoperation durchführt. Als Reaktion auf das Bestimmen, dass der erste Faltungsausgabewert (z.B. der im Register 606 gespeicherte Wert) kleiner als der zweite Faltungsausgabewert ist, erzeugt der exemplarische Vergleicher 608 ein High-Signal (z.B. ein einem Binärwert von 1 entsprechendes Signal) für einen exemplarischen Vergleicherausgang 632. Das High-Signal für den exemplarischen Vergleicherausgang 632 gibt ein exemplarisches Flip-Flop 634 frei, um eine exemplarische Logikausgabe (Y_FF) 636 von 1 zu erzeugen (z.B. einen Binärwert, der einem High-Signal entspricht). Beispielsweise entspricht die Logikausgabe 636 einem Binärwert (z.B. einem Wert von 0 oder 1). Wenn beispielsweise die Logikausgabe 636 1 ist, wird der Begriff als Y_FF dargestellt und, wenn die Logikausgabe 636 0 ist und/oder anderweitig einem Low-Signal entspricht wird ~Y_FF dargestellt.
  • Als Reaktion darauf, dass der exemplarische Logikausgang 636 1 und/oder anderweitig freigegeben ist, speichert die exemplarische Steuerung 502 den zweiten Faltungsausgabewert im Register 606 als Pooling-Ausgabewert. Beispielsweise erzeugt die Steuerung 502 ein Signal an eine exemplarischen Speicherschnittstelle (STORE||||Y_FF&POOL&~PRELU) 644. Das Signal der exemplarischen Speicherschnittstelle 644 entspricht einem Binärwert. Als Reaktion auf das Empfangen eines Low-Signals von der beispielhaften Speicherschnittstelle 644 weist die beispielhafte Steuerung 502 das beispielhafte Register 606 nicht an, einen Wert zu speichern. Als Reaktion auf das Empfangen eines hohen Signals oder High-Signals von der beispielhaften Speicherschnittstelle 644 weist die beispielhafte Steuerung 502 das Register 606 an, den Wert zu speichern. Beispielsweise ist ein Signal von der Speicherschnittstelle 644 ein High-Signal, wenn der Logikausgang 636 ein High-Signal ist, die Pooling-Schnittstelle 630 ist ein High-Signal und eine beispielhafte PReLU-Schnittstelle (PRELU) 638 ist ein Low-Signal (z.B. führt das DPE 600 keinen PReLU-Betrieb durch). In anderen Beispielen gibt die Speicherschnittstelle 644 ein Low-Signal aus, wenn mindestens einer der Logikausgänge 636 ein Low-Signal ist, die Pooling-Schnittstelle 630 ein Low-Signal ist oder die PReLU-Schnittstelle 638 ein High-Signal ist.
  • Als Reaktion auf das Bestimmen, dass der erste Faltungsausgabewert (z.B. der gespeicherte Wert im Beispielregister 606) größer als der zweite Faltungsausgabewert ist, erzeugt der Vergleicher 608 ein Low-Signal an dem exemplarischen Vergleicherausgang 632, der das exemplarische Flip-Flop 634 anweist, ein niedriges Signal (Low-Signal) entsprechend dem exemplarischen Logikausgang 636 zu erzeugen. Als Reaktion auf den exemplarischen Logikausgang 636, der einem Low-Signal entspricht und/oder anderweitig deaktiviert ist, speichert die exemplarische Steuerung 502 den zweiten Faltungsausgabewert nicht im Register 606.
  • Das beispielhafte DPE 600 verarbeitet (z.B. iterativ) Dateneingabewerte, bis ein ganzer Poolingbereich (z.B. der Poolbereich 212 von 2) verarbeitet ist. Wenn der gesamte Poolingbereich verarbeitet wurde, gibt das beispielhafte Register 606 den Pooling-Ausgabewert (z.B. den Maximalwert des Poolbereichs 212 aus 2) an die exemplarische Datenausgabeschnittstelle 626 aus, wenn die exemplarische Maximum Pooling-Schnittstelle 627 aktiviert ist.
  • In anderen Beispielen kann das DPE 600 für eine Durchschnitt Poolingoperation konfiguriert werden, wenn es im Faltungsmodus betrieben wird. So kann beispielsweise der Multiplikator 602 einen ersten Ausgabewert, einen zweiten Ausgabewert, einen dritten Ausgabewert und einen vierten Ausgabewert berechnen, die den Ausgangspositionen 208 des Poolbereichs 212 von 2 entsprechen. Der exemplarische Akkumulator 604 kann eine Summe der ersten bis vierten Ausgangswerte berechnen. Beispielsweise kann der Multiplikator 602 den ersten Ausgangswert berechnen, den der Akkumulator 604 zu einem Nullwert addiert, um eine erste Summe basierend auf dem ersten Ausgangswert zu erzeugen. In solchen Beispielen kann der Multiplikator 602 den zweiten Ausgangswert berechnen, den der Akkumulator 604 zur ersten Summe addiert, um eine zweite Summe zu erzeugen, die dem ersten und zweiten Ausgangswert usw. entspricht, bis eine Summe berechnet ist und die Summe gleich einer Summe der ersten bis vierten Ausgangswerte ist.
  • Als Reaktion auf die Berechnung der Summe speichert der exemplarische Akkumulator 604 die Summe im beispielhaften Register 606, der wiederum die Summe basierend auf einem Signal einer dritten beispielhaften Schnittstelle (!PRELU||||AV POOL||||BIAS_SCALE_EN) 637 an den exemplarischen Multiplikator 602 überträgt. So kann beispielsweise das Signal der dritten Schnittstelle 637 einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird. Das Signal der dritten Schnittstelle 637 ist beispielsweise ein High-Signal, wenn das DPE 600 keine PReLU-Operation durchführt (z.B. PRELU != 1), das DPE 600 eine Bias-Operation oder eine Skalierungsoperation durchführt (z.B. BIAS_SCALE_EN == 1), oder das DPE 600 eine Durchschnitt Poolingoperation durchführt (z.B. AV_POOL = 1). Beispielsweise gibt die dritte Schnittstelle 637 ein High-Signal für den Ausdruck !PRELU|||AV POOL||||BIAS_SCALE_EN aus, wenn das DPE 600 eine Durchschnitt Poolingoperation durchführt.
  • Als Reaktion auf das Empfangen der Summe aus dem beispielhaften Register 606 berechnet der exemplarische Multiplikator 602 einen Durchschnitts-Poolwert, indem er die Summe und einen exemplarischen Poolgrößenwert (1/Av; X) 640 multipliziert, und gibt den Durchschnitts-Poolwert an den exemplarischen Akkumulator 604 aus, der wiederum den Durchschnitts-Poolwert an die exemplarische Datenausgabeschnittstelle 626 ausgibt. Der exemplarische Poolgrößenwert 640 entspricht der Größe eines Poolbereichs. So kann beispielsweise der Poolgrößenwert 640 ein Quotient 1/(Poolbreite x Poolhöhe) sein. So ist beispielsweise der dem Poolbereich 212 von 2 zugeordnete Poolgrößenwert 640 1/4 (z.B. 1/4 = 1 / (2x2)). In dem veranschaulichten Beispiel von 6 ruft der Multiplikator 602 den Poolgrößenwert 640 basierend auf einem Signal von einer exemplarischen Durchschnitt Pooling-Schnittstelle (AV POOL) 642 ab. So kann beispielsweise das Signal der Durchschnitt Pooling-Schnittstelle 642 einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird. Beispielsweise gibt die Durchschnitt Pooling-Schnittstelle 642 ein High-Signal aus, wenn das DPE 600 eine Durchschnitt Poolingoperation durchführt.
  • In einigen Beispielen ist das DPE 600 für eine Poolingoperation konfiguriert. So kann beispielsweise das DPE 600 einen ersten Eingangswert, einen zweiten Eingangswert, einen dritten Eingangswert und einen vierten Eingangswert erhalten, der den Ausgangspositionen 208 des Poolbereichs 212 von 2 entspricht. In solchen Beispielen kann das DPE 600 wie oben beschrieben einen Mittelwert oder einen Maximalwert der ersten bis vierten Eingangswerte bestimmen.
  • In weiteren Beispielen kann das DPE 600 für eine oder mehrere Nachbearbeitungsoperationen konfiguriert werden, einschließlich mindestens einer Biasoperation, einer Skalierungsoperation, einer PReLU-Operation, oder einer ReLU-Operation (z.B. eine ReLU-X-Operation). So kann beispielsweise das DPE 600 für eine Biasoperation, eine Skalierungsoperation, eine PReLU-Operation, oder eine ReLU-X-Operation am Ausgang einer beliebigen Schicht auf einer je Schicht Basis konfiguriert sein. Beispielsweise kann der Akkumulator 604 einen Biaswert oder einen Skalierungswert von der zweiten Schnittstelle 612 basierend auf einem Signal von einer exemplarischen Bias-Skalierungs-Freigabeschnittstelle (BIAS_SCALE_EN) 646 erhalten. Beispielsweise entspricht das Signal der Bias-Skalierungs-Freigabeschnittstelle 646 einem Binärwert. Beispielsweise kann der Akkumulator 604 den Biaswert oder den Skalierungswert von der zweiten Schnittstelle 612 erhalten, wenn die Bias-Skalierungs-Freigabeschnittstelle 646 ein hohes Signal (High-Signal) ausgibt.
  • In einer exemplarischen Biasoperation addiert der exemplarische Akkumulator 604 einen von der zweiten Schnittstelle 612 abgerufenen Biaswert zu einem im beispielhaften Register 606 gespeicherten Ausgabewert (z.B. einen Faltungsausgabewert, einen Durchschnitt Poolwert, einen Maximum Poolwert, einen Poolausgabewert usw.). In einer exemplarischen Skalierungsoperation multipliziert und/oder skaliert der exemplarische Multiplikator 602 den Ausgabewert mit einem Skalierungswert, der von der zweiten Schnittstelle 612 abgerufen wird, wenn die Bias-Skalierungs-Freigabeschnittstelle 646 einen hohen Wert ausgibt.
  • In einigen Beispielen ist das DPE 600 für eine PReLU-Operation konfiguriert, nachdem das DPE 600 einen Faltungsvorgang, eine Poolingoperation usw. durchgeführt hat. In solchen Beispielen erzeugt die Steuerung 502 von 5 ein High-Signal an die PReLU-Schnittstelle 638. So kann beispielsweise das von der PReLU-Schnittstelle 638 empfangene Signal einem Binärwert entsprechen, der von der Steuerung 502 aus 5 erzeugt wird. Als Reaktion darauf, dass die Steuerung 502 ein High-Signal an der PReLU-Schnittstelle 638 erzeugt, vergleicht der Vergleicher 608 beispielsweise einen ersten Wert, der einem Ausgang des Faltungsvorgangs oder der Poolingoperation entspricht, und einen zweiten Wert, der einem exemplarischen PReLU-Basisparameter (t0) 648 entspricht. Der erste Wert kann beispielsweise ein Wert einer ersten der Ausgangspositionen 208 von 2, ein Maximalwert der Poolbereich 212 von 2 usw. sein. Im veranschaulichten Beispiel von 2 ist der PReLU-Basisparameter 648 eine 10-Bit-Zahl, die in das FP16-Format umgewandelt wurde. Alternativ kann der exemplarische PReLU-Basisparameter 648 eine beliebige andere Anzahl von Bits und/oder ein beliebiges anderes Format sein.
  • Als Reaktion darauf, dass der erste Wert (z.B. der im Register 606 gespeicherte Wert) kleiner ist als der zweite Wert (z.B. der exemplarische PReLU-Basisparameter (t0) 648), gibt der exemplarische Vergleicher 608 ein Low-Signal aus und bewirkt damit, dass die exemplarische Logikausgabe 636 einem Low-Signal entspricht. Als Reaktion auf die exemplarischen Logikausgabe 636, der einem Low-Signal entspricht, berechnet der exemplarische Multiplikator 602 einen ersten PReLU-Ausgangswert basierend auf einer Multiplikation eines ersten exemplarischen PReLU-Eingangsparameters (a0) 650 und des im exemplarischen Register 606 gespeicherten Ausgangswerts. So gibt beispielsweise eine exemplarische PReLU-Schaltschnittstelle (PRELU&~Y_FF) 652 ein High-Signal aus, wenn die PReLU-Schnittstelle 638 ein High-Signal ausgibt (z.B. führt das DPE 600 einen PReLU-Betrieb durch) und die Logikausgabe 636 einem Low-Signal entspricht.
  • In anderen Beispielen, wenn der erste Wert größer ist als der zweite Wert, gibt der Vergleicher 608 ein High-Signal aus und bewirkt damit, dass die Logikausgabe 636 einem High-Signal entspricht. Als Reaktion auf die exemplarische Logikausgabe 636, die einem High-Signal entspricht, berechnet der exemplarische Multiplikator 602 einen zweiten PReLU-Ausgangswert basierend auf einer Multiplikation eines zweiten exemplarischen PReLU-Eingangsparameters (a1) 654 und eines im exemplarischen Register 606 gespeicherten Ausgangswerts. So erzeugt beispielsweise die PReLU-Schaltschnittstelle 652 ein Low-Signal, wenn die PReLU-Schnittstelle 638 ein High-Signal ausgibt und die Logikausgabe 636 einem High-Signal entspricht. Die allgemeine Form der PReLU-Operation wird im Folgenden in Gleichung (1) und Gleichung (2) beschrieben: y = a0 * x , if x < t 0
    Figure DE112018002566T5_0001
    y = a1 x , if x > t0
    Figure DE112018002566T5_0002
    In den veranschaulichten Beispielen der obigen Gleichungen (1)-(2) bezieht sich y auf einen mit dem Multiplikator 602 berechneten PReLU-Ausgangswert, x auf einen im Register 606 gespeicherten Ausgangswert, a0 auf den ersten PReLU-Eingangsparameter 650, a1 auf den zweiten PReLU-Eingangsparameter 654 und t0 auf den PReLU-Basisparameter 648.
  • In einigen Beispielen ist das DPE 600 für eine ReLU-Operation (z.B. eine ReLU-X-Operation) konfiguriert, nachdem das DPE 600 einen Faltungsvorgang, eine Poolingoperation usw. durchgeführt hat. In solchen Beispielen erzeugt die Steuerung 502 von 5 ein High-Signal an einer exemplarischen ReLU-X-Schnittstelle (RELU_X) 656. Beispielsweise kann das von der ReLU-X-Schnittstelle 656 empfangene Signal einem Binärwert entsprechen. Als Reaktion darauf, dass die Steuerung 502 ein High-Signal an der ReLU-X-Schnittstelle 656 erzeugt, vergleicht der Vergleicher 608 beispielsweise einen ersten Wert, der einem Ausgang des Faltungsvorgangs oder der Poolingoperation entspricht, und einen zweiten Wert, der einem exemplarischen ReLU-X-Parameter (1/AV; X) 658 entspricht. Der erste Wert kann beispielsweise ein Wert einer ersten der Ausgangspositionen 208 von 2, ein Maximalwert der Poolbereich 212 von 2 usw. sein. Im veranschaulichten Beispiel von 2 ist der ReLU-X-Parameter 658 ein FP16-Wert. Alternativ kann der ReLU-X-Parameter 658 eine beliebige andere Anzahl von Bits und/oder ein beliebiges anderes Format sein.
  • Im veranschaulichten Beispiel von 6 teilt sich der ReLU-X-Parameter 658 ein Register mit dem Poolgrößenwert (1/Av; X) 640. In einigen Beispielen hat der ReLU-X-Parameter 658 den Wert Null. In solchen Beispielen führt der ReLU-X-Vorgang eine Funktion aus, die im Folgenden in Gleichung (3) beschrieben wird: y = min ( z , ( max ( 0, x ) ) )
    Figure DE112018002566T5_0003
    Im obigen Beispiel der Gleichung (3) bezieht sich y auf einen ReLU-X-Ausgangswert, x auf einen im Register 606 gespeicherten Ausgangswert und z auf den ReLU-X-Parameter 658. Wenn das DPE 600 beispielsweise für eine ReLU-X-Operation konfiguriert ist, setzt die Steuerung 502 den ReLU-X-Parameter 658 auf Null und der Vergleicher 608 bestimmt, ob der im Register 606 gespeicherte Ausgangswert größer als Null ist. Wenn der exemplarische Vergleicher 608 bestimmt, dass der Ausgabewert größer als Null ist, dann setzt die exemplarische Steuerung 502 den ReLU-X-Parameter 658 auf einen ReLU-X-Wert und der Vergleicher 608 bestimmt, ob der im Register 606 gespeicherte Ausgabewert größer als der ReLU-X-Wert ist. Falls der exemplarische Vergleicher 608 bestimmt, dass der im Register 606 gespeicherte Ausgabewert größer ist als der ReLU-X-Wert, wird der Ausgabewert an die Datenausgabeschnittstelle 626 übertragen, andernfalls wird der ReLU-X-Wert über eine exemplarische ReLU-X-Werteschnittstelle (~Y_FF&RELU_X) 660 an die Datenausgabeschnittstelle 626 übertragen.
  • Im veranschaulichten Beispiel von 6 basieren der Multiplikator 602, das Register 606 und der Vergleicher 608 auf FP16. Beispielsweise können der Multiplikator 602, das Register 606 und der Vergleicher 608 Werte im FP16-Format verarbeiten, speichern und/oder anderweitig handhaben. Im veranschaulichten Beispiel von 6 ist der Akkumulator 604 ein festes 24-Bit-basiertes Format. So kann beispielsweise der Akkumulator 604 Werte im festen 24-Bit-basierten Format verarbeiten, speichern und/oder anderweitig handhaben. Alternativ können einer oder mehrere der exemplarischen Multiplikatoren 602, der exemplarische Akkumulator 604, das exemplarische Register 606 und/oder der exemplarische Vergleicher 608 in jedem anderen Format vorliegen.
  • In einigen Beispielen bezieht der Akkumulator 604 Daten von einem benachbarten DPE über eine exemplarische benachbarte DPE-Schnittstelle 662. So kann beispielsweise der Akkumulator 604 Daten von einem der DPEs 520 aus 5 beziehen, das mit dem DPE 600 aus 6 gekoppelt ist. Der beispielhafte Akkumulator 604 verarbeitet die erhaltenen Daten aus dem benachbarten DPE in Beispielen, in denen eine oder mehrere Summen mehrerer Ströme berechnet werden sollen (z.B. wird der Faltungsvorgang in mehrere Eingangsströme aufgeteilt). So kann beispielsweise das DPE 600 für eine 2*128-Faltungsanordnung konfiguriert werden, bei der die beiden Ströme der Eingangskanäle 110, 112 aus 1 nacheinander für eine einzelne Position summiert werden. In solchen Beispielen kann das DPE 600 einen Eingangsstrom von einem anderen DPE 600 erhalten, wenn die Steuerung 502 ein High-Signal an einer beispielhaften benachbarten Datenschnittstelle (ACCUM) 664 erzeugt. Als Reaktion darauf, dass die benachbarte Datenschnittstelle 664 das High-Signal empfängt, empfängt beispielsweise der Multiplikator 602 Daten von dem benachbarten DPE über die benachbarte DPE-Schnittstelle 662. In solchen Beispielen sendet die Steuerung 502 ein High-Signal an die Bypass-Auswahlschnittstelle 616, um die erste Bypass-Schnittstelle 618 zu aktivieren. Als Reaktion auf die Aktivierung der ersten exemplarischen Bypass-Schnittstelle 618 sendet der exemplarische Multiplikator 602 die empfangenen Daten von dembenachbarten DPE an den exemplarischen Akkumulator 604, wobei der Akkumulator 604 eine Gesamtsumme basierend auf einer ersten vom DPE 600 berechneten Summe und einer zweiten von der benachbarten DPE berechneten Summe berechnet.
  • 7 ist eine Veranschaulichung eines ersten exemplarischen Koeffizientenspeichers 700, der in einen zweiten exemplarischen Koeffizientenspeicher 702 und einen dritten exemplarischen Koeffizientenspeicher 704 organisiert ist, basierend auf einem Operationsmodus des exemplarischen CNN-Beschleunigers 500 von 5. Die exemplarischen Koeffizientenspeicher 700, 702, 704 können dem exemplarischen Koeffizientenspeicher 508 von 5 entsprechen. So können beispielsweise die Koeffizientenspeicher 700, 702, 704 über die Steuerung 502 von 5 adressiert und/oder gesteuert werden.
  • Im veranschaulichten Beispiel von 7 beinhalten die Koeffizientenspeicher 700, 702, 704 separate Lese- und Schreib-Eingangs/Ausgangs-(I/O)-Ports oder Kanäle. Jeder der exemplarischen Koeffizientenspeicher 700, 702, 704 hat 256 Kanäle (CH0-CH255), wobei jeder Kanal 16 Bit beträgt. Jeder der exemplarischen Koeffizientenspeicher 700, 702, 704 ist als eine einzige Instanz von 256*4096 Bit konfiguriert, um 128 kB im Gesamtspeicher zu erhalten. Alternativ kann der exemplarische Koeffizientenspeicher 700, 702, 704 auch eine andere Größe und/oder eine andere Konfiguration aufweisen.
  • Im veranschaulichten Beispiel von 7 weist der erste Koeffizientenspeicher 700 256 Kanäle mit 256 FP16-Ausgängen auf, um einen 256*256 Wortkoeffizientenspeicher zu erhalten, wobei jeder der FP16-Ausgänge mit einem der DPEs 520 von 5 verbunden ist. Im veranschaulichten Beispiel von 7 wird der erste Koeffizientenspeicher 700 von der Steuerung 502 von 5 in den zweiten Koeffizientenspeicher 702 konfiguriert, wenn der CNN-Beschleuniger 500 in einem 1*256-Modus arbeitet. So wird beispielsweise jeder der Eingangskanäle 110, 112 von 1 für eine einzelne Position (z.B. die Ausgangskanäle 122) für jeden der Ausgangskanäle 126 von 1 nacheinander summiert, wenn er in einem 1*256-Modus betrieben wird. So entspricht beispielsweise der 1*256-Modus einem der DPEs 520, das 1 Eingangskanal verarbeitet, um Ausgangspositionen in 256 Ausgangskanälen im Wesentlichen parallel zu erhalten.
  • Im veranschaulichten Beispiel von 7 wird der erste Koeffizientenspeicher 700 von der Steuerung 502 von 5 in den zweiten Koeffizientenspeicher 702 konfiguriert, wenn der CNN-Beschleuniger 500 in einem 1*256-Modus arbeitet. Der zweite exemplarische Koeffizientenspeicher 702 von 7 ist als ein einzelner Koeffizientenblock konfiguriert, wobei der einzelne Block in 256 Spalten unterteilt ist (z.B. von CH0 bis CH255), wobei jede der 256 Spalten einen Satz von Koeffizienten für alle Eingangskanäle 110, 112 von 1 darstellt. So kann beispielsweise jede der 256 Spalten einem der Filter 114, 116 aus 1 entsprechen.
  • Im veranschaulichten Beispiel von 7 wird der erste Koeffizientenspeicher 700 von der Steuerung 502 von 5 in den dritten Koeffizientenspeicher 704 konfiguriert, wenn der CNN-Beschleuniger 500 in einem 2*128-Modus arbeitet. So werden beispielsweise zwei Ströme der Eingangskanäle 110, 112 von 1 nacheinander für eine einzelne Position (z.B. die Ausgangskanäle 122) für jeden der Ausgangskanäle 126 von 1 summiert, wenn sie in einem 2*128-Modus betrieben werden. In solchen Beispielen ist das Ergebnis des 2*128-Modus eine Summierung der beiden Ströme. Der Modus 2*128 entspricht beispielsweise zwei der DPEs 520, die einen Eingangskanal verarbeiten, um Ausgangspositionen in 128 Ausgangskanälen im Wesentlichen parallel zu erhalten.
  • Im dargestellten Beispiel von 7 ist der dritte Koeffizientenspeicher 704 in zwei Beispielblöcke 706, 708 von Koeffizienten konfiguriert, wobei jeder der Blöcke 706, 708 jedem Daten-RAM-Block des Datenspeichers 506 von 5 entspricht. Im veranschaulichten Beispiel von 7 beinhaltet jeder der Blöcke 706, 708 128 Spalten. So beinhaltet beispielsweise der erste Block 706 einen ersten Satz von 64 Kanälen (z.B. CH0 bis CH63) und der zweite Block 708 einen zweiten Satz von 64 Kanälen (z.B. CH64 bis CH127). Im veranschaulichten Beispiel von 7 stellt eine Spalte in einem der Blöcke 706, 708 einen Satz von Koeffizienten für die Hälfte der Eingangskanäle 110, 112 von 1 dar. Im veranschaulichten Beispiel von 7 gibt es zwei Blöcke 706, 708 von 128*FP16 Wörtern pro Adresse, so dass einer der Blöcke 706, 708 für einen der beiden Sätze von DPEs 520 von 5 für jeden Block von Dateneingängen aus dem Datenspeicher 506 gilt.
  • Alternativ kann der erste exemplarische Koeffizientenspeicher 700 von der exemplarischen Steuerung 502 von 5 in einen vierten Koeffizientenspeicher konfiguriert werden (nicht dargestellt), wenn der exemplarische CNN-Beschleuniger 500 in einem 4*64-Modus arbeitet. So kann beispielsweise der vierte Koeffizientenspeicher in 4 Blöcke von Koeffizienten konfiguriert werden, wobei jeder der 4 Blöcke jedem Daten-RAM-Block des Datenspeichers 506 von 5 entspricht. So kann beispielsweise der vierte Koeffizientenspeicher vier Blöcke mit 64*FP16-Wörtern pro Adresse aufweisen, so dass einer der vier Blöcke für einen der vier Sätze von DPEs 520 aus 5 für jeden Block von Dateneingaben aus dem Datenspeicher 506 gilt.
  • Alternativ kann der erste exemplarische Koeffizientenspeicher 700 von der exemplarischen Steuerung 502 von 5 in einen fünften Koeffizientenspeicher konfiguriert werden (nicht dargestellt), wenn der exemplarische CNN-Beschleuniger 500 in einem 8*32-Modus arbeitet. So kann beispielsweise der fünfte Koeffizientenspeicher in acht Blöcke von Koeffizienten konfiguriert werden, wobei jeder der acht Blöcke jedem Daten-RAM-Block des Datenspeichers 506 von 5 entspricht. So kann beispielsweise der fünfte Koeffizientenspeicher acht Blöcke mit 32*FP16-Wörtern pro Adresse aufweisen, so dass einer der acht Blöcke für einen der acht Sätze von DPEs 520 aus 5 für jeden Block von Dateneingaben aus dem Datenspeicher 506 gilt.
  • Alternativ kann der erste exemplarische Koeffizientenspeicher 700 von der exemplarischen Steuerung 502 von 5 in einen sechsten Koeffizientenspeicher konfiguriert werden (nicht dargestellt), wenn der exemplarische CNN-Beschleuniger 500 in einem 16*16-Modus arbeitet. So kann beispielsweise der sechste Koeffizientenspeicher in sechzehn Koeffizientenblöcke konfiguriert werden, wobei jeder der sechzehn Blöcke jedem Daten-RAM-Block des Datenspeichers 506 von 5 entspricht. So kann beispielsweise der Speicher für den sechsten Koeffizienten sechzehn Blöcke mit 16*FP16-Wörtern pro Adresse haben, so dass einer der sechzehn Blöcke für einen der sechzehn Sätze von DPEs 520 aus 5 für jeden Block von Dateneingaben aus dem Datenspeicher 506 gilt.
  • So werden beispielsweise vier Ströme der Eingangskanäle 110, 112 von 1 nacheinander für eine einzelne Position (z.B. die Ausgangskanäle 122) für jeden der Ausgangskanäle 126 von 1 summiert, wenn sie in einem 4*64-Modus betrieben werden. In solchen Beispielen ist das Ergebnis des 4*64-Modus eine Summierung der vier Ströme. Der 4*64-Modus entspricht beispielsweise vier der DPEs 520, die einen Eingangskanal verarbeiten, um Ausgänge von 64 Ausgangskanälen im Wesentlichen parallel zu erzeugen.
  • 8 ist eine beispielhafte Tabelle 800, die ein exemplarisches Adressmodell für den exemplarischen Koeffizientenspeicher 508 von 5 darstellt. In der beispielhaften Tabelle 800 von 8 beschreibt eine exemplarische Adressfolge-Spalte (ADDRESS SEQUENCE) 802 ein Adressierschema für den exemplarischen Koeffizientenspeicher 508. In der exemplarischen Adressfolge Spalte 802 bezieht sich der Begriff CH STR IN auf einen Eingangskanal-Schrittwert (stride) und der Begriff CH STR OUT auf einen Ausgangskanal-Schrittwert. In der beispielhaften Tabelle 800 von 8 stellt eine exemplarische Eingangskanalspalte (INPUT CHANNEL) 804 einen Eingangskanal (z.B. die Eingangskanäle 110, 112 von 1) für einen Faltungsvorgang dar.
  • In der beispielhaften Tabelle 800 von 8 stellt eine exemplarische Datenspalte (DATA[127:0]) 806 128-Bit-Wörter dar, die für jeden der acht Kanäle gleichzeitig ein einzelnes 16-Bit-Wort speichern und so einen 16-Bit-Kanal unabhängig vom Koeffizientenmodus (z.B. 1*256-Modus, 2*128-Modus, etc.) effektiv belegen. So belegt beispielsweise FP16 den 16-Bit-Kanal vollständig, 2 uf8-Koeffizienten den 16-Bit-Kanal usw. Eine exemplarische Koeffizientenspalte (COEFFICIENT) 808 stellt einen Index eines Filters dar (z.B. einen Koeffizienten des ersten Filters 114 aus 1).
  • 9 ist eine beispielhafte Tabelle 900, die ein exemplarisches Adressierungsmodell für den exemplarischen Koeffizientenspeicher 508 von 5 basierend auf Nicht-FP16-Formaten darstellt. In der beispielhafte Tabelle 900 von 9 sind jedem Kanal 16 Bits zugeordnet. Innerhalb jedes der 16-Bit-Kanäle (z.B. CH0, CH1, CH7, etc.) in einer exemplarischen Datenspalte (DATA[127:0]) 902 werden die Daten für alle Eingangskanäle gepackt. Für Nicht-FP16-Modi hat ein Eingangskanal-Schritt (CH STR IN) keine direkte Bedeutung, wird aber als der Schritt berechnet, so dass der Schritt, wenn mit einer Anzahl von Kanälen pro RAM (CH_PER_RAM) multipliziert, den nächsten RAM-Block korrekt erreicht (z.B. könnte CH STR IN auf eine Nicht-128-Bit-Grenze ausgerichtet sein). Ein Beispiel für ein 4-Bit-pallettiertes Bild für 3x3-Faltung (z.B. 9 Koeffizienten) wird im Folgenden beschrieben:
  • Beispiel 3x3 Filter mit 4 Kanälen, 8-Bit-Koeffizient: Koeffizientenschritt Coeff Stride(In) = 4,5 Zeilen = 0x0048h.
  • Beispiel 2x2 Filter mit 4 Kanälen, 4-Bit-Koeffizient: Koeffizientenschritt Coeff Stride (In) = 2,25 Zeilen = 0x0024h.
  • 10 veranschaulicht einen exemplarischen Faltungsvorgang 1000, um die hierin offenbarten Beispiele umzusetzen. So kann beispielsweise der Faltungsvorgang 1000 durch den CNN-Beschleuniger 500 von 5 ausgeführt werden. In dem veranschaulichten Beispiel von 10 ist der Faltungsmodus des Faltungsvorgangs 1000 der 1*256-Modus, wobei jeder der exemplarischen Eingangskanäle 1002 sequentiell für eine einzelne exemplarische Ausgangsposition 1004 für einen exemplarischen Ausgangskanal 1006 für eine Vielzahl von Ausgangskanälen summiert wird.
  • Im veranschaulichten Beispiel von 10 haben die Eingangskanäle 1002 Abmessungen von 28 Pixel breit (X=28) und 28 Pixel hoch (Y=28) und 50 Kanäle tief (C=50). Beispielhafte Eingabepositionen 1008 für die exemplarischen Eingangskanäle 1002 werden mit exemplarischen Filtern 1010 mit Abmessungen von 5 Pixel breit (Fw=5), 5 Pixel hoch (Fh=5) und 50 Kanäle tief (C=50) verarbeitet. Alternativ können die exemplarischen Eingangskanäle 1002 auch einer sekundären Faltungsschicht des CNN entsprechen (z.B. einer Faltungsschicht nach einer ersten Faltungsschicht). So können beispielsweise die Eingangskanäle 1002 Aktivierungen im Vergleich zu Pixelwerten beinhalten.
  • Im veranschaulichten Beispiel von 10 wird die Ausgangsposition 1004 durch Berechnen einer Summe aller Produkte aller Faltungen der Eingangspositionen 1008 der Eingangskanäle 1002 und der Filter 1010 bestimmt. Zusätzliche Ausgangspositionen des exemplarischen Ausgabekanals 1006 werden verarbeitet, indem die restlichen Eingabepositionen der exemplarischen Eingabekanäle 1002 gefaltet werden, bis eine Gesamtheit der Eingabepositionen verarbeitet ist. Als Reaktion auf die Verarbeitung der Gesamtheit der Eingangspositionen der exemplarischen Eingangskanäle 1002 verwendet der exemplarische CNN-Beschleuniger 500 einen anderen Satz von Filtern, um einen anderen Ausgangskanal zu berechnen. Im veranschaulichten Beispiel von 10 faltet der CNN-Beschleuniger 500 die Eingangskanäle 1002 mit einem anderen Filtersatz aus 100 Filtersätze, um 100 Ausgangskanäle zu erzeugen.
  • 11 veranschaulicht eine exemplarische Operation 1100 des exemplarischen Verbindungsmultiplexer 510 von 5 basierend auf einer 1*256-Faltungsanordnung. Im veranschaulichten Beispiel von 11 weist der Verbindungsmultiplexer 510 einen einzelnen FP16-Ausgang auf, der über alle 256 der DPEs 520 von 5 repliziert ist. Im veranschaulichten Beispiel von 11 wählt der Verbindungsmultiplexer 510 die FP16-Daten aus dem Datenspeicher 506 aus.
  • Im veranschaulichten Beispiel von 11 wird der Datenspeicher 506 basierend auf einer 1*256-Faltungsanordnung konfiguriert. Der im Beispiel von 11 dargestellte Datenspeicher 506 ist in 16 exemplarische Blöcke (RAM0-RAM15) 1102 unterteilt, die als ein einzelnes großes RAM konfiguriert sind. Jeder der Blöcke 1102 beinhaltet acht exemplarische Spalten 104 von FP16-Wörtern und jede der acht Spalten 1104 beinhaltet eine Vielzahl von exemplarischen Datenzeilen 1106. Alternativ können die exemplarischen Blöcke 1102 weniger oder mehr als acht Spalten und/oder weniger oder mehr als die in 11 dargestellten Datenzeilen aufweisen. Im veranschaulichten Beispiel von 11 beinhaltet jede der Datenzeilen 1106 acht Worte des Eingangskanals. Der exemplarische Verbindungsmultiplexer 510 wählt das entsprechende Wort der acht Eingangsworte für jeden Zyklus basierend auf dem Filter und dem aktuellen Eingangskanal, der verarbeitet wird. Die exemplarische Steuerung 502 von 5 bestimmt die Adresse des entsprechenden Wortes basierend auf dem Schritt des Eingangskanals. Die exemplarische Steuerung 502 bestimmt die Gesamtadresse basierend auf der Kombination von mindestens einer der RAM-Adressen und der Verbindungsmatrixadresse.
  • Im veranschaulichten Beispiel von 11 wird jeweils ein einzelner Eingangskanal verarbeitet. So wählt beispielsweise der Verbindungsmultiplexer 510 während eines ersten Taktzyklus die ersten beiden der Datenzeilen 1106 jedes der Blöcke 1102 entsprechend dem ersten Eingangskanal aus und gibt die Vielzahl der Datenzeilen 1106 an die jeweiligen der DPEs 520 von 1 aus. So kann beispielsweise der Verbindungsmultiplexer 510 32 der Datenzeilen 1106 (z.B. 32 Datenzeilen = (2 Datenzeilen/Block) X (16 Blöcke)) auswählen, wobei jede Datenzeile1106 128 Bit (z.B. 128 Bit = (16 Bit/Wort) X (8 Worte/Datenleitung)) enthält, um 4096 Bit (z.B. 4096 Bit = (128 Bit/Datenleitung) X (2 Datenzeilen/Block) X 16 Blöcke) zu erhalten, die von den DPEs 520 zu verarbeiten sind. In solchen Beispielen kann der Verbindungsmultiplexer 510 während eines zweiten Taktzyklus die nächsten zwei Datenzeilen 1106 jedes der 16 Blöcke 1102 entsprechend dem zweiten Eingangskanal auswählen und die Vielzahl der Datenzeilen 1106 zur Verarbeitung an die jeweiligen DPEs 520 ausgeben. In solchen Beispielen wird die Adressierung und Steuersequenz des Datenspeichers 506, des Verbindungsmultiplexers 510 usw. von mindestens einer der Steuerungen 502 oder der DMA-Steuerung 504 aus 5 durchgeführt.
  • 12 veranschaulicht eine exemplarische Operation 1200 des exemplarischen Verbindungsmultiplexers 510 von 5 basierend auf einer 2*128-Faltungsanordnung. Im veranschaulichten Beispiel von 12 weist der Verbindungsmultiplexer 510 zwei FP16-Ausgänge auf, die über beide Sätze von 128 der DPEs 520 von 5 repliziert sind. Im veranschaulichten Beispiel von 12 wählt der Verbindungsmultiplexer 510 die FP16-Daten aus dem Datenspeicher 506 aus.
  • Im veranschaulichten Beispiel von 12 wird der Datenspeicher 506 basierend auf einer 2*128-Faltungsanordnung konfiguriert. Der im Beispiel von 12 dargestellte Datenspeicher 506 ist in 16 exemplarische Blöcke (RAM0-RAM15) 1202 organisiert, die als zwei exemplarische RAM-Blöcke 1204, 1206 konfiguriert sind. Der erste exemplarische RAM-Block 1204 beinhaltet RAM0-RAM7 und der zweite exemplarische RAM-Block 1206 beinhaltet RAM8-RAM15. Jeder der Blöcke 1202 beinhaltet acht exemplarische Spalten 1208 von FP16-Wörtern und jede der acht Spalten 1208 beinhaltet eine Vielzahl von exemplarischen Datenzeilen 1210. In dem veranschaulichten Beispiel von 12 beinhaltet der erste RAM-Block 1204 eine erste Hälfte des Eingangskanalsatzes und der zweite RAM-Block 1206 eine zweite Hälfte des Eingangskanalsatzes. Alternativ können die exemplarischen Blöcke 1202 weniger oder mehr als acht Spalten und/oder weniger oder mehr als die in 12 dargestellten Datenzeilen aufweisen.
  • Im veranschaulichten Beispiel von 12 wird jeweils ein einzelner Eingangskanal verarbeitet. So wählt der Verbindungsmultiplexer 510 beispielsweise während eines ersten Taktzyklus zwei erste der Datenzeilen 1210 jedes der Blöcke 1202 des ersten RAM-Blocks 1204 und zwei erste der Datenzeilen 1210 jedes der Blöcke 1202 des zweiten RAM-Blocks 1206 aus, wobei die ausgewählten Datenzeilen 1210 einem ersten zu verarbeitenden Eingangskanal entsprechen. Der exemplarische Verbindungsmultiplexer 510 gibt die Vielzahl der Datenzeilen 1210 an entsprechende der DPEs 520 von 1 aus. So kann beispielsweise der Verbindungsmultiplexer 510 16 der Datenzeilen 1210 aus dem ersten RAM-Block 1204 und 16 der Datenzeilen 1210 aus dem zweiten RAM-Block 1206 auswählen, wobei jede Datenzeile 1210 128 Bit enthält, um 4096 Bit zu erhalten, die von den DPEs 520 verarbeitet werden sollen.
  • In solchen Beispielen kann der Verbindungsmultiplexer 510 während eines zweiten Taktzyklus die nächsten zwei Datenzeilen 1210 von jedem der Blöcke 1202 im ersten RAM-Block 1204 und die nächsten zwei Datenzeilen 1210 von jedem der Blöcke 1202 im zweiten RAM-Block 1206 entsprechend einem zweiten zu verarbeitenden Eingangskanal auswählen. Der exemplarische Verbindungsmultiplexer 510 gibt die Vielzahl der Datenzeilen 1210 zur Verarbeitung an entsprechende der DPEs 520 aus. In solchen Beispielen wird die Adressierung und Steuersequenz des Datenspeichers 506, des Verbindungsmultiplexers 510 usw. von mindestens einer der Steuerungen 502 oder der DMA-Steuerung 504 aus 5 durchgeführt.
  • 13 ist ein Blockdiagramm einer exemplarischen Implementierung eines CNN-Beschleunigers 1300 zur Implementierung des CNN-Beschleunigers 500 aus 5. Der exemplarische CNN-Beschleuniger 1300 von 13 beschleunigt Faltungsvorgänge durch Verarbeitung einer Vielzahl von Eingangskanälen und/oder Erzeugen eines oder mehrerer Ausgangskanäle im Wesentlichen parallel (z.B. im Wesentlichen gleichzeitig). In dem veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 eine exemplarische DPE Verzeichnis Engine 1302, einen exemplarische DPE-Konfigurationsoptimierer 1304, einen exemplarischen Modusselektor 1306, eine exemplarische Faltungs-Engine 1308, eine exemplarische Pooling-Engine 1310 und eine exemplarische vollständig verbundene Engine 1312.
  • Im veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 die DPE Verzeichnis Engine 1302, um verfügbare DPEs, die sich auf einer Plattform befinden (z.B. dem CNN-Beschleuniger 500 von 5), zu verzeichnen und/oder anderweitig zu identifizieren. Die exemplarische DPE Verzeichnis Engine 1302 kann der exemplarischen Steuerung 502 von 5 entsprechen. Im veranschaulichten Beispiel von 13 implementiert die DPE Verzeichnis Engine 1302 Mittel zum Abfragen, Bestimmen, Charakterisieren und/oder Identifizieren von DPEs, die sich auf der Plattform befinden. In einigen Beispielen bestimmt die DPE Verzeichnis Engine 1302 eine Menge der zur Verarbeitung verfügbaren DPEs 520 aus 5. In einigen Beispielen bestimmt die DPE Verzeichnis Engine 1302 eine Faltungsanordnung, einen Modus usw. des einen oder der mehreren DPEs 520 aus 5 und/oder, allgemeiner, des CNN-Beschleunigers 500 aus 5.
  • Im veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 den exemplarischen DPE-Konfigurationsoptimierer 1304, um eine DPE-Konfiguration, einen Modus usw. auszuwählen und/oder anderweitig zu bestimmen, um die DPE-Ressourcenauslastung zu erhöhen (z.B. zu maximieren) und/oder anderweitig zu optimieren und den Stromverbrauch zu reduzieren (z.B. zu minimieren) und/oder anderweitig zu optimieren. Das Beispiel DPE-Konfigurationsoptimierer 1304 kann der exemplarischen Steuerung 502 von 5 entsprechen. Im veranschaulichten Beispiel von 13 implementiert der DPE-Konfigurationsoptimierer 1304 Mittel zum Bestimmen einer DPE-Konfiguration, eines Modus usw., um die DPE-Ressourcenauslastung zu erhöhen und den Stromverbrauch zu reduzieren. So kann beispielsweise die DPE-Konfiguration einer Konfiguration des Datenspeichers 506, des Koeffizientenspeichers 508, der DPE-Anordnung 512 usw. entsprechen, wenn sich der CNN-Beschleuniger 500 in einem Faltungsmodus, einem Pooling-Modus, einem vollständig angeschlossenen Modus usw. befindet. Der exemplarische DPE-Konfigurationsoptimierer 1304 implementiert Mittel, um den optimalen Betrieb des exemplarischen CNN-Beschleunigers 500 von 5 mit im Wesentlichen geringer Leistung (z.B. wenig oder keine wiederholte Datenbewegung) und maximaler Hardwareauslastung zu gewährleisten.
  • In einigen Beispielen kann zur Reduzierung der Datenbewegung eine Gesamtzahl von Ausgängen und ein gesamter Koeffizientensatz im exemplarischen Koeffizientenspeicher 508 von 5 gespeichert sein. In einigen Beispielen bestimmt der DPE-Konfigurationsoptimierer 1304 eine Konfiguration des Koeffizientenspeichers 508 basierend auf Filterdimensionen, um die Datenbewegung zu reduzieren. So kann beispielsweise bei einer Filtergröße von 3x3 unter Verwendung von FP16-Koeffizienten der DPE-Konfigurationsoptimierer 1304 eine Grenze von ca. 28 Eingangskanälen bestimmen (z.B. 28 ≈ 256/9, wobei der Koeffizientenspeicher 508 256 Positionen hat). In solchen Beispielen bestimmt der DPE-Konfigurationsoptimierer 1304 die Grenze von 28 Eingangskanälen, um sicherzustellen, dass die Gesamtzahl der Ausgänge und der gesamte Koeffizientensatz im Koeffizientenspeicher 508 von 5 gespeichert werden können.
  • In einigen Beispielen verringert der DPE-Konfigurationsoptimierer 1304 die Anzahl der Ausgangskanäle, wobei jede Reduzierung des Modus eine Verdoppelung der Eingangskanalverarbeitungskapazität bewirkt. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 von einer 1*256-Faltungsanordnung zu einer 2*128-Faltungsanordnung oder einer 4*64-Faltungsanordnung wechseln, um die gleiche Beschleunigung bei geringerem Gesamtenergieverbrauch zu erreichen. In einigen Beispielen setzt der DPE-Konfigurationsoptimierer 1304 eine zirkuläre Bufferverwaltung ein, wenn alle Eingangskanäle (z.B. Eingangsbilddaten) oder alle einem Bild zugeordneten Koeffizienten nicht in den Koeffizientenspeicher 508 passen. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 ein kanalweise zirkulares Bufferverwaltungssystem konfigurieren, bei dem alle Kanäle so schnell wie möglich aus dem Speicher (z.B. SRAM, DRAM, etc.) kontinuierlich aufgefüllt werden, um eine Verzögerung zu vermeiden oder zu minimieren.
  • In einigen Beispielen stoppt und/oder verhindert der DPE-Konfigurationsoptimierer 1304 anderweitig, dass der CNN-Beschleuniger 1300 einen Vorgang (z.B. einen Faltungsvorgang, eine Poolingoperation, eine vollständig verbundene Operation usw.) basierend auf einer DPE-Nutzung durch Verwendung einer Faltungsanordnung durchführt. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 die 1*256-Faltungsanordnung als erste Faltungsanordnung auswählen, die analysiert, bewertet, verarbeitet usw. werden soll. In solchen Beispielen kann der DPE-Konfigurationsoptimierer 1304 bestimmen, dass die 1*256-Faltungsanordnung zu einer ersten DPE-Ausnutzung von 75% führt, basierend auf 64 von 256 DPEs 520 der DPE-Anordnungs 512, die während eines Betriebs des CNN-Beschleunigers 1300 basierend auf Betriebsanforderungen (z.B. eine Anzahl von Eingangskanälen, eine Anzahl von Ausgangskanälen usw., die verarbeitet oder erzeugt werden sollen) ungenutzt bleiben. Der exemplarische DPE-Konfigurationsoptimierer 1304 kann die erste DPE-Auslastung von 75% mit einem DPE-Auslastungsschwellenwert von 90% vergleichen und feststellen, dass die erste DPE-Auslastung nicht den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt (z.B. ist die erste DPE-Auslastung von 75% kleiner als die 90% DPE-Auslastungsschwelle). Als Reaktion darauf, dass die erste DPE-Auslastung nicht den DPE-Auslastungsschwellenwert erfüllt, kann der exemplarische DPE-Konfigurationsoptimierer 1304 den exemplarischen CNN-Beschleuniger 1300 daran hindern, eine Operation mit der ersten Faltungsanordnung auszuführen, bis eine andere Faltungsanordnung für die DPE-Ausnutzung erzeugt, bestimmt und/oder ausgewertet ist.
  • In einigen Beispielen wählt der DPE-Konfigurationsoptimierer 1304 als Reaktion auf das Anhalten eine zweite Faltungsanordnung aus, wie beispielsweise die zu verarbeitende 4*64-Faltungsanordnung. In solchen Beispielen kann der DPE-Konfigurationsoptimierer 1304 bestimmen, dass die 4*64-Faltungsanordnung zu einer zweiten DPE-Ausnutzung von 100% führt, basierend auf 0 von 256 DPEs 520 der DPE-Anordnung 512, die während eines Betriebs des CNN-Beschleunigers 1300 basierend auf den Betriebsanforderungen nicht verwendet wird. Der exemplarische DPE-Konfigurationsoptimierer 1304 kann die zweite DPE-Auslastung von 100% mit dem 90%igen DPE-Auslastungsschwellenwert vergleichen und bestimmen, dass die zweite DPE-Auslastung den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt (z.B. ist die zweite DPE-Auslastung von 100% größer als die 90%ige DPE-Auslastungsschwelle). Als Reaktion darauf, dass die zweite DPE-Verwendung den DPE-Verwendungsschwellenwert erfüllt, kann der exemplarische DPE-Konfigurationsoptimierer 1304 den exemplarischen CNN-Beschleuniger 1300 anweisen, den Vorgang mit der zweiten Faltungsanordnung auszuführen. Zusätzlich oder alternativ kann der exemplarische DPE-Konfigurationsoptimierer 1304 die zweite DPE-Auslastung mit der ersten DPE-Auslastung vergleichen und den exemplarischen CNN-Beschleuniger 1300 anweisen, den Vorgang mit der zweiten Faltungsanordnung basierend auf der zweiten Faltungsanordnung mit einer höheren DPE-Auslastung als der ersten Faltungsanordnung auszuführen.
  • In einigen Beispielen passt der DPE-Konfigurationsoptimierer 1304 eine Konfiguration des Akkumulators 604 der DPEs 520 an (z.B. dynamisch anpassen, dynamisch konfigurieren, etc.). In einigen Beispielen verringert der DPE-Konfigurationsoptimierer 1304 eine Anzahl von ganzzahligen Bits des Akkumulators 604, wenn die Eingangswerte nicht die vorhandene Anzahl von ganzzahligen Bits erfordern, die dem Akkumulator 604 zur Verfügung stehen. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 eine Anzahl von ganzzahligen Bits verringern, die der Akkumulator 604 verarbeiten kann, um einen Bereich zu vergrößern, aber eine Genauigkeit des Akkumulators 604 zu verringern. In einigen Beispielen erhöht der DPE-Konfigurationsoptimierer 1304 eine Anzahl von ganzzahligen Bits des Akkumulators 604, wenn der Akkumulator 604 überläuft. So kann beispielsweise der Konfigurationsoptimierer 1304 eine Anzahl von ganzzahligen Bits erhöhen, die der Akkumulator 604 verarbeiten kann, um den Bereich zu vergrößern, aber die Genauigkeit des Akkumulators 604 zu verringern.
  • Im veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 den Modusselektor 1306 zur Auswahl einer Betriebsart, einer auszuführenden Operation und/oder einer Faltungsanordnung. Der exemplarische Modusselektor 1306 kann der exemplarischen Steuerung 502 von 5 entsprechen. In dem veranschaulichten Beispiel von 13 implementiert der Modusselektor 1306 Mittel zur Auswahl einer Betriebsart wie beispielsweise eines Faltungsmodus, eines Pooling-Modus, eines vollständig verbunden Modus usw. und zur Konfiguration des CNN-Beschleunigers 1300 basierend auf dem ausgewählten Modus. In einigen Beispielen wählt der Modusselektor 1306 einen optionalen Pooling-Modus innerhalb des Faltungsmodus. In einigen Beispielen wählt der Modusselektor 1306 einen Nachbearbeitungsvorgang innerhalb eines der Modi aus. So kann beispielsweise der Modusselektor 1306 die DPEs 520 von 5 anweisen, eine Biasoperation, eine Skalierungsoperation, eine PReLU-Operation, oder eine ReLU-Operation usw. durchzuführen, nachdem ein Faltungsvorgang im Faltungsmodus abgeschlossen wurde, nachdem ein Poolvorgang im Pooling-Modus abgeschlossen wurde, usw.
  • In einigen Beispielen konfiguriert der Modusselektor 1306 den CNN-Beschleuniger 500 von 5 basierend auf dem ausgewählten Modus. So kann beispielsweise der Modusselektor 1306 den Datenspeicher 506, den Koeffizientenspeicher 508, das DPE- 512 usw. von 5 basierend auf dem ausgewählten Modus konfigurieren. So kann beispielsweise der Modusselektor 1306 den Koeffizientenspeicher 508 für den Faltungsmodus konfigurieren, indem er die DMA-Steuerung 504 anweist, Koeffizientenwerte an den Koeffizientenspeicher 508 zu übertragen. In anderen Beispielen kann der Modusselektor 1306 die DPE-Anordnung 512 für eine Biasoperation, eine Skalierungsoperation usw. konfigurieren, indem er den Koeffizientenspeicher 508 anweist, einen Biasparameter, einen Skalierungsparameter usw. für die Verarbeitung an die DPE-Anordnung 512 zu senden.
  • Im veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 die Faltungs-Engine 1308, um einen Faltungsvorgang an Bilddaten durchzuführen und/oder anderweitig zu ermöglichen, die einem Eingangsbild zugeordnet sind. Die exemplarische Faltungs-Engine 1308 kann der exemplarischen Steuerung 502 von 5 entsprechen. So kann beispielsweise die Faltungs-Engine 1308 der Steuerung 502 entsprechen, die den Datenspeicher 506, den Koeffizientenspeicher 508, eine oder mehrere der DPEs 520 usw. anweist und/oder anderweitig leitet, einen Faltungsvorgang durchzuführen. In dem veranschaulichten Beispiel von 13 beinhaltet die Faltungs-Engine 1308 Mittel zum Falten einer Vielzahl von Eingangskanälen, einschließlich Aktivierungswerten, Pixelwerten usw., mit einer Vielzahl von Filtern, um eine Vielzahl von Ausgangskanälen im Wesentlichen parallel zu erzeugen. So beinhaltet beispielsweise die Faltungs-Engine 1308 Mittel, um einen Faltungsvorgang mit einem oder mehreren DPEs 520 der DPE-Anordnung 512 zu ermöglichen.
  • In einigen Beispielen führt die Faltungs-Engine 1308 die Faltung durch, indem sie Bilddaten (z.B. Aktivierungswerte, Pixelwerte usw.) erhält, die einem Eingangsbild (z.B. dem Eingangsbild 106 von 1) zugeordnet sind, die Bilddaten mit Filterkoeffizienten faltet, die interessierenden im Eingangsbild zu erkennenden Bildmerkmalen zugeordnet sind, und Ausgaben erzeugt, die der Überlappung der Bilddaten mit den Filterkoeffizienten zugeordnet sind. In solchen Beispielen konfiguriert der Modusselektor 1306 den Datenspeicher 506, den Koeffizientenspeicher 508, die DPE-Anordnung 512 usw. von 5 basierend auf einer Faltungsanordnung.
  • In einem Beispiel, in dem der Modusselektor 1306 eine 2*128-Faltungsanordnung wählt, konfiguriert die exemplarische Faltungs-Engine 1308 den exemplarischen Datenspeicher 506 in zwei RAM-Blöcke, wie vorstehend in Verbindung mit 12 beschrieben. Die exemplarische Faltungs-Engine 1308 konfiguriert den Koeffizientenspeicher 508 in zwei Koeffizientenblöcke, wie vorstehend in Verbindung mit dem dritten Beispiel Koeffizientenspeicher 704 von 7 beschrieben. Die exemplarische Faltungs-Engine 1308 lädt einen Teil der Datenzeilen oder alle für jeden zu verarbeitenden Eingangskanal in den exemplarischen Datenspeicher 506 und lädt die den Eingangsdaten zugeordneten Koeffizienten in den exemplarischen Koeffizientenspeicher 508 von 5, so dass die Datenzeilen und die Koeffizienten mit den jeweiligen der DPEs 520 von 5 übereinstimmen.
  • Als Reaktion darauf, dass der exemplarische Datenspeicher 506 und der exemplarische Koeffizientenspeicher 508 geladen und/oder anderweitig konfiguriert werden, führt die exemplarische Faltungs-Engine 1308 einen Faltungsvorgang (z.B. den Faltungsvorgang 1000 aus 10) im Wesentlichen parallel an eine erste Ausgangsposition (z.B. die Ausgangsposition 1004 aus 10) durch. So setzt beispielsweise die Faltungs-Engine 1308 den Faltungsvorgang um, indem sie geeignete Wörter (z.B. Wörter, die den Eingabepositionen 1008 zugeordnet sind), die im Datenspeicher 506 gespeichert sind, adressiert und an die entsprechenden der DPEs 520 überträgt, während die im Koeffizientenspeicher 508 enthaltenen Koeffizienten zu den DPEs 520 durchgeschaltet werden, um Faltungsausgabewerte zu erzeugen.
  • Die exemplarische Faltungs-Engine 1308 verarbeitet (z.B. iterativ) die Wörter, bis eine Gesamtheit der Wörter (z.B. eine Gesamtheit der Wörter, die den Eingabepositionen 1008 von 10 zugeordnet sind) verarbeitet ist. In einigen Beispielen führt die Faltungs-Engine 1308 eine Nachbearbeitungsoperation durch (z.B. eine Biasoperation, eine Skalierungsoperation, eine PReLU-Operation, eine ReLU-Operation usw.), wenn alle Wörter für eine Eingabeposition verarbeitet wurden. Unter Verwendung des Eingangskanalschrittes faltet die exemplarische Faltungs-Engine 1308 den/die nächsten Kanal(e) mit den DPEs 520, bis alle Eingangspositionen der Eingangskanäle verarbeitet sind, um Faltungsausgabewerte zu erzeugen.
  • In einigen Beispielen führt die Faltungs-Engine 1308 eine optionale Poolingoperation (z.B. eine Durchschnitt Poolingoperation, eine Maximum Poolingoperation usw.) an den Faltungsausgängen innerhalb des Faltungsmodus durch. So kann beispielsweise die Faltungs-Engine 1308 einen Mittelwert, einen Maximalwert usw. eines Poolbereichs (z.B. der Poolbereich 212 von 2) zu einem Ausgangspuffer (z.B. der Ausgangspuffer 514 von 5) als Poolausgabe bestimmen. Die exemplarische Faltungs-Engine 1308 schreibt die Poolausgaben und/oder generell die Ausgaben der DPEs 520 aus dem Ausgangspuffer 514 in den Speicher, wenn der Ausgangspuffer 514 voll ist (z.B. wurde eine Schwellenwertmenge von Werten pro DPE 520 berechnet).
  • Im veranschaulichten Beispiel von 13 beinhaltet das CNN-Beschleuniger 1300 die Pooling-Engine 1310, um eine Poolingoperation wie eine Durchschnitt Poolingoperation oder eine Maximum Poolingoperation an einem oder mehreren Faltungsausgängen durchzuführen. Die exemplarische Pooling-Engine 1310 kann der exemplarischen Steuerung 502 von 5 entsprechen. So kann beispielsweise die Pooling-Engine 1310 der Steuerung 502 entsprechen, die den Datenspeicher 506, den Koeffizientenspeicher 508, eine oder mehrere der DPEs 520 usw. anweist und/oder anderweitig veranlasst, eine Poolingoperation innerhalb eines Pooling-Modus durchzuführen. In dem veranschaulichten Beispiel implementiert der Pooling-Engine 1310 Mittel, um eine Poolingoperation an einem Satz von Faltungsausgängen durchzuführen, die von dem Faltungs-Engine 1308 erzeugt werden.
  • In einigen Beispielen verarbeitet die Pooling-Engine 1310 einen Poolbereich, um eine Poolausgabe zu erzeugen. So kann beispielsweise die Pooling-Engine 1310 den Poolbereich 212 von 3 verarbeiten, um die Ausgangsposition 302 von 3 basierend auf einem Durchschnittswert, einem Maximalwert usw. des Poolbereichs 212 zu erzeugen. So kann beispielsweise die Pooling-Engine 1310 alle 4 Taktzyklen Daten für einen 2x2-Pool, alle 9 Taktzyklen Daten für einen 3x3-Pool usw. ausgeben. Die exemplarische Pooling-Engine 1310 führt eine Durchschnitt Poolingoperation durch, indem sie eine Summe von Daten in einem Poolbereich berechnet und die Summe mit 1/Av multipliziert, wobei Av eine Poolgröße ist, die durch die Berechnung der Poolbreite multipliziert mit der Poolhöhe bestimmt wird. Die exemplarische Pooling-Engine 1310 führt eine Maximum Poolingoperation durch, indem sie einen Maximalwert für den Poolbereich bestimmt.
  • Im veranschaulichten Beispiel von 13 beinhaltet der CNN-Beschleuniger 1300 die vollständig verbundene Engine 1312, um über die Ausgänge der Faltungs-Engine 1308 (z.B. Faltungsausgänge) und/oder der Pooling-Engine 1310 (z.B. Poolausgänge) ein Eingangsbild (z.B. das Eingangsbild 106 von 1) basierend auf einem Trainingsdatensatz in verschiedene Klassen zu klassifizieren. Das Beispiel der vollständig verbundene Engine 1312 aus 13 kann der Steuerung 502 aus 5 entsprechen. So kann beispielsweise die Steuerung 502 den Datenspeicher 506, den Koeffizientenspeicher 508, die DPE-Anordnung 512 usw. anweisen, eine vollständig verbundene Operation durchzuführen (z.B. das AusgabeArray 406 von 4 erzeugen). In dem veranschaulichten Beispiel von 13 implementiert die vollständig verbundene Engine 1312 Mittel zum Klassifizieren von Bildmerkmalen eines Eingangsbildes basierend auf Faltungsausgängen und/oder Poolausgängen, um Bildmerkmale zu erkennen und/oder anderweitig zu identifizieren, die in einem Eingangsbild enthalten sind.
  • In einigen Beispielen implementiert der CNN-Beschleuniger 1300 den CNN-Beschleuniger 500 aus 5 unter Verwendung einer oder mehrerer verknüpfter Listen. Eine verknüpfte Liste ist eine lineare Sammlung von Datenelementen, in der die lineare Reihenfolge nicht durch ihre physische Platzierung im Speicher gegeben ist, sondern jedes der Datenelemente auf ein nächstes der Datenelemente zeigt. In einigen Beispielen werden die verknüpften Listen im Systemspeicher abgelegt. So können beispielsweise die verknüpften Listen im Hauptspeicher 516 von 5 abgelegt und von der Steuerung 502 von 5 ausgeführt werden. In einigen Beispielen erleichtern die verknüpften Listen Unterfunktionen, die sich zu Makrofunktionen verknüpfen. In einigen Beispielen gibt es keine Begrenzung der Anzahl der Unterfunktionen, da die Faltungs-Engine 1308, die Pooling-Engine 1310, die vollständig verbundene Engine 1312 usw. nacheinander jeden Vorgang durchlaufen können, bis eine NULL-Verbindung erreicht ist, die das Ende der Makrofunktion anzeigt. So kann beispielsweise die Steuerung 502 die gesamte CNN-Funktion des CNN-Beschleunigers 500 in klar identifizierbare Blöcke unterteilen und jeden der Blöcke ausführen, bis eine NULL-Verbindung erreicht ist.
  • In einigen Beispielen verwaltet der CNN-Beschleuniger 1300 von 13 zwei oder mehr separate verknüpfte Listen. Der exemplarische CNN-Beschleuniger 1300 von 13 kann die beiden oder mehreren verknüpften Listen standardmäßig im Round Robin Verfahren oder in anderer Weise ausführen und/oder verarbeiten. In einigen Beispielen kann der CNN-Beschleuniger 1300 von 13 eine oder mehrere der verknüpften Listen sperren oder einfrieren, um sicherzustellen, dass eine der verknüpften Listen abgeschlossen ist, bevor sie an eine zweite der verknüpften Listen übergeben wird.
  • Die exemplarischen DPE Verzeichnis Engine Mittel, die exemplarischen DPE-Konfigurationsoptimierer Mittel, die exemplarischen Modusselektor Mittel, die exemplarische Faltungs-Engine Mittel, die exemplarischen Pooling-Engine Mittel und/oder die exemplarischen vollständig verbundene Engine Mittel sind durch Software implementiert, die auf einem Hardware-Prozessor ausgeführt wird. Zusätzlich oder alternativ könnten die exemplarischen DPE Verzeichnis Engine Mittel, die exemplarischen DPE-Konfigurationsoptimierer Mittel, die exemplarischen Modusselektor Mittel, die exemplarische Faltungs-Engine Mittel, die exemplarischen Pooling-Engine Mittel und/oder die exemplarischen vollständig verbundene Engine Mittel stattdessen durch eine Logikschaltung implementiert werden, die so aufgebaut ist, dass sie logische Operationen durchführt, um die gewünschte Funktionalität zu erreichen, wie beispielsweise ein ASIC, ein FPGA oder dergleichen und/oder eine Kombination aus solchen Schaltungen und Software und/oder Firmware.
  • Während in 5 eine exemplarische Art und Weise der Implementierung des exemplarischen CNN-Beschleunigers 500 dargestellt ist, können eines oder mehrere der in 5 dargestellten Elemente, Prozesse und/oder Vorrichtungen kombiniert, geteilt, neu angeordnet, weggelassen, eliminiert und/oder auf andere Weise implementiert werden. Weiterhin kann die exemplarische DPE Verzeichnis Engine 1302, der exemplarische DPE-Konfigurationsoptimierer 1304, der exemplarische Modusselektor 1306, die exemplarische Faltungs-Engine 1308, die exemplarische Pooling-Engine 1310, die exemplarische vollständig verbundene Engine 1312 und/oder, allgemeiner, der exemplarische CNN-Beschleuniger 1300 aus 13 durch Hardware, Software, Firmware und/oder eine beliebige Kombination von Hardware, Software und/oder Firmware implementiert werden. So könnte beispielsweise jede der exemplarischen DPE Verzeichnis Engine 1302, der exemplarische DPE-Konfigurationsoptimierer 1304, der exemplarische Modusselektor 1306, der exemplarische Faltungs-Engine 1308, der exemplarische Pooling-Engine 1310, der exemplarische vollständig verbundene Engine 1312 und/oder ganz allgemein der exemplarische CNN-Beschleuniger 1300 aus 13 durch eine oder mehrere analoge oder digitale Schaltungen, logische Schaltungen, programmierbare Prozessoren, programmierbare Steuerung(en), Grafikprozessor(en) (GPU(s)), digitale Signalprozessoren (DSP(s)), anwendungsspezifische integrierte Schaltungen (ASIC(s)), programmierbare logische Vorrichtungen (PLD(s)) und/oder feldprogrammierbare logische Vorrichtungen (FPLD(s)) implementiert werden. Beim Lesen eines der Vorrichtungs- oder Systemansprüche dieses Patents, um eine reine Software- und/oder Firmware-Implementierung abzudecken, ist mindestens einer der exemplarischen DPE Verzeichnis Engine 1302, der exemplarische DPE-Konfigurationsoptimierer 1304, der exemplarische Modusselektor 1306, die exemplarische Faltungs-Engine 1308, die exemplarische Pooling-Engine 1310 und/oder der exemplarische vollständig verbundene Engine 1312 hiermit ausdrücklich definiert, um eine nicht-flüchtige computerlesbare Speichervorrichtung oder Speicherplatte wie einen Speicher, eine digitale vielseitige Festplatte (DVD), eine kompakte Festplatte (CD), eine Blu-ray-Disk usw. zu beinhalten, einschließlich der Software und/oder Firmware. Weiterhin kann der exemplarische CNN-Beschleuniger 1300 von 13 ein oder mehrere Elemente, Prozesse und/oder Vorrichtungen zusätzlich zu oder anstelle von den in 13 dargestellten beinhalten und/oder mehr als eines der dargestellten Elemente, Prozesse und Vorrichtungen beinhalten. Wie hierin verwendet, umfasst der Begriff „in Kommunikation“, einschließlich seiner Variationen, die direkte Kommunikation und/oder indirekte Kommunikation über eine oder mehrere Zwischenkomponenten und erfordert keine direkte physische (z.B. drahtgebundene) Kommunikation und/oder konstante Kommunikation, sondern zusätzlich eine selektive Kommunikation in periodischen Intervallen, geplanten Intervallen, aperiodischen Intervallen und/oder einmaligen Ereignissen.
  • Flussdiagramme, die für exemplarische Hardware-Logik, maschinenlesbare Anweisungen, hardwareimplementierte Zustandsmaschinen und/oder jede beliebige Kombination davon zur Implementierung des CNN-Beschleunigers 1300 aus 13 stehen, sind in den 14-18 dargestellt. Die maschinenlesbaren Anweisungen können ein ausführbares Programm oder ein Teil eines ausführbaren Programms zur Ausführung durch einen Computerprozessor wie den Prozessor 1912 sein, der in der exemplarischen Prozessorplattform 1900 dargestellt ist, die nachfolgend in Verbindung mit 19 erläutert wird. Das Programm kann in Software verkörpert sein, die auf einem nicht-flüchtigen, computerlesbaren Speichermedium gespeichert ist, wie beispielsweise einer CD-ROM, einer Diskette, einer Festplatte, einer DVD, einer Blu-ray-Disk oder einem dem Prozessor 1912 zugeordneten Speicher, aber das gesamte Programm und/oder Teile davon können alternativ von einer anderen Vorrichtung als dem Prozessor 1912 und/oder in Firmware oder spezieller Hardware ausgeführt werden. Obwohl das Beispielprogramm mit Bezug auf die in den 14-18 dargestellten Flussdiagramme beschrieben ist, können alternativ viele andere Methoden zur Implementierung des exemplarischen CNN-Beschleunigers 1300 verwendet werden. So kann beispielsweise die Reihenfolge der Ausführung der Blöcke geändert werden und/oder einige der beschriebenen Blöcke können geändert, eliminiert oder kombiniert werden. Zusätzlich oder alternativ können einzelne oder alle Blöcke durch eine oder mehrere Hardwareschaltungen (z.B. diskrete und/oder integrierte analoge und/oder digitale Schaltungen, ein FPGA, ein ASIC, ein Komparator, ein Operationsverstärker (Operationsverstärker), eine Logikschaltung usw.) implementiert werden, die so aufgebaut sind, dass sie den entsprechenden Vorgang ohne Ausführung von Software oder Firmware durchführen.
  • Wie vorstehend erwähnt, können die exemplarischen Verfahren der 14-18 unter Verwendung ausführbarer Anweisungen (z.B. computer- und/oder maschinenlesbare Anweisungen) implementiert werden, die auf einem nichtflüchtigen Computer und/oder maschinenlesbaren Medium gespeichert sind, wie beispielsweise einer Festplatte, einem Flash-Speicher, einem Nur-Lese-Speicher, einer Compact-Disk, einer digitalen Vielseitigkeits-Disk, einem Cache, einem Direktzugriffsspeicher und/oder jeder anderen Speichervorrichtung oder Speicherplatte, auf der Informationen für eine beliebige Dauer gespeichert sind (z.B, für längere Zeiträume, dauerhaft, für kurze Zeiträume, für die Zwischenspeicherung und/oder für das Caching der Informationen). Wie hierin verwendet, wird der Begriff nichtflüchtiges, computerlesbares Medium ausdrücklich definiert, um jede Art von computerlesbarer Speichervorrichtung und/oder Speicherplatte zu erfassen und Verbreitungssignale auszuschließen und Übertragungsmedien auszuschließen.
  • „Einschließlich“ und „umfassend“ (und alle Formen und Zeitformen davon) werden hierin als offene Begriffe verwendet. Wenn also ein Anspruch irgendeine Form von „einschließen“ oder „umfassen“ (z.B. umfasst, weist auf, beinhaltend, aufweisend, umfassend, habend, etc.) als Präambel oder innerhalb eines Anspruchswortlauts jeglicher Art verwendet, ist zu verstehen, dass zusätzliche Elemente, Begriffe usw. vorhanden sein können, ohne dass sie aus dem Schutzbereich des entsprechenden Anspruchs oder der entsprechenden Rezitation fallen. Wie hierin verwendet, wenn der Ausdruck „mindestens“ als Übergangsbegriff in z.B. einer Präambel eines Anspruchs verwendet wird, ist er in gleicher Weise wie die Begriffe „umfassend“ und „einschließend“ offen sind. Der Begriff „und/oder“, wenn er beispielsweise in einer Form wie A, B und/oder C verwendet wird, bezieht sich auf jede Kombination oder Teilmenge von A, B, C wie (1) A allein, (2) B allein, (3) C allein, (4) A mit B, (5) A mit C, (6) B mit C und (7) A mit B und C.
  • 14 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen 1400 steht, die ausgeführt werden können, um den CNN-Beschleuniger 500 von 5 und/oder den CNN-Beschleuniger 1300 von 13 zur Verarbeitung von Bilddaten, die einem Eingangsbild zugeordnet sind, zu implementieren. Die exemplarischen maschinenlesbaren Anweisungen 1400 von 14 beginnen bei Block 1402, bei dem der exemplarische CNN-Beschleuniger 1300 die verfügbaren Datenverarbeitungselemente (DPEs) erfasst. So kann beispielsweise die DPE Verzeichnis Engine 1302 eine Verfügbarkeit der DPEs 520 für die Verarbeitung, eine Konfiguration und/oder einen Modus einer oder mehrerer der DPEs 520 usw. bestimmen.
  • Bei Block 1404 wählt der exemplarische CNN-Beschleuniger 1300 eine DPE-Konfiguration aus, um die Auslastung der DPE-Ressourcen zu maximieren und den Stromverbrauch zu minimieren. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 bestimmen, dass eine 1*256-Faltungsanordnung, eine 2*128-Faltungsanordnung usw. verwendet wird, basierend auf einer Filtergröße, einer Anzahl zu verarbeitender Eingangskanäle, einer gewünschten Anzahl von zu erzeugenden Ausgangskanälen usw., um die DPE-Ressourcenauslastung zu erhöhen und den Stromverbrauch zu reduzieren. In solchen Beispielen kann der DPE-Konfigurationsoptimierer 1304 eine Menge der Eingangskanäle begrenzen, um sicherzustellen, dass eine Gesamtheit der den Eingangskanälen zugeordneten Bilddaten und der entsprechenden Koeffizienten vollständig im CNN-Beschleuniger 500 von 5 gespeichert werden kann, um die Datenbewegung zu reduzieren (z.B. zu minimieren), um den Stromverbrauch zu reduzieren und gleichzeitig eine im Wesentlichen hohe DPE-Ressourcenauslastung (z.B. 75% Auslastung, 100% Auslastung, etc.) aufrechtzuerhalten.
  • Als Reaktion auf die Auswahl der DPE-Konfiguration bestimmt der beispielhafte CNN-Beschleuniger 1300, ob die DPE-Konfiguration zu einem oder mehreren unbenutzten DPEs bei Block 1406 führt oder darin resultiert. In einem Beispiel, in dem die Betriebsanforderungen 64 Eingangskanäle und 192 Ausgangskanäle umfassen, bestimmt der DPE-Konfigurationsoptimierer 1304, die 4*64-Faltungsanordnung zu verwenden, die dreimal für alle Eingänge basierend auf dem 4*64 getaktet wird, was zu einer höheren DPE-Auslastung im Vergleich zu anderen Faltungsanordnungen führt (z.B. 1*256, 2*128, 4*32, etc.).
  • Wenn bei Block 1406 der exemplarische CNN-Beschleuniger 1300 feststellt, dass es unbenutzte DPE gibt, fährt die Steuerung mit Block 1408 fort, um einen Betrieb des CNN-Beschleunigers 1300 zu stoppen und eine alternative DPE-Konfiguration zu erzeugen. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 bestimmen, dass ein weiteres Fortschreiten einer Operation des CNN-Beschleunigers 1300 verhindert oder zurückgehalten wird, bis eine Schwellenwertmenge von verfügbaren DPEs 520 für den Vorgang zugewiesen, bestimmt usw. ist. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 bestimmen, dass eine alternative Faltungsanordnung der DPEs 520 erzeugt wird, um eine DPE-Auslastung über einen DPE-Auslastungsschwellenwert zu erhöhen. Wenn beispielsweise der DPE-Konfigurationsoptimierer 1304 eine 1*256-Faltungsanordnung bei Block 1404 ausgewählt hätte, würden 64 unbenutzte DPEs 520 zu einer 75%igen DPE-Auslastung während des gesamten Faltungsvorgangs führen und somit zu einer längeren Faltungszeit im Vergleich zu anderen Faltungsanordnungen wie der 4*64-Faltungsanordnung, was zu 0 unbenutzten DPEs 520 und einer entsprechenden 100%igen DPE-Auslastung führen würde.
  • In solchen Beispielen kann der DPE-Konfigurationsoptimierer 1304 die 4*64-Faltungsanordnung bei Block 1408 erzeugen und/oder anderweitig bestimmen. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 bestimmen, dass die 4*64-Faltungsanordnung verwendet wird, basierend auf der DPE-Ausnutzung der 4*64-Faltungsanordnung, die größer ist als (1) eine DPE-Ausnutzung einer zuvor erzeugten Faltungsanordnung (z.B. die 1*256-Faltungsanordnung und/oder basierend auf (2) einer DPE-Auslastungsschwelle (z.B. 75% DPE-Auslastung, 90% DPE-Auslastung, etc.). So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 erzeugen und bestimmen, dass die 4*64-Faltungsanordnung basierend auf einer entsprechenden DPE-Auslastung verwendet wird, die einen DPE-Auslastungsschwellenwert erfüllt (z.B. ist die DPE-Auslastung größer als der DPE-Auslastungsschwellenwert). Als Reaktion auf das Erzeugen der alternativen DPE-Konfiguration bei Block 1408 kehrt die Steuerung zu Block 1404 zurück, um die bei Block 1408 erzeugte DPE-Konfiguration auszuwählen. Alternativ, wenn es keine alternative DPE-Konfiguration gibt, die zu keinen ungenutzten DPEs 520 führt oder einen DPE-Auslastungsschwellenwert erfüllt, kann die Steuerung von Block 1406 zu Block 1410 (z.B. nach einer Timeout-Periode, nach der Auswertung einer DPE-Auslastung einer oder mehrerer Faltungsanordnungen usw.) gehen, um mit einer aktuellen DPE-Konfiguration fortzufahren, eine Warnung zu erzeugen, die anzeigt, dass es keine alternative DPE-Konfiguration gibt, oder einen Betrieb des CNN-Beschleunigers 1300 zu stoppen.
  • Wenn bei Block 1406 der exemplarische CNN-Beschleuniger 1300 bestimmt, dass es kein unbenutztes DPE gibt, dann wählt der CNN-Beschleuniger 1300 bei Block 1410 einen Steuermodus aus. So kann beispielsweise der Modusselektor 1306 festlegen, dass er in einer Faltung mit optionalem Pooling-Modus, einem überlappenden Pooling-Modus oder einem vollständig verbundenen Modus arbeitet.
  • Als Reaktion auf die Auswahl einer Faltung mit optionalem Pooling-Modus fährt die Steuerung mit Block 1412 fort, um in einem Faltung mit optionalem Pooling-Modus den Betreib aufzunehmen. Ein exemplarischer Prozess, der zur Implementierung von Block 1412 verwendet werden kann, wird im Folgenden in Verbindung mit 15 beschrieben. So kann beispielsweise die Steuerung 502 die DPEs 520 anweisen, in einem Faltungsmodus, einem Faltungsmodus mit Pooling usw. zu arbeiten.
  • Als Reaktion auf die Auswahl eines überlappenden Pooling-Modus fährt die Steuerung mit Block 1414 fort, um den Betrieb in einem überlappenden Pooling-Modus aufzunehmen. Ein exemplarischer Prozess, der zur Implementierung von Block 1414 verwendet werden kann, wird im Folgenden in Verbindung mit 16 beschrieben. So kann beispielsweise die Steuerung 502 die DPEs 520 anweisen, in einem überlappenden Pooling-Modus zu arbeiten.
  • Als Reaktion auf die Auswahl eines vollständig verbundenen Modus fährt die Steuerung mit Block 1416 fort, um den Betrieb in einem vollständig verbundenen Modus aufzunehmen. Ein exemplarischer Prozess, der zur Implementierung von Block 1416 verwendet werden kann, wird im Folgenden in Verbindung mit 17 beschrieben. So kann beispielsweise die Steuerung 502 die DPEs 520 anweisen, in einem vollständig verbundenen Modus zu arbeiten. Als Reaktion auf das Abschließen und/oder anderweitige Durchführen einer Faltung mit optionalem Pooling-Betrieb bei Block 1412, einem überlappenden Pooling-Betrieb bei Block 1414 oder einem vollständig verbundenen Betrieb bei Block 1416 schließen die exemplarischen maschinenlesbaren Anweisungen 1400 ab.
  • 15 ist ein Flussdiagramm, das exemplarisch für die maschinenlesbaren Anweisungen 1412 steht, die ausgeführt werden können, um den CNN-Beschleuniger 500 von 5 und/oder den CNN-Beschleuniger 1300 von 13 zu implementieren, um die Faltung mit optionalem Pooling durchzuführen. Die exemplarischen maschinenlesbaren Anweisungen 1412 können den Block 1412 der exemplarischen maschinenlesbaren Anweisungen 1400 aus 14 implementieren. Die exemplarischen maschinenlesbaren Anweisungen 1412 von 15 beginnen bei Block 1502, bei dem der exemplarische CNN-Beschleuniger 1300 den Modus des CNN-Beschleunigers 1300 auf Faltung mit optionalem Pooling setzt. So kann beispielsweise der Modusselektor 1306 den CNN-Beschleuniger 1300 für eine Faltung mit optionalem Pooling-Modus konfigurieren.
  • Bei Block 1504 bestimmt der exemplarische CNN-Beschleuniger 1300, ob für einen Eingangskanal eine Mindestanzahl von Zeilen vorhanden ist. So kann beispielsweise die Faltungs-Engine 1308 bestimmen, ob eine Mindestanzahl von Zeilen im Speicher vorhanden ist, um einen interessierenden Eingangskanal zu falten. So kann beispielsweise die DMA-Steuerung 504 von 5 eine Anzahl von Datenzeilen, die für einen oder mehrere zu verarbeitende Eingangskanäle erforderlich sind, an den Datenspeicher 506 übertragen.
  • Wenn bei Block 1504 der exemplarische CNN-Beschleuniger 1300 bestimmt, dass die minimale Anzahl von Zeilen für den Eingangskanal nicht vorhanden ist, wartet die Steuerung bei Block 1504, bis die minimale Anzahl von Zeilen verfügbar ist. Wenn bei Block 1504 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die minimale Anzahl von Zeilen für den Eingangskanal vorhanden ist, fährt die Steuerung mit Block 1506 fort, um die Faltung des Eingangskanals zu beginnen. So kann beispielsweise die Faltungs-Engine 1308 einen der Eingangskanäle 1002 von 10 mit einem der Filter 1010 von 10 falten, um Faltungsausgabewerte zu erzeugen.
  • Als Reaktion auf das Beginnen der Faltung des Eingangskanals fährt die Steuerung mit Block 1508 fort, um festzustellen, ob die Faltung abgeschlossen ist. So kann beispielsweise die Faltungs-Engine 1308 einen der Eingangskanäle 1002 mit einem der Filter 1010 falten, bis eine Gesamtheit von Werten für die Eingangsposition 1008 von 10 verarbeitet wurde. Wenn bei Block 1508 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die Faltung nicht vollständig ist, wartet die Steuerung, bis die Faltung abgeschlossen ist, andernfalls fährt die Steuerung mit Block 1510 fort, um festzustellen, ob weitere Eingänge zu verarbeiten sind. So kann beispielsweise die Faltungs-Engine 1308 feststellen, dass zusätzliche Aktivierungswerte, Pixelwerte usw. in der zu verarbeitenden Eingabestelle 1008 enthalten sind.
  • Wenn bei Block 1510 der exemplarische CNN-Beschleuniger 1300 feststellt, dass mehr Eingänge zu verarbeiten sind, kehrt die Steuerung zu Block 1504 zurück, um festzustellen, ob die minimale Anzahl von Zeilen zur Verarbeitung der zusätzlichen Eingaben vorhanden ist. Wenn bei Block 1510 der exemplarische CNN-Beschleuniger 1300 feststellt, dass keine Eingaben mehr zu verarbeiten sind, dann summiert der CNN-Beschleuniger 1300 bei Block 1512 die Zwischensummen auf (berechnet z.B. eine Summe der Faltungsausgabewerte entsprechend der Eingangsposition 1008 von 10). Beispielsweise kann die Faltungs-Engine 1308 die Zwischensummen aufsummieren.
  • Bei Block 1514 bestimmt der exemplarische CNN-Beschleuniger 1300, ob das Pooling aktiviert ist. So kann beispielsweise der Modusselektor 1306 bestimmen, ob das Durchschnitt Pooling, das Maximum Pooling usw. aktiviert werden soll. Wenn bei Block 1514 der exemplarische CNN-Beschleuniger 1300 bestimmt, dass das Pooling nicht aktiviert ist, fährt die Steuerung mit Block 1518 fort, um in die Ausgangspuffer zu schreiben. So kann beispielsweise die Faltungs-Engine 1308 den kumulierten Wert der Faltungsausgänge für die Eingangsposition 1008 von 10 in einen Ausgangspuffer ausgeben, um die Ausgangsposition 1004 von 10 zu erzeugen. Als Reaktion auf das Schreiben auf die Ausgangspuffer kehren die exemplarischen maschinenlesbaren Anweisungen 1412 von 15 zu den exemplarischen maschinenlesbaren Anweisungen 1400 von 14 zurück. Beispielsweise erzeugte die Faltungs-Engine 1308 die Ausgangsposition 1004 entsprechend der Eingangsposition 1008 der Eingangskanäle 1002, die mit den Filtern 1010 gefaltet wurden. In solchen Beispielen kann die Faltungs-Engine 1308 die verbleibenden Eingangspositionen der Eingangskanäle 1002 falten (z.B. iterativ), um den Ausgangskanal 1006 zu erzeugen.
  • Wenn bei Block 1514 der exemplarische CNN-Beschleuniger 1300 feststellt, dass das Pooling aktiviert ist, fährt die Steuerung mit Block 1516 fort, um Pooling- und Faltungsvergleiche durchzuführen. So kann beispielsweise die Pooling-Engine 1310 einen Durchschnittswert oder einen Maximalwert eines Poolbereichs des Ausgabekanals 1006 berechnen. Als Reaktion auf das Durchführen der Pooling- und Faltungsvergleiche zum Erzeugen eines Pool-Ausgabewertes fährt die Steuerung mit Block 1518 fort, um den PoolAusgabewert in die Ausgabepuffer zu schreiben.
  • 16 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen 1414 steht, die ausgeführt werden können, um den CNN-Beschleuniger 500 von 5 und/oder den CNN-Beschleuniger 1300 von 13 zu implementieren, um ein überlappendes Pooling durchzuführen. Die exemplarischen maschinenlesbaren Anweisungen 1414 von 14 können verwendet werden, um den Block 1414 der exemplarischen maschinenlesbaren Anweisungen 1400 von 14 zu implementieren. Die exemplarischen maschinenlesbaren Anweisungen 1414 von 14 beginnen bei Block 1602, bei dem der exemplarische CNN-Beschleuniger 1300 den Modus des CNN-Beschleunigers 1300 auf überlappendes Pooling setzt. So kann beispielsweise der Modusselektor 1306 den CNN-Beschleuniger 1300 für einen überlappenden Pooling-Modus konfigurieren.
  • Als Reaktion auf das Einstellen des Modus auf überlappendes Pooling stellt der exemplarische CNN-Beschleuniger 1300 fest, ob für einen Poolbereich bei Block 1604 eine minimale Anzahl von Zeilen vorhanden ist. So kann beispielsweise die Pooling-Engine 1310 bestimmen, ob eine Mindestanzahl von Zeilen im Speicher vorhanden ist, um einen Poolbereich zu bearbeiten. So kann beispielsweise die DMA-Steuerung 504 von 5 eine Reihe von Datenzeilen an den Datenspeicher 506übertragen, die zur Verarbeitung des Poolbereichs 212 von 2 erforderlich sind.
  • Wenn bei Block 1604 der exemplarische CNN-Beschleuniger 1300 bestimmt, dass die minimale Anzahl von Zeilen für den Poolbereich nicht vorhanden ist, wartet die Steuerung bei Block 1604, bis die minimale Anzahl von Zeilen verfügbar ist. Wenn bei Block 1604 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die minimale Anzahl von Zeilen für den Poolbereich vorhanden ist, fährt die Steuerung mit Block 1606 fort, um aktuelle Werte mit gespeicherten Werten für das Max-Pooling zu vergleichen oder für das Durchschnitt Pooling zu akkumulieren. So kann beispielsweise die Pooling-Engine 1310 Werte des Poolbereichs vergleichen (z.B. iterativ), um einen Maximalwert des Poolbereichs zu bestimmen, wenn sie für Maximum Pooling konfiguriert ist. In anderen Beispielen kann die Pooling-Engine 1310 die Werte des Poolbereichs aufsummieren und einen Durchschnittswert des Poolbereichs berechnen, basierend auf einer Größe des Poolbereichs und den kumulierten Werten des Poolbereichs. Als Reaktion auf das Berechnen des maximalen Poolwertes oder des durchschnittlichen Poolwertes kehren die exemplarischen maschinenlesbaren Anweisungen 1414 von 16 zum Beispiel zu den maschinenlesbaren Anweisungen 1400 von 14 zurück.
  • 17 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen 1416 steht, die ausgeführt werden können, um den CNN-Beschleuniger 500 von 5 und/oder den CNN-Beschleuniger 1300 von 13 zu implementieren, um einen vollständig verbundenen Vorgang durchzuführen. Die exemplarischen maschinenlesbaren Anweisungen 1416 von 17 können verwendet werden, um den Block 1416 der exemplarischen maschinenlesbaren Anweisungen 1400 von 14 zu implementieren. Die exemplarischen maschinenlesbaren Anweisungen 1416 von 17 beginnen bei Block 1702, bei dem der exemplarische CNN-Beschleuniger 1300 den Modus des CNN-Beschleunigers 1300 in den vollständig verbundenen Modus versetzt. So kann beispielsweise der Modusselektor 1306 den CNN-Beschleuniger 1300 für einen vollständig verbundenen Modus konfigurieren.
  • Als Reaktion auf das Einstellen des Modus auf den vollständig verbundenen Modus konfiguriert der exemplarische CNN-Beschleuniger 1300 einen Koeffizientenspeicher, um N komplette Vektoren aufzunehmen. So kann beispielsweise die Steuerung 502 von 5 die DMA-Steuerung 504 anweisen, die Koeffizientenanordnung 404 von 4 an den Koeffizientenspeicher 508 von 5 zu senden.
  • Bei Block 1706 verteilt der exemplarische CNN-Beschleuniger 1300 eine Datenmatrix im RAM, um alle DPEs für eine Parallelverarbeitung der Vektoren freizugeben. So kann beispielsweise die Steuerung 502 von 5 die DMA-Steuerung 504 anweisen, Daten (z.B. die Faltungsausgabewerte, die Poolausgangswerte usw.) aus dem Hauptspeicher 516 von 5 an den Datenspeicher 506 zu übertragen, der wiederum die Daten über den Verbindungsmultiplexer 510 an die DPEs 520 sendet, wobei jede der DPEs 520 einen Teil des Ausgabe-Array 406 von 4 im Wesentlichen parallel zu den anderen DPEs 520 erzeugt und/oder anderweitig berechnet. Als Reaktion auf die Verarbeitung der Vektoren kehren die exemplarischen maschinenlesbaren Anweisungen 1416 von 17 zu den exemplarischen maschinenlesbaren Anweisungen 1400 von 14 zurück.
  • 18 ist ein Flussdiagramm, das exemplarisch für maschinenlesbare Anweisungen 1800 steht, die ausgeführt werden können, um den CNN-Beschleuniger 500 von 5 und/oder den CNN-Beschleuniger 1300 von 13 zur Konfiguration (z.B. dynamische Konfiguration) eines Akkumulators zu implementieren. Die exemplarischen maschinenlesbaren Anweisungen 1800 beginnen bei Block 1802, bei dem der exemplarische CNN-Beschleuniger 1300 eine Anzahl von Integer-Bits bestimmt, die von einer Eingabe benötigt werden. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 feststellen, dass ein Eingangswert für den Akkumulator 604 17 ganzzahlige Bits erfordert und eine Konfiguration des Akkumulators 604 es dem Akkumulator 604 ermöglicht, 16 ganzzahlige Bits zu verarbeiten.
  • Bei Block 1804 stellt der exemplarische CNN-Beschleuniger 1300 fest, ob eine Anzahl von erforderlichen ganzzahligen Bits größer ist als eine aktuelle Anzahl von ganzzahligen Bits. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 bestimmen, dass der Eingabewert von 17 Integer-Bits mehr Integer-Bits erfordert als die 16 Integer-Bits der Konfiguration des Akkumulators 604.
  • Wenn bei Block 1804 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die Anzahl der erforderlichen ganzzahligen Bits größer ist als die aktuelle Anzahl der ganzzahligen Bits, fährt die Steuerung mit Block 1810 fort, um FP16 in ein Festkommaformat zu konvertieren. Wenn bei Block 1804 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die Anzahl der erforderlichen ganzzahligen Bits kleiner als die aktuelle Anzahl der ganzzahligen Bits ist, dann passt der CNN-Beschleuniger 1300 bei Block 1806 das Festkommaformat an, indem er eine Anzahl von ganzzahligen Bits auf die erforderliche Anzahl erhöht und die Anzahl der gebrochenen Bits entsprechend verringert. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 die Anzahl der ganzzahligen Bits von 16 ganzzahligen Bits auf 17 ganzzahlige Bits erhöhen, um den Bereich des Akkumulators 604 zu erhöhen und die Anzahl der gebrochenen Bits zu verringern, um die Genauigkeit des Akkumulators 604 zu verringern.
  • Als Reaktion auf die Anpassung des Festkommaformats richtet der exemplarische CNN-Beschleuniger 1300 den Akkumulator auf das aktualisierte Festkommaformat bei Block 1808 aus. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 den Akkumulator 604 in diesem Beispiel an das aktualisierte Festkommaformat von 17 Integer-Bits angleichen. Als Reaktion auf das Angleichen des Akkumulators bei Block 1808 konvertiert der exemplarische CNN-Beschleuniger 1300 den FP16-Eingang in das Festkommaformat bei Block 1810. So können beispielsweise die Faltungs-Engine 1308, die Pooling-Engine 1310, die vollständig verbundene Engine 1312 usw. einen Eingang zum Akkumulator 604 von FP16 in das Festkommaformat umwandeln.
  • Bei Block 1812 addiert der exemplarische CNN-Beschleuniger die Eingabe zum kumulierten Wert. So können beispielsweise die Faltungs-Engine 1308, die Pooling-Engine 1310, die vollständig verbundene Engine 1312 usw. einen Eingangswert für den Akkumulator 604 zu einem zuvor gespeicherten Wert oder einem zuvor akkumulierten Wert hinzufügen.
  • Als Reaktion auf die Addition der Eingabe zum kumulierten Wert stellt der exemplarische CNN-Beschleuniger 1300 fest, ob es einen Additionsüberlauf gibt. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 feststellen, dass die Anzahl der ganzzahligen Bits des Akkumulators 604 nicht ausreicht, um einen Überlauf zu verhindern.
  • Wenn bei Block 1814 der exemplarische CNN-Beschleuniger 1300 feststellt, dass es einen Additionsüberlauf gibt, fährt die Steuerung mit Block 1822 fort, um das Festkommaformat des Speichers um 1 anzupassen und die Bruchbits um 1 zu verringern. Wenn bei Block 1814 der exemplarische CN-Beschleuniger 1300 feststellt, dass es keinen Additionsüberlauf gibt, dann stellt der CNN-Beschleuniger 1300 bei Block 1816 fest, ob das Additionsergebnis einen vollen Bereich von Ganzzahlenbits verwendet. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 die Anzahl der ganzzahligen Bits um 1 verringern, um den Bereich zu reduzieren, der nicht benötigt wird, da nicht der gesamte Bereich der ganzzahligen Bits (Integer-Bits) verwendet wird, und die Genauigkeit erhöhen, um einen Betrieb des Akkumulators 604 aus 6 zu optimieren und/oder anderweitig zu verbessern.
  • Wenn bei Block 1816 der exemplarische CNN-Beschleuniger 1300 feststellt, dass das Additionsergebnis den gesamten Bereich der ganzzahligen Bits verwendet, fährt die Steuerung mit Block 1824 fort, um das Additionsergebnis auf das Festkommaformat auszurichten und dem Akkumulator zuzuweisen. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 bestimmen, dass der Akkumulator 604 basierend auf dem Additionsergebnis unter Verwendung des gesamten Bereichs der Ganzzahlenbits des Akkumulators 604 optimiert wird.
  • Wenn bei Block 1816 der exemplarische CNN-Beschleuniger 1300 feststellt, dass das Additionsergebnis nicht den gesamten Bereich der ganzzahligen Bits verwendet, dann bestimmt der CNN-Beschleuniger 1300 bei Block 1818, ob die Anzahl der ganzzahligen Bits größer als 12 ist. Beispielsweise bestimmt der DPE-Konfigurationsoptimierer 1304, ob die Anzahl der ganzzahligen Bits des Akkumulators 604 über einem Mindestschwellenwert von 12 ganzzahligen Bits liegt und, wenn nicht, die Anzahl der ganzzahligen Bits auf einen Wert zu erhöhen, der mindestens gleich dem Mindestschwellenwert ist. Alternativ kann der minimale Schwellenwert auch eine beliebige andere Anzahl von ganzzahligen Bits sein.
  • Wenn bei Block 1818 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die Anzahl der ganzzahligen Bits nicht größer als 12 ist, fährt die Steuerung mit Block 1822 fort, um das Festkommaformat des Akkumulators einzustellen, indem sie die Anzahl der ganzzahligen Bits um 1 erhöht und die gebrochenen Bits um 1 verringert. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 den Bereich des Akkumulators 604 durch Erhöhung der Anzahl der ganzzahligen Bits erhöhen, aber die Genauigkeit des Akkumulators 604 durch Verringerung der Anzahl der gebrochenen Bits verringern. Als Reaktion auf das Einstellen des Festkommaformats fährt die Steuerung mit Block 1824 fort, um das Additionsergebnis auf das Festkommaformat auszurichten und dem Akkumulator zuzuordnen.
  • Wenn bei Block 1818 der exemplarische CNN-Beschleuniger 1300 feststellt, dass die Anzahl der ganzzahligen Bits größer als 12 ist, dann passt der CNN-Beschleuniger 1300 bei Block 1820 das Festkommaformat an, indem er die Anzahl der ganzzahligen Bits um 1 verringert und die gebrochenen Bits um 1 erhöht. Beispielsweise kann der DPE-Konfigurationsoptimierer 1304 den Bereich des Akkumulators 604 durch Verringerung der Anzahl der ganzzahligen Bits verringern, aber die Genauigkeit des Akkumulators 604 durch Erhöhung der Anzahl der gebrochenen Bits erhöhen.
  • Als Reaktion auf das Einstellen des Festkommaformats bei Block 1820 fährt die Steuerung mit Block 1824 fort, um das Additionsergebnis auf das Festkommaformat auszurichten und dem Akkumulator zuzuordnen. So kann beispielsweise der DPE-Konfigurationsoptimierer 1304 das Additionsergebnis auf ein aktualisiertes Festkommaformat ausrichten und dem Akkumulator 604 das aktualisierte Festkommaformat zuweisen. Als Reaktion auf das Ausrichten des Additionsergebnisses auf das Festkommaformat und das Zuordnen zum Akkumulator schließen sich die exemplarischen maschinenlesbaren Anweisungen 1800 aus 18 an.
  • 19 ist ein Blockdiagramm einer exemplarischen Prozessorplattform 1900, die so aufgebaut ist, dass sie die Anweisungen der 14-18 zur Implementierung des CNN-Beschleunigers 1300 von 13 ausführt. Die Prozessorplattform 1900 kann beispielsweise ein Server, ein Personalcomputer, eine Arbeitsstation, eine selbstlernende Maschine (z.B. ein neuronales Netzwerk), eine mobile Vorrichtung (z.B. ein Mobiltelefon, ein Smartphone, ein Tablett wie ein iPadTM), ein persönlicher digitaler Assistent (PDA), ein Internetgerät, ein DVD-Player, ein CD-Player, ein digitaler Videorekorder, ein Blu-ray-Player, eine Spielkonsole, ein persönlicher Videorekorder, eine Set-Top-Box, ein Headset oder eine andere tragbare Vorrichtung oder eine andere Art von Computergerät sein.
  • Die Prozessorplattform 1900 des dargestellten Beispiels beinhaltet einen Prozessor 1912. Der Prozessor 1912 des dargestellten Beispiels ist Hardware. So kann beispielsweise der Prozessor 1912 durch eine oder mehrere integrierte Schaltungen, Logikschaltungen, Mikroprozessoren, GPUs, DSPs oder Controller einer beliebigen Familie oder eines beliebigen Herstellers implementiert werden. Der Hardware-Prozessor kann eine halbleiterbasierte (z.B. siliziumbasierte) Vorrichtung sein. In diesem Beispiel implementiert der Prozessor 1912 den exemplarischen CNN-Beschleuniger 1300, die exemplarische DPE-DPE Verzeichnis Engine 1302, den exemplarischen DPE-Konfigurationsoptimierer 1304, den exemplarischen Modusselektor 1306, die exemplarische Faltungs-Engine 1308, die exemplarische Pooling-Engine 1310 und die exemplarische vollständig verbundene Engine 1312 aus 13.
  • Der Prozessor 1912 des veranschaulichten Beispiels beinhaltet einen lokalen Speicher 1913 (z.B. einen Cache). Der Prozessor 1912 des veranschaulichten Beispiels steht in Verbindung mit einem Hauptspeicher mit einem flüchtigen Speicher 1914 und einem nichtflüchtigen Speicher 1916 über einen Bus 1918. Der flüchtige Speicher 1914 kann durch Synchronous Dynamic Random Access Memory (SDRAM), Dynamic Random Access Memory (DRAM), RAMBUS® Dynamic Random Access Memory (RDRAM®) und/oder jeder anderen Art von Direktzugriffsspeichervorrichtung implementiert werden. Der nichtflüchtige Speicher 1916 kann durch Flash-Speicher und/oder jede andere gewünschte Art von Speichervorrichtung implementiert werden. Der Zugriff auf den Hauptspeicher 1914, 1916 wird durch eine Speichersteuerung gesteuert.
  • Die Prozessorplattform 1900 des dargestellten Beispiels beinhaltet auch eine Schnittstellenschaltung 1920. Die Schnittstellenschaltung 1920 kann durch jede Art von Schnittstellenstandard implementiert werden, wie beispielsweise eine Ethernet-Schnittstelle, einen universellen seriellen Bus (USB), eine Bluetooth®-Schnittstelle, eine Nahfeldkommunikationsschnittstelle (NFC) und/oder eine PCI-Express-Schnittstelle.
  • Im dargestellten Beispiel sind eine oder mehrere Eingabevorrichtungen 1922 an die Schnittstellenschaltung 1920 angeschlossen. Die Eingabevorrichtung(en) 1922 erlauben es einem Benutzer, Daten und/oder Befehle in den Prozessor 1912 einzugeben. Die Eingabevorrichtung(en) 1922 können beispielsweise durch einen Audiosensor, ein Mikrofon, eine Kamera (Standbild oder Video), eine Tastatur, eine Taste, eine Maus, einen Touchscreen, ein Track-Pad, einen Trackball, eine Isopoint-Vorrichtung und/oder ein Spracherkennungssystem implementiert werden.
  • Eine oder mehrere Ausgabevorrichtungen 1924 sind ebenfalls an die Schnittstellenschaltung 1920 des dargestellten Beispiels angeschlossen. Die Ausgabevorrichtungen 1924 können beispielsweise durch Anzeigevorrichtungen (z.B. eine Leuchtdiode (LED), eine organische Leuchtdiode (OLED), eine Flüssigkristallanzeige (LCD), eine Kathodenstrahlröhrenanzeige (CRT), eine In-Place-Switching (IPS)-Anzeige, einen Touchscreen usw.), eine taktile Ausgabevorrichtung, einen Drucker und/oder Lautsprecher realisiert werden. Die Schnittstellenschaltung 1920 des veranschaulichten Beispiels beinhaltet daher typischerweise eine Grafiktreiberkarte, einen Grafiktreiberchip und/oder einen Grafiktreiberprozessor.
  • Die Schnittstellenschaltung 1920 des veranschaulichten Beispiels beinhaltet auch eine Kommunikationsvorrichtung wie einen Sender, einen Empfänger, einen Sender-Empfänger, ein Modem, ein Kabelmodem, einen drahtlosen Zugangspunkt und/oder eine Netzwerkschnittstelle, um den Datenaustausch mit externen Maschinen (z.B. Rechenvorrichtungen jeglicher Art) über ein Netzwerk 1926 zu ermöglichen. Die Kommunikation kann beispielsweise über eine Ethernet-Verbindung, eine digitale Teilnehmeranschlussleitung (DSL), eine Telefonleitungsverbindung, ein Koaxialkabelsystem, ein Satellitensystem, ein drahtloses Sichtliniensystem, ein Mobilfunksystem usw. erfolgen.
  • Die Prozessorplattform 1900 des veranschaulichten Beispiels beinhaltet auch ein oder mehrere Massenspeichergeräte 1928 zur Speicherung von Software und/oder Daten. Beispiele für solche Massenspeichergeräte 1928 sind Diskettenlaufwerke, Festplatten, Compact-Disk-Laufwerke, Blu-ray-Laufwerke, redundante Arrays von unabhängigen Festplatten (RAID-Systeme) und digitale vielseitige Festplatten (DVD-Laufwerke).
  • Die maschinenausführbaren Anweisungen 1932 der 14-18 können in der Massenspeichervorrichtung 1928, im flüchtigen Speicher 1914, im nichtflüchtigen Speicher 1916 und/oder auf einem entfernbaren, nichtflüchtigen, computerlesbaren Speichermedium wie einer CD oder DVD gespeichert werden.
  • Aus dem Vorstehenden ist zu entnehmen, dass exemplarische Systeme, Verfahren, Vorrichtungen und Herstellungsgegenstände offenbart wurden, die die Faltungseffizienz neuronaler Faltungsnetze verbessern. Die hierin offenbarten Beispiele beschleunigen Faltungsvorgänge, indem sie eine Vielzahl von Eingangskanälen mit einer Vielzahl von Filtern zusammenfassen, um eine Vielzahl von Ausgangspositionen von Ausgangskanälen im Wesentlichen parallel und/oder anderweitig im Wesentlichen gleichzeitig zu erzeugen. Die hierin offenbarten Beispiele bieten verbesserte Faltungswirkungsgrade durch Konfigurieren von Speicherinstanzen für Eingangsbidldaten und Filterkoeffizienten basierend auf mindestens einer Operationsmodus oder einer Faltungsanordnung. Die hierin offenbarten Beispiele bieten verbesserte Faltungsvorgänge bei reduziertem Stromverbrauch durch Minimierung und/oder Reduzierung von Datenbewegungen innerhalb eines CNN-Beschleunigers, indem sie während eines Faltungsvorgangs nur einmal auf die Eingangspositionen der Eingangskanäle zugreifen.
  • Beispiel 1 beinhaltet eine Vorrichtung zur Faltungseffizienzverbesserung, wobei die Vorrichtung eine Datenverarbeitungselement (DPE)-Verzeichnis-Engine zum Identifizieren von DPEs, die in einem einer Plattform zur Verfügung stehendem DPE-Array enthalten sind, einen Modusselektor zum Bestimmen einer Faltungsanordnung von identifizierten DPEs, einen DPE-Konfigurationsoptimierer zum Bestimmen einer DPE Auslastung basierend auf den identifizierten DPEs und eine Faltungs-Engine zum Ermöglichen eines Faltungsvorgangs unter Verwendung der identifizierten DPEs umfasst, wenn die DPE Auslastung einen DPE Auslastungsschwellenwert erfüllt.
  • Beispiel 2 beinhaltet die Vorrichtung von Beispiel 1, wobei die Faltungs-Engine konfiguriert ist (a) Aktivierungswerte einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, zu multiplizieren, um Faltungsausgaben zu erzeugen, und eine Summe der Faltungsausgänge zu berechnen, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  • Beispiel 3 beinhaltet die Vorrichtung von Beispiel 2, wobei die Ausgangsposition eine erste Ausgangsposition ist und die Faltungs-Engine konfiguriert ist, einen Poolbereich, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst, zu berechnen und wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs zu berechnen.
  • Beispiel 4 beinhaltet die Vorrichtung von Beispiel 3, wobei die Faltungs-Engine konfiguriert ist mindestens eine von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit -PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  • Beispiel 5 beinhaltet die Vorrichtung von Beispiel 1, worin die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und der DPE-Konfigurationsoptimierer ausgestaltet ist, die erste DPE-Auslastung mit dem DPE Auslastungsschwellenwert zu vergleichen, das Ermöglichen des Faltungsvorgangs zu verhindern, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt, eine zweite DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE Auslastungsschwellenwert zu vergleichen, und die Faltungs-Engine konfiguriert ist, den Faltungsvorgang unter Verwendung der zweiten Faltungsanordnung zu ermöglichen, wenn die zweite DPE-Auslastung den DPE Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  • Beispiel 6 beinhaltet die Vorrichtung von Beispiel 1, wobei das DPE-Array 256 DPEs beinhaltet.
  • Beispiel 7 beinhaltet die Vorrichtung von Beispiel 1, worin die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  • Beispiel 8 beinhaltet die Vorrichtung von Beispiel 1, worin die Faltungs-Engine den Faltungsvorgang unter Verwendung der identifizierten der DPEs im Wesentlichen parallel ermöglicht.
  • Beispiel 9 beinhaltet die Vorrichtung von Beispiel 1, worin die Faltungs-Engine den Faltungsvorgang durch mindestens eines von Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators zum Ändern eines Bereichs des Akkumulators oder Einstellen einer Anzahl von gebrochenen Bits des Akkumulators zum Ändern einer Genauigkeit des Akkumulators ermöglicht.
  • Beispiel 10 beinhaltet ein nichtflüchtiges, computerlesbares Speichermedium mit Anweisungen, die, wenn sie ausgeführt werden, eine Maschine veranlassen, zumindest Datenverarbeitungselemente (DPEs) zu identifizieren, die in einem DPE-Array enthalten sind, das einer Plattform zur Verfügung steht, eine Faltungsanordnung von identifizierten der DPEs zu bestimmen, eine DPE-Auslastung basierend auf den identifizierten der DPEs zu bestimmen und einen Faltungsvorgang unter Verwendung der identifizierten der DPEs zu ermöglichen, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erfüllt.
  • Beispiel 11 beinhaltet das nichtflüchtige, computerlesbare Speichermedium von Beispiel 10, ferner Anweisungen, die, wenn sie ausgeführt werden, bewirken, dass die Maschine mindestens (a) Aktivierungswerte einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, multipliziert, um Faltungsausgaben zu erzeugen, und eine Summe der Faltungsausgaben berechnet, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  • Beispiel 12 beinhaltet das nicht-flüchtige computerlesbare Speichermedium von Beispiel 11, wobei die Ausgangsposition eine erste Ausgangsposition ist, und ferner Anweisungen, die, wenn sie ausgeführt werden, bewirken, dass die Maschine mindestens einen Poolbereich, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst, berechnet und mindestens einen von einem Durchschnittswert oder einem Maximalwert des Poolbereichs berechnet.
  • Beispiel 13 beinhaltet das nichtflüchtige computerlesbare Speichermedium von Beispiel 11, ferner Anweisungen, die, wenn sie ausgeführt werden, die Maschine veranlassen, mindestens eines von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit - PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  • Beispiel 14 beinhaltet das nicht-flüchtige, computerlesbare Speichermedium von Beispiel 10, worin die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und ferner Anweisungen, die die Maschine veranlassen, wenn sie ausgeführt werden, zumindest die erste DPE-Auslastung mit dem DPE-Auslastungsschwellenwert zu vergleichen, die Unterstützung des Faltungsvorgangs zu verhindern, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt, eine zweite DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE Auslastungsschwellenwert zu vergleichen, und den Faltungsvorgang unter Verwendung der zweiten Faltungsanordnung zu ermöglichen, wenn die zweite DPE-Auslastung den DPE Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  • Beispiel 15 beinhaltet das nicht-flüchtige, computerlesbare Speichermedium von Beispiel 10, worin das DPE-Array 256 DPEs beinhaltet.
  • Beispiel 16 beinhaltet das nicht-flüchtige, computerlesbare Speichermedium von Beispiel 10, worin die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  • Beispiel 17 beinhaltet das nicht-flüchtige, computerlesbare Speichermedium von Beispiel 10, worin die identifizierten der DPEs die Faltung im Wesentlichen parallel ermöglichen.
  • Beispiel 18 beinhaltet das nichtflüchtige computerlesbare Speichermedium von Beispiel 10, ferner Anweisungen, die, wenn sie ausgeführt werden, die Maschine veranlassen, durch mindestens eines von Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators einen Bereich des Akkumulators zu ändern oder Einstellen einer Anzahl von gebrochenen Bits des Akkumulators eine Genauigkeit des Akkumulators zu ändern.
  • Beispiel 19 beinhaltet ein Verfahren zur Verbesserung der Faltungseffizienz, wobei das Verfahren das Identifizieren von Datenverarbeitungselementen (DPEs), die in einem DPE-Array enthalten sind, das einer Plattform zur Verfügung steht, das Bestimmen einer Faltungsanordnung von identifizierten der DPEs, das Bestimmen einer DPE-Auslastung basierend auf den identifizierten der DPEs und das Ermöglichen eines Faltungsvorgangs unter Verwendung der identifizierten der DPEs umfasst, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erfüllt.
  • Beispiel 20 beinhaltet das Verfahren von Beispiel 19, ferner das Multiplizieren von (a) Aktivierungswerten einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, um Faltungsausgaben zu erzeugen, und das Berechnen einer Summe der Faltungsausgaben, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  • Beispiel 21 beinhaltet das Verfahren des Beispiels 20, wobei die Ausgangsposition eine erste Ausgangsposition ist, ferner das Berechnen eines Poolbereichs umfassend Ausgangspositionen einschließlich der ersten Ausgangsposition und das Berechnen mindestens eines von einem Durchschnittswert oder einem Maximalwert des Poolbereichs.
  • Beispiel 22 beinhaltet das Verfahren des Beispiels 21, das ferner das Durchführen mindestens eines von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit - PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs beinhaltet.
  • Beispiel 23 beinhaltet das Verfahren des Beispiels 19, worin die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und ferner das Vergleichen der ersten DPE-Auslastung mit dem DPE-Auslastungsschwellenwert, das Verhindern der Unterstützung des Faltungsvorgangs, wenn die erste DPE-Auslastung den DPE-Auslastungsschwellenwert nicht erfüllt, das Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE-Auslastungsschwellenwert und das Ermöglichen des Faltungsvorgangs mit der zweiten Faltungsanordnung, wenn die zweite DPE-Auslastung den DPE-Auslastungsschwellenwert erfüllt, basierend auf dem Vergleich.
  • Beispiel 24 beinhaltet das Verfahren von Beispiel 19, wobei das DPE-Array 256 DPEs beinhaltet.
  • Beispiel 25 beinhaltet das Verfahren des Beispiels 19, worin die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  • Beispiel 26 beinhaltet das Verfahren von Beispiel 19, worin die identifizierten der DPEs die Faltung im Wesentlichen parallel ermöglichen.
  • Beispiel 27 beinhaltet das Verfahren des Beispiels 19, wobei das Ermöglichen des Faltungsvorgangs mindestens eines der folgenden beinhaltet: Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators, um einen Bereich des Akkumulators zu modifizieren, oder Einstellen einer Anzahl von gebrochenen Bits des Akkumulators, um eine Genauigkeit des Akkumulators zu modifizieren.
  • Beispiel 28 beinhaltet eine Vorrichtung zur Verbesserung der Faltungseffizienz, wobei die Vorrichtung ein erstes Mittel zum Identifizieren von DPEs umfasst, die in einem DPE-Array enthalten sind, das einer Plattform zur Verfügung steht, ein zweites Mittel zum Bestimmen einer Faltungsanordnung von identifizierten der DPEs, ein drittes Mittel zum Bestimmen einer DPE-Auslastung basierend auf den identifizierten der DPEs und ein viertes Mittel zum Ermöglichen eines Faltungsvorgangs unter Verwendung der identifizierten der DPEs, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erfüllt.
  • Beispiel 29 beinhaltet die Vorrichtung von Beispiel 28, worin das vierte Mittel ist, (a) Aktivierungswerte einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, zu multiplizieren, um Faltungsausgaben zu erzeugen, und eine Summe der Faltungsausgaben zu berechnen, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  • Beispiel 30 beinhaltet die Vorrichtung von Beispiel 29, wobei die Ausgangsposition eine erste Ausgangsposition ist, und das vierte Mittel ist, einen Poolbereich zu berechnen, der Ausgangspositionen beinhaltet, die die erste Ausgangsposition einschließt, und mindestens einen von einem Durchschnittswert oder einem Maximalwert der Poolbereich zu berechnen.
  • Beispiel 31 beinhaltet die Vorrichtung von Beispiel 30, worin das vierte Mittel ist, mindestens eines von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit - PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  • Beispiel 32 beinhaltet die Vorrichtung von Beispiel 28, worin die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und das dritte Mittel ist, die erste DPE-Auslastung mit dem DPE-Auslastungsschwellenwert zu vergleichen, die Unterstützung des Faltungsvorgangs zu verhindern, wenn die erste DPE-Auslastung nicht den DPE-Auslastungsschwellenwert erfüllt, Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE-Auslastungsschwellenwert, und das vierte Mittel ist, den Faltungsvorgang unter Verwendung der zweiten Faltungsanordnung zu ermöglichen, wenn die zweite DPE-Auslastung den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  • Beispiel 33 beinhaltet die Vorrichtung von Beispiel 28, wobei das DPE-Array 256 DPEs beinhaltet.
  • Beispiel 34 beinhaltet die Vorrichtung von Beispiel 28, wobei die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  • Beispiel 35 beinhaltet die Vorrichtung von Beispiel 28, worin das vierte Mittel den Faltungsvorgang unter Verwendung der identifizierten der DPEs im Wesentlichen parallel ermöglicht.
  • Beispiel 36 beinhaltet die Vorrichtung von Beispiel 28, worin das vierte Mittel den Faltungsvorgang durch mindestens eines von Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators zum Modifizieren eines Bereichs des Akkumulators oder Einstellen einer Anzahl von Bruchbits des Akkumulators zum Modifizieren einer Genauigkeit des Akkumulators ermöglicht.
  • Die hierin offenbarten Beispiele können sich auf Internet der Dinge (IoT)-Netzwerke beziehen, die über Links zu entsprechenden Gateways verbunden sind. Das Internet der Dinge (IoT) ist ein Konzept, bei dem eine große Anzahl von Computergeräten miteinander und mit dem Internet verbunden sind, um Funktionalität und Datenerfassung auf sehr niedrigem Niveau zu ermöglichen. So kann eine IoT-Vorrichtung, wie hierin verwendet, eine halbautonome Vorrichtung beinhalten, die eine Funktion erfüllt, wie z.B. das Erfassen oder Steuern, unter anderem in Verbindung mit anderen IoT-Vorrichtungen und einem breiteren Netzwerk, wie z.B. dem Internet.
  • Häufig sind IoT-Geräte in Bezug auf Speicher, Größe oder Funktionalität begrenzt, so dass größere Mengen zu ähnlichen Kosten bereitgestellt werden können wie kleinere Mengen größerer Geräte. Ein IoT-Gerät kann jedoch ein Smartphone, ein Laptop, ein Tablett, ein PC oder ein anderes größeres Gerät sein. Darüber hinaus kann ein IoT-Gerät ein virtuelles Gerät sein, wie beispielsweise eine Anwendung auf einem Smartphone oder einem anderen Computergerät. IoT-Geräte können IoT-Gateways beinhalten, die zur Kopplung von IoT-Geräten an andere IoT-Geräte und an Cloud-Anwendungen, zur Datenspeicherung, Prozesskontrolle und dergleichen verwendet werden.
  • Netzwerke von IoT-Geräten können kommerzielle und Heimautomationsgeräte beinhalten, wie z.B. Wasserverteilungssysteme, elektrische Energieverteilungssysteme, Rohrleitungssteuerungssysteme, Anlagensteuerungssysteme, Lichtschalter, Thermostate, Schlösser, Kameras, Alarme, Bewegungssensoren und dergleichen. Die IoT-Geräte können über entfernte Computer, Server und andere Systeme zugänglich sein, z. B. zur Steuerung von Systemen oder zum Zugriff auf Daten.
  • Das zukünftige Wachstum des Internets und ähnlicher Netzwerke kann sehr viele IoT-Geräte betreffen. Dementsprechend werden im Rahmen der hierin diskutierten Techniken eine Reihe von Innovationen für eine solche zukünftige Vernetzung der Notwendigkeit Rechnung tragen, dass alle diese Schichten ungehindert wachsen, verbundene Ressourcen entdecken und zugänglich machen und die Fähigkeit unterstützen, verbundene Ressourcen zu verstecken und zu unterteilen. Es können beliebig viele Netzwerkprotokolle und Kommunikationsstandards verwendet werden, wobei jedes Protokoll und jeder Standard so konzipiert ist, dass er spezifische Ziele erfüllt. Darüber hinaus sind die Protokolle Teil der Struktur zur Unterstützung von Diensten, die für Menschen zugänglich sind und unabhängig von Ort, Zeit und Raum funktionieren. Zu den Innovationen gehören die Bereitstellung von Diensten und der dazugehörigen Infrastruktur, wie Hard- und Software, Sicherheitsverbesserungen und die Bereitstellung von Diensten auf der Grundlage von Quality of Service (QoS)-Bedingungen, die in Service Level- und Service Delivery-Vereinbarungen festgelegt sind.
  • Backbone-Verbindungen können eine beliebige Anzahl von kabelgebundenen oder drahtlosen Technologien, einschließlich optischer Netzwerke, beinhalten und können Teil eines lokalen Netzwerks (LAN), eines Wide Area Network (WAN) oder des Internets sein. Darüber hinaus ermöglichen solche Kommunikationsverbindungen optische Signalwege zwischen sowohl IoT-Geräten als auch Gateways, einschließlich der Verwendung von MUX/DeMUXing-Komponenten, die die Verbindung der verschiedenen Geräte ermöglichen.
  • Die Netzwerktopologie kann eine beliebige Anzahl von IoT-Netzwerken beinhalten, wie beispielsweise ein Mesh-Netzwerk, das mit dem Netzwerk über Bluetooth-Low-Energy (BLE)-Verbindungen verbunden ist. Andere Arten von IoT-Netzwerken, die vorhanden sein können, beinhalten ein WLAN-Netzwerk (Wireless Local Area Network), das zur Kommunikation mit IoT-Geräten über IEEE 802.11 verwendet wird (Wi-Fi®)-Verbindungen, ein Mobilfunknetz, das zur Kommunikation mit IoT-Geräten über ein LTE/LTE-A- (4G) oder 5G-Mobilfunknetz verwendet wird, und ein Low-Power-Weitbereichsnetz (LPWA), beispielsweise ein LPWA-Netz, das mit der von der LoRa-Allianz veröffentlichten LoRaWan-Spezifikation kompatibel ist, oder ein IPv6 over Low-Power-Weitbereichsnetz (LPWAN), das mit einer von der Internet Engineering Task Force (IETF) veröffentlichten Spezifikation kompatibel ist. Darüber hinaus können die jeweiligen IoT-Netzwerke mit einem externen Netzbetreiber (z.B. einem Tier-2- oder Tier-3-Provider) über eine beliebige Anzahl von Kommunikationsverbindungen kommunizieren, wie z.B. eine LTE-Mobilfunkverbindung, eine LPWA-Verbindung oder eine Verbindung nach dem IEEE-Standard 802.15.4, wie z.B. Zigbee®. Die jeweiligen IoT-Netzwerke können auch mit der Verwendung einer Vielzahl von Netzwerk- und Internet-Anwendungsprotokollen wie dem Constrained Application Protocol (CoAP) arbeiten. Die jeweiligen IoT-Netzwerke können auch mit Koordinatorgeräten integriert werden, die eine Kette von Gliedern bilden, die einen Cluster-Baum aus verbundenen Geräten und Netzwerken bildet.
  • Jedes dieser IoT-Netze kann Möglichkeiten für neue technische Merkmale bieten, wie sie hierin beschrieben sind. Die verbesserten Technologien und Netze können ein exponentielles Wachstum von Geräten und Netzwerken ermöglichen, einschließlich der Nutzung von IoT-Netzen als Fog Geräte oder Fog Systeme. Mit zunehmendem Einsatz dieser verbesserten Technologien können die IoT-Netzwerke für Selbstmanagement, funktionale Evolution und Zusammenarbeit entwickelt werden, ohne dass direkte menschliche Eingriffe erforderlich sind. Die verbesserten Technologien können es sogar ermöglichen, dass IoT-Netzwerke ohne zentrale Steuerungssysteme funktionieren. Dementsprechend können die hierin beschriebenen verbesserten Technologien zur Automatisierung und Verbesserung von Netzwerkmanagement- und Betriebsfunktionen weit über die derzeitigen Implementierungen hinaus eingesetzt werden.
  • In einem Beispiel kann die Kommunikation zwischen IoT-Geräten, beispielsweise über die Backbone-Verbindungen, durch ein dezentrales System für Authentifizierung, Autorisierung und Abrechnung (AAA) geschützt werden. In einem dezentralen AAA-System können verteilte Zahlungs-, Kredit-, Audit-, Autorisierungs- und Authentifizierungssysteme über eine vernetzte heterogene Netzwerkinfrastruktur implementiert werden. Dies ermöglicht es Systemen und Netzwerken, sich in Richtung autonome Operationen zu bewegen. Bei diesen Arten von autonomen Operationen können Maschinen sogar Verträge über Personalressourcen abschließen und Partnerschaften mit anderen Maschinennetzwerken aushandeln. Dies kann die Erreichung gemeinsamer Ziele und eine ausgewogene Leistungserbringung im Vergleich zu skizzierten, geplanten Service Level Agreements sowie Lösungen ermöglichen, die Zählung, Messungen, Nachweisbarkeit und Auffindbarkeit bieten. Die Schaffung neuer Lieferkettenstrukturen und -methoden kann es ermöglichen, eine Vielzahl von Dienstleistungen zu schaffen, daraus Wert zu schöpfen und zusammenfallenzulassen ohne jegliche menschliche Beteiligung.
  • Solche IoT-Netze können durch die Integration von Sensortechnologien wie Schall, Licht, elektronischer Verkehr, Gesichts- und Mustererkennung, Geruch, Vibration in die autonome Organisation zwischen den IoT-Geräten weiter verbessert werden. Die Integration sensorischer Systeme kann eine systematische und autonome Kommunikation und Koordination der Leistungserbringung gegen vertragliche Serviceziele, Orchestrierung und Quality of Service (QoS) basierte Ressourcenausbreitung und -zusammenlegung ermöglichen.
  • Cluster von IoT-Geräten können für die Kommunikation mit anderen IoT-Geräten sowie mit einem Cloud-Netzwerk ausgestattet werden. Dadurch können die IoT-Geräte ein Ad-hoc-Netzwerk zwischen den Geräten bilden, so dass sie als eine einzige Vorrichtung fungieren können, die als Fog-Vorrichtung bezeichnet werden kann.
  • Ein Cloud Computing-Netzwerk in Verbindung mit einem Mesh-Netzwerk von IoT-Geräten kann als Fog Gerät am Rand des Cloud Computing-Netzwerks betrieben werden. Das Mesh-Netzwerk von IoT-Geräten kann als Fog (Nebel) bezeichnet werden, der am Rande der Cloud arbeitet.
  • Der Fog kann als ein massiv miteinander verbundenes Netzwerk betrachtet werden, bei dem eine Reihe von IoT-Vorrichtungen miteinander kommunizieren, beispielsweise über Funkverbindungen. Als Beispiel kann dieses Verbundnetz durch eine Verbindungsspezifikation erleichtert werden, die von der Open Connectivity Foundation™ (OCF) veröffentlicht wurde. Diese Norm ermöglicht es Geräten, sich gegenseitig zu entdecken und eine Kommunikation für Verbindungen herzustellen. Es können auch andere Verbindungsprotokolle verwendet werden, wie beispielsweise das Optimized Link State Routing (OLSR)-Protokoll, der bessere Ansatz für das mobile Ad-hoc-Netzwerkprotokoll (B.A.T.M.A.N.) oder das OMA Lightweight M2M (LWM2M)-Protokoll, unter anderem.
  • Drei Arten von IoT-Geräten umfassen Gateways, Datenaggregate und Sensoren, wobei jedoch jede Kombination von IoT-Geräten und -Funktionen verwendet werden kann. Die Gateways können Randvorrichtungen sein, die die Kommunikation zwischen der Cloud und dem Fog ermöglichen, und können auch die Backend-Prozess-Funktion für Daten von Sensoren bereitstellen, wie beispielsweise Bewegungsdaten, Flussdaten, Temperaturdaten und dergleichen. Die Datenaggregatoren können Daten von beliebig vielen Sensoren sammeln und die Backend-Verarbeitungsfunktion für die Analyse ausführen. Die Ergebnisse, Rohdaten oder beides können über die Gateways an die Cloud weitergeleitet werden. Bei den Sensoren kann es sich beispielsweise um vollwertige IoT-Geräte handeln, die sowohl Daten erfassen als auch verarbeiten können. In einigen Fällen können die Sensoren in ihrer Funktionalität eingeschränkter sein, z.B. beim Sammeln der Daten und beim Verarbeiten der Daten durch die Datenaggregatoren oder Gateways.
  • Die Kommunikation von jedem IoT-Gerät aus kann auf einem geeigneten Weg (z.B. einem bequemsten Weg) zwischen jedem der IoT-Geräte durchgeführt werden, um die Gateways zu erreichen. In diesen Netzen bietet die Anzahl der Verbindungen eine erhebliche Redundanz, so dass die Kommunikation auch bei Verlust einer Reihe von IoT-Geräten aufrechterhalten werden kann. Darüber hinaus kann die Verwendung eines Mesh-Netzwerks die Verwendung von loT-Geräten ermöglichen, die sehr stromsparend sind oder sich in einer Entfernung von der Infrastruktur befinden, da die Reichweite für die Verbindung zu einem anderen IoT-Gerät viel geringer sein kann als die Reichweite für die Verbindung zu den Gateways.
  • Der von diesen IoT-Geräten bereitgestellte Fog kann Geräten in der Cloud, wie beispielsweise einem Server, als eine einzige Vorrichtung am Rand der Cloud, z.B. eine Fog Vorrichtung, präsentiert werden. In diesem Beispiel können die von der Fog Vorrichtung ausgehenden Warnungen gesendet werden, ohne dass identifiziert werden kann, dass sie von einem bestimmten IoT-Gerät innerhalb des Fogs stammen. Auf diese Weise kann der Fog als eine verteilte Plattform betrachtet werden, die Rechen- und Speicherressourcen zur Verfügung stellt, um Verarbeitungs- oder datenintensive Aufgaben wie Datenanalyse, Datenaggregation und Maschinenlernen, unter anderem, durchzuführen.
  • In einigen Beispielen können die IoT-Geräte mit einem zwingenden Programmierstil konfiguriert werden, wobei z.B. jedes IoT-Gerät eine bestimmte Funktion und Kommunikationspartner hat. Die IoT-Vorrichtungen, die die Fog Vorrichtung bilden, können jedoch auch in einem deklarativen Programmierstil konfiguriert werden, der es den IoT-Vorrichtungen ermöglicht, ihre Operationen und Kommunikationen neu zu konfigurieren, um beispielsweise die benötigten Ressourcen als Reaktion auf Bedingungen, Abfragen und Geräteausfälle zu bestimmen. Eine Abfrage eines Benutzers auf einem Server nach den Vorgängen einer Teilmenge von Geräten, die von den IoT-Geräten überwacht werden, kann beispielsweise dazu führen, dass die Fog Vorrichtung die IoT-Geräte, wie beispielsweise bestimmte Sensoren, auswählt, die zur Beantwortung der Abfrage benötigt werden. Die Daten dieser Sensoren können dann durch eine beliebige Kombination von Sensoren, Datenaggregatoren oder Gateways aggregiert und analysiert werden, bevor sie von der Fog Vorrichtung an den Server gesendet werden, um die Anfrage zu beantworten. In diesem Beispiel können IoT-Geräte im Fog die verwendeten Sensoren basierend auf der Abfrage auswählen, wie z.B. das Hinzufügen von Daten von Flusssensoren oder Temperatursensoren. Wenn einige der IoT-Geräte nicht betriebsbereit sind, können andere IoT-Geräte in der Fog Vorrichtung, falls vorhanden, entsprechend Daten liefern.
  • Obwohl bestimmte Beispielsysteme, -verfahren, -vorrichtungen und -artikel hierin offenbart wurden, ist der Schutzumfang dieses Patents nicht darauf beschränkt. Im Gegenteil, dieses Patent umfasst alle Systeme, Verfahren, Vorrichtungen und Herstellungsgegenstände, die in den Schutzbereich der Ansprüche dieses Patents fallen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 62508896 [0001]

Claims (36)

  1. Vorrichtung zur Faltungseffizienzverbesserung, wobei die Vorrichtung umfasst: eine Datenverarbeitungselement (DPE)-Verzeichnis-Engine zum Identifizieren von DPEs, die in einem einer Plattform zur Verfügung stehenden DPE-Anordnung enthalten sind; einen Modusselektor zum Bestimmen einer Faltungsanordnung der identifizierten DPEs; einen DPE-Konfigurationsoptimierer zum Bestimmen einer DPE-Auslastung basierend auf den identifizierten DPEs; und eine Faltungs-Engine, die einen Faltungsvorgang unter Verwendung der identifizierten DPEs ermöglicht, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erfüllt.
  2. Vorrichtung nach Anspruch 1, wobei die Faltungs-Engine ausgestaltet ist zum: Multiplizieren von (a) Aktivierungswerten einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, um Faltungsausgaben zu erzeugen; und Berechnen einer Summe der Faltungsausgaben, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  3. Vorrichtung nach Anspruch 2, wobei die Ausgangsposition eine erste Ausgangsposition ist und die Faltungs-Engine ausgestaltet ist zum: Berechnen eines Poolbereichs, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst; und Berechnen mindestens eines von einem Durchschnittswert oder einem Maximalwert des Poolbereichs.
  4. Vorrichtung nach Anspruch 3, wobei die Faltungs-Engine ausgestaltet ist, mindestens eine von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit -PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  5. Vorrichtung nach Anspruch 1, wobei die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und der DPE-Konfigurationsoptimierer ausgestaltet ist zum: Vergleichen der ersten DPE-Auslastung mit dem DPE-Auslastungsschwellenwert; Verhindern des Ermöglichens des Faltungsvorgangs, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt; Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE- Auslastungsschwellenwert; und wobei die Faltungs-Engine ausgestaltet ist, den Faltungsvorgang unter Verwendung der zweiten Faltungsanordnung zu ermöglichen, wenn die zweite DPE-Auslastung den DPE Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  6. Vorrichtung nach Anspruch 1, wobei die DPE-Anordnung 256 DPEs beinhaltet.
  7. Vorrichtung nach Anspruch 1, wobei die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  8. Vorrichtung nach Anspruch 1, wobei die Faltungs-Engine den Faltungsvorgang unter Verwendung der identifizierten DPEs im Wesentlichen parallel ermöglicht.
  9. Vorrichtung nach Anspruch 1, wobei die Faltungs-Engine den Faltungsvorgang durch mindestens eines von Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators zum Ändern eines Bereichs des Akkumulators oder Einstellen einer Anzahl von gebrochenen Bits des Akkumulators zum Ändern einer Genauigkeit des Akkumulators ermöglicht.
  10. Nichtflüchtiges, computerlesbares Speichermedium, umfassend Anweisungen, die, wenn sie ausgeführt werden, eine Maschine mindestens veranlassen zum: Identifizieren von Datenverarbeitungselementen (DPEs), die in einer DPE-Anordnung enthalten sind, das einer Plattform zur Verfügung steht; Bestimmen einer Faltungsanordnung der identifizierten DPEs; Bestimmen einer DPE-Auslastung basierend auf den identifizierten DPEs; und Ermöglichen eines Faltungsvorgangs unter Verwendung der identifizierten DPEs, wenn die DPE-Auslastung einen DPE-Auslastungsschwellenwert erreicht.
  11. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, ferner Anweisungen umfassend, die wenn sie ausgeführt werden, die Maschine mindestens veranlassen zum: Multiplizieren von (a) Aktivierungswerten einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, um Faltungsausgaben zu erzeugen; und Berechnen einer Summe der Faltungsausgaben, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  12. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 11, wobei die Ausgangsposition eine erste Ausgangsposition ist, und ferner Anweisungen umfassend, die, wenn sie ausgeführt werden, die Maschine mindestens veranlassen zum: Berechnen eines Poolbereichs, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst; und Berechnen mindestens eines von einem Durchschnittswert oder einem Maximalwert des Poolbereichs.
  13. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 12, ferner Anweisungen umfassend, die, wenn sie ausgeführt werden, die Maschine veranlassen, mindestens eine von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit -PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  14. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, wobei die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und ferner Anweisungen umfassend, die, wenn sie ausgeführt werden, die Maschine mindestens veranlassen zum: Vergleichen der ersten DPE-Auslastung mit dem DPE-Auslastungsschwellenwert; Verhindern des Ermöglichens des Faltungsvorgangs, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt; Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE- Auslastungsschwellenwert; und Ermöglichen des Faltungsvorgangs unter Verwendung der zweiten Faltungsanordnung, wenn die zweite DPE-Auslastung den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  15. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, wobei die DPE-Anordnung 256 DPEs beinhaltet.
  16. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, wobei die Faltungsanordnung mindestens eine von 1 *256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  17. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, wobei die identifizierten DPEs die Faltung im Wesentlichen parallel ermöglichen.
  18. Nichtflüchtiges, computerlesbares Speichermedium nach Anspruch 10, ferner Anweisungen umfassend, die, wenn sie ausgeführt werden, die Maschine veranlassen, mindestens eine Anzahl von ganzzahligen Bits eines Akkumulators einzustellen, um einen Bereich des Akkumulators zu ändern, oder eine Anzahl von gebrochenen Bits des Akkumulators einzustellen, um eine Genauigkeit des Akkumulators zu ändern.
  19. Verfahren zur Faltungseffizienzverbesserung, wobei das Verfahren umfasst: Identifizieren von Datenverarbeitungselementen (DPEs), die in einer DPE-Anordnung enthalten sind, die einer Plattform zur Verfügung steht; Bestimmen einer Faltungsanordnung der identifizierten DPEs; Bestimmen einer DPE-Auslastung basierend auf den identifizierten DPEs; und Ermöglichen eines Faltungsvorgangs unter Verwendung der identifizierten DPEs, wenn die DPE-Ausnutzung einen DPE-Auslastungsschwellenwert erfüllt.
  20. Verfahren nach Anspruch 19, ferner umfassend: Multiplizieren von (a) Aktivierungswerten einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, um Faltungsausgaben zu erzeugen; und Berechnen einer Summe der Faltungsausgaben, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  21. Verfahren nach Anspruch 20, wobei die Ausgangsposition eine erste Ausgangsposition ist, das Verfahren ferner Folgendes umfassend: Berechnen eines Poolbereichs, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst; und Berechnen mindestens eines von einem Durchschnittswert oder einem Maximalwert des Poolbereichs.
  22. Verfahren nach Anspruch 21, ferner umfassend das Durchführen mindestens eines von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit -PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs.
  23. Verfahren nach Anspruch 19, wobei die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und das Verfahren ferner Folgendes umfassend: Vergleichen der ersten DPE-Auslastung mit dem DPE-Auslastungsschwellenwert; Verhindern des Ermöglichens des Faltungsvorgangs, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt; Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE- Auslastungsschwellenwert; und Ermöglichen des Faltungsvorgangs unter Verwendung der zweiten Faltungsanordnung, wenn die zweite DPE-Auslastung den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  24. Verfahren nach Anspruch 19, wobei die DPE-Anordnung 256 DPEs umfasst.
  25. Verfahren nach Anspruch 19, wobei die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  26. Verfahren nach Anspruch 19, wobei die identifizierten DPEs die Faltung im Wesentlichen parallel ermöglichen.
  27. Verfahren nach Anspruch 19, wobei das Ermöglichen des Faltungsvorgangs mindestens eines beinhaltet von Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators zum Modifizieren eines Bereichs des Akkumulators oder das Einstellen einer Anzahl von gebrochenen Bits des Akkumulators zum Modifizieren einer Genauigkeit des Akkumulators.
  28. Vorrichtung zur Faltungseffizienzverbesserung, wobei die Vorrichtung umfasst: ein erstes Mittel zur Identifizierung von DPEs, die in einer DPE-Anordnung enthalten sind, die einer Plattform zur Verfügung steht; ein zweites Mittel zum Bestimmen einer Faltungsanordnung der identifizierten DPEs; ein drittes Mittel zum Bestimmen einer DPE-Auslastung basierend auf den identifizierten DPEs; und ein viertes Mittel, um einen Faltungsvorgang unter Verwendung der identifizierten DPEs zu ermöglichen, wenn die DPE-Ausnutzung einen DPE-Auslastungsschwellenwert erreicht.
  29. Die Vorrichtung nach Anspruch 28, wobei das vierte Mittel ausgestaltet ist zum: Multiplizieren von (a) Aktivierungswerten einer Eingangsposition eines Eingangskanals und (b) Filterkoeffizienten, die der Eingangsposition entsprechen, um Faltungsausgaben zu erzeugen; und Berechnen einer Summe der Faltungsausgaben, um eine Ausgangsposition eines Ausgangskanals zu erzeugen.
  30. Vorrichtung nach Anspruch 29, wobei die Ausgangsposition eine erste Ausgangsposition ist und das vierte Mittel ausgestaltet ist zum: Berechnen eines Poolbereichs, der die Ausgangspositionen enthaltend die erste Ausgangsposition umfasst; und Berechnen mindestens eines von einem Durchschnittswert oder einem Maximalwert des Poolbereichs.
  31. Vorrichtung nach Anspruch 30, wobei das vierte Mittel ausgestaltet ist um mindestens eine von einer Biasoperation, einer Skalierungsoperation, einer parametrischen gleichgerichteten Lineareinheit-Operation (Parametric Rectified Linear Unit -PReLU) oder einer gleichgerichteten Lineareinheit-Operation auf dem wenigstens einen von einem Durchschnittswert und einem Maximalwert des Poolbereichs durchzuführen.
  32. Vorrichtung nach Anspruch 28, wobei die Faltungsanordnung eine erste Faltungsanordnung ist und die DPE-Auslastung eine erste DPE-Auslastung ist, und das dritte Mittel ausgestaltet ist zum: Vergleichen der ersten DPE-Auslastung mit dem DPE-Auslastungsschwellenwert; Verhindern des Ermöglichens des Faltungsvorgangs, wenn die erste DPE-Auslastung nicht den DPE Auslastungsschwellenwert erfüllt; Vergleichen einer zweiten DPE-Auslastung, die einer zweiten Faltungsanordnung zugeordnet ist, mit dem DPE- Auslastungsschwellenwert; und das vierte Mittel ausgestaltet ist, den Faltungsvorgang unter Verwendung der zweiten Faltungsanordnung zu ermöglichen, wenn die zweite DPE-Ausnutzung den DPE-Auslastungsschwellenwert basierend auf dem Vergleich erfüllt.
  33. Vorrichtung nach Anspruch 28, wobei die DPE-Anordnung 256 DPEs umfasst.
  34. Vorrichtung nach Anspruch 28, wobei die Faltungsanordnung mindestens eine von 1*256, 2*128, 4*64, 8*32 oder eine 16*16 Faltungsanordnung ist.
  35. Vorrichtung nach Anspruch 28, wobei das vierte Mittel den Faltungsvorgang unter Verwendung der identifizierten DPEs im Wesentlichen parallel ermöglicht.
  36. Vorrichtung nach Anspruch 28, wobei das vierte Mittel den Faltungsvorgang durch mindestens eines der folgenden ermöglicht: Einstellen einer Anzahl von ganzzahligen Bits eines Akkumulators zum Modifizieren eines Bereichs des Akkumulators oder Einstellen einer Anzahl von gebrochenen Bits des Akkumulators zum Modifizieren einer Genauigkeit des Akkumulators.
DE112018002566.7T 2017-05-19 2018-05-18 Verfahren, systeme und vorrichtungen zur verbesserung der faltungseffizienz Pending DE112018002566T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762508896P 2017-05-19 2017-05-19
US62/508,896 2017-05-19
PCT/EP2018/063231 WO2018211129A1 (en) 2017-05-19 2018-05-18 Methods, systems and apparatus to improve convolution efficiency

Publications (1)

Publication Number Publication Date
DE112018002566T5 true DE112018002566T5 (de) 2020-01-30

Family

ID=62712943

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018002566.7T Pending DE112018002566T5 (de) 2017-05-19 2018-05-18 Verfahren, systeme und vorrichtungen zur verbesserung der faltungseffizienz

Country Status (6)

Country Link
US (2) US11449345B2 (de)
JP (2) JP7072640B2 (de)
KR (1) KR102670479B1 (de)
CN (1) CN111133452A (de)
DE (1) DE112018002566T5 (de)
WO (1) WO2018211129A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449345B2 (en) 2017-05-19 2022-09-20 Movidius Limited Methods, systems and apparatus for adjusting a data path element of a neural network accelerator from convolution mode to pooling mode

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107832842B (zh) * 2017-11-28 2020-05-22 南京地平线机器人技术有限公司 针对折叠特征数据执行卷积运算的方法和装置
US11468302B2 (en) * 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11531727B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Computation of neural network node with large input values
US11531868B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Input value cache for temporarily storing input values
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
JP7070239B2 (ja) * 2018-08-23 2022-05-18 株式会社明電舎 ニューラルネットワークの入出力制御方式
US11521009B2 (en) 2018-09-04 2022-12-06 Luminar, Llc Automatically generating training data for a lidar using simulated vehicles in virtual space
US11861484B2 (en) * 2018-09-28 2024-01-02 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) hardware pre-processing and post-processing
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
CN109857460B (zh) * 2019-02-20 2021-09-21 南京华捷艾米软件科技有限公司 基于risc-v架构的矩阵卷积计算方法、接口、协处理器及系统
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
TWI719512B (zh) * 2019-06-24 2021-02-21 瑞昱半導體股份有限公司 使用像素通道置亂的卷積神經網路的演算方法與系統
JP7062617B2 (ja) * 2019-06-26 2022-05-06 株式会社東芝 演算装置および演算方法
US11537860B2 (en) * 2020-03-23 2022-12-27 Arm Limited Neural net work processing
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
CN111985549B (zh) * 2020-08-12 2023-03-31 中国科学院光电技术研究所 针对给定刚体目标进行部件自动定位识别的深度学习方法
CN112183732A (zh) * 2020-10-22 2021-01-05 中国人民解放军国防科技大学 卷积神经网络加速方法、装置和计算机设备
US20210117197A1 (en) * 2020-12-23 2021-04-22 Intel Corporation Multi-buffered register files with shared access circuits
US11449125B1 (en) * 2021-04-01 2022-09-20 Qualcomm Incorporated Adaptive dynamic clock and voltage scaling
US11494627B1 (en) 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US11726746B1 (en) * 2022-09-14 2023-08-15 Moffett International Co., Limited Vector operation acceleration with convolution computation unit

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4432481A (en) * 1982-06-14 1984-02-21 Owens-Illinois, Inc. Splice-in-register control
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US5949920A (en) * 1996-08-13 1999-09-07 Hewlett-Packard Co. Reconfigurable convolver circuit
JP2000132539A (ja) * 1998-10-28 2000-05-12 Matsushita Electric Ind Co Ltd 演算装置
US10572824B2 (en) * 2003-05-23 2020-02-25 Ip Reservoir, Llc System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines
JP2009245381A (ja) * 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9613001B2 (en) * 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
CN104809426B (zh) * 2014-01-27 2019-04-05 日本电气株式会社 卷积神经网络的训练方法、目标识别方法及装置
JP6314628B2 (ja) * 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US11423311B2 (en) * 2015-06-04 2022-08-23 Samsung Electronics Co., Ltd. Automatic tuning of artificial neural networks
US10460230B2 (en) * 2015-06-04 2019-10-29 Samsung Electronics Co., Ltd. Reducing computations in a neural network
US20160379109A1 (en) * 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Convolutional neural networks on hardware accelerators
US10726328B2 (en) * 2015-10-09 2020-07-28 Altera Corporation Method and apparatus for designing and implementing a convolution neural net accelerator
US10614354B2 (en) * 2015-10-07 2020-04-07 Altera Corporation Method and apparatus for implementing layers on a convolutional neural network accelerator
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
CN116009814A (zh) * 2016-10-20 2023-04-25 英特尔公司 用于经融合的乘加的系统、装置和方法
KR102499396B1 (ko) * 2017-03-03 2023-02-13 삼성전자 주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
WO2018211129A1 (en) 2017-05-19 2018-11-22 Movidius Ltd. Methods, systems and apparatus to improve convolution efficiency

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449345B2 (en) 2017-05-19 2022-09-20 Movidius Limited Methods, systems and apparatus for adjusting a data path element of a neural network accelerator from convolution mode to pooling mode

Also Published As

Publication number Publication date
JP2022052773A (ja) 2022-04-04
WO2018211129A1 (en) 2018-11-22
CN111133452A (zh) 2020-05-08
KR102670479B1 (ko) 2024-05-31
JP7328379B2 (ja) 2023-08-16
US20200089506A1 (en) 2020-03-19
US20230082613A1 (en) 2023-03-16
JP7072640B2 (ja) 2022-05-20
KR20200022384A (ko) 2020-03-03
US11449345B2 (en) 2022-09-20
JP2020521263A (ja) 2020-07-16

Similar Documents

Publication Publication Date Title
DE112018002566T5 (de) Verfahren, systeme und vorrichtungen zur verbesserung der faltungseffizienz
DE112019005831T5 (de) Kompression in neuronalen netzen
DE112018002572T5 (de) Verfahren, systeme und vorrichtungen zur optimierung der pipeline-ausführung
DE102020118004A1 (de) Verfahren und vorrichtungen zum kachelförmigen durchlaufen eines tensors für faltungsoperationen
DE202017104127U1 (de) Superpixel für faltende neuronale Netze
DE112020003128T5 (de) Dilatierte faltung mit systolischem array
DE202017105729U1 (de) Kerndurchschreiten in Hardware
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE112019004943T5 (de) Automatisierte Erzeugung neuronaler Netze
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE102020007951A1 (de) Einsetzen eines der Einfärbung dienenden neuronalen Netzwerkes zum Generieren von eingefärbten Bildern auf Grundlage interaktiver Farbkanten
DE112018004584T5 (de) Dichtekoordinaten-hashing für volumetrische daten
CN111783937A (zh) 一种神经网络构建方法以及系统
DE112018002568T5 (de) Verfahren, Systeme und Vorrichtung zur Reduzierung von Speicherlatenz beim Abrufen von Pixelkernen
DE112016005809T5 (de) Lichtfeld-Rendering eines Bildes unter Verwendung variabler Rechenkomplexität
US9569464B1 (en) Element identification in database
DE112020005799T5 (de) Effiziente Ausnutzung eines Verarbeitungselementarrays
DE102018110138A1 (de) Arbeitsablaufmaschinen-Framework
DE112020003596T5 (de) Datenbank-Tuning unter Verwendung eines föderierten maschinellen Lernsystems eines Centerless-Netzwerks
DE102021107510A1 (de) Training eines neuronalen netzwerks unter speicherbeschränkung
DE102018125740A1 (de) Verfahren und vorrichtungen zur ermöglichung einer parallelen verarbeitung beim lösen von linearen gleichungen in einem computervisionsverarbeitungssystem
DE102019115875A1 (de) Verfahren und vorrichtung für ein neurales netz
DE102021211047A1 (de) Technologien zur region-of-interest-videocodierung
Liu et al. Cross-resolution feature attention network for image super-resolution
DE102013022171A1 (de) Ausführung von objekterkennungsoperationen mittels einer grafischen verarbeitungseinheit

Legal Events

Date Code Title Description
R012 Request for examination validly filed