DE202017103694U1 - Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor - Google Patents

Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor Download PDF

Info

Publication number
DE202017103694U1
DE202017103694U1 DE202017103694.4U DE202017103694U DE202017103694U1 DE 202017103694 U1 DE202017103694 U1 DE 202017103694U1 DE 202017103694 U DE202017103694 U DE 202017103694U DE 202017103694 U1 DE202017103694 U1 DE 202017103694U1
Authority
DE
Germany
Prior art keywords
image data
matrix
dimensional
execution
neural network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE202017103694.4U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE202017103694U1 publication Critical patent/DE202017103694U1/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/20Image preprocessing
    • G06V10/36Applying a local operator, i.e. means to operate on image points situated in the vicinity of a given point; Non-linear local filtering operations, e.g. median filtering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]

Landscapes

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

Abstract

Maschinenlesbares Speichermedium mit auf diesem gespeicherten Programmcode, der, bei Ausführung durch einen Bildprozessor, welcher eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister, das den Ausführungsbahnen einen jeweiligen lokalen Registerbereich bereitstellt, aufweist, das Durchführen eines Verfahrens veranlasst, das Verfahren umfassend: Ausführen eines faltenden neuronalen Netzwerks durch Durchführen von Folgendem: a) Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister; b) Durchführen einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalt innerhalb der zweidimensionalen Schieberegistermatrix.

