DE112016001835T5 - Blattgenerator für Bildprozessor - Google Patents

Blattgenerator für Bildprozessor Download PDF

Info

Publication number
DE112016001835T5
DE112016001835T5 DE112016001835.5T DE112016001835T DE112016001835T5 DE 112016001835 T5 DE112016001835 T5 DE 112016001835T5 DE 112016001835 T DE112016001835 T DE 112016001835T DE 112016001835 T5 DE112016001835 T5 DE 112016001835T5
Authority
DE
Germany
Prior art keywords
sheet
data
matrix
stanza
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112016001835.5T
Other languages
English (en)
Inventor
Albert Meixner
Jason Rupert Redgrave
Ofer Shacham
Qiuling Zhu
Daniel Frederic Finchelstein
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 DE112016001835T5 publication Critical patent/DE112016001835T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • BPERFORMING OPERATIONS; TRANSPORTING
    • B41PRINTING; LINING MACHINES; TYPEWRITERS; STAMPS
    • B41FPRINTING MACHINES OR PRESSES
    • B41F15/00Screen printers
    • B41F15/08Machines
    • B41F15/0804Machines for printing sheets
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/32Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
    • H04N1/32101Display, printing, storage or transmission of additional information, e.g. ID code, date and time or title
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Mechanical Engineering (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Eine Blattgeneratorschaltung wird beschrieben. Der Blattgenerator umfasst eine Schaltung zum Empfangen einer Zeilengruppe von Bilddaten, einschließlich mehrerer Datenzeilen eines Frames von Bilddaten. Die mehreren Zeilen sind in ihrer Anzahl ausreichend, um mehrere benachbarte überlagernde Schablonen zu umfassen. Die elektronische Schaltung soll die Zeilengruppe in ein Blatt mit kleinerer Größe parsen. Die elektronische Schaltung soll das Blatt in eine Datenberechnungseinheit laden, die eine zweidimensionale Verschiebungsmatrixstruktur aufweist und die mit einer Prozessormatrix gekoppelt ist.

Description

  • Gebiet der Erfindung
  • Das Gebiet der Erfindung bezieht sich im Allgemeinen auf die Bildverarbeitung und insbesondere auf einen Blattgenerator für einen 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 gegliederte 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 ausgesprochen 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 äußerst vielseitige Programmierumgebung (die mit dem ersten Extrem assoziiert ist).
  • Eine Technikplattform, die sowohl äußerst vielseitige Anwendungssoftware-Entwicklungsmöglichkeiten als auch eine verbesserte Energieeffizienz pro Dateneinheit bietet, bleibt eine wünschenswerte und dennoch fehlende Lösung.
  • Kurzdarstellung
  • Eine Blattgeneratorschaltung wird beschrieben. Der Blattgenerator umfasst eine elektronische Schaltung zum Empfangen einer Zeilengruppe von Bilddaten, einschließlich mehrerer Datenzeilen eines Frames von Bilddaten. Die mehreren Zeilen sind in ihrer Anzahl ausreichend, um mehrere benachbarte überlagernde Schablonen zu umfassen. Die elektronische Schaltung soll die Zeilengruppe in ein Blatt mit kleinerer Größe parsen. Die elektronische Schaltung soll das Blatt in eine Datenberechnungseinheit laden, die eine zweidimensionale Verschiebungsmatrixstruktur aufweist und die mit einer Prozessormatrix gekoppelt ist.
  • Eine Vorrichtung beschreibt eine Einrichtung zum Empfangen einer Zeilengruppe von Bilddaten, einschließlich mehrerer Datenzeilen eines Frames von Bilddaten. Die mehreren Zeilen sind in ihrer Anzahl ausreichend, um mehrere benachbarte überlagernde Schablonen zu umfassen. Die Vorrichtung enthält ebenfalls Methoden zum Parsen der Zeilengruppe in ein kleineres Blatt. Die Vorrichtung enthält ebenfalls Methoden zum Laden des Blattes in eine mit einer Prozessormatrix gekoppelte zweidimensionale Verschiebungsmatrixstruktur. Die Vorrichtung enthält ebenfalls Methoden zum Ausführen von Programmcode auf der Prozessormatrix, um die mehreren benachbarten und sich überlagernden Schablonen über besagtes Blatt zu verarbeiten.
  • Figurenverzeichnis
  • Die folgende Beschreibung und begleitenden Zeichnungen dienen dazu, 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 Befehlswortes des Schablonenprozessors;
  • 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 bezieht sich auf eine erste, von einem Blattgenerator durchgeführte Operation;
  • 8 bezieht sich auf eine zweite, von einem Blattgenerator durchgeführte Operation;
  • 9 bezieht sich auf eine dritte, von einem Blattgenerator ausgeführte Operation;
  • 10 bezieht sich auf eine vierte, von einem Blattgenerator durchgeführte Operation;
  • 11 bezieht sich auf eine fünfte, von einem Blattgenerator durchgeführte Operation;
  • 12 bezieht sich auf eine sechste, von einem Blattgenerator durchgeführte Operation;
  • 13 zeigt eine Ausführungsform eines Blattgenerators;
  • 14 zeigt eine Ausführungsform eines Computersystems.
  • 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 dargestellt, beinhaltet die Architektur 100 eine Vielzahl von Zeilenpuffereinheiten 101_1 bis 101_M, die mit einer Vielzahl von Schablonenprozessoreinheiten 102_1 bis 102_N und entsprechenden Blattgeneratoreinheiten 103_1 bis 103_N über ein Netzwerk 104 (z. B. ein Netzwerk auf Chip (NOC), unter anderem auch ein Chip-Switch-Netzwerk, ein On-Chip-Ring-Netzwerk oder einer anderen Art von Netzwerk) verbunden ist. 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 ein Parallelrechner realisiert sein, der zwei oder mehr Schablonenprozessoren 102_1, 102_2 aufweist, die denselben Kernprogrammcode verarbeiten. 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.
  • Bei noch anderen Konfigurationen kann im Wesentlichen jeder DAG von Kernen auf den Hardwareprozessor geladen werden, indem jeweilige Schablonenprozessoren mit deren eigenen jeweiligen Kernen von Programmcode konfiguriert und geeignete Steuerablauf-Hooks in Hardware konfiguriert werden, um Ausgabebilder von einem Kern an den Eingang eines nächsten Kerns im 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 Einfachheit 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 Kerns 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 „nachgelagerte“ 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 die nächste Phase/Operation in der Pipeline/dem DAG darstellenden „Abnehmerkerne“ führen diese auf ihrem eigenen bzw. einem anderen Blattgenerator und Schablonenprozessor (z. B. Blattgenerator 103_2 und Schablonenprozessor 102_2) aus und 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äß dem Design der gesamten Pipeline oder des DAGs ausführt.
  • Ein Schablonenprozessor 102 ist dafür ausgelegt, gleichzeitig an mehreren sich überlagernden 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 des Schablonenprozessors 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 überlappender Schablonen 202 (die jeweils eine Abmessung von 3 Bildpunkten×3 Bildpunkten aufweisen), 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 Einfachheit halber sind die drei überlappenden Schablonen 202 nur in vertikaler Richtung überlappend 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 überlappenden Schablonen 202 innerhalb des Schablonenprozessors besteht 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 schattierten Bereich, der im Allgemeinen mit der Bezugsnummer 204 gekennzeichnet ist). Wie in 2c und 2d dargestellt, arbeitet der Schablonenprozessor an dem Blatt der Eingabebilddaten 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, 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 eine Ausgabebildpunktposition 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 Schablonenprozessorarchitektur 300. Wie in 3a dargestellt, 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 getrennte Direktzugriffsspeicher 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 Direktzugriffsspeicher 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 Direktzugriffsspeicher 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 Direktzugriffsspeicher 307. Im letzteren Fall ruft die E/A-Einheit 304 die Daten aus den Direktzugriffsspeichern 307 ab, um ein Ausgabeblatt zu bilden, das dann an den Blattgenerator weitergeleitet wird.
  • Der Skalarprozessor 302 umfasst einen Programmcontroller 309, der die Befehle des Programmcodes des Schablonenprozessors aus dem Skalarspeicher 303 einliest und 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 SIMD-ähnliches Verhalten der Datenberechnungseinheit 301 zu bewirken. In einer Ausführungsform beinhaltet das Befehlsformat der Befehle, die aus dem Skalarspeicher 303 gelesen 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 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 verteilter 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 Hardwareplattform 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 Direktzugriffsspeicher 307 zudem eine oder mehrere Nachschlagetabellen 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 Nachschlagetabelle 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 einer anderen Datenspeicherposition abgerufen werden. Unabhängig davon umfasst in einer Ausführungsform ein Nachschlagevorgang in einer skalaren Nachschlagetabelle 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 Nachschlagetabellen werden nachfolgend bereitgestellt.
  • 3b fasst die oben beschriebene bzw. beschriebenen Ausführungsform(en) des VLIW-Befehlswortes 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 einen gleichen Direktzugriffsspeicher teilen, 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 aus jeder 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 seine 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 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 umfassen die Skalarbefehle, die von dem Skalarprozessor ausgeführt werden, Befehle, die an den Blattgenerator ausgegeben werden, um Blätter von/in die Speicher oder 2D-Schieberegister der Datenberechnungseinheit zu laden/zu speichern. Hier kann der Betrieb des Blattgenerators von der Operation der Zeilenpuffereinheit oder von anderen Variablen abhängig sein, die ein Vorlaufzeitverständnis der Anzahl von Zyklen verhindern, die der Blattgenerator ausführen wird, um einen Befehl zu beenden, der von dem Skalarprozessor ausgegeben wird. Dementsprechend beinhaltet in einer Ausführungsform jedes beliebige VLIW-Wort, dessen Skalarbefehl 351 dem Befehlsblockgenerator entspricht oder anderweitig einen Befehl ausgibt, 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 Datenberechnungskomponente 401. Wie in 4 dargestellt, beinhaltet die Datenberechnungskomponente 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 Ringregisterpositionen 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 einem „Bereich“ der Ausführungsbahnmatrix zugewiesen werden, der zeilenweise 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 hier Kernoperationen einer Ausführungsbahn die Verarbeitung dieser Bildpunktwerte außerhalb des zweidimensionalen Schieberegisters erfordern, kann Matrix 406 (was einige Bildverarbeitungsroutinen erfordern könnten) die Ebene von Bilddaten des Weiteren zum Beispiel von dem Ringbereich 409 in den Direktzugriffsspeicher 407 überlaufen lassen. 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, auf die 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 einen 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 RI, das Daten aus dem Schieberegister akzeptieren kann, Daten von einer ALU-Ausgabe (z. B. die sich während Zyklen als Akkumulator verhalten) akzeptieren 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 RI ein physisches Register der Ausführungsbahn, während R2 ein physisches Register der zweidimensionalen Schieberegistermatrix ist. Die Ausführungsbahn umfasst eine ALU, die mit Operanden arbeiten kann, die von RI 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 Positionen auf das Paar von Ausführungsbahnpositionen 511 ausgerichtet sind, die in der Ausführungsbahnmatrix 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 dargestellt, sind die Ausführungsbahnen auf deren zentrale Schablonenpositionen zentriert. 5b zeigt den Objektcode, der von beiden Ausführungsbahnen ausgeführt wird. Wie in 5b dargestellt, bewirkt der Programmcode beider Ausführungsbahnen, dass sich die Daten innerhalb der Schieberegistermatrix eine Position nach unten und eine Position nach rechts verschieben. Damit werden beide Ausführungsbahnen an der oberen linken Ecke ihrer jeweiligen Schablonen ausgerichtet. Der Programmcode bewirkt dann, dass die Daten (in R2), die sich an ihren jeweiligen Positionen befinden, in RI geladen werden.
  • Wie in 5c dargestellt, bewirkt der Programmcode als Nächstes, dass das Paar von Ausführungsbahnen die Daten innerhalb der Schieberegistermatrix 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 RI (vorheriger Wert) wird dann zu dem neuen Wert addiert, der auf die Position der Ausführungsbahn (in R2) verschoben wurde. Das Ergebnis wird in RI geschrieben. Wie in 5d dargestellt, wird der gleiche Prozess wie oben für 5c beschrieben wiederholt, wodurch bewirkt wird, dass das Ergebnis RI 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 die obere Reihe ihrer jeweiligen Schablonen verarbeitet. Zu beachten ist der Überlauf in einen Ringbereich auf der linken Seite der Ausführungsbahnmatrix (falls einer auf der linken Seite existiert) oder in einen Direktzugriffsspeicher, wenn auf der linken Seite der Ausführungsbahnmatrix kein Ringbereich existiert.
  • Wie in 5e dargestellt, bewirkt der Programmcode als Nächstes, dass die Daten innerhalb der Schieberegistermatrix eine Einheit nach oben verschoben werden, wodurch bewirkt wird, dass beide Ausführungsbahnen am rechten Rand der mittleren Zeile ihrer jeweiligen Schablonen ausgerichtet sind. Register RI der beiden Ausführungsbahnen beinhaltet derzeit die Summe der oberen Zeile der Schablone und den rechtesten 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 von 5g beide Ausführungsbahnen die Summe der Werte der obersten Reihe und der mittleren Reihe ihrer jeweiligen Schablonen beinhalten.
  • 5h zeigt eine weitere Verschiebung, um jede Ausführungsbahn an der untersten 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 der 5a5k ist zu beachten, dass der Objektcode für Verschiebeoperationen ein Befehlsformat umfassen kann, das die Richtung und die Größe der in den (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, die jeder Position in der Ausführungsbahnmatrix zugeordnet sind, 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 verbunden 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 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 dargestellt, ist zu beachten, dass während einer Verschiebungssequenz eine Ausführungsbahn den Inhalt aus ihrer Registerdatei 602 zu jedem der jeweiligen linken, rechten, oberen und unteren Nachbarn schiebt. In Verbindung mit derselben Verschiebungssequenz verschiebt die Ausführungsbahn zudem den Inhalt in deren Registerdatei von einem bestimmten seiner linken, rechten, oberen und unteren Nachbarn. 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 in einem 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/herein verschoben werden, wenn eine zweite Instanz der in 6a beobachteten 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 verschobenen 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 Direktzugriffsspeicher 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, 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), verbunden. Wie oben beschrieben, können Speicherzugriffsbefehle von der Ausführungsbahn 601 ausgeführt werden, um Daten von/zu ihrem zugehörigen Direktzugriffsspeicher abzurufen/zu speichern. Zudem unterstützt die Hardware-Ausführungsbahn 601 Verschiebungsoperationen (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. Arbeitsweise und Design des Blattgenerators
  • 712 beziehen sich auf besondere Überlegungen und/oder Operationen des Blattgenerators. Wie oben beschrieben, ist ein Blattgenerator für die Erzeugung von Informationsblättern zur Verarbeitung durch einen entsprechenden Schablonenprozessor verantwortlich. Um dem Entwurf des Gesamtprozessors eine breite Vielseitigkeit/Programmierbarkeit zu verleihen, muss der Blattgenerator unter bestimmten Umständen zusätzliche Operationen zum Vorbereiten eines Eingabeblatts über das bloße Parsen geeigneter Abschnitten einer empfangenen Zeilengruppe hinaus ausführen.
  • Wie in 7 ersichtlich ist, wird als Antwort auf eine von der Anwendungssoftware erkannte Anforderung, dass der Kern gleichzeitig Daten von verschiedenen Kanälen verarbeiten muss (was von einem Compiler angedeutet worden sein könnte), der von dem Blattgenerator ausgeführte Programmcode fortfahren, separate Blätter entlang verschiedener „Ebenen“ zu bilden (d. h., ein anderes Blatt von jedem Kanal zu bilden) und diese zusammen in die Datenberechnungseinheit zu laden. Das heißt, der Blattgenerator erzeugt ein R-Blatt, ein B-Blatt und ein G-Blatt für einen gleichen Abschnitt der Matrix und lädt alle drei Blätter in die Berechnungseinheit. Die Ausführungsbahnen innerhalb der Ausführungsbahnmatrix können dann nach Bedarf die R-, G- und B-Blätter verarbeiten (z. B. indem ein R-Blatt in einer Schicht der Registerdatei, ein G-Blatt in der anderen Schicht der Registerdatei und ein B-Blatt in einer noch weiteren Schicht der Registerdatei gespeichert wird).
  • 8 bezieht sich auf die Blatterzeugung für mehrdimensionale Eingabebilder. Hier, obwohl viele Eingabebilder in Form einer einfachen Matrix vorliegen, entspricht in einigen Fällen jede Position der Matrix einem mehrdimensionalen Datenkonstrukt. Als ein veranschaulichendes Beispiel zeigt 8 ein Bild, bei dem jede Matrixposition 27 verschiedene Werte enthält, die verschiedenen Segmenten eines 3×3×3-Würfels entsprechen. Hier, wo jede Matrixposition ein mehrdimensionales Datenkonstrukt aufweist, wird der Blattgenerator die Eingangsmatrix „abrollen“, um ein separates Blatt für jede Datenkonstruktionsdimension zu bilden. Somit erzeugt der Blattgenerator, wie in 8 ersichtlich ist, 27 Blätter (eines für jedes Würfelsegment), wobei jede Matrixposition jedes Blattes über alle Blätter einen skalaren Wert (ein Würfelsegment) enthält. Die 27 Blätter werden dann in den Schablonenprozessor geladen. Der von den Ausführungsbahnen innerhalb der Ausführungsbahnmatrix ausgeführte Programmcode verarbeitet dann die 27 Blätter mit einem Verständnis für die Vorgangsweise, mit der die mehrdimensionale Eingangsmatrix abgerollt wurde.
  • 9 bezieht sich auf eine verwendete Technik, um zu ermöglichen, dass die Ausführungsbahnen innerhalb der Ausführungsbahnmatrix unterschiedliche Datenbitbreiten verarbeiten. Hier wird, wie in der Technik verstanden wird, ein größerer Dynamikbereich durch Erhöhen der Bitbreite der Datenwerte erreicht (ein 16-Bit-Wert kann Werte mit einem größeren Dynamikbereich als ein 8-Bit-Wert ausdrücken). In einer Ausführungsform wird erwartet, dass die Schablonenprozessoren Bilder mit unterschiedlichen Bitbreiten wie 8-, 16- oder 32-Bit-Bildpunktwerte verarbeiten. Als solche sind, nach einem Ansatz, die Ausführungsbahnen selbst 32-Bit-Maschinen in dem Sinne, dass die Ausführungsbahnen intern 32-Bit-Operanden verarbeiten können.
  • Um jedoch die Größe und Komplexität des zweidimensionalen Schieberegisters zu verringern, sind die einzelnen Speicherelemente der Register innerhalb der Registerdatei jeder Ausführungsbahn auf 8 Bit begrenzt. Im Fall von 8-Bit-Bilddaten besteht kein Problem, da ein ganzes Datenblatt in ein Register der Registerdatei passt. Im Gegensatz hierzu erzeugt der Blattgenerator im Fall von 16 oder 32-Bit-Operanden mehrere Blätter, um den Eingangsoperanden-Datensatz entsprechend auszudrücken.
  • Beispielsweise erzeugt der Blattgenerator, wie in 9 dargestellt, im Fall von 16-Bit-Eingangsoperanden ein HI- und ein LO-Halbblatt. Das HI-Halbblatt enthält die oberen 8 Bits jedes Datenelements an der richtigen Matrixposition. Das LO-Halbblatt enthält die unteren 8 Bits jedes Datenelements an der richtigen Matrixposition. 16-Bit-Operationen werden dann ausgeführt, indem beide Blätter in den Schablonenprozessor geladen werden und die Ausführungsbahn-Hardware (z. B. über einen unmittelbaren Wert in dem Programmcode) informiert wird, dass eine 16-Bit-Operation stattfinden soll. Hier werden, als nur eine von vielen möglichen Betriebsarten, sowohl die HI- als ebenfalls die LO-Blätter in zwei verschiedene Register jeder Ausführungsbahn-Registerdatei geladen.
  • Die Ausführungsbahneinheiten sind in der Lage, die korrekten Operanden intern zu erstellen, indem diese zuerst von einer der Registerdateipositionen gelesen werden und die darin enthaltenen Daten mit den Daten, die von einem anderen der Registerdateipositionen gelesen wurden, verbunden werden. Ähnlich müssen die Ausführungsbahneinheiten in Schreibrichtung zwei Schreibvorgänge durchführen. Insbesondere erfolgt ein erstes Schreiben der unteren 8 Bits in ein erstes Register der Registerdatei, die das LO-Blatt enthält, und anschließend erfolgt ein zweites Schreiben der oberen 8 Bits in ein zweites Register der Registerdatei, die das HI-Blatt enthält.
  • Aus der Erläuterung von 12 geht hervor, dass in verschiedenen Ausführungsformen der Inhalt nur eines Registers pro Zyklus verschoben werden darf. Als solches werden, um 16-Bit-Datenwerte in der zweidimensionalen Schieberegisterstruktur zu bewegen, zwei Zyklen pro Verschiebungssequenz (zwischen mathematischen Operationen) anstelle eines Zyklus im Fall von 8-Bit-Datenwerten benötigt. Das heißt, im nominalen Fall von 8-Bit-Datenwerten können alle Daten zwischen den Positionen in einem einzigen Zyklus verschoben werden. Im Gegensatz hierzu müssen bei 16-Bit-Datenwerten (das HI- und dem LO-Halbblatt) zwei 8-Bit-Werte pro Schieberegister-Verschiebungsoperation verschoben werden. In einer Ausführungsform werden im Fall von 32 Bits dieselben Prinzipien angewendet, außer dass vier Blätter anstelle von zwei Blättern zur Darstellung aller Bilddaten erzeugt werden. Dementsprechend können pro Verschiebungssequenz bis zu vier Zyklen erforderlich werden.
  • 10 bezieht sich auf Situationen, in denen der Bildprozessor Eingabebilddaten von einer niedrigeren Dichteauflösung auf eine höhere Dichteauflösung „aufwärts“ abtastet. Hier sind die Schablonenprozessoren für die Erzeugung von mehr Ausgangswerten pro Flächeneinheit eines Bildes verantwortlich, als diese im Eingabebild tatsächlich vorhanden sind. Der Blattgenerator löst das Aufwärtsabtastproblem, indem dieser einen selben Datenwert über ein Blatt wiederholt, sodass die Blattdatenwertdichte dem aufwärts abgetasteten Ausgangsbild (mit höherer Dichte) entspricht. Das heißt beispielsweise in dem Fall, in dem die Ausgangsausführungsbahnmatrixdichte einer 4:1-Aufwärtsabtastung im Hinblick auf die Dichte des Eingabebildes entspricht (vier Ausgabebildpunkte für jeden Eingabebildpunkt), wie in 10 dargestellt, stellt der Blattgenerator für jeden Eingabewert ein Blatt mit vier identischen Werten her.
  • 11 bezieht sich auf die umgekehrte Situation einer „Abwärtsabtastung“. Im Fall der Abwärtsabtastung erzeugt der Blattgenerator mehr Blätter als für ein Eingabebild mit niedrigerer Dichte. Genauer gesagt, falls das Eingabebild eine um den Faktor S höhere Auflösung in einer (z. B. X-)Richtung und eine um den Faktor T höhere Auflösung in der anderen (z. B. Y-)Richtung aufweist, erzeugt der Blattgenerator S·T-Blätter von einem anfänglich dichteren Ursprungsblatt. Dies ordnet jedem einzelnen Ausgabebildpunkt effektiv mehrere Eingabebildpunkte zu.
  • 12 bezieht sich auf Situationen, in denen die durch die Ausführungsbahnen innerhalb der Ausführungsbahnmatrix ausgeführten mathematischen Operationen einen größeren Oberflächenbereich von Bilddaten erfordern als die Größe der zweidimensionalen Schieberegisterstruktur. Wie in 12 ersichtlich ist, entspricht das zur Verarbeitung in die zweidimensionale Schieberegisterstruktur zu ladende Blatt dem schattierten Bereich 1201 eines Eingabeframes. Die die Ausgabewerte für Matrixpositionen innerhalb des schattierten Bereichs berechnenden mathematischen Operationen erfordern jedoch Werte innerhalb des Frames, der durch den gestrichelten Rand 1202, in 12 ersichtlich, begrenzt ist. Somit ist ein großer „Unterstützungsbereich“ außerhalb des Oberflächenbereichs der zweidimensionalen Schieberegisterstruktur, die in den Operationen enthalten sein wird, vorhanden.
  • Unter diesen Bedingungen lädt der Blattgenerator nicht nur ein dem schraffierten Bereich 1201 entsprechendes Blatt in den Schablonenprozessor, sondern lädt ebenfalls die drei (nicht schattierten) benachbarten Blätter in die Datenberechnungseinheit. Der durch die Ausführungsbahnen ausgeführte Programmcode ruft die Blätter nach Bedarf von einem Direktzugriffsspeicher auf und speichert einige oder alle der Blätter in den tieferen Registern der zweidimensionalen Schieberegistermatrix.
  • 13 zeigt eine Ausführungsform des Hardwaredesigns 1300 für den Blattgenerator. Wie in 13 ersichtlich, ist der Blattgenerator in einer Ausführungsform als ein Computersystem implementiert, das einen Prozessor/Controller 1301 aufweist, der den in dem Speicher 1302 gespeicherten Programmcode für Blattgeneratoraufgaben, wie etwa eine der oben in Bezug auf 712 Beschriebenen, ausführt. Der Blattgenerator enthält ebenfalls eine E/A-Einheit 1303 zum Empfangen/Senden von Zeilengruppen von dem/an das Netzwerk und zum Empfangen/Senden von Blättern von dem/an den zugeordneten Schablonenprozessor des Blattgenerators.
  • Ein relevantes Merkmal des Blattgenerators ist sein Konfigurationsbereich 1304, der als separater Registerbereich innerhalb des Blattgenerators (wie in 13 dargestellt) innerhalb des Prozessors/Controllers 1301 und/oder innerhalb des Speichers 1302 implementiert werden kann. Der Konfigurationsbereich 1304 eignet sich für eine breite Anpassungsfähigkeit und Programmierbarkeit der gesamten Plattform. Hier können die in dem Konfigurationsbereich 1304 vorgenommenen Einstellungen, wie beispielsweise relevante Bildmerkmale und Abmessungen wie Framegröße, Zeilengruppengröße, Blattgröße, Eingabebildpunktauflösung, Ausgabebildpunktauflösung usw. umfassen. Der Programmcode innerhalb des Speichers 1302 verwendet dann die Information innerhalb des Konfigurationsbereichs als Eingabevariablen, um korrekte Vorgänge auf Blättern mit richtiger Größe usw. zu bewirken.
  • Alternativ oder in irgendeiner Kombination kann die breite Anpassungsfähigkeit und Programmierbarkeit der Gesamtplattform realisiert werden, indem anwendungsspezifischer Programmcode in den Speicher 1302 für eine bestimmte Anwendung und/oder Bilddimension(en) geladen wird/werden. Hier kann beispielsweise ein Compiler in der Lage sein, leicht auf die X-, Y-Koordinaten des positionsrelativen Adressierungsschemas und/oder auf die Framegröße und die Zeilengruppengröße Bezug nehmen, um Blattgrößen, Blattgrenzen usw. einfach zu bestimmen und um generische Programmcode-Vorlagen in Softwareprogrammen, die spezifisch für den aktuellen Bildverarbeitungsschritt sind, anzupassen. In ähnlicher Weise kann irgendeine derartige Übersetzung und praktische Verwendung der relativen Positionierung oder anderer Bilddimensionen in den Konfigurationsbereich 1304 eingegeben werden, wo der auf dem Blattgenerator vorhandene Programmcode Bestimmungen der Blattgrenzen, Blattgrößen usw. vornimmt.
  • d. Ausführungsformen der 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 Coprozessor) 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 verkörpert werden. Im letzteren Fall können diese Schaltungsbeschreibungen in Form von Beschreibungen auf einer höheren Ebene/Verhaltensebene (z. B. VHDL oder Verilog) oder einer niedrigeren Ebene (wie z. B. einer Registerüberleitungsschaltung(RTL)-, einer Transistorebenen- oder einer Maskenbeschreibung) oder verschiedener Kombinationen derselben, erfolgen. 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 Hardware auf einem Computersystem (z. B. als Teil eines Handgerätsystems on Chip (SOC), das Daten von der Kamera des Handgerätes verarbeitet) verkörpert sein kann. In Fällen, in denen der Bildprozessor als eine 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). Es muss ebenfalls beachtet werden, dass viele der in den vorangehenden Abschnitten beschriebenen Merkmale auf eine Bildprozessoreinheit (zur Darstellung von Animationen) anwendbar sind.
  • 14 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 14 dargestellt, kann das grundlegende Computersystem eine zentrale Verarbeitungseinheit 1401 (die beispielsweise eine Vielzahl von Universal-Verarbeitungskernsystemen 1415_1 bis 1415_N und einen auf einem Multikernprozessor oder einem Anwendungsprozessor angeordneten Hauptspeichercontroller 1417 beinhalten kann), Systemspeicher 1402, eine Anzeige 1403 (z. B. Touchscreen, Flachbildschirm), eine lokal verdrahtete Punkt-zu-Punkt-Verbindungsschnittstelle (z. B. USB) 1404, verschiedene Netzwerk-E/A-Funktionen 1405 (wie z. B. eine Ethernet-Schnittstelle und/oder ein Mobilfunkmodem-Teilsystem), eine drahtlose lokale Netzwerkschnittstelle (z. B. WLAN) 1406, eine drahtlose Punkt-zu-Punkt-Verbindungsschnittstelle (z. B. Bluetooth) 1407 und eine globale Positionierungssystemschnittstelle 1408, verschiedene Sensoren 1409_1 bis 1409_N, eine oder mehrere Kameras 1410, eine Batterie 1414, eine Versorgungsspannungsmanagementsteuereinheit 1412, einen Lautsprecher und ein Mikrofon 1413 sowie einen Audio-Codierer/Decodierer 1414 umfassen.
  • Ein Anwendungsprozessor oder Multikernprozessor 1450 kann einen oder mehrere Universalprozessorkerne 1415 innerhalb seiner CPUs 1401, eine oder mehrere grafische Verarbeitungseinheiten 1416, eine Speicherverwaltungsfunktion 1417 (z. B. einen Speichercontroller), eine E/A-Steuerfunktion 1418 und eine Bildverarbeitungseinheit 1419 umfassen. Die Universalverarbeitungskerne 1415 führen in der Regel das Betriebssystem und die Anwendungssoftware des Computersystems aus. Die Grafikverarbeitungseinheiten 1416 führen in der Regel grafikintensive Funktionen aus, um z. B. Grafikdaten zu erzeugen, die auf der Anzeige 1403 dargestellt werden. Die Speichersteuerfunktion 1417 ist mit dem Systemspeicher 1402 verbunden, um Daten in den Systemspeicher 1402 zu schreiben bzw. aus diesem einzulesen. Die Versorgungsspannungsmanagement 1412 steuert im Allgemeinen die Leistungsaufnahme des Systems 1400.
  • Die Bildverarbeitungseinheit 1419 kann gemäß einer der oben in den vorangehenden Abschnitten beschriebenen Ausführungsformen der Bildverarbeitungseinheit implementiert sein. Alternativ dazu oder in Kombination kann die IPU 1419 mit sowohl der GPU 1416 als auch der CPU 1401 oder mit einer von beiden als Coprozessor derselben gekoppelt sein. Darüber hinaus kann in verschiedenen Ausführungsformen die GPU 1416 mit einem der oben beschriebenen Prozessormerkmale implementiert sein.
  • Die Touchscreen-Anzeige 1403, die Kommunikationsschnittstellen 14041407, die GPS-Schnittstelle 1408, die Sensoren 1409, die Kamera 1410 und der Lautsprecher/Mikrofon-Codec 1413, 1414 können alle als unterschiedliche Formen der E/A (Eingabe bzw. Ausgabe) in Bezug auf das gesamte Rechensystem betrachtet werden, darunter auch gegebenenfalls ein integriertes Peripheriegerät (z. B. die eine oder mehrere Kameras 1410). Je nach Implementierung können verschiedene dieser E/A-Komponenten auf dem Anwendungsprozessor/Multikernprozessor 1450 integriert sein oder sich außerhalb des Chips oder außerhalb des Pakets des Anwendungsprozessors/Multikernprozessors 1450 befinden.
  • In einer Ausführungsform umfasst/umfassen die eine oder mehreren Kameras 1410 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 umfassen. 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. Die vorliegende Erfindung kann beispielsweise als ein Computerprogramm 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 werden kann.
  • In der vorstehenden Spezifikation wurde die Erfindung unter Bezugnahme auf spezifische exemplarische Ausführungsformen derselben 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 (26)

  1. Verfahren, umfassend: Empfangen einer Zeilengruppe von Bilddaten, die mehrere Zeilen von Daten aus einem Frame von Bilddaten enthalten, wobei die mehreren Zeilen in der Anzahl ausreichend sind, um mehrere benachbarte überlagernde Schablonen zu umfassen, Parsen der Zeilengruppe in ein kleineres Blatt, Laden des Blattes in eine zweidimensionale Schieberegisterstruktur, die mit einer Anordnung von Prozessoren gekoppelt ist, und Ausführen eines Programmcodes auf der Prozessormatrix, um die mehreren benachbarten überlagernden Schablonen über das Blatt zu verarbeiten.
  2. Verfahren nach Anspruch 1, wobei sich die benachbarten überlagernden Schablonen sowohl in horizontaler als auch in vertikaler Richtung erstrecken.
  3. Verfahren nach Anspruch 1, ferner umfassend: Parsen der Zeilengruppen von mehr als einem Kanal, Parsen mehr als eines Blattes von den mindestens zwei Kanälen, um mindestens zwei Blätter aus verschiedenen Kanälen zu erzeugen, Laden der mindestens zwei Blätter in die zweidimensionale Verschiebungsmatrixstruktur, Ausführen eines Programmcodes auf der Prozessormatrix, um die mehreren benachbarten überlagernden Schablonen gleichzeitig über die mindestens zwei Blätter zu verarbeiten.
  4. Verfahren nach Anspruch 1, ferner umfassend: Parsen einer Zeilengruppe, deren Frame als eine Matrix mit einem mehrdimensionalen Merkmal an einer Matrixposition des Frames strukturiert ist, Parsen der Zeilengruppe in mehrere Blätter, sodass für jede der verschiedenen Dimensionen des Merkmals ein anderes Blatt vorhanden ist.
  5. Verfahren nach Anspruch 1, wobei die Registermatrix Register mit einer ersten Bitbreite enthält, die kleiner als eine zweite Bitbreite ist, mit der die Prozessoren Daten verarbeiten können, wobei das Verfahren ferner Folgendes umfasst: Empfangen einer Zeilengruppe, deren Datenwerte die zweite Bitbreite besitzen, Erzeugen eines ersten und eines zweiten Blattes von der Zeilengruppe, wobei das erste Blatt Werte der ersten Größe aufweist und einen oberen Teil der Datenwerte enthält, wobei das zweite Blatt Werte der ersten Größe aufweist, die einen unteren Teil der Datenwerte enthält, Laden des ersten und zweiten Blattes in die Schieberegistermatrix, gleichzeitiges Verarbeiten der ersten und zweiten Blätter durch die Prozessormatrix, um die Daten mit der zweiten Bitbreite zu verarbeiten.
  6. Verfahren nach Anspruch 1, wobei das Verfahren ferner die Ausführung einer Aufwärtsabtastung durch das mehrmalige Replizieren eines Datenwertes einer Position der Zeilengruppe an einer entsprechenden Position auf dem Blatt umfasst.
  7. Verfahren nach Anspruch 1, wobei das Verfahren ferner die Ausführung einer Abwärtsabtastung durch Erzeugen eines zweiten Blattes von dem Blatt umfasst, wobei das zweite Blatt eine Dichte von Bildpunktwerten aufweist, die kleiner als die Dichte von Bildpunktwerten des Blattes ist und wobei keine Daten beim Vergleich des Inhalts der Zeilengruppe, die dem Blatt und dem zweiten Blatt zugeordnet ist, verloren gehen.
  8. Verfahren nach Anspruch 1, wobei das Verfahren des Weiteren umfasst: Erkennen, dass die Verarbeitung über den Schablonen mehr Bildfläche erfordert als das Blatt; Parsen mindestens eines weiteren Blattes aus der Zeilengruppe, die dem Blatt benachbart ist, und Laden von mindestens einem weiteren Blatt in den mit den Prozessoren gekoppelten Speicherbereich.
  9. Verfahren nach Anspruch 8, wobei der Speicherbereich die zweidimensionale Verschiebungsmatrix ist.
  10. Verfahren nach Anspruch 1, wobei das Verfahren ferner die Durchführung des Parsens die Ausführung eines Programmcodes auf einem Prozessor und/oder einem Controller umfasst.
  11. Maschinenlesbares Speichermedium, das Programmcode enthält, der bei Verarbeitung durch einen Prozessor bzw. einen Controller bewirkt, dass ein Verfahren ausgeführt wird, das Folgendes umfasst: Empfangen einer Zeilengruppe von Bilddaten, die mehrere Zeilen von Daten aus einem Frame von Bilddaten enthalten, wobei die mehreren Zeilen in der Anzahl ausreichend sind, um mehrere benachbarte überlagernde Schablonen zu umfassen, Parsen der Zeilengruppe in ein kleineres Blatt, Laden des Blattes in eine zweidimensionale Schieberegisterstruktur, die mit einer Anordnung von Prozessoren gekoppelt ist, und Ausführen eines Programmcodes auf der Prozessormatrix, um die mehreren benachbarten überlagernden Schablonen über das Blatt zu verarbeiten.
  12. Maschinenlesbares Speichermedium nach Anspruch 11, wobei sich die benachbarten überlagernden Schablonen sowohl in horizontaler als auch in vertikaler Richtung erstrecken.
  13. Computerlesbares Speichermedium nach Anspruch 11, weiterhin Folgendes umfassend: Parsen der Zeilengruppen von mehr als einem Kanal, Parsen mehr als eines Blattes von den mindestens zwei Kanälen, um mindestens zwei Blätter aus verschiedenen Kanälen zu erzeugen, Laden der besagten mindestens zwei Blätter in die zweidimensionale Verschiebungsmatrixstruktur, Ausführen eines Programmcodes auf der Prozessormatrix, um die mehreren benachbarten überlagernden Schablonen gleichzeitig über die mindestens zwei Blätter zu verarbeiten.
  14. Computerlesbares Speichermedium nach Anspruch 11, weiterhin Folgendes umfassend: Parsen einer Zeilengruppe, deren Frame als eine Matrix mit einem mehrdimensionalen Merkmal an einer Matrixposition des Frames strukturiert ist, Parsen der Zeilengruppe in mehrere Blätter, sodass für jede der verschiedenen Dimensionen des Merkmals ein anderes Blatt vorhanden ist.
  15. Maschinenlesbares Speichermedium nach Anspruch 11, wobei die Registermatrix Register mit einer ersten Bitbreite enthält, die kleiner als eine zweite Bitbreite ist, mit der die Prozessoren Daten verarbeiten können, wobei das Verfahren ferner umfasst: Empfangen einer Zeilengruppe, deren Datenwerte die zweite Bitbreite besitzen, Erzeugen eines ersten und eines zweiten Blattes von der Zeilengruppe, wobei das erste Blatt Werte der ersten Größe aufweist und einen oberen Teil der Datenwerte enthält, wobei das zweite Blatt Werte der ersten Größe aufweist, die einen unteren Teil der Datenwerte enthält, Laden des ersten und zweiten Blattes in die Schieberegistermatrix, gleichzeitiges Verarbeiten der ersten und zweiten Blätter durch die Prozessormatrix, um die Daten mit der zweiten Bitbreite zu verarbeiten.
  16. Maschinenlesbares Speichermedium nach Anspruch 1, wobei das Verfahren ferner die Ausführung einer Aufwärtsabtastung durch das mehrmalige Replizieren eines Datenwertes einer Position der Zeilengruppe an einer entsprechenden Position auf dem Blatt umfasst.
  17. Maschinenlesbares Speichermedium nach Anspruch 11, wobei das Verfahren ferner die Ausführung einer Abwärtsabtastung durch Erzeugen eines zweiten Blattes von dem Blatt umfasst, wobei das zweite Blatt eine Dichte von Bildpunktwerten aufweist, die kleiner als die Dichte von Bildpunktwerten des Blattes ist und wobei keine Daten beim Vergleich des Inhalts der Zeilengruppe, die dem Blatt und dem zweiten Blatt zugeordnet ist, verloren gehen.
  18. Maschinenlesbares Speichermedium nach Anspruch 11, wobei das Verfahren weiterhin Folgendes umfasst: Erkennen, dass die Verarbeitung über die Schablonen mehr Bildfläche erfordert als das Blatt, Parsen mindestens eines weiteren Blattes aus der Zeilengruppe, die dem Blatt benachbart ist, und Laden von mindestens einem weiteren Blatt in den mit den Prozessoren gekoppelten Speicherbereich.
  19. Maschinenlesbares Speichermedium nach Anspruch 18, wobei der Speicherbereich die zweidimensionale Verschiebungsmatrix ist.
  20. Maschinenlesbares Speichermedium nach Anspruch 11, wobei das Verfahren ferner die Durchführung des Parsens durch die Ausführung eines Programmcodes auf einem Prozessor und/oder einem Controller umfasst.
  21. Vorrichtung, umfassend: eine Blattgeneratorschaltung mit einer elektronischen Schaltung zum Empfangen einer Zeilengruppe von Bilddaten, die mehrere Zeilen von Daten aus einem Frame von Bilddaten enthalten, wobei die mehreren Zeilen in der Anzahl ausreichend sind, um mehrere benachbarte überlagernde Schablonen zu umfassen, Parsen besagter Zeilengruppe in ein kleineres Blatt, Laden des Blattes in eine Datenberechnungseinheit mit einer zweidimensionalen Verschiebungsmatrixstruktur, die mit einer Prozessormatrix gekoppelt ist.
  22. Vorrichtung nach Anspruch 21, wobei sich die benachbarten überlagernden Schablonen sowohl in horizontaler als ebenfalls in vertikaler Richtung erstrecken.
  23. Vorrichtung nach Anspruch 21, wobei die elektronische Schaltung ferner Folgendes umfasst: Parsen der Zeilengruppen von mehr als einem Kanal; Parsen mehr als eines Blattes von den mindestens zwei Kanälen, um mindestens zwei Blätter aus verschiedenen Kanälen zu erzeugen; Laden der mindestens zwei Blätter in die Datenberechnungseinheit.
  24. Vorrichtung nach Anspruch 21, wobei die elektronische Schaltung Folgendes umfasst: Empfangen einer Zeilengruppe, deren Datenwerte die zweite Bitbreite besitzen Erzeugen eines ersten und eines zweiten Blattes von der Zeilengruppe, wobei das erste Blatt Werte der ersten Größe aufweist und einen oberen Teil der Datenwerte umfasst, wobei das zweite Blatt Werte der ersten Größe aufweist, die einen unteren Teil der Datenwerte umfasst; Laden des ersten und zweiten Blattes in die Datenberechnungseinheit.
  25. Vorrichtung nach Anspruch 21, wobei die elektronische Schaltung eine Aufwärtsabtastung durch das mehrmalige Replizieren eines Datenwerts aus einer Position der Zeilengruppe an einer entsprechenden Position auf dem Blatt ausführen muss.
  26. Vorrichtung nach Anspruch 21, wobei die elektronische Schaltung eine Abwärtsabtastung durch Erzeugen eines zweiten Blattes aus dem Blatt ausführen muss, wobei das zweite Blatt eine Dichte von Bildpunktwerten aufweist, die kleiner als die Dichte von Bildpunktwerten des Blattes ist und wobei keine Daten verloren gehen, wenn der Inhalt der Zeilengruppe, die auf dem Blatt und dem zweiten Blatt abgebildet ist, verglichen wird.
DE112016001835.5T 2015-04-23 2016-04-04 Blattgenerator für Bildprozessor Pending DE112016001835T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/694,806 US10291813B2 (en) 2015-04-23 2015-04-23 Sheet generator for image processor
US14/694,806 2015-04-23
PCT/US2016/025895 WO2016171882A1 (en) 2015-04-23 2016-04-04 Sheet generator for image processor

Publications (1)

Publication Number Publication Date
DE112016001835T5 true DE112016001835T5 (de) 2018-02-15

Family

ID=55858888

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016001835.5T Pending DE112016001835T5 (de) 2015-04-23 2016-04-04 Blattgenerator für Bildprozessor

Country Status (7)

Country Link
US (4) US10291813B2 (de)
EP (1) EP3286725B1 (de)
JP (2) JP6563512B2 (de)
KR (2) KR20170125393A (de)
CN (2) CN107438861B (de)
DE (1) DE112016001835T5 (de)
WO (1) WO2016171882A1 (de)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10291813B2 (en) * 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US20180005059A1 (en) 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US20180005346A1 (en) * 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
KR20180012439A (ko) * 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10789202B2 (en) * 2017-05-12 2020-09-29 Google Llc Image processor with configurable number of active cores and supporting internal network
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions

Family Cites Families (93)