Description

  • Technisches Gebiet
  • Die Beschreibung bezieht sich auf die Bildverarbeitung und noch spezifischer auf ein faltendes neuronales Netzwerk („Convolutional Neural Network, CNN“) auf einem zweidimensionalen Bildprozessor.
  • Allgemeiner Stand der Technik
  • Die Bildverarbeitung beinhaltet in der Regel die Verarbeitung von Bildpunktwerten, die in einer Matrix angeordnet sind. Hierbei erfasst eine räumlich angeordnete zweidimensionale Matrix die zweidimensionale Beschaffenheit der Bilder (zusätzliche Dimensionen können unter anderem Zeit (z. B. eine Sequenz von zweidimensionalen Bildern) und Datentyp (z. B. Farben) einschließen). In einem typischen Szenario werden die angeordneten Bildpunktwerte von einer Kamera bereitgestellt, die ein Standbild oder eine Folge von Frames erzeugt hat, um Bewegungsbilder zu erfassen. Herkömmliche Bildprozessoren fallen in der Regel unter eines von zwei Extremen.
  • Ein erstes Extrem führt Bildverarbeitungsschritte als Softwareprogramme aus, die auf einem Universalprozessor oder einem universell verwendbaren Prozessor (z. B. einem Universalprozessor mit Vektorbefehlserweiterungen) ausgeführt werden. Obwohl das erste Extrem in der Regel eine vielseitig einsetzbare Anwendungssoftware-Entwicklungsplattform bereitstellt, resultiert dessen Verwendung feinerer Datenstrukturen kombiniert mit den zugehörigen Verwaltungsdaten (z. B. Befehlsabruf und -dekodierung, Handhabung von chipinternen und chipexternen Daten, spekulative Ausführung) letztendlich in einem Verbrauch größerer Energiemengen pro Dateneinheit während der Ausführung des Programmcodes.
  • Ein zweites, entgegengesetztes Extrem wendet stationäre, fest verdrahtete Schaltkreise auf viel größere Datenblöcke an. Die Verwendung von größeren (im Gegensatz zu feineren) Datenblöcken, die direkt auf benutzerdefinierte Schaltkreise angewendet werden, verringert den Energieverbrauch pro Dateneinheit erheblich. Jedoch führt die Verwendung von benutzerdefinierten stationären Funktionsschaltkreisen im Allgemeinen zu einer begrenzten Menge von Arbeitsschritten, die der Prozessor ausführen kann. Dementsprechend fehlt im zweiten Extrem die vielseitige Programmierumgebung (die mit dem ersten Extrem assoziiert ist).
  • Eine Technologieplattform, die sowohl vielseitige Anwendungssoftware-Entwicklungsmöglichkeiten als auch eine verbesserte Energieeffizienz pro Dateneinheit bietet, bleibt eine wünschenswerte und dennoch fehlende Lösung.
  • Kurzdarstellung
  • Ein Verfahren wird beschrieben, welches das Ausführen einer Schicht eines faltenden neuronalen Netzwerks auf einem Bildprozessor, der eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister aufweist, beinhaltet. Das zweidimensionale Schieberegister stellt einen jeweiligen lokalen Registerbereich für die Ausführungsbahnen bereit. Das Ausführen des faltenden neuronalen Netzwerks beinhaltet das Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister. Das Ausführen des faltenden neuronalen Netzwerks beinhaltet ebenfalls das Durchführen einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalt innerhalb der zweidimensionalen Schieberegistermatrix.
  • Eine Vorrichtung wird ebenfalls beschrieben, die über Mittel zum Ausführen einer Schicht eines faltenden neuronalen Netzwerks auf einem Bildprozessor verfügt, der eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister aufweist. Das zweidimensionale Schieberegister stellt einen jeweiligen lokalen Registerbereich für die Ausführungsbahnen bereit. Das Mittel zum Ausführen des faltenden neuronalen Netzwerks beinhaltet Mittel zum Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister. Das Mittel zum Ausführen des faltenden neuronalen Netzwerks beinhaltet ebenfalls Mittel zum Durchführen einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalt innerhalb der zweidimensionalen Schieberegistermatrix.
  • Figurenverzeichnis
  • Die folgende Beschreibung und begleitenden Zeichnungen dienen dazu, verschiedene Ausführungsformen der Erfindung zu veranschaulichen. In den Zeichnungen:
  • 1 zeigt eine Ausführungsform einer Bildprozessor-Hardwarearchitektur;
  • 2a, 2b, 2c, 2d und 2e zeigen das Parsen von Bilddaten in eine Zeilengruppe, das Parsen einer Zeilengruppe in ein Blatt und die an einem Blatt mit sich überschneidenden Schablonen durchgeführte Operation;
  • 3a zeigt eine Ausführungsform eines Schablonenprozessors;
  • 3b zeigt eine Ausführungsform eines Befehlsformats;
  • 4 zeigt eine Ausführungsform einer Datenberechnungseinheit innerhalb eines Schablonenprozessors;
  • 5a, 5b, 5c, 5d, 5e, 5f, 5g, 5h, 5i, 5j und 5k zeigen ein Beispiel für die Verwendung einer zweidimensionalen Verschiebungsmatrix und einer Ausführungsbahnmatrix, um ein Paar angrenzender Ausgangsbildpunktwerte mit sich überschneidenden Schablonen zu bestimmen;
  • 6 zeigt eine Ausführungsform einer Einheitszelle für eine integrierte Ausführungsbahnmatrix und eine zweidimensionale Verschiebungsmatrix;
  • 7 zeigt eine 3D-Faltung;
  • 8 zeigt eine CNN-Schicht;
  • s9a zeigt eine 3D-Faltung mit Bild a Koeffizientenebenen;
  • 9b zeigt eine 2D-Faltung von zwei 3 × 3-Schablonen mit Bilddaten mit einem entsprechenden Satz von Koeffizienten;
  • 10a, 10b, 10c, 10d, 10e, 10f, 10g, 10h, 10i und 10j zeigen die Ausführung einer CNN-Schicht mit Bildebenen und Koeffizientensätzen, die Ebenen von Koeffizienten aufweisen;
  • 11a, 11b, 11c, 11d, 11e, 11f, 11g, 11h, 11i, 11j zeigen eine zweidimensionale Faltung für zwei 3 × 3-Schablonen mit einem Bildprozessor, der ein zweidimensionales Schieberegister aufweist;
  • 12 zeigt eine erste Bildprozessor-CNN-Schicht-Konfiguration;
  • 13 zeigt eine zweite Bildprozessor-CNN-Schicht-Konfiguration;
  • 14 zeigt eine dritte Bildprozessor-CNN-Schicht-Konfiguration;
  • 15 bezieht sich auf das Multiplexen mehrerer CNN-Schichten auf einem Bildprozessor;
  • 16 zeigt ein Verfahren zum Ausführen einer CNN-Schicht auf einem Bildprozessor;
  • 17 stellt ein Computersystem dar.
  • Ausführliche Beschreibung
  • a. Bildprozessor-Hardware-Architektur und -Betrieb
  • 1 zeigt eine Ausführungsform einer Architektur 100 für einen in Hardware implementierten Bildprozessor. Der Bildprozessor kann z. B. von einem Compiler angesteuert werden, der den Programmcode, der für einen virtuellen Prozessor geschrieben wurde, in einer simulierten Umgebung in Programmcode umwandelt, der von dem Hardwareprozessor tatsächlich ausgeführt wird. Wie in 1 ersichtlich, beinhaltet die Architektur 100 eine Vielzahl von Zeilenpuffereinheiten 101_1 bis 101_M (nachfolgend „Zeilenpuffer“, „Zeilenpuffereinheiten“ oder Ähnliches), die mit einer Vielzahl von Schablonenprozessoren 102_1 bis 102_N (nachfolgend „Schablonenprozessor“, „Schablonenprozessoreinheiten“ oder Ähnliches) und entsprechenden Blattgeneratoreinheiten 103_1 bis 103_N (nachfolgend „Blattgeneratoren“, „Blattgeneratoreinheiten“ oder Ähnliches) durch ein Netzwerk 104 (z. B. ein Network on Chip (NOC), einschließlich eines On-Chip-Schalternetzwerks, eines On-Chip-Ringnetzwerks oder einer anderen Art von Netzwerk) verbunden sind. In einer Ausführungsform kann jede Zeilenpuffereinheit mit jedem Blattgenerator und einem entsprechenden Schablonenprozessor über das Netzwerk 104 verbunden sein.
  • In einer Ausführungsform wird der Programmcode kompiliert und auf einen entsprechenden Schablonenprozessor 102 geladen, um die zuvor von einem Softwareentwickler definierten Bildverarbeitungsvorgänge auszuführen (der Programmcode kann je nach Konzipierung und Implementierung auch auf den zugehörigen Blattgenerator des Schablonenprozessors 103 geladen werden). In zumindest einigen Fällen kann eine Bildverarbeitungspipeline realisiert werden, indem ein erstes Kernprogramm für eine erste Pipelinephase in einen ersten Schablonenprozessor 102_1 geladen, ein zweites Kernprogramm für eine zweite Pipelinephase in einen zweiten Schablonenprozessor 102_2, geladen wird usw., wobei das erste Kernsystem die Funktionen der ersten Pipelinephase durchführt, das zweite Kernsystem die Funktionen der zweiten Pipelinephase durchführt usw., und zusätzliche Steuerablaufverfahren installiert werden, um Ausgabebilddaten von einer Pipelinephase zur nächsten Pipelinephase zu leiten.
  • In anderen Konfigurationen kann der Bildprozessor als eine parallele Maschine realisiert sein, die zwei oder mehr Schablonenprozessoren 102_1, 102_2 aufweist, die auf demselben Kernprogrammcode betrieben werden. Zum Beispiel kann ein hochgradig dichter und hoher Datenratenstrom von Bilddaten verarbeitet werden, indem Frames über mehrere Schablonenprozessoren verteilt werden, von denen jeder dieselbe Funktion ausführt.
  • In noch anderen Konfigurationen kann im Wesentlichen jeder ausgerichtete, azyklische Graph (DAG) von Kernsystemen auf den Hardwareprozessor geladen werden, indem jeweilige Schablonenprozessoren mit deren eigenen jeweiligen Kernsystemprogrammcodes konfiguriert und geeignete Steuerablauf-Hooks in die Hardware konfiguriert werden, um Ausgabebilder von einem Kernsystem an den Eingang eines nächsten Kernsystems in dem DAG-Design zu leiten.
  • Bei einem allgemeinen Ablauf werden die Frames der Bilddaten von einer Makro-E/A-Einheit 105 empfangen und zu einer oder mehreren der Zeilenpuffereinheiten 101 auf einer Frame-per-Frame-Basis übermittelt. Eine bestimmte Zeilenpuffereinheit parst ihren Frame aus Bilddaten in einen kleineren Bereich von Bilddaten, der als „Zeilengruppe“ bezeichnet wird, und führt dann die Zeilengruppe durch das Netzwerk 104 zu einem bestimmten Blattgenerator. Eine vollständige oder „volle“ singuläre Zeilengruppe kann sich beispielsweise aus den Daten mehrerer zusammenhängender vollständiger Zeilen oder Spalten eines Frames zusammensetzen (der Kürze halber bezieht sich die vorliegende Beschreibung hauptsächlich auf zusammenhängende Zeilen). Der Blattgenerator parst ferner die Zeilengruppe von Bilddaten in einen kleineren Bereich von Bilddaten, der als „Blatt“ bezeichnet wird, und präsentiert das Blatt seinem entsprechenden Schablonenprozessor.
  • Im Falle einer Bildverarbeitungspipeline oder eines DAG-Ablaufs mit einem einzigen Eingang werden im Allgemeinen Eingabeframes an die gleiche Zeilenpuffereinheit 101_1 geleitet, die die Bilddaten in Zeilengruppen parst und die Zeilengruppen zu dem Blattgenerator 103_1 leitet, dessen entsprechender Schablonenprozessor 102_1 den Code des ersten Kernsystems in der Pipeline/dem DAG ausführt. Nach Beendigung der Operationen durch den Schablonenprozessor 102_1 an den von ihm verarbeiteten Zeilengruppen sendet der Blattgenerator 103_1 Ausgabezeilengruppen an eine „nachgelagerten“ Zeilenpuffereinheit 101_2 (in manchen Anwendungsfällen kann die Ausgabezeilengruppe zurück an die gleiche Zeilenpuffereinheit 101_1 gesendet werden, die zuvor die Eingabezeilengruppen gesendet hatte).
  • Ein oder mehrere „Abnehmerkernsysteme“, die die nächste Phase/Operation in der Pipeline/dem DAG darstellen, die auf deren eigenen jeweiligen anderen Blattgenerator und Schablonenprozessor (z. B. Blattgenerator 103_2 und Schablonenprozessor 102_2) ausgeführt werden, empfangen anschließend die von dem ersten Schablonenprozessor 102_1 erzeugten Bilddaten von der nachgelagerten Zeilenpuffereinheit 101_2. Auf diese Weise werden die Ausgabedaten eines „Erzeugerkernsystems“, das auf einem ersten Schablonenprozessor betrieben wird, an ein „Abnehmerkernsystem“ weitergeleitet, das auf einem zweiten Schablonenprozessor betrieben wird, wobei das Abnehmerkernsystem nach dem Erzeugerkernsystem den nächsten Satz von Arbeitsschritten gemäß des Designs der gesamten Pipeline oder des DAGs ausführt.
  • Ein Schablonenprozessor 102 ist dafür ausgelegt, gleichzeitig an mehreren sich überschneidenden Schablonen von Bilddaten zu arbeiten. Die mehreren sich überschneidenden Schablonen und die interne Hardwareverarbeitungskapazität des Schablonenprozessors bestimmen effektiv die Größe eines Blattes. Hier arbeiten innerhalb eines Schablonenprozessors 102 Matrizen von Ausführungsbahnen zusammen, um gleichzeitig den Bilddatenoberflächenbereich zu verarbeiten, der von den mehreren sich überschneidenden Schablonen bedeckt ist.
  • Wie nachstehend näher beschrieben, werden in verschiedenen Ausführungsformen, Blätter von Bilddaten in eine zweidimensionale Registermatrixstruktur innerhalb der Schablonenprozessoreinheiten 102 geladen. Es wird davon ausgegangen, dass die Verwendung von Blättern und die zweidimensionale Registermatrixstruktur für effektive Energieverbrauchsverbesserungen sorgen, indem eine große Datenmenge in einen großen Registerbereich bewegt wird, so wird beispielsweise eine einzelne Ladeoperation mit direkt an den Daten ausgeführten Verarbeitungsschritten unmittelbar danach durch eine Ausführungsbahnmatrix durchgeführt. Zudem stellt die Verwendung einer Ausführungsbahnmatrix und einer entsprechenden Registermatrix verschiedene Schablonengrößen bereit, die leicht programmierbar/konfigurierbar sind.
  • 2a bis 2e veranschaulichen umfassend Ausführungsformen sowohl der Parsing-Aktivität einer Zeilenpuffereinheit 101 als auch der feineren Parsing-Aktivität einer Blattgeneratoreinheit 103 sowie der Schablonenverarbeitungsaktivität des Schablonenprozessors 102, der mit der Blatterzeugereinheit 103 gekoppelt ist.
  • 2a zeigt eine Ausführungsform eines Eingabeframes der Bilddaten 201. 2a zeigt zudem einen Umriss drei sich überschneidender Schablonen 202 (die Schablonen weisen jeweils eine Abmessung von 3 Bildpunkten mal 3 Bildpunkten auf), für deren Betrieb ein Schablonenprozessor ausgelegt ist. Der Ausgabebildpunkt, für den jede Schablone jeweils die Ausgabebilddaten erzeugt, wird in schwarzer Farbe hervorgehoben. Der Kürze halber sind die drei sich überschneidenden Schablonen 202 nur als in vertikaler Richtung überschneidend dargestellt. Es ist relevant, zu erkennen, dass ein Schablonenprozessor in Wirklichkeit so ausgelegt sein kann, dass dieser sowohl in vertikaler als auch in horizontaler Richtung überschneidende Schablonen aufweist.
  • Aufgrund der sich, wie in 2a dargestellt, vertikal überschneidenden Schablonen 202 innerhalb des Schablonenprozessors gibt es ein breites Band von Bilddaten innerhalb des Frames, das von einem einzelnen Schablonenprozessor bearbeitet werden kann. Wie nachfolgend näher beschrieben, verarbeiten die Schablonenprozessoren in einer Ausführungsform innerhalb ihrer sich überschneidenden Schablonen Daten von links nach rechts über sämtliche Bilddaten (und wiederholen den Vorgang dann für die nächste Gruppe von Zeilen in der Reihenfolge von oben nach unten). Somit nimmt, während die Schablonenprozessoren mit ihrer Operation fortfahren, die Anzahl der schwarzen Ausgabebildpunktblöcke horizontal nach rechts zu. Wie oben erwähnt, ist eine Zeilenpuffereinheit 101 für das Parsen einer Zeilengruppe von Eingabebilddaten aus einem eingehenden Frame verantwortlich, der für die Schablonenprozessoren ausreichend ist, um eine erweiterte Anzahl anstehender Zyklen zu bearbeiten. Eine exemplarische Darstellung einer Zeilengruppe ist als schattierter Bereich 203 dargestellt. In einer Ausführungsform kann die Zeilenpuffereinheit 101 unterschiedliche Dynamiken zum Senden/Empfangen einer Zeilengruppe an einen/von einem Blattgenerator umfassen. Beispielsweise werden gemäß einem Modus, der als „vollständige Gruppe“ bezeichnet wird, die gesamten Bilddatenzeilen mit voller Breite zwischen einer Zeilenpuffereinheit und einem Blattgenerator übermittelt. Gemäß einem zweiten Modus, der als „virtuell groß“ bezeichnet wird, wird eine Zeilengruppe zunächst mit einer Teilmenge von Zeilen mit voller Breite übermittelt. Die verbleibenden Zeilen werden dann nacheinander in kleineren Stücken (mit weniger als voller Breite) übermittelt.
  • Wenn die Zeilengruppe 203 der Eingabebilddaten durch die Zeilenpuffereinheit definiert und an die Blattgeneratoreinheit übermittelt worden ist, parst die Blattgeneratoreinheit die Zeilengruppe ferner in feinere Blätter, die an die Hardwarebeschränkungen des Schablonenprozessors präziser angepasst sind. Insbesondere wird in einer Ausführungsform, wie nachfolgend näher beschrieben, jeder Schablonenprozessor aus einer zweidimensionalen Schieberegistermatrix gebildet. Die zweidimensionale Schieberegistermatrix verschiebt im Wesentlichen Bilddaten „unterhalb“ einer Matrix von Ausführungsbahnen, wobei das Muster der Verschiebung bewirkt, dass jede Ausführungsbahn innerhalb ihrer eigenen jeweiligen Schablone an Daten arbeitet (d. h. jede Ausführungsbahn ihre eigene Schablone von Informationen verarbeitet, um eine Ausgabe für diese Schablone zu erzeugen). In einer Ausführungsform sind Blätter Oberflächenbereiche von Eingabebilddaten, die die zweidimensionale Schieberegistermatrix „ausfüllen“ oder anderweitig in dieselbe geladen werden.
  • Wie nachfolgend näher beschrieben, gibt es in verschiedenen Ausführungsformen tatsächlich mehrere Schichten von zweidimensionalen Registerdaten, die bei jedem Zyklus verschoben werden können. Zur Vereinfachung verwendet ein Großteil der vorliegenden Beschreibung einfach den Begriff „zweidimensionales Schieberegister“ und dergleichen, um auf Strukturen zu verweisen, die eine oder mehrere dieser Schichten zweidimensionaler Registerdaten aufweisen, die verschoben werden können.
  • Wie in 2b dargestellt, parst der Blattgenerator ein Anfangsblatt 204 von der Zeilengruppe 203 und stellt es dem Schablonenprozessor zur Verfügung (hier entspricht das Datenblatt dem fünf mal fünf schattierten Bereich, der im Allgemeinen mit der Bezugsnummer 204 gekennzeichnet ist). Wie in 2c und 2d dargestellt, arbeitet der Schablonenprozessor an dem Blatt der eingegebenen Bilddaten durch effektives Bewegen der sich überschneidenden Schablonen 202 von links nach rechts über das Blatt. Wie in 2d ist die Anzahl der Bildpunkte, für die ein Ausgabewert aus den Daten innerhalb des Blattes berechnet werden könnte (neun in einer schattierten Matrix von 3 mal 3), erschöpft (keine anderen Bildpunktpositionen können einen Ausgabewert haben, der aus den Informationen innerhalb des Blattes bestimmt wird). Zur Vereinfachung wurden die Randbereiche des Bildes ignoriert.
  • Wie in 2e ersichtlich, liefert der Blattgenerator dann ein nächstes Blatt 205 für den Schablonenprozessor, um die Operationen fortzusetzen. Zu beachten ist, dass die Anfangspositionen der Schablonen, wenn sie mit der Operation an dem nächsten Blatt beginnen, der nächsten Progression (wie zuvor in 2d dargestellt) vom Erschöpfungspunkt nach rechts auf dem ersten Blatt entsprechen. Mit dem neuen Blatt 205 bewegen sich die Schablonen einfach weiter nach rechts, während der Schablonenprozessor auf dem neuen Blatt auf die gleiche Weise arbeitet wie bei der Verarbeitung des ersten Blattes.
  • Zu beachten ist, dass zwischen den Daten des ersten Blattes 204 und den Daten des zweiten Blattes 205 aufgrund der Randbereiche der Schablonen, die einen Ausgabebildpunktort umgeben, eine gewisse Überschneidung vorliegt. Die Überschneidung könnte einfach gehandhabt werden, indem der Blattgenerator die sich überschneidenden Daten zweimal überträgt. In alternativen Implementierungen kann, um dem Schablonenprozessor ein nächstes Blatt zuzuführen, der Blattgenerator damit fortfahren, ausschließlich neue Daten an den Schablonenprozessor zu senden, während der Schablonenprozessor die sich überschneidenden Daten aus dem vorhergehenden Blatt verwendet.
  • b. Schablonenprozessordesign und -betrieb
  • 3a zeigt eine Ausführungsform einer Schablonenprozessoreinheitsarchitektur 300. Wie in 3a ersichtlich, beinhaltet der Schablonenprozessor eine Datenberechnungseinheit 301, einen Skalarprozessor 302 und einen zugehörigen Speicher 303 sowie eine E/A-Einheit 304. Die Datenberechnungseinheit 301 beinhaltet eine Matrix von Ausführungsbahnen 305, eine zweidimensionale Verschiebungsmatrixstruktur 306 und jeweilige separate Arbeitsspeicher 307, die mit bestimmten Zeilen oder Spalten der Matrix verbunden sind.
  • Die E/A-Einheit 304 ist verantwortlich für das Laden von „eingegebenen“ Datenblättern, die von dem Blattgenerator empfangen wurden, in die Datenberechnungseinheit 301 sowie das Speichern der von dem Schablonenprozessor „ausgegebenen“ Blätter im Blattgenerator. In einer Ausführungsform umfasst das Laden von Blattdaten in die Datenberechnungseinheit 301 das Parsen eines empfangenen Blattes in die Zeilen/Spalten der Bilddaten sowie das Laden der Zeilen/Spalten der Bilddaten in die zweidimensionale Schieberegisterstruktur 306 oder in die jeweiligen Arbeitsspeicher 307 der Zeilen/Spalten der Ausführungsbahnmatrix (wie nachfolgend näher beschrieben). Wird das Blatt anfänglich in die Speicher 307 geladen, können die einzelnen Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305 dann die Blattdaten, sofern geeignet (z. B. als Ladebefehl kurz vor der Operation der Blattdaten), in die zweidimensionale Schieberegisterstruktur 306 der Arbeitsspeicher 307 laden. Nach Beendigung des Ladens eines Datenblattes in die Registerstruktur 306 (ob direkt aus einem Blattgenerator oder aus den Speichern 307) arbeiten die Ausführungsbahnen der Ausführungsbahnmatrix 305 an den Daten und „schreiben“ letztendlich die fertigen Daten als ein Blatt direkt „zurück“ in den Blattgenerator oder in die Arbeitsspeicher 307. Wenn die Ausführungsbahnen in die Arbeitsspeicher 907 zurückschreiben, ruft die E/A-Einheit 304 die Daten aus den Arbeitsspeichern 307 ab, um ein Ausgabeblatt zu bilden, das dann an den Blattgenerator weitergeleitet wird.
  • Der Skalarprozessor 302 beinhaltet einen Programmcontroller 309, der die Befehle des Programmcodes des Schablonenprozessors aus dem Skalarspeicher 303 einliest und die Befehle an die Ausführungsbahnen in der Ausführungsbahnmatrix 305 ausgibt. In einer Ausführungsform wird ein einzelner Befehl auf alle Ausführungsbahnen innerhalb der Matrix 305 übertragen, um ein einzelne Anweisung auf multiple Daten („Single-Instruction-Multiple-Data, SIMD“)-ähnliches Verhalten der Datenberechnungseinheit 301 zu bewirken. In einer Ausführungsform, beinhaltet das Befehlsformat der Befehle, die aus dem Skalarspeicher 303 eingelesen und an die Ausführungsbahnen der Ausführungsbahnmatrix 305 ausgegeben werden, ein sehr langes Befehlswortformat (VLIW), welches mehr als einen Operationscode pro Befehl beinhaltet. In einer weiteren Ausführungsform beinhaltet das VLIW-Format sowohl einen ALU-Operationscode, der eine mathematische Funktion anweist, die von der ALU einer Ausführungsbahn ausgeführt wird (wobei, wie nachstehend beschrieben, in einer Ausführungsform mehr als eine herkömmliche ALU-Operation angegeben sein kann), als auch einen Speicheroperationscode (der eine Speicheroperation für eine spezifische Ausführungsbahn oder eine Gruppe von Ausführungsbahnen anweist).
  • Der Begriff „Ausführungsbahn“ bezieht sich auf eine Gruppe von einer oder mehreren Ausführungseinheiten, die einen Befehl ausführen können (z. B. eine Logikschaltung, die einen Befehl ausführen kann). Eine Ausführungsbahn kann in verschiedenen Ausführungsformen jedoch prozessorähnlichere Funktionen und nicht nur Ausführungseinheiten beinhalten. Beispielsweise kann eine Ausführungsbahn neben einer oder mehreren Ausführungseinheiten auch Logikschaltungen beinhalten, die einen empfangenen Befehl dekodieren, oder für den Fall multiple Anweisungen auf multiple Daten („Multiple-Instruction-Multiple-Data, MIMD“)-ähnlicherer Architekturen eine Logikschaltung beinhalten, die einen Befehl abruft und dekodiert. In Bezug auf MIMD-ähnliche Ansätze kann, obwohl ein zentraler Programmsteuerungsansatz hier weitgehend beschrieben wurde, auch ein verteilterer Ansatz in verschiedenen alternativen Ausführungsformen (z. B. unter anderem auch Programmcode und ein Programmcontroller innerhalb jeder Ausführungsbahn der Matrix 305) implementiert werden.
  • Die Kombination einer Ausführungsbahnmatrix 305, eines Programmcontrollers 309 und einer zweidimensionalen Schieberegisterstruktur 306 stellt eine weitgehend anpassbare/konfigurierbare Hardware-Plattform für ein breites Spektrum programmierbarer Funktionen bereit. Beispielsweise können Anwendungssoftwareentwickler in der Lage sein, Kernsysteme mit einem breiten Spektrum unterschiedlicher Funktionsfähigkeiten sowie Abmessungen (z. B. Schablonengrößen) zu programmieren, da die einzelnen Ausführungsbahnen in der Lage sind, eine breite Palette von Funktionen auszuführen und ohne Weiteres auf Eingabebilddaten in der Nähe einer beliebigen Ausgabematrixposition zuzugreifen.
  • Abgesehen davon, dass diese als Datenspeicher für Bilddaten genutzt werden, die durch die Ausführungsbahnmatrix 305 bearbeitet werden, können die Arbeitsspeicher 307 zudem eine oder mehrere Wertetabellen verwalten. In verschiedenen Ausführungsformen können eine oder mehrere skalare Wertetabellen auch innerhalb des skalaren Speichers 303 instanziiert werden.
  • Ein skalarer Nachschlagevorgang beinhaltet das Übermitteln desselben Datenwertes aus derselben Wertetabelle von demselben Index an sämtliche Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305. In verschiedenen Ausführungsformen wird das oben beschriebene VLIW-Befehlsformat erweitert, um darüber hinaus einen skalaren Operationscode einzuschließen, der eine vom Skalarprozessor ausgeführte Nachschlageoperation in eine skalare Wertetabelle leitet. Der für die Verwendung mit dem Operationscode angegebene Index kann ein unmittelbarer Operand sein oder von einem anderen Datenspeicherort abgerufen werden. Unabhängig davon umfasst in einer Ausführungsform ein Nachschlagevorgang in einer skalaren Wertetabelle innerhalb des skalaren Speichers im Wesentlichen das Senden desselben Datenwertes an alle Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305 während desselben Taktzyklus. Weitere Details zur Verwendung und Operation von Wertetabellen werden nachfolgend bereitgestellt.
  • 3b fasst die oben beschriebenen VLIW-Befehlswort-Ausführungsform(en) zusammen. Wie in 3b ersichtlich, beinhaltet das VLIW-Befehlswortformat Felder für drei separate Befehle: 1) einen Skalarbefehl 351, der durch den Skalarprozessor ausgeführt wird; 2) einen ALU-Befehl 352, der von den jeweiligen ALUs innerhalb der Ausführungsbahnmatrix an SIMD-Weise gesendet und ausgeführt wird; und 3) einen Speicherbefehl 353, der auf partielle SIMD-Weise gesendet und ausgeführt wird (z. B. wenn Ausführungsbahnen entlang derselben Zeile in der Ausführungsbahnmatrix denselben Arbeitsspeicher gemeinsam nutzen, anschließend wird der Befehl von einer Ausführungsbahn aus jeder der verschiedenen Zeilen tatsächlich ausgeführt (das Format des Speicherbefehls 353 kann einen Operanden beinhalten, der identifiziert, von welcher Ausführungsbahn der jeweiligen Zeile der Befehl ausgeführt wird).
  • Ein Feld 354 für einen oder mehrere unmittelbare Operanden ist ebenfalls enthalten. Welche der Befehle 351, 352, 353 welche unmittelbaren Operandeninformationen verwenden, kann im Befehlsformat festgelegt sein. Jeder der Befehle 351, 352, 353 beinhaltet zudem seinen eigenen Eingabeoperanden sowie resultierende Informationen (z. B. lokale Register für ALU-Operationen und ein lokales Register sowie eine Speicheradresse für Speicherzugriffsbefehle). In einer Ausführungsform wird der Skalarbefehl 351 durch den Skalarprozessor ausgeführt, bevor die Ausführungsbahnen innerhalb der Ausführungsbahnmatrix einen der zwei anderen Befehle 352, 353 ausführen. Das heißt, die Ausführung des VLIW-Wortes beinhaltet einen ersten Zyklus, bei dem der Skalarbefehl 351 ausgeführt wird, gefolgt von einem zweiten Zyklus, bei dem die anderen Befehle 352, 353 ausgeführt werden können (es ist zu beachten, dass in verschiedenen Ausführungsformen die Befehle 352 und 353 parallel ausgeführt werden können).
  • In einer Ausführungsform beinhalten die Skalarbefehle, die von dem Skalarprozessor 302 ausgeführt werden, Befehle, die an den Blattgenerator 103 ausgegeben werden, um Blätter von/in die Speicher oder 2D-Schieberegister 306 der Datenberechnungseinheit 301 zu laden/zu speichern. Hier kann der Betrieb des Blattgenerators von der Operation der Zeilenpuffereinheit 101 oder von anderen Variablen abhängig sein, die ein Vorlaufzeitverständnis der Anzahl von Zyklen verhindern, die der Blattgenerator 103 ausführen wird, um einen Befehl zu beenden, der von dem Skalarprozessor 302 ausgegeben wird. Dementsprechend beinhaltet in einer Ausführungsform jedes beliebige VLIW-Wort, dessen Skalarbefehl 351 dem Blattgenerator 103 entspricht oder diesen anderweitig veranlasst, einen Befehl auszugeben, auch Nicht-Operations-(NOOP-)Befehle in den anderen zwei Befehlsfeldern 352, 353. Der Programmcode gibt dann eine Schleife von NOOP-Befehlen für Befehlsfelder 352, 353 ein, bis der Blattgenerator seine Ladung von/Speicherung unter der Datenberechnungseinheit beendet. Hier kann bei der Ausgabe eines Befehls an den Blattgenerator der Skalarprozessor ein Bit eines Verriegelungsregisters setzen, das der Blattgenerator nach Beendigung des Befehls zurücksetzt. Während der NOOP-Schleife überwacht der Skalarprozessor das Bit des Verriegelungsbits. Sobald der Skalarprozessor erkennt, dass der Blattgenerator seinen Befehl beendet hat, beginnt die normale Ausführung erneut.
  • 4 zeigt eine Ausführungsform einer Datenberechnungseinheit 401. Wie in 4 ersichtlich, beinhaltet die Datenberechnungseinheit 401 eine Matrix von Ausführungsbahnen 405, die logisch „oberhalb“ einer zweidimensionalen Schieberegistermatrixstruktur 406 positioniert sind. Wie oben beschrieben, wird in verschiedenen Ausführungsformen ein von einem Blattgenerator bereitgestelltes Bilddatenblatt in das zweidimensionale Schieberegister 406 geladen. Die Ausführungsbahnen arbeiten dann an den Blattdaten aus der Registerstruktur 406.
  • Die Ausführungsbahnmatrix 405 und die Schieberegisterstruktur 406 sind in Bezug zueinander fixiert. Die Daten innerhalb der Schieberegistermatrix 406 verschieben sich jedoch in einer strategischen und koordinierten Weise, um zu bewirken, dass jede Ausführungsbahn in der Ausführungsbahnmatrix eine andere Schablone innerhalb der Daten verarbeitet. Demgemäß bestimmt jede Ausführungsbahn den Ausgabebildwert für einen anderen Bildpunkt in dem erzeugten Ausgabeblatt. Aus der Architektur von 4 sollte klar sein, dass sich überschneidende Schablonen nicht nur vertikal, sondern auch horizontal angeordnet sind, da die Ausführungsbahnmatrix 405 vertikal angrenzende Ausführungsbahnen sowie horizontal angrenzende Ausführungsbahnen aufweist.
  • Einige zu beachtende architektonische Merkmale der Datenberechnungseinheit 401 beinhalten die Schieberegisterstruktur 406, die breitere Abmessungen als die Ausführungsbahnmatrix 405 aufweist. Das heißt, es gibt einen „Ring“ von Registern 409 außerhalb der Ausführungsbahnmatrix 405. Obwohl der Ring 409 auf zwei Seiten der Ausführungsbahnmatrix dargestellt ist, kann der Ring je nach Implementierung auf weniger (einer) oder mehr (drei oder vier) Seiten der Ausführungsbahnmatrix 405 existieren. Der Ring 405 dient dazu, einen „Ausweitungsraum“ für Daten bereitzustellen, die sich außerhalb der Grenzen der Ausführungsbahnmatrix 405 ausweiten, wenn die Daten „unterhalb“ der Ausführungsbahnen 405 verschoben werden. In einem einfachen Fall benötigt eine 5 × 5-Schablone, die am rechten Rand der Ausführungsbahnmatrix 405 zentriert ist, vier Ringregisterorte weiter nach rechts, wenn die linksseitigen Bildpunkte der Schablone verarbeitet werden. Zur Vereinfachung der Zeichnung zeigt 4 die Register der rechten Seite des Rings mit nur horizontalen Schiebeverbindungen und Registern der Unterseite des Rings, da nur vertikale Schiebeverbindungen vorhanden sind, wenn in einer nominalen Ausführungsform die Register auf beiden Seiten (rechts, unten) sowohl horizontale als auch vertikale Verbindungen aufweisen würden.
  • Zusätzlicher Überlaufraum wird durch Direktzugriffsspeicher 407 bereitgestellt, die mit jeder Zeile und/oder jeder Spalte in der Matrix oder Teilen davon gekoppelt sind (z. B. kann ein Direktzugriffsspeicher eines „Bereichs“ der Ausführungsbahnmatrix zugewiesen werden, die reihenweise 4 Ausführungsbahnen und spaltenweise 2 Ausführungsbahnen überspannt. Zur Vereinfachung bezieht sich der Rest der Anwendung hauptsächlich auf zeilen- und/oder spaltenbasierte Zuordnungsschemen). Wenn die Kernsystemoperationen einer Ausführungsbahn es erfordern, Bildpunktwerte außerhalb der zweidimensionalen Schieberegistermatrix 406 zu verarbeiten (was einige Bildverarbeitungsroutinen ggf. erfordern), kann sich Ebene der Bilddaten z. B. vom Ringbereich 409 in den Direktzugriffsspeicher 407 weiter überlaufen. Betrachten wir zum Beispiel eine 6 × 6-Schablone, bei der die Hardware einen Ringbereich von nur vier Speicherelementen rechts von einer Ausführungsbahn am rechten Rand der Ausführungsbahnmatrix beinhaltet. In diesem Fall müssten die Daten vom rechten Rand des Rings 409 weiter nach rechts verschoben werden, um die Schablone vollständig zu verarbeiten. Daten, die außerhalb des Ringbereichs 409 verschoben werden, würden dann in den Direktzugriffsspeicher 407 überlaufen. Andere Anwendungen der Direktzugriffsspeicher 407 und des Schablonenprozessors aus 3 werden nachfolgend bereitgestellt.
  • 5a bis 5k zeigen ein Ausführungsbeispiel für die Art und Weise, in der die Bilddaten, wie oben angedeutet, innerhalb der zweidimensionalen Schieberegistermatrix „unterhalb“ der Ausführungsbahnmatrix verschoben werden. Wie in 5a dargestellt, sind die Dateninhalte der zweidimensionalen Verschiebungsmatrix in einer ersten Matrix 507 dargestellt, während die Ausführungsbahnmatrix durch ein Frame 505 dargestellt ist. Außerdem sind innerhalb der Ausführungsbahnmatrix vereinfacht zwei angrenzende Ausführungsbahnen 510 dargestellt. In dieser vereinfachten Darstellung 510 beinhaltet jede Ausführungsbahn ein Register R1, das Daten aus dem Schieberegister akzeptieren kann, Daten von einer ALU-Ausgabe akzeptieren (z. B. sich durch Zyklen als Akkumulator verhalten) kann oder Ausgabedaten in ein Ausgabeziel schreiben kann.
  • Jede Ausführungsbahn verfügt zudem in einem lokalen Register R2 über den Inhalt „darunter“ in der zweidimensionalen Verschiebungsmatrix. Somit ist R1 ein physisches Register der Ausführungsbahn, während R2 ein physisches Register der zweidimensionalen Schieberegistermatrix ist. Die Ausführungsbahn beinhaltet eine ALU, die mit Operanden arbeiten kann, die von R1 und/oder R2 bereitgestellt werden. Wie nachfolgend näher beschrieben, wird in einer Ausführungsform das Schieberegister tatsächlich mit mehreren (einer „Tiefe“ von) Speicher-/Registerelementen pro Matrixposition implementiert, die Verschiebungsaktivität ist jedoch auf eine Ebene von Speicherelementen begrenzt (z. B. kann sich nur eine Ebene von Speicherelementen pro Zyklus verschieben). 5a bis 5k stellen eine dieser tieferen Registerpositionen dar, wie sie verwendet werden, um das resultierende X aus den jeweiligen Ausführungsbahnen zu speichern. Zur Veranschaulichung wird das tiefere resultierende Register neben anstatt unter dessen Gegenstückregister R2 gezogen.
  • 5a bis 5k konzentrieren sich auf die Berechnung von zwei Schablonen, deren zentrale Position an dem Paar von Ausführungsbahnpositionen 511 ausgerichtet ist, die in der Ausführungsbahnmatrix 505 dargestellt sind. Zur Vereinfachung der Darstellung wird das Paar von Ausführungsbahnen 510 als horizontal aneinander angrenzend gezeichnet, obgleich sie nach dem folgenden Beispiel tatsächlich vertikal aneinander angrenzen.
  • Wie anfangs in 5a ersichtlich, sind die Ausführungsbahnen 511 auf deren zentralen Schablonenpositionen zentriert. 5b zeigt den Objektcode, der von beiden Ausführungsbahnen 511 ausgeführt wird. Wie in 5b ersichtlich, bewirkt der Programmcode beider Ausführungsbahnen 511, dass sich die Daten innerhalb der Schieberegistermatrix 507 eine Position nach unten und eine Position nach rechts verschieben. Damit werden beide Ausführungsbahnen 511 an der oberen linken Ecke ihrer jeweiligen Schablonen ausgerichtet. Der Programmcode bewirkt dann, dass sich die Daten (in R2) an ihren jeweiligen Stellen in R1 laden lassen.
  • Wie in 5c ersichtlich, bewirkt der Programmcode als Nächstes, dass das Paar von Ausführungsbahnen 511 die Daten innerhalb der Schieberegistermatrix 507 um eine Einheit nach links verschiebt, wodurch bewirkt wird, dass der Wert rechts von der jeweiligen Position der jeweiligen Ausführungsbahn in die jeweilige Position der Ausführungsbahn verschoben wird. Der Wert in R1 (vorheriger Wert) wird dann mit dem neuen Wert addiert, der sich in die Position der Ausführungsbahn (in R2) verschoben hat. Das Ergebnis wird in R1 geschrieben. Wie in 5d dargestellt, wird der gleiche Prozess wie oben für 5c wiederholt, wodurch bewirkt wird, dass das Ergebnis R1 nun den Wert A + B + C in der oberen Ausführungsbahn und F + G + H in der unteren Ausführungsbahn beinhaltet. Zu diesem Zeitpunkt haben beide Ausführungsbahnen 511 die obere Zeile ihrer jeweiligen Schablonen verarbeitet. Zu beachten ist die Ausweitung in einen Ringbereich auf der linken Seite der Ausführungsbahnmatrix 505 (falls einer auf der linken Seite existiert) oder in einen Direktzugriffsspeicher, wenn auf der linken Seite der Ausführungsbahnmatrix 505 kein Ringbereich existiert.
  • Wie in 5e ersichtlich, bewirkt der Programmcode als Nächstes, dass sich die Daten innerhalb der Schieberegistermatrix eine Einheit nach oben verschieben, wodurch bewirkt wird, dass beide Ausführungsbahnen 511 am rechten Rand der mittleren Zeile ihrer jeweiligen Schablonen ausgerichtet sind. Register R1 der beiden Ausführungsbahnen 511 beinhaltet derzeit die Summe der oberen Zeile der Schablone und den rechten Wert der mittleren Zeile. 5f und 5g zeigen weitere Fortschritte beim Bewegen über die mittlere Zeile der beiden Schablonen der Ausführungsbahn nach links. Die kumulative Addition setzt sich fort, sodass am Ende der Verarbeitung der 5g beide Ausführungsbahnen 511 die Summe der Werte der obersten Zeile und der mittleren Zeile ihrer jeweiligen Schablonen beinhalten.
  • 5h zeigt eine weitere Verschiebung, um jede Ausführungsbahn an der nächsten Zeile ihrer entsprechenden Schablonen auszurichten. 5i und 5j zeigen eine fortlaufende Verschiebung zur vollständigen Verarbeitung über den Verlauf der Schablonen der beiden Ausführungsbahnen. 5k zeigt eine zusätzliche Verschiebung, um jede Ausführungsbahn an ihrer korrekten Position im Datenfeld auszurichten und das Ergebnis in dasselbe zu schreiben. In dem Beispiel aus 5a5k ist zu beachten, dass der Objektcode für die Verschiebungsoperationen ein Befehlsformat beinhalten kann, das die Richtung und die Größe der in (X, Y)-Koordinaten ausgedrückten Verschiebung identifiziert. Der Objektcode für eine Verschiebung um eine Position nach oben kann im Objektcode beispielsweise als SHIFT 0, +1 ausgedrückt werden. Als weiteres Beispiel kann eine Verschiebung um eine Position nach rechts im Objektcode als SHIFT +1, 0 ausgedrückt werden. Darüber hinaus können in verschiedenen Ausführungsformen Verschiebungen größerer Größenordnung im Objektcode (z. B. SHIFT 0, +2) spezifiziert werden. Wenn die 2D-Schieberegister-Hardware hier nur Verschiebungen um eine Position pro Zyklus unterstützt, kann der Befehl der Maschine so interpretiert werden, dass eine Mehrfachzyklus-Ausführung erfordert wird, oder die 2D-Schieberegister-Hardware kann so ausgelegt sein, dass sie Verschiebungen um mehr als eine Position pro Zyklus unterstützt. Ausführungsformen der letzteren Variante werden nachfolgend näher beschrieben.
  • 6a zeigt eine weitere, detailliertere Darstellung der Einheitszelle für die Ausführungsbahnmatrix und die Schieberegisterstruktur (Register im Ringbereich beinhalten keine entsprechende Ausführungsbahn). Die Ausführungsbahn und der Registerbereich, der jeder Position in der Ausführungsbahnmatrix zugeordnet ist, werden in einer Ausführungsform implementiert, indem der in 6a ersichtliche Schaltkreis an jedem Knoten der Ausführungsbahnmatrix instanziiert wird. Wie in 6a ersichtlich, beinhaltet die Einheitszelle eine Ausführungsbahn 601, die mit einer Registerdatei 602 gekoppelt ist, die aus vier Registern R2 bis R5 besteht. Während eines Zyklus kann die Ausführungsbahn 601 von einem Register R1 bis R5 einlesen oder in diese schreiben. Für Befehle, die zwei Eingangsoperanden erfordern, kann die Ausführungsbahn beide Operanden von einem beliebigen R1 bis R5 abrufen.
  • In einer Ausführungsform wird die zweidimensionale Schieberegisterstruktur implementiert, indem es während eines einzigen Zyklus erlaubt wird, dass der Inhalt eines beliebigen von (nur) eines der Register R2 bis R4 zu einer seiner angrenzenden Registerdateien durch den Ausgangsmultiplexer 603 „heraus“ verschoben wird, und der Inhalt eines beliebigen von (nur) eines der Register R2 bis R4 durch den Inhalt ersetzt wird, der von einem entsprechenden Nachbarn durch den Eingangsmultiplexer 604 „hinein“ verschoben wird, sodass Verschiebungen zwischen den Nachbarn in gleicher Richtung (z. B. alle Ausführungsbahnen nach links, alle Ausführungsbahnen nach rechts usw.) erfolgen.
  • Obwohl es für ein gleiches Register üblich sein kann, dass dessen Inhalt verschoben und durch den Inhalt ersetzt wird, der in demselben Zyklus verschoben wird, erlaubt die Multiplexeranordnung 603, 604 unterschiedliche Schiebequellen- und Schiebezielregister innerhalb einer gleichen Registerdatei während eines gleichen Zyklus.
  • Wie in 6a ersichtlich, ist zu beachten, dass während einer Verschiebungssequenz eine Ausführungsbahn den Inhalt aus deren Registerdatei 602 zu ihren jeweiligen linken, rechten, oberen und unteren Nachbarn verschiebt. In Verbindung mit derselben Verschiebungssequenz verschiebt die Ausführungsbahn zudem den Inhalt von einem bestimmten seiner linken, rechten, oberen und unteren Nachbarn in deren Registerdatei. Das Herausverschiebungsziel und die Hereinverschiebungsquelle sollten wiederum mit einer gleichen Verschiebungsrichtung für alle Ausführungsbahnen übereinstimmen (wenn z. B. die Verschiebung heraus zum rechten Nachbarn erfolgt, sollte die Verschiebung herein vom linken Nachbarn erfolgen).
  • Obwohl in einer Ausführungsform der Inhalt von nur einem Register pro Ausführungsbahn pro Zyklus verschoben werden darf, können andere Ausführungsformen zulassen, dass der Inhalt von mehr als einem Register herein-/herausverschoben wird. Beispielsweise kann der Inhalt von zwei Registern während eines gleichen Zyklus heraus-/hereinverschoben werden, wenn eine zweite Instanz der in 6a ersichtlichen Multiplexerschaltung 603, 604 in das Design von 6a eingefügt wird. Selbstverständlich können bei Ausführungsformen, bei denen der Inhalt von nur einem Register pro Zyklus verschoben werden kann, Verschiebungen von mehreren Registern zwischen mathematischen Operationen stattfinden, indem mehr Taktzyklen für Verschiebungen zwischen mathematischen Operationen verbraucht werden (z. B. kann der Inhalt von zwei Registern zwischen mathematischen Operationen verschoben werden, indem zwei Verschiebungsoperationen zwischen den mathematischen Operationen verbraucht werden).
  • Falls weniger als der gesamte Inhalt der Registerdateien einer Ausführungsbahn während einer Verschiebungssequenz verschoben wird, ist zu beachten, dass der Inhalt der nicht verschobenen Register jeder Ausführungsbahn an Ort und Stelle bleibt (nicht verschoben wird). Dementsprechend bleibt jeder nicht verschobene Inhalt, der nicht durch eingeschobenen Inhalt ersetzt wird, durch den Verschiebungszyklus hinweg lokal auf der Ausführungsbahn. Die in jeder Ausführungsbahn beobachtete Speichereinheit („M“) wird verwendet, um Daten von/zu dem Arbeitsspeicher zu laden/zu speichern, der mit der Zeile und/oder Spalte der Ausführungsbahn innerhalb der Ausführungsbahnmatrix verbunden ist. Hier fungiert die M-Einheit als Standard-M-Einheit, indem sie häufig zum Laden/Speichern von Daten verwendet wird, die nicht von/in den eigenen Registerbereich der Ausführungsbahn geladen/gespeichert werden können. In verschiedenen Ausführungsformen besteht die primäre Operation der M-Einheit darin, Daten von einem lokalen Register in den Speicher zu schreiben und Daten aus dem Speicher einzulesen und in ein lokales Register zu schreiben.
  • In Bezug auf die von der ALU-Einheit der Hardware-Ausführungsbahn 601 unterstützten ISA-Operationscodes sind in verschiedenen Ausführungsformen die von der Hardware-ALU unterstützten mathematischen Operationscodes integral (d. h. im Wesentlichen gleich) mit den von den unterstützten mathematischen Operationscodes verbunden, die eine virtuelle Ausführungsbahn unterstützen (z. B. ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT). Wie oben beschrieben, können Speicherzugriffsbefehle von der Ausführungsbahn 601 ausgeführt werden, um Daten von/zu ihrem zugehörigen Arbeitsspeicher abzurufen/zu speichern. Zudem unterstützt die Hardware-Ausführungsbahn 601 Verschiebungsoperationsanweisungen (nach rechts, links, oben, unten), um Daten innerhalb der zweidimensionalen Schieberegisterstruktur zu verschieben. Wie oben beschrieben, werden Programmsteuerbefehle weitgehend durch den Skalarprozessor des Schablonenprozessors ausgeführt.
  • c. Implementierung des faltenden neuronalen Netzwerks (CNN) auf Bildprozessor
  • 7 zeigt eine grafische Darstellung einer dreidimensionalen (3D) Faltung. Eine 3D-Faltung, wie gemäß des Standes der Technik bekannt, kann verwendet werden, um ein faltendes neuronales Netzwerk (CNN) für beispielsweise eine Bildverarbeitungsanwendung, eine Anwendung für maschinelles Sehen, eine Objekterkennungsanwendung und/oder eine Anwendung maschinellen Lernens zu implementieren. Wie in 7 ersichtlich, „faltet“ die dreidimensionale Faltung einen dreidimensionalen Block von Bilddaten 701 und einen dreidimensionalen Block von Koeffizienten 702. Hier wird der dreidimensionale Block von Koeffizienten 702 über gleichgroße Blöcke innerhalb der Bilddaten 701 gefaltet, um einen resultierenden Oberflächenbereich 703 zu bilden.
  • In der Praxis werden die Bilddaten 701 und Koeffizientendaten 702 als dreidimensionale Informationsmatrizen implementiert. Das bedeutet, dass die Bilddaten 701 als eine dreidimensionale Matrix von Bildpunktdaten implementiert werden können, und die Koeffizientendaten 702 als eine dreidimensionale Matrix von Koeffizientenwerten implementiert werden können. Zwecks Ausführens einer 3D-Faltung wird ein dreidimensionales Skalarprodukt berechnet, wobei Bildpunkte in einem kleineren dreidimensionalen Teil der Bilddaten 701, die dieselben Dimensionen wie die Koeffizienten aufweisen (beispielsweise der kleinere Teil 705), jeweils mit gleich positionierten Koeffizienten in der dreidimensionalen Matrix von Koeffizienten 702 multipliziert werden.
  • Die Teilprodukte sämtlicher einzelner Multiplikationen werden sodann addiert, um einen Einzelwert (einen Skalar) zu bilden, welcher dem Ergebnis des Skalarprodukts entspricht. Der resultierende Skalar befindet sich in der resultierenden Matrix 703 an einer Position, die der Position des kleineren Bereichs innerhalb der Bilddaten 701, die gefaltet wurden, entspricht. Beispielsweise erzeugt die Faltung des kleineren Teils 705 mit den Koeffizienten 702 einen Skalar, der sich an Position 704 auf der resultierenden Oberfläche 703 befindet. In gleicher Weise erzeugt die Faltung des kleineren Teils 707 (von dem aus Gründen der einfacheren zeichnerischen Darstellung nur die Oberseitenfläche sichtbar ist) mit den Koeffizienten 702 einen Skalarwert, der sich an Position 706 innerhalb des resultierenden Bereichs 703 befindet.
  • Dementsprechend wird für jeden unterschiedlichen kleineren Teil an Bilddaten, die mit den Koeffizienten 702 multipliziert werden, ein unterschiedlicher Skalarwert erzeugt, wobei jeder der unterschiedlichen Skalare eine jeweilige Position auf dem resultierenden Oberflächenbereich 703 besitzt. Einzelheiten mehrerer verschiedener Ausführungsformen der 3D-Faltungsimplementierung werden nachfolgend näher beschrieben.
  • Eine CNN-Schicht beinhaltet typischerweise mehrere 3D-Faltungen pro Block von Bilddaten. Genauer gesagt, beinhaltet eine CNN-Schicht typischerweise mehrere Blöcke von Koeffizienten, die mit einem einzelnen Block von Bilddaten gefaltet werden. 8 zeigt ein Beispiel dieser CNN-Schicht. Hier wird derselbe Block von Bilddaten 801 mit mehreren Blöcken von Koeffizienten 802_1 bis 802_N gefaltet, um N resultierende Oberflächenbereiche 803_1 bis 803_N zu bilden. Somit kann das Gesamtergebnis 803 als ein dreidimensionaler Block 803 betrachtet werden, der N resultierende Ebenen aufweist. In verschiedenen Verarbeitungsanwendungen wird der dreidimensionale resultierende Block 803 als Eingabebildblock für eine folgende CNN-Berechnung verwendet. Die Verarbeitung von 8 entspricht der Verarbeitung einer einzelnen CNN-Schicht. Ein vollständiges CNN kann anhand der Ausführung mehrerer dieser CNN-Schichten berechnet werden.
  • 9a und 9b zeigen eine Ausführungsform einer 3D-Faltung. Bezugnehmend auf 9a kann der Block von Bilddaten 901 (der dem Block von Bilddaten 801 in 8 entspricht) als durch mehrere Ebenen von Bilddaten zusammengesetzt betrachtet werden. Das heißt, der Block von Bilddaten 901 kann als aus einer ersten Ebene 901_1 an einer ersten Tiefenposition entlang der Z-Achse, einer zweiten Ebene 901_2 an einer zweiten Tiefenposition entlang der Z-Achse usw. und einer M-ten Ebene 901_M an einer M-ten Tiefenposition entlang der Z-Achse zusammengesetzt betrachtet werden. In der Praxis kann jede Ebene oder Tiefe entlang der Z-Achse einem unterschiedlichen „Kanal“ der Bilddaten entsprechen. Falls zum Beispiel M = 3, kann die erste planare Ebene 901_1 roten (R) Daten entsprechen, die zweite planare Ebene 901_2 kann grünen (G) Daten entsprechen und die dritte planare Ebene 901_3 kann blauen (B) Daten entsprechen.
  • Ebenfalls kann der Block von Koeffizienten 902_1 (der dem ersten Block von Koeffizienten 802_1 in 8 entspricht) ebenfalls als aus M Ebenen von Koeffizientendaten entlang M „Tiefen“ Z-Achsen-Positionen zusammengesetzt betrachtet werden. Die 3D-Faltung wird anhand der Addition der M zweidimensionalen (2D) Faltungen berechnet. Hier werden Bilddaten und Koeffizienten, die entlang derselben Tiefenebene angeordnet sind, in einer 2D-Faltungsoperation gefaltet, um eine resultierende Zwischenebene für diese Tiefenebene zu erzeugen.
  • Beispielsweise wird eine erste 2D-Faltung von Bilddatenebene 901_1 und Koeffizientenebene 902_1_1 durchgeführt, um eine erste resultierende Zwischenebene P1_1 zu erzeugen, eine zweite 2D-Faltung von Bilddatenebene 901_2 und Koeffizientenebene 902_1_2 wird durchgeführt, um eine zweite resultierende Zwischenebene P1_2 zu erzeugen usw. und eine M-te 2D-Faltung von Bilddatenebene 901_M und Koeffizientenebene 902_1_M wird durchgeführt, um eine M-te resultierende Zwischenebene P1_M zu erzeugen. Die Zwischenebenen P1_1 bis P1_M werden sodann in einer ausgerichteten Weise addiert 910 (Skalarwerte an demselben Ort der Zwischenschichtmatrizen werden addiert), um eine resultierende Matrix 903_1 zu bilden. Die resultierende Matrix 903_1 entspricht der resultierenden Matrix 803_1 in 8.
  • 9b zeigt eine exemplarische Ausführungsform einer 2D-Faltung, die an jeder Z-Achsen-Tiefenebene der Bild- und Koeffizientendaten durchgeführt werden kann. 9b zeigt 12 angrenzende Bildpunkte von Daten (A bis L), die einem kleineren Teil der Bilddaten innerhalb einer gleichen Ebene entsprechen. Die Ebene von Koeffizienten (a1 bis a9), die auf derselben planaren Ebene wie die Bilddaten angeordnet sind, werden ebenfalls dargestellt. Operation 940, die durchgeführt wird, wenn die Koeffizientendaten an der Schablonenposition 950 ausgerichtet werden, erzeugt ein einziges Skalar-Ergebnis S_P1 in der Zwischenebene für die planare Ebene. Im Gegensatz hierzu erzeugt Operation 941, die durchgeführt wird, wenn die Koeffizientendaten an der Schablonenposition 951 ausgerichtet werden, ein einziges Skalar-Ergebnis S_P2 in der Zwischenebene für die planare Ebene.
  • Es ist zu beachten, dass sowohl Operation 940 als auch Operation 941 als umfangreiche Multiplizier-Addier-Operation charakterisiert werden kann (neun Multiplikationen und acht Additionen werden durchgeführt). Da die Schablonenpositionen 950, 951 aneinander angrenzen, werden die Skalar-Ergebnisse S_P1 und S_P2 innerhalb der resultierenden Zwischenebene aneinander angrenzend angeordnet. Hier „gleitet“ die Schablonenposition über den Oberflächenbereich einer gesamten Ebene von Bilddaten, während die „Multiplizier-Addier“-Operationen die durch jede einzigartige Schablonenposition definiert werden, einen einzigartigen Ergebniswert in der Zwischenebene erzeugen. Die Positionen der Ergebniswerte zueinander innerhalb der Zwischenebene werden durch die jeweiligen Positionen der Schablonen, durch welche dieselben erzeugt wurden, definiert.
  • Zurückverweisend auf 9a werden die M Zwischenebenen P1_1 bis P1_M zu 910 addiert, um die resultierende Ebene 903_1 zu erzeugen. Die Berechnungen von 9a werden N-mal wiederholt, jedes Mal mit einem unterschiedlichen Koeffizientensatz, bis alle Sätze von Koeffizienten einberechnet worden sind. Das heißt, wie aus 8 und 9a und 9b entnommen werden kann, dass die Operationen aus 9a und 9b N-mal für jeden der Koeffizientensätze 802_1 bis 802_N durchgeführt werden, um die resultierenden Ebenen 803_1 bis 803_N zu erzeugen.
  • 10a bis 10j betreffen die Berechnung einer CNN-Schicht auf einem Bildprozessor, der die Architekturmerkmale aufweist, die zuvor ausführlich in den vorstehenden Abschnitten vorliegender Beschreibung beschrieben wurden. Hier wird der Leser nicht nur auf 10a bis 10j, sondern auch auf 4, verwiesen. Wie in den vorstehenden Abschnitten beschrieben, kann der Schablonenprozessor eine zweidimensionale Ausführungsbahnmatrix 405 und eine entsprechende zweidimensionale Schieberegistermatrix 406 haben. Wie sich aus folgender Erläuterung eindeutig ergeben wird, zielt die Methodik der 10a bis 10j darauf ab, die zweidimensionale Verarbeitungsweise des Schablonenprozessors zu nutzen und gleichzeitig die Anzahl der Male zu minimieren, bei denen Bilddaten in den Schablonenprozessor hineingeschaltet und aus diesem herausgeschaltet werden.
  • 10a zeigt eine initiale Konfigurationsphase, in der ein oder mehrere Bilddatenblätter 1001_1 in den lokalen Speicher 407 des Schablonenprozessors geladen werden. Der Veranschaulichung halber suggeriert 10a, dass alle Blätter von Bildebenen in den RAM des Schablonenprozessors geladen werden; während der Operation jedoch kann ein stückweiser Ansatz vorgenommen werden, in dem der Blattgenerator die gesamte Bildebene 1001_1 aufnimmt, die Bildebenen in Blätter parst und je nach Bedarf die Blätter in den RAM 407 des Schablonenprozessors einspeist (z. B. wird das folgende Blatt während oder vor Beendigung der Verarbeitung eines vorherigen Blattes in den RAM geladen). Zusätzlich wird zumindest der erste Satz von Koeffizienten 1002_1, wenn nicht sämtliche Sätze von Koeffizienten 1002_1 bis 1002_N, in den RAM 407 des Schablonenprozessors geladen. Als Vergleichspunkt entspricht hier Bilddatenebene 1001_1 aus 10 der Bilddatenebene 901_1 aus 9, und Koeffizientensatz 1002_1 aus 10 entspricht Koeffizientensatz 902_1 aus 9. Als zusätzlicher Vergleichspunkt entsprechen Koeffizientensätze 1002_1 bis 1002_N aus 10 den Koeffizientensätzen 802_1 bis 802_N aus 8.
  • Wenn die erste Ebene von Bilddaten 1001_1 und der erste Satz von Koeffizienten 1002_1 in den RAM 407 des Schablonenprozessors geladen werden, ist das System bereit, eine wie zuvor mit Bezug auf 9b beschriebene 2D-Faltung durchzuführen. 10b zeigt die Faltung, bei der Bilddaten 1001_1 mit Koeffizientendaten 1002_1_1 (welche den Koeffizientendaten 902_1_1 aus 9a entsprechen) gefaltet werden. Die 2D-Faltung beinhaltet das Laden eines oder mehrerer Bilddatenblätter aus dem RAM des Schablonenprozessors in die zweidimensionale Registerstruktur des Bildprozessors. Anschließend wird die 2D-Faltung durchgeführt, welche in Zwischenebene P1_1 resultiert. Eine ausgiebigere Erläuterung, wie die 2D-Faltung durchgeführt werden kann, wird nachfolgend mit Bezug auf 11a bis 11f bereitgestellt.
  • Wenn die erste Bildebene 1001_1 mit der ersten Ebene von Koeffizienten 1002_1 gefaltet worden ist, ist die Maschine bereit, die folgende Operationssequenz zu starten. Hier könnte, falls die in 9a dargestellten Operationsvorgänge der Reihe nach durchgeführt werden sollten, das Herausschalten von Bildebene 901_1 aus dem RAM des Schablonenprozessors und das Hineinschalten von Bildebene 901_2 in den RAM des Schablonenprozessors erforderlich werden. Nachfolgend ist unter Bezugnahme auf 8 und 9a zu beachten, dass Bildebene 901_1 für die 2D-Faltungen, die mit beliebigen/sämtlichen Koeffizientensätzen 802_2 bis 802_N durchgeführt werden, zurück in den RAM des Schablonenprozessors geschaltet werden müsste. Somit müsste Bildebene 901_1 gegebenenfalls N-mal in den RAM des Schablonenprozessors hinein- und herausgeschaltet werden. Zwecks Beseitigens des Hin- und Herschaltens derselben Ebene von Bilddaten in den Schablonenprozessor hinein bzw. heraus, anstatt die in 9a suggerierte Verarbeitungsreihenfolge strikt einzuhalten, bleibt eine Ebene von Bilddaten, nachdem sie in den RAM des Schablonenprozessors geladen worden ist, in demselben erhalten, bis sie dazu verwendet wurde, alle Koeffizientensätze der CNN-Schicht zu verarbeiten.
  • Wie in 10c dargestellt, besteht somit die nächste Sequenz in dem Prozess darin, die gleiche Bildebene 1001_1 mit der ersten Ebene im nächsten Koeffizientensatz zu falten. Dementsprechend zeigt 10c eine 2D-Faltung, die mit Bildebene 1001_1 und Koeffizientenebene 1002_2_1 (die erste Ebene in dem zweiten Satz von Koeffizienten) durchgeführt wird. Das Ergebnis ist die erste Zwischenebene für den zweiten Satz von Koeffizienten P2_1. Die Verarbeitungssequenz wird fortgesetzt, um dieselbe, initiale Bildebene 1001_1 mit der ersten Ebene von jedem der Koeffizienten zu falten. 10d zeigt die letzte 2D-Faltungssequenz, die die initiale Bildebene 1001_1 beinhaltet. Hier wird die 2D-Faltung mit der oberen Ebene 1002_N_1 des N-ten Koeffizientensatzes 1002_N durchgeführt, welche die erste resultierende Zwischenebene für den N-ten Satz von Koeffizienten PN_1 bildet.
  • Nach Beendigung der Operationen der 10d ist die initiale Bildebene 1001_1 erschöpft und kann aus dem RAM des Schablonenprozessors herausgeschaltet (oder z. B. sogar verworfen) werden. Unter kurzer Bezugnahme auf 9a kann dementsprechend nun eine nächste Ebene von Bilddaten 901_2 in den RAM des Schablonenprozessors hineingeschaltet werden. 10e zeigt den neuen Systemstatus, in dem die frühere Bilddatenebene 1001_1 aus dem RAM des Schablonenprozessors herausgeschaltet worden ist (ihr Umriss ist in unterbrochenen Linien gezeichnet, um anzuzeigen, dass sie nicht mehr in dem RAM des Schablonenprozessors residiert), und in dem die nächste Bildebene 1001_2 in den RAM des Schablonenprozessors hineingeschaltet worden ist (ihr Umriss ist in durchgängigen Linien gezeichnet, um anzuzeigen, dass sie innerhalb des RAM des Schablonenprozessors residiert).
  • 10f zeigt die 2D-Faltung der neuen, zweiten Bildebene 1001_2 mit der zweiten Ebene von Koeffizienten 1002_1_2 in dem ersten Koeffizientensatz 1002_1. Das Ergebnis der Faltung ist die zweite Zwischenebene P1_2 für den ersten Koeffizientensatz 1002_1. 10g zeigt die nächste Faltung von Bildebene 1001_2 mit der zweiten Ebene von Koeffizienten 1002_2_2 im Koeffizientensatz 1002_2, welche die zweite resultierende Zwischenschicht P2_2 für den zweiten Koeffizientensatz 1002_2 bildet. 10h zeigt die letzte Faltung für Bildebene 1001_2 mit der zweiten Ebene von Koeffizienten 1002_N_2 im Koeffizientensatz 1002_N, welche die zweite resultierende Zwischenschicht PN_2 für den N-ten Koeffizientensatz 1002_2 bildet.
  • Nachdem die zweite Bildebene 1001_2 erschöpft ist, wird die dritte Bildebene geladen und gemäß der obigen Beschreibung für die ersten und zweiten Bildebenen verarbeitet. Jede Bildebene wird sodann auf gleiche Weise nacheinander verarbeitet. 10i zeigt die letzte 2D-Faltung für die letzte Bildebene 1001_M mit der Grundebene von Koeffizienten 1002_N_M für den letzten Koeffizientensatz 1002_N, welche die letzte resultierende Zwischenebene PN_M bildet. Zu diesem Zeitpunkt sind alle Zwischenebenen für alle Koeffizientensätze berechnet worden. 10j zeigt die Addition aller Zwischenebenen für einen spezifischen Koeffizientensatz, um die endgültig resultierende Ebene für jeden Koeffizientensatz zu bilden, welche wiederum dem Ergebnis der CNN-Schicht entspricht. Das heißt, die Addition 910 von 9a wird für jeden der N Sätze von Koeffizienten durchgeführt. Jede der resultierenden Ebenen 1003_1 bis 1003_N entspricht demnach den resultierenden Ebenen 803_1 bis 803_N aus 8.
  • In einer Ausführungsform führt die Maschine die Additionen von 10j in der Weise durch, bei der eine „fortlaufende Zwischenebenen-Summe“ fortlaufend aktualisiert wird, anstatt jede einzelne Zwischenebene separat zu speichern und diese dann zu addieren. Bezugnehmend auf 10a bis 10f wird zum Beispiel, unmittelbar nachdem Zwischenebene P1_2 erstellt wird, Zwischenebene P1_2 zu Zwischenebene P1_1 addiert. Die resultierende Summe der Ebenen P1_1 und P1_2 wird, z. B. intern in der Schablonenprozessoreinheit, gespeichert. Wenn Zwischenebene P1_3 (nicht dargestellt) infolge der 2D-Faltung der dritten Bildebene mit der dritten Ebene 1002_1_3 innerhalb des ersten Koeffizientensatzes (ebenfalls nicht dargestellt) erstellt wird, wird das P1_1/P1_2-Additionsergebnis anschließend berücksichtigt und zur Zwischenebene P1_3 addiert. Das Ergebnis wird erneut gespeichert und zwecks Addition zur Zwischenebene P1_4 nach deren Erstellung berücksichtigt. Die gleiche Verarbeitung findet auf die Zwischenebenen der anderen Koeffizientensätze Anwendung. Es ist zu beachten, dass die X, Y-Dimensionen der fortlaufenden Summe und Zwischenebenen größer sind als die Dimensionen der zweidimensionalen Schieberegistermatrix, wobei die Additionen durch das Parsen der fortlaufenden Summe und der nächsten Zwischenebene in Blättern und das Laden der Blätter in die zweidimensionale Schieberegistermatrix zwecks Verarbeitung, z. B. in blattweiser Form, durchgeführt werden können.
  • 11a bis 11j beschreiben eine Ausführungsform der Durchführung einer 2D-Faltung für eine 3 × 3-Schablonengröße. Wie nachfolgend näher erläutert, sind auch andere Schablonengrößen möglich. Unter Bezugnahme auf 11a werden Bilddaten A bis R in das zweidimensionale Schieberegister geladen. 11a zeigt zwei Schablonen 1101, 1102 von Bilddaten. Der Kürze halber werden sich die Erläuterungen der 11a bis 11fj auf die 2D-Faltungen für die Schablonen 1101, 1102 konzentrieren, welche, wie in 11a dargestellt, Ausgaberesultate in Bildpunktpositionen H und K erzeugen. Jedoch ist es wichtig, zu erkennen, dass eine andere Schablone existiert, die an jeder Bildpunktposition zentriert ist, während das 2D-Faltungsverfahren, das mit Bezug auf die 11a bis 11j noch beschrieben werden wird, gleichzeitig ein Faltungsergebnis für jede dieser Bildpunktpositionen erzeugt.
  • Unter Bezugnahme auf 11a müssen die Koeffizientenwerte 1103 zwecks Durchführens der 2D-Faltung mit einem dementsprechend angeordneten Bildpunkt innerhalb jeder der Bilddatenschablonen multipliziert werden. Das heißt, beide Bildpunktwerte A und D werden mit Koeffizient a1 multipliziert, da sich sowohl diese Bildpunktwerte als auch a1 in der oberen linken Schablonenecke befinden, beide Bildpunktwerte C und F werden mit Koeffizient a3 multipliziert, da sich sowohl diese Bildpunktwerte als auch der Koeffizient in der oberen rechten Schablonenecke befinden. Das 2D-Faltungsergebnis ist die Summe aller neun Teilprodukte aus Bildpunktwert und entsprechendem Koeffizient. Wie nachfolgend näher beschrieben, erfolgt die Addition der Teilprodukte in einer Ausführungsform in neun Zyklen.
  • Von der Erläuterung aus 3b sei daran erinnert, dass der Schablonenprozessor in verschiedenen Ausführungsformen fähig ist, Skalarbefehle, welche einen unmittelbaren Operanden beinhalten, an alle Ausführungsbahnen auszugeben. In einer Ausführungsform wird die 2D-Faltung durch Ausgeben einer Kette von Multiplizier-Addier-Operationen implementiert, wobei der Koeffizient in dem Befehlswort als unmittelbarer Operand enthalten ist.
  • Unter Bezugnahme auf 11b wird während einem ersten Zyklus ein Skalarbefehl ausgegeben, der den Koeffizienten a5 als unmittelbaren Operanden hat. In der Ausführung des Befehls wird Koeffizient a5 mit jedem Bildpunktwert in der Bilddatenmatrix multipliziert, und das Ergebnis im Registerbereich, der lokal an dem Bildpunktwert innerhalb seiner entsprechenden Ausführungsbahn liegt, gespeichert. Unter ausschließlicher Bezugnahme auf das Paar von Schablonen 1101, 1102, die an Bildpunktpositionen H und K zentriert sind, wird Koeffizient a5 erneut mit H und mit K multipliziert. Das Teilprodukt H × a5 wird lokal im Ausführungsbahn-Registerbereich in Bildpunktposition 1121 im Zentrum der Schablone 1101 (welche gegenwärtig den Bildpunktwert H hat) gespeichert. Das Teilprodukt K × a5 wird lokal im Ausführungsbahn-Registerbereich in Bildpunktposition 1122 im Zentrum der Schablone 1102 (welche gegenwärtig den Bildpunktwert K hat) gespeichert. Hier ist zu beachten, dass die Umgrenzungen um die Schablonen 1101 und 1102 und die Bildpunktpositionen innerhalb dieser für Hardware als festgelegte Bereiche angesehen werden können, die ein dediziertes ALU und lokalen Registerbereich an jeder Bildpunktposition beinhalten. Das heißt, jeder Bildpunkt innerhalb der Schablonen 1101 und 1102 kann als Hardware-Ausführungsbahn, von der jede eine dedizierte ALU-Ausführungseinheit und einen lokal-dedizierten Registerbereich aufweist, betrachtet werden.
  • Unter Bezugnahme auf 11c wird während eines zweiten Zyklus ein erster Verschiebebefehl ausgeführt, um die Bilddaten innerhalb der zweidimensionalen Schieberegistermatrix um eine Einheit nach rechts zu verschieben, während ein folgender skalarer Multiplizier-Addier-Befehl mit Koeffizient a4 als unmittelbarem Operanden ausgegeben wird. In der Ausführung des zweiten Befehls wird Koeffizient a4 mit jedem Bildpunktwert in der Bilddatenmatrix multipliziert, und das Ergebnis wird im Registerbereich, der lokal zu dem Bildpunktwert innerhalb seiner entsprechenden Ausführungsbahn ist, gespeichert. Unter ausschließlicher Bezugnahme auf das Paar von Schablonen 1101, 1102, die nun an Bildpunktpositionen G und J zentriert sind, wird Koeffizient a4 erneut mit G und mit J multipliziert. Das Teilprodukt G × a4 wird zu dem lokal gespeicherten Wert im Ausführungsbahn-Registerbereich im Zentrum der Schablone 1101 (z. B. Bildpunktposition 1121, die den Wert H × a5 enthält) addiert, und das Ergebnis S_H wird in den gleichen Registerbereich zurückgeschrieben. Das Teilprodukt J × a4 wird zu dem lokal gespeicherten Wert im Ausführungsbahn-Registerbereich im Zentrum der Schablone 1102 (z. B. Bildpunktposition 1122, die gegenwärtig den Wert K × a5 hat) addiert, und das Ergebnis S_K wird in den gleichen Registerbereich zurückgeschrieben.
  • Unter Bezugnahme auf 11d wird während eines dritten Zyklus ein erster Verschiebebefehl ausgeführt, um die Bilddaten innerhalb der zweidimensionalen Schieberegistermatrix um eine Einheit nach unten zu verschieben, während ein folgender skalarer Multiplizier-Addier-Befehl mit Koeffizient a1 als unmittelbarem Operanden ausgegeben wird. In der Ausführung des zweiten Befehls wird Koeffizient a1 mit jedem Bildpunktwert in der Bilddatenmatrix multipliziert, und das Ergebnis wird im Registerbereich, der lokal zu dem Bildpunktwert innerhalb seiner entsprechenden Ausführungsbahn ist, gespeichert. Unter ausschließlicher Bezugnahme auf das Paar von Schablonen 1101, 1102, die nun an Bildpunktpositionen A und D zentriert sind, wird Koeffizient a1 erneut mit A und mit D multipliziert. Das Teilprodukt A × a1 wird zu dem lokal gespeicherten Wert im Ausführungsbahn-Registerbereich im Zentrum der Schablone 1101 (welche den Wert S_H von 11c enthält) addiert, und das Ergebnis S_H wird in den gleichen Registerbereich zurückgeschrieben. Das Teilprodukt D × a1 wird zu dem lokal gespeicherten Wert im Ausführungsbahn-Registerbereich im Zentrum der Schablone 1102 (welche den Wert S_K von 11c enthält) addiert, und das Ergebnis S_K wird in den gleichen Registerbereich zurückgeschrieben.
  • 11e bis 11j zeigen sechs weitere dieser Zyklen, die jeweils eine entsprechende Verschiebung aufweisen, welche einen neuen Bildpunktwert im Zentrum der Schablonen platziert, dessen Multiplikation mit einem Koeffizienten noch nicht erfolgt ist. Nachdem der letzte Zyklus von 11j ausgeführt ist, befindet sich das Ergebnis für die 2D-Faltung im lokalen Registerbereich im Zentrum jeder Schablone (Wert S_H für Schablone 1101 und Wert S_K für Schablone 1102).
  • Obwohl sich vorstehende Erläuterung auf einen Ansatz bezog, in dem eine gesamte CNN-Schicht auf einem gleichen Schablonenprozessor ausgeführt wurde, können andere Ansätze versuchen, eine parallele Ausführung der CNN-Schicht über mehrere Schablonenprozessoren auszuführen (es ist zu berücksichtigen, dass 8 eine Ausführungsform der mit einer CNN-Schicht verbundenen Berechnungen darstellt). Wenn beispielsweise, unter Bezugnahme auf 8 und 12, N kleiner ist als die Anzahl an Schablonenprozessoren, kann jedem Schablonenprozessor seine eigene 3D-Faltung zugeordnet werden (z. B. führt jeder Schablonenprozessor eine 3D-Faltung mit seinem eigenen, einzigartigen Koeffizientensatz durch). Somit empfängt jeder Schablonenprozessor die gleichen Bilddaten, faltet sie jedoch mit unterschiedlichen Koeffizientensätzen. In diesem Fall kann der von 9a suggerierten Anordnung an jedem Schablonenprozessor gefolgt werden (z. B. faltet jeder Schablonenprozessor jede Ebene von Bilddaten gegen einen einzigen Koeffizientensatz). Selbst wenn N größer ist als die Anzahl an Schablonenprozessoren, kann die Ausführung der CNN-Schicht trotzdem noch verteilt/parallelisiert werden, indem z. B. jedes Schablonenprozessorverfahren veranlasst wird, zwei oder mehrere eindeutige Koeffizientensätze zu verarbeiten.
  • In einem anderen parallelisierenden Ansatz, der in 13 dargestellt ist, werden verschiedenen Schablonenprozessoren verschiedene Ebenen der Eingabebilddaten eindeutig zugeordnet. Jeder Schablonenprozessor wird zum Beispiel mit der geeigneten planaren Ebene für sämtliche Koeffizientensätze geladen. Zum Beispiel empfängt der Schablonenprozessor 1302_1, dem die Verarbeitung der ersten (höchsten) Bilddatenebene zugeordnet ist, die erste (höchste) Ebene aller N Koeffizientensätze. Der Schablonenprozessor fährt sodann mit der Durchführung der Operationen aus den 10b–d fort, während gleichzeitig ein weiterer Schablonenprozessor 1302_2, dem die Behandlung der zweiten (nächsttieferen) Bildebene zugeordnet ist, die Faltungen aus den 10f10h durchführt. In diesem Ansatz werden die Zwischensummenebenen für denselben Koeffizientensatz über mehrere Schablonenprozessoren verteilt und sollten nachfolgend in denselben Schablonenprozessor zwecks ausgerichteter Summierung verschoben werden, um die spezifische resultierende Ebene für den Koeffizientensatz zu erzeugen. Hier können die verschiedenen Schablonenprozessoren gleichzeitig verschiedene resultierende Ebenen für verschiedene Koeffizientensätze berechnen. In einer Erweiterung dieses Ansatzes können jedem beliebigen Schablonenprozessor mehr als eine Ebene von Bilddaten zugeordnet werden (z. B. wenn die Anzahl an Bilddatenebenen die Anzahl an Schablonenprozessoren übersteigt).
  • In noch einem anderen in 14 dargestellten Ansatz könnte jeder Schablonenprozessor so zugeordnet werden, dass dieser lediglich an einem spezifischen Bereich der resultierenden Ebene arbeitet. Zum Beispiel arbeitet ein erster Schablonenprozessor 1402_1 an einem ersten Quadranten des Bildebenen-Oberflächenbereichs, ein zweiter Schablonenprozessor 1402_2 arbeitet an einem zweiten Quadranten des Bildebenen-Oberflächenbereichs, ein dritter Schablonenprozessor 1402_3 arbeitet an einem dritten Quadranten des Bildebenen-Oberflächenbereichs und ein vierter Schablonenprozessor 1402_4 arbeitet an einem vierten Quadranten des Bildebenen-Oberflächenbereichs. Jeder Schablonenprozessor führt eine gesamte CNN-Schicht aus, jedoch lediglich auf 1/4tel des Oberflächenbereichs des Gesamtbildes. Die endgültig resultierenden Ebenen werden durch „Einpassen“ der geeigneten resultierenden Ebenen nebeneinander in den richtigen Quadranten realisiert, welche von dem jeweiligen assoziierten Schablonenprozessor verarbeitet wurden. 14 zeigt nur einen Ausführungsformtyp, in dem das Bild in vier Quadranten aufgeteilt worden ist. Andere Konfigurationen können eine geringere Anzahl eindeutiger Oberflächen (z. B. zwei Hälften) oder eine höhere Anzahl eindeutiger Oberflächenbereiche (z. B. neun, sechzehn usw.) aufweisen. Jegliche sich überschneidende Eingaben zwischen den verschiedenen Bildabschnitten sollten an mehr als nur einen Schablonenprozessor gesendet werden.
  • In noch weiteren anderen Konfigurationen kann mehr als eine CNN-Schicht, jeweils N Koeffizientensätze aufweisend, auf einem einzigen Schablonenprozessor ausgeführt werden. In einer Ausführungsform kann das Ausführen mehrerer CNN-Schichten auf einem einzigen Schablonenprozessor durch Zeitmultiplexbetrieb zwischen den mehreren CNN-Schichten durchgeführt werden. 15 zeigt ein vereinfachtes Beispiel, in dem zwei verschiedene CNN-Schichten auf demselben Schablonenprozessor gemultiplext werden. Hier wird eine erste Ebene von Eingabebilddaten 1501_1 in den RAM des Schablonenprozessors geladen. Der Schablonenprozessor fährt sodann fort, die 2D-Faltungen der Bilddaten 1501_1 mit der geeigneten Ebene für jeden der Koeffizientensätze 1502_1 bis 1502_N für die erste CNN-Schicht durchzuführen. Die resultierenden Zwischenebenen werden wie oben beschrieben in einem fortlaufenden Summen-Akkumulator summiert.
  • Nachdem der letzte Koeffizientensatz 1502_N für die erste CNN-Schicht gefaltet worden und seine Zwischenebene in den Akkumulator eingegeben worden ist, wird die nächste CNN-Schicht verarbeitet. Das heißt, die Bilddatenebene 1501_1 wird nicht aus dem aktiven Kontext des Schablonenprozessors herausgeschaltet, sondern wird hingegen weiter mit den geeigneten jeweiligen Schichten des Koeffizientensatzes 1512_1 bis 1512_N für die zweite CNN-Schicht verwendet. Zwischenebenen für die zweite CNN-Schicht werden in einem weiteren separaten Akkumulator, also nicht von dem Akkumulator für die erste CNN-Schicht, akkumuliert. Nachdem die geeigneten jeweiligen Ebenen von dem zweiten Satz von Koeffizienten 1512_1 bis 1512_N verarbeitet worden sind, wird eine nächste Bildebene für die Bilddaten in den Kontext des Schablonenprozessors hineingeschaltet, und das Verfahren wiederholt sich, jedoch mit einer unterschiedlichen jeweiligen Ebene für beide Koeffizientensätze.
  • In noch einem weiteren anderen Ansatz wird die Ausgabe für eine erste CNN direkt als Eingabe für eine zweite CNN eingespeist. Zum Beispiel bildet die Addition der Zwischenebenen für Koeffizientensatz 1502 eine Eingabebildebene für eine nächste, folgende CNN, die von dem Schablonenprozessor, welcher Koeffizientensatz 1512 aufweist, auszuführen ist.
  • In noch weiteren anderen Konfigurationen können verschiedene und eigenständige Bilder verschiedenen Schablonenprozessoren zugeordnet werden (sodass durch den Bildprozessor CNNs an verschiedenen Bildern gleichzeitig durchgeführt werden können).
  • Obwohl 3 × 3-Schablonengrößen in den vorstehenden Erläuterungen hervorgehoben wurden, ist die Maschine dafür konzipiert, zahlreiche 3D-Schablonen (z. B. 1 × 1 × M, 3 × 3 × M, 5 × 5 × M und 7 × 7 × M) zu unterstützen (z. B. durch Konfiguration des Registerbereichs des Bildprozessors und/oder kompilierten Programmcode).
  • Obwohl die oben beschriebenen Multiplikations- und Additionsoperationen in Gleitkommadarstellung berechnet werden können, werden diese in anderen Ausführungsformen ggf. in Festkommazahldarstellung berechnet. Ferner kann die Festkommazahldarstellung geringerer Präzision (z. B. 8 Bits oder weniger (wie beispielsweise 5 Bits)) oder höherer Präzision sein. Festkommazahlen geringerer Präzision werden im Hinblick auf Zeit/Energie als effizienter betrachtet, ohne Verlust von Bildqualität bei vielen Anwendungen.
  • In verschiedenen Ausführungsformen ist der ausführbare Programmcode strukturiert, 2 (z. B. 8-Bit) Multiplizier-Addier-Operationen (MADs) auf einer einzigen ALU-Bahn auszuführen, um 2 MADs pro Zyklus zu erreichen. In einer Ausführungsform ist die ALU-Bahn-Hardware dafür konzipiert, zwei Multiplikationen 8-Bit mal 8-Bit (d. h. vier 8-Bit Eingabeoperanden) durchzuführen, und dann die zwei 16-Bit-Produkte und einen 32-Bit-Akkumulator zu addieren, um eine 32-Bit-Summe in einem Zyklus zu bilden. Hier entspricht der Akkumulator einem 32-Bit-Eingabeoperanden der zu dem Ergebnis der Multiplikation hinzu addiert wird, wobei das Ergebnis der Addition in das Ausgabe-„Akkumulator“-Register geschrieben wird. Hier wird davon ausgegangen, dass beide Multiplikationen für den gleichen Bildpunkt in der Ausgabeebene sind und deshalb addiert werden können. Die vier 8-Bit-Eingabeoperanden bestehen aus zwei Eingaben von derselben Eingabebildebene und zwei Koeffizientenwerten.
  • In einer alternativen Ausführungsform ist jede ALU-Bahn dafür konzipiert, duale 8-Bit Multiplizier-Addier-Operationen zu unterstützen, um 2 MADs pro Zyklus zu erreichen. Das heißt, die Hardware führt eine erste 8-Bit × 8-Bit-Multiplikation und Ergebnis-Addition mit 16-Bit-Eingabeoperand in resultierenden 16-Bit-Akkumulator und eine zweite, separate 8-Bit × 8-Bit-Multiplikation und Ergebnis-Addition mit separatem 16-Bit Eingabeoperand in einen separaten 16-Bit-Akkumulator durch. Es ist jedoch möglich, dass die 16-Bit-Akkumulatoren in einem einzigen Zyklus saturieren (z. B. mit vollen 8-Bit-Eingabemultiplikanden) und eine Übertragung in einen 32-Bit-Akkumulator in jedem Zyklus erfordern, wodurch die Gesamtrate auf 1 MAD pro Zyklus (gesamt) fallen könnte.
  • Um die Saturation zu vermeiden, können Multiplikanden-Eingabedaten niedrigerer Auflösung verwendet werden. Zum Beispiel kann ein Paar von 6-Bit × 6-Bit-Multiplikationen mit jeweiligen Ergebnissen durchgeführt werden, die in separate, entsprechende 16-Bit-Akkumulatoren mit einem entsprechenden unterschiedlichen 16-Bit-Eingabeoperanden addiert werden. Der Eingabe-Multiplikand niedrigerer Auflösung erfordert mehrere Zyklen vor der 16-Bit-Akkumulator-Saturation und entsprechender Übertragung in einen 32-Bit-Akkumulator. Zum Beispiel kann die Saturation nach jeweils 16 Zyklen auftreten. Falls die Saturation nach jeweils 16 Zyklen auftritt, können die dualen 16-Bit-Akkumulatoren im jeweils 17tenZyklus addiert werden und im jeweils 18ten Zyklus kann das Ergebnis der unmittelbar vorhergehenden dualen Akkumulatorsumme zu einem fortlaufenden 32-Bit-Akkumulator addiert werden. In einer Ausführungsform kann die Software dafür konzipiert sein, die Akkumulator-Summe und -Addition in einen 32-Bit-Akkumulator in einem einzigen Zyklus durchzuführen. In verschiedenen Ausführungsformen kann dieser Ansatz mit geringerer Präzision fähig sein, 1,8 Multiplizier-Addier-Operationen pro Zyklus zu erreichen.
  • Anwendungen mit höherer Präzision (z. B. mit mehr als 8-Bits an Eingabemultiplikanden-Daten) können dafür konzipiert sein, einen 32-Bit-Additions-Operanden und einen Akkumulator-Ergebnis mit ca. 1 MAD pro Zyklus zu verwenden. Dies wird, ähnlich wie der Ansatz geringerer Präzision, eine Saturation des Akkumulators vermeiden, bevor eine bedeutende Anzahl an Zyklen durchgeführt worden sind. Im Fall von 12-Bit-Eingabemultiplikanden-Bilddaten, werden 256 Zyklen einzelner MADs ausgeführt, bevor der 32-Bit-Akkumulator saturiert.
  • 16 zeigt ein Verfahren, welches das Ausführen einer Schicht eines faltenden neuronalen Netzwerks auf einem Bildprozessor, der eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister 1601 aufweist, beinhaltet. Das zweidimensionale Schieberegister stellt einen jeweiligen lokalen Registerbereich für die Ausführungsbahnen bereit. Das Ausführen des faltenden neuronalen Netzwerks beinhaltet das Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister 1602. Das Ausführen des faltenden neuronalen Netzwerks beinhaltet ebenfalls das Durchführen 1603 einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer richtigen Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalten innerhalb der zweidimensionalen Schieberegistermatrix.
  • d. Ausführungsformen zur Implementierung
  • Es ist wichtig, darauf hinzuweisen, dass die oben beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur nicht zwangsläufig auf die Bildverarbeitung im herkömmlichen Sinne beschränkt sind und daher auf andere Anwendungen angewendet werden können, die ggf. veranlassen, dass der Bildprozessor neu charakterisiert wird oder auch nicht. Wenn beispielsweise eines der vorstehend beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur bei der Erstellung und/oder Erzeugung und/oder Wiedergabe von Animationen anstatt bei der Verarbeitung von tatsächlichen Kamerabildern verwendet werden soll, kann der Bildprozessor als grafische Verarbeitungseinheit charakterisiert sein. Zudem können die oben beschriebenen Architekturmerkmale des Bildprozessors in anderen technischen Anwendungen, wie z. B. in der Videoverarbeitung, Bildverarbeitung, Bilderkennung und/oder dem maschinellen Lernen, angewendet werden. Auf diese Weise kann der Bildprozessor (z. B. als Koprozessor) in einen allgemeineren Universalprozessor (z. B. als Teil einer CPU des Computersystems) mit integriert werden oder ein eigenständiger Prozessor innerhalb eines Computersystems sein.
  • Die oben beschriebenen Hardware-Ausführungsformen können in einem Halbleiterchip und/oder als Beschreibung eines Schaltungsdesigns zur letztendlichen Ausrichtung auf einen Halbleiterherstellungsprozess enthalten sein. Im letzteren Fall können diese Schaltungsbeschreibungen die Form einer (z. B. VHDL oder Verilog) Beschreibung einer Registerüberleitungsschaltung (RTL), einer Torschaltung, einer Transistorschaltung oder einer Maske oder verschiedener Kombinationen derselben annehmen. Schaltungsbeschreibungen sind in der Regel auf einem computerlesbaren Speichermedium (wie z. B. einer CD-ROM oder einer anderen Art von Speichertechnologie) enthalten.
  • Aus den vorangehenden Abschnitten ist zu erkennen, dass ein Bildprozessor, wie oben beschrieben, in der Hardware auf einem Computersystem (z. B. als Teil eines Handgerätsystems on Chip (SOC), das Daten von der Kamera des Handgerätes verarbeitet) enthalten sein kann. In Fällen, in denen der Bildprozessor als Hardware-Schaltung ausgebildet ist, ist zu beachten, dass die Bilddaten, die von dem Bildprozessor verarbeitet werden, direkt von einer Kamera empfangen werden können. Hier kann der Bildprozessor Teil einer diskreten Kamera oder Teil eines Computersystems mit einer integrierten Kamera sein. Im letzteren Fall können die Bilddaten direkt von der Kamera oder aus dem Systemspeicher des Computersystems empfangen werden (z. B. sendet die Kamera ihre Bilddaten anstatt an den Bildprozessor an den Systemspeicher). Zu beachten ist auch, dass viele der in den vorangehenden Abschnitten beschriebenen Merkmale auf eine Bildprozessoreinheit (zur Darstellung von Animationen) anwendbar sind.
  • 17 zeigt eine exemplarische Darstellung eines Computersystems. Viele der Komponenten des nachstehend beschriebenen Computersystems sind auf ein Computersystem mit einer integrierten Kamera und einem zugehörigen Bildprozessor (z. B. einem Handgerät, wie z. B. einem Smartphone oder Tablet-Computer) anwendbar. Fachleute auf dem Gebiet werden leicht zwischen beiden unterscheiden können.
  • Wie in 17 ersichtlich, kann das grundlegende Computersystem eine zentrale Verarbeitungseinheit 1701 (die beispielsweise eine Vielzahl von Universal-Verarbeitungskernsystemen 1715_1 bis 1715_N und einen auf einem Multikernprozessor oder einem Anwendungsprozessor angeordneten Hauptspeichercontroller 1717 beinhalten kann), Systemspeicher 1702, ein Display 1703 (z. B. Touchscreen, Flachbildschirm), eine lokal verdrahtete Punkt-zu-Punkt-Verbindung (z. B. eine USB-Schnittstelle) 1704, verschiedene Netzwerk-E/A-Funktionen 1705 (wie z. B. eine Ethernet-Schnittstelle und/oder ein Mobilfunkmodem-Teilsystem), ein drahtloses lokales Netzwerk (z. B. WLAN) 1706, eine drahtlose Punkt-zu-Punkt-Verbindung (z. B. Bluetooth-Schnittstelle) 1707 und eine globale Positionierungssystemschnittstelle 1708, verschiedene Sensoren 1709_1 bis 1709_N, eine oder mehrere Kameras 1710, eine Batterie 1711, eine Energieverwaltungssteuereinheit 1712, einen Lautsprecher und ein Mikrofon 1713 sowie einen Audio-Kodierer/Dekodierer 1714 beinhalten.
  • Ein Anwendungsprozessor oder Multikernprozessor 1750 kann einen oder mehrere Universalprozessorkerne 1715 innerhalb seiner CPUs 1701, eine oder mehrere grafische Verarbeitungseinheiten 1716, eine Speicherverwaltungsfunktion 1717 (z. B. einen Speichercontroller), eine E/A-Steuerfunktion 1718 und eine Bildverarbeitungseinheit 1719 beinhalten. Die Universalverarbeitungskerne 1715 führen in der Regel das Betriebssystem und die Anwendungssoftware des Computersystems aus. Die Grafikverarbeitungseinheiten 1716 führen in der Regel grafikintensive Funktionen aus, um z. B. Grafikdaten zu erzeugen, die auf dem Display 1703 dargestellt werden. Die Speichersteuerfunktion 1717 ist mit dem Systemspeicher 1702 verbunden, um Daten in den Systemspeicher 1702 zu schreiben bzw. aus diesem einzulesen. Die Energieverwaltungssteuereinheit 1712 steuert im Allgemeinen den Energieverbrauch des Systems 1700.
  • Die Bildverarbeitungseinheit 1719 kann gemäß einer der oben in den vorangehenden Abschnitten beschriebenen Ausführungsformen der Bildverarbeitungseinheit implementiert sein. Alternativ dazu oder in Kombination kann die IPU 1719 mit einer oder sowohl dem GPU 1716 als auch der CPU 1701 als Koprozessor derselben gekoppelt sein. Darüber hinaus kann in verschiedenen Ausführungsformen der GPU 1716 mit einem der oben beschriebenen Prozessormerkmale implementiert sein.
  • Das Touchscreen-Display 1703, die Kommunikationsschnittstellen 17041707, die GPS-Schnittstelle 1708, die Sensoren 1709, die Kamera 1710 und der Lautsprecher/Mikrofon-Codec 1713, 1714 können alle als unterschiedliche Formen der E/A (Eingabe und/oder Ausgabe) in Bezug auf das gesamte Rechensystem betrachtet werden, darunter auch gegebenenfalls ein integriertes Peripheriegerät (z. B. die eine oder mehrere Kameras 1710). Je nach Implementierung können verschiedene dieser E/A-Komponenten auf dem Anwendungsprozessor/Multikernprozessor 1750 integriert sein oder sich außerhalb des Chips oder außerhalb des Pakets des Anwendungsprozessors/Multikernprozessors 1750 befinden.
  • In einer Ausführungsform beinhalten eine oder mehrere Kameras 1710 eine Tiefenkamera, die in der Lage ist, die Tiefe zwischen der Kamera und einem Objekt in dessen Sichtfeld zu messen. Anwendungssoftware, Betriebssystemsoftware, Gerätetreibersoftware und/oder Firmware, die auf einem universellen CPU-Kern (oder einem anderen Funktionsblock mit einer Befehlsausführungspipeline zum Ausführen eines Programmcodes) eines Anwendungsprozessors oder eines anderen Prozessors ausgeführt werden, können sämtliche der oben beschriebenen Funktionen ausführen.
  • Ausführungsformen der Erfindung können, wie oben dargelegt, verschiedene Verfahren beinhalten. Die Prozesse können in maschinenausführbaren Befehlen enthalten sein. Die Befehle können dazu verwendet werden, einen Universalprozessor oder Spezialprozessor dazu zu veranlassen, bestimmte Prozesse auszuführen. Alternativ dazu können diese Prozesse von spezifischen Hardwarekomponenten ausgeführt werden, die eine fest verdrahtete Logik zum Ausführen der Prozesse oder eine beliebige Kombination von programmierten Computerkomponenten und benutzerdefinierten Hardwarekomponenten enthalten.
  • Elemente der vorliegenden Erfindung können darüber hinaus als maschinenlesbares Medium zum Speichern der maschinenausführbaren Befehle bereitgestellt sein. Das maschinenlesbare Medium kann unter anderem Disketten, optische Platten, CD-ROMs und magneto-optische Platten, FLASH-Speicher, ROMs, RAMs, EPROMs, EEPROMs, magnetische oder optische Karten, Ausbreitungsmedien oder andere Arten von Medien/maschinenlesbare Medien, die für die Speicherung von elektronischen Befehlen geeignet sind, beinhalten. Beispielsweise können Elemente in Form eines Computerprogramms heruntergeladen werden, das von einem dezentralen Computer (z. B. einem Server) mittels eines in einer Trägerwelle oder in einem anderen Ausbreitungsmedium enthaltenen Datensignals an einen anfordernden Computer (z. B. einen Client) über eine Kommunikationsverbindung (z. B. ein Modem oder eine Netzwerkverbindung) übertragen wird.
  • In der vorstehenden Beschreibung wurden spezifische exemplarische Ausführungsformen beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von dem in den beigefügten Ansprüchen dargelegten Erfindungsgedanken und Umfang der Erfindung abzuweichen. Die Beschreibung und die Zeichnungen sind daher in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.

Claims (18)

  1. Maschinenlesbares Speichermedium mit auf diesem gespeicherten Programmcode, der, bei Ausführung durch einen Bildprozessor, welcher eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister, das den Ausführungsbahnen einen jeweiligen lokalen Registerbereich bereitstellt, aufweist, das Durchführen eines Verfahrens veranlasst, das Verfahren umfassend: Ausführen eines faltenden neuronalen Netzwerks durch Durchführen von Folgendem: a) Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister; b) Durchführen einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalt innerhalb der zweidimensionalen Schieberegistermatrix.
  2. Maschinenlesbares Speichermedium nach Anspruch 1, wobei das Verfahren ferner das Wiederholen von a) und b) mit der Ebene von Bilddaten und einer nächsten Matrix von Koeffizienten umfasst, wobei die Matrix von Koeffizientenwerten eine Ebene aus einem ersten Satz von Koeffizienten für die Schicht des faltenden neuronalen Netzwerks ist, und die nächste Matrix von Koeffizientenwerten eine Ebene aus einem zweiten Satz von Koeffizienten für die Schicht des faltenden neuronalen Netzwerks ist.
  3. Maschinenlesbares Speichermedium nach Anspruch 2, wobei dieses ferner das Akkumulieren, lokal an diesen Ausführungsbahnen, von Zwischenebenen, die aus von demselben Satz von Koeffizienten erzeugt wurden, umfasst.
  4. Maschinenlesbares Speichermedium nach Anspruch 1 oder 2, wobei die Bilddaten, lokal an diesen Ausführungsbahnen, zwischen den zwischen den Bilddaten durchgeführten zweidimensionalen Faltungen und: 1) der Ebene aus diesem ersten Satz von Koeffizienten; und 2) der Ebene aus dem zweiten Satz von Koeffizienten vorgehalten werden.
  5. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 4, wobei das gleichzeitige Multiplizieren ferner das gleichzeitige Multiplizieren eines gleichen Koeffizientenwertes gegen Bilddaten innerhalb des zweidimensionalen Schieberegisters beinhaltet.
  6. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 5, wobei das Bewirken einer Ausrichtung von Werten das Verschieben von Bilddaten innerhalb des zweidimensionalen Schieberegisters umfasst, bevor die Bilddaten mit einem nächsten Koeffizientenwert multipliziert werden.
  7. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 6, wobei der Bildprozessor mehrere Schablonenprozessoren umfasst, von denen jeder jeweils eine Ausführungsbahnmatrix und ein zweidimensionales Schieberegister aufweist, und wobei der Bildprozessor konfiguriert ist, dieselben Bilddaten auf verschiedenen Schablonenprozessoren, die verschiedene Koeffizientensätze der Schicht des faltenden neuronalen Netzwerks aufweisen, auszuführen.
  8. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 6, wobei der Bildprozessor mehrere Schablonenprozessoren umfasst, von denen jeder jeweils eine Ausführungsbahnmatrix und ein zweidimensionales Schieberegister aufweist, und wobei der Bildprozessor konfiguriert ist, dieselben Koeffizientensätze des faltenden neuronalen Netzwerks auf verschiedenen Schablonenprozessoren mit verschiedenen Bilddaten auf den verschiedenen Schablonenprozessoren auszuführen.
  9. Maschinenlesbares Speichermedium nach Anspruch 8, wobei die verschiedenen Bilddaten mehrere Ebenen verschiedener Blöcke eines dreidimensionalen Blocks von Bilddaten umfassen.
  10. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 9, wobei der Bildprozessor konfiguriert ist, eine Ausgabe von der Schicht des faltenden neuronalen Netzwerks als Eingabe für eine durch den Bildprozessor erfolgende Berechnung einer nächsten Schicht des faltenden neuronalen Netzwerks zu verwenden.
  11. Maschinenlesbares Speichermedium nach einem der Ansprüche 1 bis 9, wobei der Bildprozessor konfiguriert ist, die Schicht des faltenden neuronalen Netzwerks und eine zweiten Schicht des faltenden neuronalen Netzwerks mit den Bilddaten zu multiplexen, die zwischen der Verarbeitung der Schicht des faltenden neuronalen Netzwerks und der zweiten Schicht des faltenden neuronalen Netzwerks lokal an den Ausführungsbahnen verbleiben.
  12. Vorrichtung, umfassend: i) einen Bildprozessor, eine Matrix von Ausführungsbahnen und ein zweidimensionales Schieberegister, wobei dieses zweidimensionale Schieberegister einen jeweiligen lokalen Registerbereich für die Ausführungsbahnen bereitstellt; ii) ein maschinenlesbares Speichermedium, gespeicherten Programmcode, der, bei Ausführung durch die Matrix von Ausführungsbahnen das Durchführen eines Verfahrens veranlasst, das Verfahren umfassend: Ausführen eines faltenden neuronalen Netzwerks durch Durchführen von Folgendem: a) Laden einer Ebene von Bilddaten eines dreidimensionalen Blocks von Bilddaten in das zweidimensionale Schieberegister; b) Durchführen einer zweidimensionalen Faltung der Ebene von Bilddaten mit einer Matrix von Koeffizientenwerten durch sequentielles: gleichzeitiges Multiplizieren, innerhalb der Ausführungsbahnen, jeweiliger Bildpunkt- und Koeffizientenwerte zwecks Bildens einer Matrix von Teilprodukten; gleichzeitiges Summieren, innerhalb der Ausführungsbahnen, der Teilprodukte mit jeweiligen Akkumulationen von Teilprodukten, die innerhalb des zweidimensionalen Registers für verschiedene Schablonen innerhalb der Bilddaten vorgehalten werden; und Bewirken einer Ausrichtung von Werten für die zweidimensionale Faltung innerhalb der Ausführungsbahnen durch Verschieben von Inhalten innerhalb der zweidimensionalen Schieberegistermatrix.
  13. Vorrichtung nach Anspruch 12, wobei der Bildprozessor mehrere Schablonenprozessoren umfasst, von denen jeder jeweils eine Ausführungsbahnmatrix und ein zweidimensionales Schieberegister aufweist, und wobei der Bildprozessor konfiguriert ist, dieselben Bilddaten auf verschiedenen Schablonenprozessoren, die verschiedene Koeffizientensätze der Schicht des faltenden neuronalen Netzwerks aufweisen, auszuführen.
  14. Vorrichtung nach Anspruch 12, wobei der Bildprozessor mehrere Schablonenprozessoren umfasst, von denen jeder jeweils eine Ausführungsbahnmatrix und ein zweidimensionales Schieberegister aufweist, und wobei der Bildprozessor konfiguriert ist, dieselben Koeffizientensätze des faltenden neuronalen Netzwerks auf verschiedenen Schablonenprozessoren mit verschiedenen Bilddaten auf den verschiedenen Schablonenprozessoren auszuführen.
  15. Vorrichtung nach Anspruch 14, wobei die verschiedenen Bilddaten mehrere Ebenen verschiedener Blöcke eines dreidimensionalen Blocks von Bilddaten umfassen.
  16. Vorrichtung nach einem der Ansprüche 12 bis 15, wobei der Bildprozessor konfiguriert ist, eine Ausgabe von der Schicht des faltenden neuronalen Netzwerks als Eingabe für eine durch den Bildprozessor erfolgenden Berechnung einer nächsten Schicht des faltenden neuronalen Netzwerks zu verwenden.
  17. Vorrichtung nach einem der Ansprüche 12 bis 15, wobei der Bildprozessor konfiguriert ist, die Schicht des faltenden neuronalen Netzwerks und eine zweite Schicht des faltenden neuronalen Netzwerks mit den Bilddaten zu multiplexen, die zwischen der Verarbeitung der Schicht des faltenden neuronalen Netzwerks und der zweiten Schicht des faltenden neuronalen Netzwerks lokal an den Ausführungsbahnen verbleiben.
  18. Vorrichtung nach einem der Ansprüche 12 bis 17, wobei der Bildprozessor und das maschinenlesbare Speichermedium Teil eines Computersystems sind.