* 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
US4835712A (en) 1986-04-14 1989-05-30 Pixar Methods and apparatus for imaging volume data with shading
JP2554255B2 (ja) 1987-03-23 1996-11-13 旭光学工業株式会社 フイルタリング装置
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
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
US6049859A (en) 1996-01-15 2000-04-11 Siemens Aktiengesellschaft Image-processing processor
US6031573A (en) 1996-10-31 2000-02-29 Sensormatic Electronics Corporation Intelligent video information management system performing multiple functions in parallel
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6661421B1 (en) 1998-05-21 2003-12-09 Mitsubishi Electric & Electronics Usa, Inc. Methods for operation of semiconductor memory
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
AU2941600A (en) 1999-03-16 2000-10-04 Hamamatsu Photonics K.K. High-speed vision sensor
US7792298B2 (en) 1999-06-30 2010-09-07 Silverbrook Research Pty Ltd Method of using a mobile device to authenticate a printed token and output an image associated with the token
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
US6986025B2 (en) 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
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
JP2004013873A (ja) 2002-06-03 2004-01-15 Sony Corp 画像処理装置
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
GB2398446B (en) 2003-02-12 2006-06-07 Snell & Wilcox Ltd Image processing
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
KR100614647B1 (ko) * 2004-07-02 2006-08-22 삼성전자주식회사 디블록킹 필터에서의 효과적인 에지 필터링 연산을 위한레지스터 어레이 구조
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
WO2006114642A1 (en) 2005-04-28 2006-11-02 The University Court Of The University Of Edinburgh Reconfigurable instruction cell 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
JP2007304803A (ja) 2006-05-10 2007-11-22 Fuji Xerox Co Ltd 画像処理装置
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
US8068114B2 (en) 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
JP2009021459A (ja) 2007-07-13 2009-01-29 Fuji Xerox Co Ltd 面発光型半導体レーザの駆動方法および光伝送モジュール
JP4844853B2 (ja) 2007-09-05 2011-12-28 国立大学法人東北大学 固体撮像素子及びその駆動方法
JP4917561B2 (ja) 2008-03-18 2012-04-18 株式会社リコー 画像処理装置
WO2009145917A1 (en) 2008-05-30 2009-12-03 Advanced Micro Devices, Inc. Local and global data share
US8098894B2 (en) 2008-06-20 2012-01-17 Yahoo! Inc. Mobile imaging device as navigator
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8332794B2 (en) 2009-01-22 2012-12-11 Taiwan Semiconductor Manufacturing Company, Ltd. Circuits and methods for programmable transistor array
WO2010093828A1 (en) * 2009-02-11 2010-08-19 Quartics, Inc. Front end processor with extendable data path
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
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
JP2011165132A (ja) * 2010-02-15 2011-08-25 Seiko Epson Corp 画像処理装置、画像処理回路、及び画像処理方法
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
CN101968851B (zh) * 2010-09-09 2012-08-08 西安电子科技大学 基于字典学习上采样的医学影像处理方法
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8736695B2 (en) * 2010-11-12 2014-05-27 Qualcomm Incorporated Parallel image processing using multiple processors
CN102572207B (zh) * 2010-12-30 2014-05-14 无锡华润矽科微电子有限公司 一种适于jpeg图像的颜色空间转换方法
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
WO2012105174A1 (ja) 2011-01-31 2012-08-09 パナソニック株式会社 プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
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
US9641866B2 (en) 2011-08-18 2017-05-02 Qualcomm Incorporated Applying partition-based filters
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
CN102685439A (zh) * 2012-05-28 2012-09-19 上海海事大学 一种使用fpga实现图像数据传输控制的装置及方法
US20140019486A1 (en) 2012-07-13 2014-01-16 Amitava Majumdar Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
CN103179408B (zh) * 2012-11-27 2016-01-06 上海高清数字科技产业有限公司 一种解决色度上采样错误的系统和方法
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
US9851977B2 (en) * 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9058673B2 (en) 2013-03-15 2015-06-16 Oracle International Corporation Image mosaicking using a virtual grid
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US9589175B1 (en) * 2014-09-30 2017-03-07 Amazon Technologies, Inc. Analyzing integral images with respect to Haar features
US9818166B2 (en) 2015-01-16 2017-11-14 Intel Corporation Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10291813B2 (en) * 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US10310998B2 (en) * 2015-06-30 2019-06-04 Microsoft Technology Licensing, Llc Direct memory access with filtering

Also Published As

Publication number Publication date
US10560598B2 (en) 2020-02-11
JP2019215887A (ja) 2019-12-19
US20170257515A1 (en) 2017-09-07
WO2016171882A1 (en) 2016-10-27
CN112967169B (zh) 2022-06-03
JP6793228B2 (ja) 2020-12-02
US20160316094A1 (en) 2016-10-27
US10284744B2 (en) 2019-05-07
EP3286725A1 (de) 2018-02-28
CN107438861B (zh) 2021-02-26
EP3286725B1 (de) 2021-10-06
KR20200021003A (ko) 2020-02-26
US20200186667A1 (en) 2020-06-11
JP6563512B2 (ja) 2019-08-21
CN107438861A (zh) 2017-12-05
US11140293B2 (en) 2021-10-05
KR20170125393A (ko) 2017-11-14
US10291813B2 (en) 2019-05-14
US20190208075A1 (en) 2019-07-04
CN112967169A (zh) 2021-06-15
KR102146515B1 (ko) 2020-08-21
JP2018513474A (ja) 2018-05-24

Similar Documents

Publication Publication Date Title
DE112016001835T5 (de) Blattgenerator für Bildprozessor
DE112016001837T5 (de) Architektur für leistungseffiziente und programmierbare hochleistungs-bildverarbeitung
DE102017113733B4 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE202017101012U1 (de) Compilerverwalteter Speicher für Bildprozessor
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE112016001844T5 (de) Zweidimensionale Verschiebungsmatrix für Bildprozessor
DE102017113735B4 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE202017103725U1 (de) Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE202017103727U1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität
DE112005003265T5 (de) Registerdateibereiche für ein Verarbeitungssystem
DE102022119386A1 (de) Verfahren und einrichtung zum durchführen einer dichten vorhersage unter verwendung von transformatorblöcken
DE112013004783T5 (de) Durch Lese- und Schreibmasken gesteuerter Vektor-Verschiebebefehl
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102014119038A1 (de) Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE112011103211T5 (de) Auf einem Halbleiterchip implementierte vektorlogische Reduktionsoperation
DE102018131816A1 (de) Bedarfsgesteuerte speicherdeduplizierung
DE102016125846A1 (de) Makro-E/A-Einheit für Grafikprozessor
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
DE2458286A1 (de) Datenverarbeitungssystem zum verschieben von datenfeldern mit verschiedenen strukturen
DE102013017514A1 (de) Arbeitserzeugung für grafische verarbeitungseinheit auf basis von arbeitswarteschlangen
DE112020005617T5 (de) Simd-operand permutation mit auswahl von mehreren registern

Legal Events

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

Representative=s name: PROCK, THOMAS, DR., GB

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

R082 Change of representative

Representative=s name: PROCK, THOMAS, DR., GB

R082 Change of representative

Representative=s name: PROCK, THOMAS, DR., GB

R016 Response to examination communication