DE202017103694.4U 2016-07-01 2017-06-21 Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor Active DE202017103694U1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/201,204 2016-07-01
US15/201,204 US10546211B2 (en) 2016-07-01 2016-07-01 Convolutional neural network on programmable two dimensional image processor

Publications (1)

Publication Number Publication Date
DE202017103694U1 true DE202017103694U1 (de) 2017-10-04

Family

ID=59363203

Family Applications (2)

Application Number Title Priority Date Filing Date
DE102017113733.5A Active DE102017113733B4 (de) 2016-07-01 2017-06-21 Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE202017103694.4U Active DE202017103694U1 (de) 2016-07-01 2017-06-21 Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE102017113733.5A Active DE102017113733B4 (de) 2016-07-01 2017-06-21 Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor

Country Status (9)

Country Link
US (3) US10546211B2 (de)
EP (1) EP3479302B1 (de)
JP (1) JP6764954B2 (de)
KR (1) KR102232722B1 (de)
CN (1) CN107563952B (de)
DE (2) DE102017113733B4 (de)
GB (3) GB2564285B (de)
TW (1) TWI690858B (de)
WO (1) WO2018005030A1 (de)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109754359A (zh) * 2017-11-01 2019-05-14 腾讯科技(深圳)有限公司 一种应用于卷积神经网络的池化处理的方法及系统
WO2021151749A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gmbh Hardwarebeschleunigte berechnung von faltungen

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10242311B2 (en) * 2016-08-11 2019-03-26 Vivante Corporation Zero coefficient skipping convolution neural network engine
US10360470B2 (en) 2016-10-10 2019-07-23 Gyrfalcon Technology Inc. Implementation of MobileNet in a CNN based digital integrated circuit
US10339445B2 (en) 2016-10-10 2019-07-02 Gyrfalcon Technology Inc. Implementation of ResNet in a CNN based digital integrated circuit
US10043095B2 (en) * 2016-10-10 2018-08-07 Gyrfalcon Technology, Inc. Data structure for CNN based digital integrated circuit for extracting features out of an input image
US10366302B2 (en) 2016-10-10 2019-07-30 Gyrfalcon Technology Inc. Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor
US10366328B2 (en) 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
US10402628B2 (en) 2016-10-10 2019-09-03 Gyrfalcon Technology Inc. Image classification systems based on CNN based IC and light-weight classifier
US9940534B1 (en) * 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
TWI634490B (zh) * 2016-11-14 2018-09-01 美商耐能股份有限公司 卷積運算裝置及卷積運算方法
US10878310B2 (en) 2016-11-29 2020-12-29 Mellanox Technologies, Ltd. Accelerated convolution in convolutional neural networks
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US10339443B1 (en) * 2017-02-24 2019-07-02 Gopro, Inc. Systems and methods for processing convolutional neural network operations using textures
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US11373266B2 (en) * 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning
US10474464B2 (en) 2017-07-05 2019-11-12 Deep Vision, Inc. Deep vision processor
US10817983B1 (en) * 2017-09-28 2020-10-27 Apple Inc. Method and device for combining real and virtual images
US11270201B2 (en) 2017-12-29 2022-03-08 Intel Corporation Communication optimizations for distributed machine learning
CN108182471B (zh) * 2018-01-24 2022-02-15 上海岳芯电子科技有限公司 一种卷积神经网络推理加速器及方法
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
GB201801639D0 (en) * 2018-02-01 2018-03-21 Ruff Brendan Patrick Low precision efficient multiplication free convolutional filter bank device
US11468302B2 (en) 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
CN108520297B (zh) * 2018-04-02 2020-09-04 周军 可编程深度神经网络处理器
CN108829610B (zh) * 2018-04-02 2020-08-04 浙江大华技术股份有限公司 一种神经网络前向计算过程中的内存管理方法及设备
EP3557485B1 (de) * 2018-04-19 2021-05-26 Aimotive Kft. Verfahren zur beschleunigung von operationen und beschleunigervorrichtung
KR102126857B1 (ko) * 2018-05-10 2020-06-25 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
CN108921926B (zh) * 2018-07-02 2020-10-09 云从科技集团股份有限公司 一种基于单张图像的端到端三维人脸重建方法
US10417342B1 (en) 2018-07-03 2019-09-17 Gyrfalcon Technology Inc. Deep learning device for local processing classical chinese poetry and verse
US11429850B2 (en) * 2018-07-19 2022-08-30 Xilinx, Inc. Performing consecutive mac operations on a set of data using different kernels in a MAC circuit
CN108681984B (zh) * 2018-07-26 2023-08-15 珠海一微半导体股份有限公司 一种3*3卷积算法的加速电路
CN109065089B (zh) * 2018-07-26 2020-11-06 杭州闪亿半导体有限公司 一种用于卷积运算的存储模块、模组
US10311149B1 (en) 2018-08-08 2019-06-04 Gyrfalcon Technology Inc. Natural language translation device
CN109086875A (zh) * 2018-08-16 2018-12-25 郑州云海信息技术有限公司 一种基于宏指令集的卷积网络加速方法及装置
US10983583B2 (en) * 2018-08-23 2021-04-20 Apple Inc. Electronic display reduced blanking duration systems and methods
JP7165018B2 (ja) 2018-10-03 2022-11-02 キヤノン株式会社 情報処理装置、情報処理方法
US11501141B2 (en) * 2018-10-12 2022-11-15 Western Digital Technologies, Inc. Shifting architecture for data reuse in a neural network
US10387772B1 (en) 2018-10-22 2019-08-20 Gyrfalcon Technology Inc. Ensemble learning based image classification systems
CN109711538B (zh) * 2018-12-14 2021-01-15 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
JP7408289B2 (ja) * 2019-03-28 2024-01-05 株式会社エヌエスアイテクス 畳込み演算装置
CN111767994B (zh) * 2019-04-01 2024-06-11 中国科学院半导体研究所 一种神经元计算装置
KR20210004702A (ko) 2019-07-05 2021-01-13 삼성전자주식회사 Ai 프로세서 및 이의 신경망 연산 수행 방법
US11475283B2 (en) 2019-10-24 2022-10-18 Apple Inc. Multi dimensional convolution in neural network processor
DE102019130930A1 (de) 2019-11-15 2021-05-20 Carl Zeiss Microscopy Gmbh Mikroskop und Verfahren mit Ausführen eines faltenden neuronalen Netzes
CN110728367B (zh) * 2019-12-18 2020-05-05 深圳鲲云信息科技有限公司 用于神经网络的数据存储方法及装置
CN111079904B (zh) * 2019-12-23 2023-05-23 福建星网视易信息系统有限公司 深度可分离卷积的加速方法和存储介质
US11403727B2 (en) 2020-01-28 2022-08-02 Nxp Usa, Inc. System and method for convolving an image
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
EP4115346A4 (de) * 2020-03-10 2024-03-20 Aip Semi, Inc. Hardware-architektur zur datenverarbeitung in einem neuronalen netzwerk
US11513847B2 (en) 2020-03-24 2022-11-29 Deep Vision Inc. System and method for queuing commands in a deep learning processor
JP7367595B2 (ja) * 2020-04-07 2023-10-24 富士通株式会社 情報処理装置及び情報処理方法
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
KR102441171B1 (ko) * 2020-05-26 2022-09-08 한국전자통신연구원 다시점 얼굴 영상 기반 사용자 모니터링 장치 및 방법
CN111767985B (zh) * 2020-06-19 2022-07-22 深圳市商汤科技有限公司 一种神经网络的训练方法、视频识别方法及装置
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
US11586442B2 (en) 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels
GB2599098B (en) * 2020-09-22 2024-04-10 Imagination Tech Ltd Hardware implementation of windowed operations in three or more dimensions
US11734017B1 (en) 2020-12-07 2023-08-22 Waymo Llc Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor
US20220207332A1 (en) * 2020-12-31 2022-06-30 Nxp Usa, Inc. Scalable neural network accelerator architecture
CN112967211A (zh) * 2021-01-31 2021-06-15 成都商汤科技有限公司 一种图像处理方法、装置、计算机设备及存储介质
CN113191935B (zh) * 2021-04-30 2024-07-02 华中科技大学 一种用于高斯金字塔构建的可重构硬件加速方法与系统
US20230032323A1 (en) * 2021-07-28 2023-02-02 Apical Limited Image processing method and system

Family Cites Families (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445177A (en) 1981-05-22 1984-04-24 Data General Corporation Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
US4770430A (en) 1987-08-11 1988-09-13 Lange Dennis M Self-steering axle assembly for vehicles
US4935894A (en) 1987-08-31 1990-06-19 Motorola, Inc. Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
EP0875031B1 (de) 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
WO2000055810A1 (fr) 1999-03-16 2000-09-21 Hamamatsu Photonics K. K. Capteur de vision ultra-rapide
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
ATE504043T1 (de) 2005-04-28 2011-04-15 Univ Edinburgh Umkonfigurierbares anweisungs-zellen-array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927949A1 (de) 2006-12-01 2008-06-04 Thomson Licensing Verarbeitungselement-Array mit lokalen Registern
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
TW200842699A (en) 2007-04-06 2008-11-01 Technology Properties Ltd Signal processing
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
EP2663071B1 (de) 2007-09-05 2015-11-18 Tohoku University Festkörperabbildungssensor und Ansteuerungsverfahren dafür
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8442927B2 (en) * 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US9613001B2 (en) * 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
CN113255885A (zh) 2014-04-11 2021-08-13 谷歌有限责任公司 使卷积神经网络的训练并行化
EP3035204B1 (de) * 2014-12-19 2018-08-15 Intel Corporation Speichervorrichtung und Verfahren zur Durchführung von Faltungsoperationen
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US10353861B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Mechanism for communication between architectural program running on processor and non-architectural program running on execution unit of the processor regarding shared resource

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109754359A (zh) * 2017-11-01 2019-05-14 腾讯科技(深圳)有限公司 一种应用于卷积神经网络的池化处理的方法及系统
US11537857B2 (en) 2017-11-01 2022-12-27 Tencent Technology (Shenzhen) Company Limited Pooling processing method and system applied to convolutional neural network
US11734554B2 (en) 2017-11-01 2023-08-22 Tencent Technology (Shenzhen) Company Limited Pooling processing method and system applied to convolutional neural network
WO2021151749A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gmbh Hardwarebeschleunigte berechnung von faltungen

Also Published As

Publication number Publication date
TWI690858B (zh) 2020-04-11
GB2564285A (en) 2019-01-09
US20210004633A1 (en) 2021-01-07
JP2019522291A (ja) 2019-08-08
US20180005075A1 (en) 2018-01-04
EP3479302B1 (de) 2023-11-01
KR102232722B1 (ko) 2021-03-29
EP3479302A1 (de) 2019-05-08
GB2554491A (en) 2018-04-04
GB2574940B (en) 2020-07-22
GB2574940A (en) 2019-12-25
GB201709785D0 (en) 2017-08-02
WO2018005030A1 (en) 2018-01-04
CN107563952A (zh) 2018-01-09
GB2564285B (en) 2019-07-17
KR20190022627A (ko) 2019-03-06
JP6764954B2 (ja) 2020-10-07
GB201907743D0 (en) 2019-07-17
TW201802727A (zh) 2018-01-16
US12020027B2 (en) 2024-06-25
DE102017113733A1 (de) 2018-01-04
GB2554491B (en) 2018-10-10
DE102017113733B4 (de) 2022-06-30
GB201814094D0 (en) 2018-10-17
CN107563952B (zh) 2021-04-16
US10789505B2 (en) 2020-09-29
US10546211B2 (en) 2020-01-28
US20180005074A1 (en) 2018-01-04

Similar Documents

Publication Publication Date Title
DE102017113733B4 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE112016001837T5 (de) Architektur für leistungseffiziente und programmierbare hochleistungs-bildverarbeitung
DE112016001835T5 (de) Blattgenerator für Bildprozessor
DE102017103764A1 (de) Compilerverwalteter speicher für bildprozessor
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE102017113859A1 (de) Blockoperationen für einen Bildprozessort mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE112016001844T5 (de) Zweidimensionale Verschiebungsmatrix für Bildprozessor
DE102017113735B4 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE102017113867A1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE202016107443U1 (de) Berechnen von Faltungen mithilfe eines neuronalen Netzwerkprozessors
DE112016002298T5 (de) Vorabruf von gewichten zur verwendung in einem neuronalen netzwerkprozessor
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität
DE19510879A1 (de) Verfahren zum Lösen simultaner, linearer Gleichungen in einem speicherverteilten Parallelcomputer
DE102014119038A1 (de) Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
DE102016125846A1 (de) Makro-E/A-Einheit für Grafikprozessor
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE102023105572A1 (de) Effiziente Matrixmultiplikation und -addition mit einer Gruppe von Warps
DE102021111028A1 (de) System und Verfahren zur int9-Quantisierung
DE69836408T2 (de) Verfahren zum Ausführen von arithmetischen und logischen Operationen in Feldern eines Wort-Operanden
DE2508141A1 (de) Verfahren zur transformation von reellen zahlen
DE112022000529T5 (de) Verfahren und vorrichtung für gather/scatter-vorgänge in einem vektorprozessor
DE102022119137A1 (de) Optimierung der speichernutzung für die effiziente ausführung eines neuronalen netzwerks

Legal Events

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

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

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

R082 Change of representative

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

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