DE102017113735B4 - Statistische Operationen auf einem zweidimensionalen Bildprozessor - Google Patents

Statistische Operationen auf einem zweidimensionalen Bildprozessor Download PDF

Info

Publication number
DE102017113735B4
DE102017113735B4 DE102017113735.1A DE102017113735A DE102017113735B4 DE 102017113735 B4 DE102017113735 B4 DE 102017113735B4 DE 102017113735 A DE102017113735 A DE 102017113735A DE 102017113735 B4 DE102017113735 B4 DE 102017113735B4
Authority
DE
Germany
Prior art keywords
column
sequence
content
execution
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102017113735.1A
Other languages
English (en)
Other versions
DE102017113735A1 (de
Inventor
Edward Chang
Daniel Frederic Finchelstein
Szepo Robert Hung
Albert Meixner
Ofer Shacham
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 DE102017113735A1 publication Critical patent/DE102017113735A1/de
Application granted granted Critical
Publication of DE102017113735B4 publication Critical patent/DE102017113735B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/16Constructional details or arrangements
    • G06F1/20Cooling means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/40Image enhancement or restoration using histogram techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Multimedia (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Computing Systems (AREA)
  • Image Processing (AREA)

Abstract

Ein Verfahren wird beschrieben, das ein Laden einer Matrix von Inhalten in ein zweidimensionales Schieberegister beinhaltet. Das zweidimensionale Schieberegister ist mit einer Ausführungsbahnmatrix verbunden. Das Verfahren beinhaltet, wiederholt eine erste Sequenz durchzuführen, die Folgendes beinhaltet: Verschieben, mit dem Schieberegister, von ersten Inhalten, die entlang einer bestimmten Zeile oder Spalte residieren, in eine andere, parallele Zeile oder Spalte, in der sich zweite Inhalte befinden, und Durchführen von mathematischen Operationen mit einer bestimmten entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte. Das Verfahren beinhaltet zudem, wiederholt eine zweite Sequenz durchzuführen, die Folgendes beinhaltet: Verschieben mit dem Schieberegister von Inhalten von einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte. Die resultierende Zeile oder Spalte weist Werte auf, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden. Die zweite Sequenz beinhaltet des Weiteren ein Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz von ersten Positionen und entsprechende Inhaltselemente aus dem Satz von zweiten Positionen mit der Ausführungsbahnmatrix.

Description

  • GEBIET DER ERFINDUNG
  • Die Beschreibung bezieht sich im Allgemeinen auf die Bildverarbeitung und noch spezifischer auf statistische Operationen auf einem zweidimensionalen Bildprozessor.
  • ALLGEMEINER STAND DERTECHNIK
  • Die Bildverarbeitung beinhaltet in der Regel die Verarbeitung von Bildpunktwerten, die in einer Matrix angeordnet sind. Hierbei erfasst eine räumlich angeordnete zweidimensionale Matrix die zweidimensionale Beschaffenheit der Bilder (zusätzliche Dimensionen können unter anderem Zeit (z. B. eine Sequenz von zweidimensionalen Bildern) und Datentyp (z. B. Farben) einschließen). In einem typischen Szenario werden die geordneten Bildpunktwerte von einer Kamera bereitgestellt, die ein Standbild oder eine Folge von Frames erzeugt hat, um Bewegungsbilder zu erfassen. Herkömmliche Bildprozessoren fallen in der Regel unter eines von zwei Extremen.
  • Ein erstes Extrem führt Bildverarbeitungsschritte als Softwareprogramme aus, die auf einem Universalprozessor oder einem universell verwendbaren Prozessor (z. B. einem Universalprozessor mit Vektorbefehlserweiterungen) ausgeführt werden. Obwohl das erste Extrem in der Regel eine vielseitig einsetzbare Anwendungssoftware-Entwicklungsplattform bereitstellt, resultiert dessen Verwendung feinerer Datenstrukturen kombiniert mit den zugehörigen Verwaltungsdaten (z. B. Befehlsabruf und -dekodierung, Handhabung von chipinternen und chipexternen Daten, spekulative Ausführung) letztendlich in einem Verbrauch größerer Energiemengen pro Dateneinheit während der Ausführung des Programmcodes.
  • Ein zweites, entgegengesetztes Extrem wendet stationäre, fest verdrahtete Schaltkreise auf viel größere Datenblöcke an. Die Verwendung von größeren (im Gegensatz zu feineren) Datenblöcken, die direkt auf benutzerdefinierte Schaltkreise angewendet werden, verringert den Energieverbrauch pro Dateneinheit erheblich. Jedoch führt die Verwendung von benutzerdefinierten stationären Funktionsschaltkreisen im Allgemeinen zu einer begrenzten Menge von Arbeitsschritten, die von dem Prozessor ausgeführt werden können. Dementsprechend fehlt im zweiten Extrem die vielseitige Programmierumgebung (die mit dem ersten Extrem assoziiert ist).
  • Eine Technologieplattform, die sowohl vielseitige Anwendungssoftware-Entwicklungsmöglichkeiten als auch eine verbesserte Energieeffizienz pro Dateneinheit bietet, bleibt eine wünschenswerte und dennoch fehlende Lösung.
  • Hameed, Rehan offenbart in seiner Doktorarbeit für Stanford University in 2013 „Balancing Efficiency and Flexibility in Specialized Computing“.
  • US 5 093 871 A offenbart eine Vorrichtung zum Verarbeiten digitalisierter Bilder, die nützliche Bilderzeugungsdaten und Hintergrund enthalten. Die Vorrichtung weist ein Hintergrundunterdrückungsschema auf, das verwendet wird, um jeden Pixelwert in vorgewählte Werte in einem kleineren Bereich umzuwandeln, um die Datenverarbeitung wie Komprimierung und Skalierung zu erleichtern. Es ist vorgesehen, einen adaptiven oder dynamischen Schwellenwert sowie einen wesentlich stabileren Hintergrundreferenzschwellenwert zu erzeugen.
  • KURZDARSTELLUNG
  • Ein Verfahren wird beschrieben, das das Laden einer Matrix von Inhalten in ein zweidimensionales Schieberegister beinhaltet. Das zweidimensionale Schieberegister ist mit einer Ausführungsbahnmatrix verbunden. Das Verfahren schließt in sich, eine erste Sequenz wiederholt durchzuführen, die Folgendes beinhaltet: Verschieben mit dem Schieberegister von ersten Inhalten, die entlang einer bestimmten Zeile oder Spalte angeordnet sind, in eine andere, parallele Zeile oder Spalte, entlang welcher zweite Inhalte angeordnet sind, und Durchführen von mathematischen Operationen mit einer bestimmten, entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte. Das Verfahren schließt zudem in sich, eine zweite Sequenz wiederholt durchzuführen, die Folgendes beinhaltet: Verschieben mit dem Schieberegister von Inhalten aus einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz ist, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte. Die resultierende Zeile oder Spalte besitzt Werte, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden. Die zweite Sequenz beinhaltet des Weiteren ein Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz erster Positionen und jeweilige Inhaltselemente aus dem Satz zweiter Positionen mit der Ausführungsbahnmatrix.
  • Ein Apparat wird beschrieben, der Mittel zum Durchführen der oben genannten ersten Sequenz und der oben genannten zweiten Sequenz besitzt.
  • Figurenliste
  • Die folgende Beschreibung und begleitenden Zeichnungen dienen dazu, verschiedene Ausführungsformen 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 überlappenden Schablonen durchgeführte Operation;
    • 3 zeigt eine Ausführungsform eines Schablonenprozessors;
    • 4 zeigt eine Ausführungsform einer Datenberechnungseinheit innerhalb eines Schablonen prozessors;
    • 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 überlappenden Schablonen zu bestimmen;
    • 6 zeigt eine Ausführungsform einer Einheitszelle für eine integrierte Ausführungsbahnmatrix und eine zweidimensionale Verschiebungsmatrix;
    • 7 zeigt Abschnitte innerhalb eines Frames;
    • 8 zeigt die Rasterverarbeitung über Abschnittsgrenzen hinweg;
    • 9 zeigt die Verarbeitung über Blattgrenzen hinweg;
    • 10 zeigt die Verarbeitung über Abschnitts- und Blattgrenzen hinweg mit assoziiertem kontextuellen Umschalten;
    • 11 zeigt akkumulierte Werte innerhalb einer zweidimensionalen Schieberegistermatrix;
    • 12a bis 12e zeigen einen Reduktionsvorgang;
    • 12f zeigt die Fensterstatistik-Verfolgung;
    • 13 zeigt die Arbeitsspeicher eines Schablonenprozessors, die Gruppen von Ausführungsbahnen zugeordnet werden;
    • 14 zeigt ein Histogramm;
    • 15a zeigt die Zuordnung von Speicherplatz nach Ausführungsbahn;
    • 15b zeigt eine zusammengeführte Zuordnung von Speicherplatz pro Ausführungsbahn;
    • 16 zeigt erste und zweite Gruppen von Ausführungsbahnen, die ersten und zweiten zusammengeführten Speicherplatzbereichen zugeordnet werden;
    • 17a bis 17c zeigen einen Histogramm-Reduktionsvorgang;
    • 18a und 18b zeigen einen Mechanismus zur Vergrößerung eines Histogramms;
    • 19 zeigt ein integriertes Kamerasystem und -prozessor;
    • 20 zeigt ein statistisches Verfahren, das von einer zweidimensionalen Schieberegistermatrix durchgeführt wird;
    • 21 zeigt ein Computersystem.
  • AUSFÜHRLICHE BESCHREIBUNG
  • a. Bildprozessor-Hardware-Architektur und -Betrieb
  • 1 zeigt eine Ausführungsform einer Architektur 100 für einen in Hardware implementierten Bildprozessor. Der Bildprozessor kann z. B. von einem Compiler angesteuert werden, der den Programmcode, der für einen virtuellen Prozessor geschrieben wurde, in einer simulierten Umgebung in Programmcode umwandelt, der von dem Hardwareprozessor tatsächlich ausgeführt wird. Wie in 1 ersichtlich, beinhaltet die Architektur 100 eine Vielzahl von Zeilenpuffereinheiten 101_1 bis 101_M (nachfolgend „Zeilenpuffer“, „Zeilenpuffereinheiten“ oder dergleichen), die mit einer Vielzahl von Schablonenprozessoren 102_1 bis 102_N (nachfolgend „Schablonenprozessor“, „Schablonenprozessoreinheiten“ oder dergleichen) und entsprechenden Blattgeneratoreinheiten 103_1 bis 103_N (nachfolgend „Blattgeneratoren“, „Blattgeneratoreinheiten“ oder dergleichen) durch ein Netzwerk 104 (z. B. ein Network on Chip (NOC) inklusive eines On-Chip-Schalternetzwerks, eines On-Chip-Ringnetzwerks oder einer anderen Art von Netzwerk) miteinander verbunden sind. In einer Ausführungsform kann jede Zeilenpuffereinheit mit jedem Blattgenerator und einem entsprechenden Schablonenprozessor über das Netzwerk 104 verbunden sein.
  • In einer Ausführungsform wird der Programmcode kompiliert und auf einen entsprechenden Schablonenprozessor 102 geladen, um die zuvor von einem Softwareentwickler definierten Bildverarbeitungsoperationen auszuführen (der Programmcode kann je nach Design und Implementierung auch auf den zugehörigen Blattgenerator des Schablonenprozessors 103 geladen werden). In zumindest einigen Fällen kann eine Bildverarbeitungspipeline realisiert werden, indem ein erstes Kernprogramm für eine erste Pipelinephase in einen ersten Schablonenprozessor 102_1 geladen, ein zweites Kernprogramm für eine zweite Pipelinephase in einen zweiten Schablonenprozessor 102_2 , geladen wird usw., wobei das erste Kernsystem die Funktionen der ersten Pipelinephase durchführt, das zweite Kernsystem die Funktionen der zweiten Pipelinephase durchführt usw., und zusätzliche Steuerablaufverfahren installiert werden, um Ausgabebilddaten von einer Pipelinephase zur nächsten Pipelinephase zu leiten.
  • In anderen Konfigurationen kann der Bildprozessor als eine parallele Maschine realisiert sein, die zwei oder mehr Schablonenprozessoren 102_1, 102_2 aufweist, die auf demselben Kernprogrammcode betrieben werden. Zum Beispiel kann ein hochgradig dichter und hoher Datenratenstrom von Bilddaten verarbeitet werden, indem Frames über mehrere Schablonenprozessoren verteilt werden, von denen jeder dieselbe Funktion ausführt.
  • In noch anderen Konfigurationen kann im Wesentlichen jeder gerichtete, azyklische Graph (DAG) von Kernsystemen auf den Hardwareprozessor geladen werden, indem jeweilige Schablonenprozessoren mit deren eigenen jeweiligen Kernsystemprogrammcodes konfiguriert und geeignete Steuerablauf-Hooks in die Hardware konfiguriert werden, um Ausgabebilder von einem Kernsystem an den Eingang eines nächsten Kernsystems in der DAG-Konstruktion zu leiten.
  • Bei einem allgemeinen Ablauf werden die Frames der Bilddaten von einer Makro-E/A-Einheit 105 empfangen und zu einer oder mehreren der Zeilenpuffereinheiten 101 auf einer Frame-per-Frame-Basis übermittelt. Eine bestimmte Zeilenpuffereinheit parst ihren Frame aus Bilddaten in einen kleineren Bereich von Bilddaten, der als „Zeilengruppe“ bezeichnet wird, und führt dann die Zeilengruppe durch das Netzwerk 104 zu einem bestimmten Blattgenerator. Eine vollständige oder „volle“ singuläre Zeilengruppe kann sich beispielsweise aus den Daten mehrerer zusammenhängender vollständiger Zeilen oder Spalten eines Frames zusammensetzen (der Kürze halber bezieht sich die vorliegende Beschreibung hauptsächlich auf zusammenhängende Zeilen). Der Blattgenerator parst ferner die Zeilengruppe von Bilddaten in einen kleineren Bereich von Bilddaten, der als „Blatt“ bezeichnet wird, und präsentiert das Blatt seinem entsprechenden Schablonenprozessor.
  • Im Falle einer Bildverarbeitungspipeline oder eines DAG-Ablaufs mit einem einzigen Eingang werden im Allgemeinen Eingabeframes an die gleiche Zeilenpuffereinheit 101_1 geleitet, die die Bilddaten in Zeilengruppen parst und die Zeilengruppen zu dem Blattgenerator 103_1 leitet, dessen entsprechender Schablonenprozessor 102_1 den Code des ersten Kernsystems in der Pipeline/dem DAG ausführt. Nach Beendigung der Operationen durch den Schablonenprozessor 102_1 an den von ihm verarbeiteten Zeilengruppen sendet der Blattgenerator 103_1 Ausgabezeilengruppen an eine „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 „Abnehmerkernsysteme“, die die nächste Phase/Operation in der Pipeline/dem DAG darstellen, die auf deren eigenen jeweiligen anderen Blattgenerator und Schablonenprozessor (z. B. Blattgenerator 103_2 und Schablonenprozessor 102_2 ) ausgeführt werden, empfangen anschließend die von dem ersten Schablonenprozessor 102_1 erzeugten Bilddaten von der nachgelagerten Zeilenpuffereinheit 101_2 . Auf diese Weise werden die Ausgabedaten eines „Erzeugerkernsystems“, das auf einem ersten Schablonenprozessor betrieben wird, an ein „Abnehmerkernsystem“ weitergeleitet, das auf einem zweiten Schablonenprozessor betrieben wird, wobei das Abnehmerkernsystem nach dem Erzeugerkernsystem den nächsten Satz von Arbeitsschritten gemäß des Designs der gesamten Pipeline oder des DAGs ausführt.
  • Ein Schablonenprozessor 102 ist dafür ausgelegt, gleichzeitig an mehreren sich überschneidenden Schablonen von Bilddaten zu arbeiten. Die mehreren sich überschneidenden Schablonen und die interne Hardwareverarbeitungskapazität des Schablonenprozessors bestimmen effektiv die Größe eines Blattes. Hier arbeiten innerhalb eines Schablonenprozessors 102 Matrizen von Ausführungsbahnen zusammen, um gleichzeitig den Bilddatenoberflächenbereich zu bearbeiten, der von den mehreren sich überschneidenden Schablonen bedeckt ist.
  • Wie nachstehend näher beschrieben, werden in verschiedenen Ausführungsformen, Bilddatenblätter in eine zweidimensionale Registermatrixstruktur innerhalb der Schablonenprozessoreinheiten 102 geladen. Es wird davon ausgegangen, dass die Verwendung von Blättern und die zweidimensionale Registermatrixstruktur für effektive Energieverbrauchsverbesserungen sorgen, indem eine große Datenmenge in einen großen Registerbereich verschoben 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 verbunden ist.
  • 2a zeigt eine Ausführungsform eines Eingabeframes der Bilddaten 201. 2a zeigt zudem einen Umriss drei sich überschneidender Schablonen 202 (die Schablonen weisen jeweils eine Abmessung von 3 Bildpunkten mal 3 Bildpunkten auf), für deren Betrieb ein Schablonenprozessor ausgelegt ist. Der Ausgabebildpunkt, für den jede Schablone jeweils die Ausgabebilddaten erzeugt, wird in schwarzer Farbe hervorgehoben. Der Kürze halber werden die drei sich überschneidenden Schablonen 202 nur in vertikaler Richtung als überschneidend gezeigt. Es ist relevant, zu erkennen, dass ein Schablonenprozessor in Wirklichkeit so ausgelegt sein kann, dass dieser sowohl in vertikaler als auch in horizontaler Richtung sich überschneidende Schablonen aufweist.
  • Aufgrund der sich vertikal überschneidenden Schablonen 202 innerhalb des Schablonenprozessors, wie in 2a dargestellt, gibt es ein breites Band von Bilddaten innerhalb des Frames, das von einem einzelnen Schablonenprozessor bearbeitet werden kann. Wie nachfolgend näher beschrieben, verarbeiten die Schablonenprozessoren in einer Ausführungsform innerhalb ihrer sich überschneidenden Schablonen Daten von links nach rechts über sämtliche Bilddaten (und wiederholen den Vorgang dann für die nächste Gruppe von Zeilen in der Reihenfolge von oben nach unten). Somit nimmt, während die Schablonenprozessoren mit ihrer Operation fortfahren, die Anzahl der schwarzen Ausgabebildpunktblöcke horizontal nach rechts zu. Wie oben erwähnt, ist eine Zeilenpuffereinheit 101 für das Parsen einer Zeilengruppe von Eingabebilddaten aus einem eingehenden Frame verantwortlich, der für die Schablonenprozessoren ausreichend ist, um eine erweiterte Anzahl anstehender Zyklen zu bearbeiten. Eine exemplarische Darstellung einer Zeilengruppe ist als schattierter Bereich 203 dargestellt. In einer Ausführungsform kann die Zeilenpuffereinheit 101 unterschiedliche Dynamiken zum Senden/Empfangen einer Zeilengruppe an einen/von einem Blattgenerator umfassen. Beispielsweise werden gemäß einem Modus, der als „vollständige Gruppe“ bezeichnet wird, die gesamten Bilddatenzeilen mit voller Breite zwischen einer Zeilenpuffereinheit und einem Blattgenerator übermittelt. Gemäß einem zweiten Modus, der als „virtuell groß“ bezeichnet wird, wird eine Zeilengruppe zunächst mit einer Teilmenge von Zeilen mit voller Breite übermittelt. Die verbleibenden Zeilen werden dann nacheinander in kleineren Stücken (mit weniger als voller Breite) übermittelt.
  • Wenn die Zeilengruppe 203 der Eingabebilddaten durch die Zeilenpuffereinheit definiert und an die Blattgeneratoreinheit übermittelt worden ist, parst die Blattgeneratoreinheit die Zeilengruppe ferner in feinere Blätter, die an die Hardwarebeschränkungen des Schablonenprozessors präziser angepasst sind. Insbesondere wird in einer Ausführungsform, wie nachfolgend näher beschrieben, jeder Schablonenprozessor aus einer zweidimensionalen Schieberegistermatrix gebildet. Die zweidimensionale Schieberegistermatrix verschiebt im Wesentlichen Bilddaten „unterhalb“ einer Matrix von Ausführungsbahnen, wobei das Muster der Verschiebung bewirkt, dass jede Ausführungsbahn innerhalb ihrer eigenen jeweiligen Schablone Daten bearbeitet (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 von fünf mal fünf, der im Allgemeinen mit der Bezugsnummer 204 gekennzeichnet ist). Wie in 2c und 2d dargestellt, arbeitet der Schablonenprozessor an dem Blatt der eingegebenen Bilddaten durch effektives Bewegen der sich überschneidenden Schablonen 202 von links nach rechts über das Blatt. Wie in 2d ist die Anzahl der Bildpunkte, für die ein Ausgabewert aus den Daten innerhalb des Blattes berechnet werden könnte (neun in einer schattierten Matrix von 3 mal 3), erschöpft (keine anderen Bildpunktpositionen können einen Ausgabewert haben, der aus den Informationen innerhalb des Blattes bestimmt wird). Zur Vereinfachung wurden die Randbereiche des Bildes ignoriert.
  • Wie in 2e ersichtlich, liefert der Blattgenerator dann ein nächstes Blatt 205 für den Schablonenprozessor, um die Operationen fortzusetzen. Zu beachten ist, dass die Anfangspositionen der Schablonen, wenn sie mit der Operation an dem nächsten Blatt beginnen, der nächsten Progression (wie zuvor in 2d dargestellt) vom Erschöpfungspunkt nach rechts auf dem ersten Blatt entsprechen. Mit dem neuen Blatt 205 bewegen sich die Schablonen einfach weiter nach rechts, während der Schablonenprozessor auf dem neuen Blatt auf die gleiche Weise arbeitet wie bei der Verarbeitung des ersten Blattes.
  • Zu beachten ist, dass zwischen den Daten des ersten Blattes 204 und den Daten des zweiten Blattes 205 aufgrund der Randbereiche der Schablonen, die 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
  • 3 zeigt eine Ausführungsform einer Schablonenprozessoreinheitsarchitektur 300 . Wie in 3 ersichtlich, beinhaltet der Schablonenprozessor eine Datenberechnungseinheit 301, einen Skalarprozessor 302 und einen zugehörigen Speicher 303 , sowie eine E-/A-Einheit 304 . Die Datenberechnungseinheit 301 beinhaltet eine Matrix von Ausführungsbahnen 305 , eine zweidimensionale Verschiebungsmatrixstruktur 306 und jeweilige separate Arbeitsspeicher 307 , die mit bestimmten Zeilen oder Spalten der Matrix verbunden sind.
  • Die E-/A-Einheit 304 ist verantwortlich für das Laden von „eingegebenen“ Datenblättern, die von dem Blattgenerator empfangen wurden, in die Datenberechnungseinheit 301, sowie das Speichern der von dem Schablonenprozessor „ausgegebenen“ Blätter im Blattgenerator. In einer Ausführungsform umfasst das Laden von Blattdaten in die Datenberechnungseinheit 301 das Parsen eines empfangenen Blattes in die Zeilen/Spalten der Bilddaten, sowie das Laden der Zeilen/Spalten der Bilddaten in die zweidimensionale Schieberegisterstruktur 306 oder in die jeweiligen Arbeitsspeicher 307 der Zeilen/Spalten der Ausführungsbahnmatrix (wie nachfolgend näher beschrieben). Wird das Blatt anfänglich in die Speicher 307 geladen, können die einzelnen Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305 dann die Blattdaten, sofern geeignet (z. B. als Ladebefehl kurz vor der Operation der Blattdaten), in die zweidimensionale Schieberegisterstruktur 306 der Arbeitsspeicher 307 laden. Nach Beendigung des Ladens eines Datenblattes in die Registerstruktur 306 (ob direkt aus einem Blattgenerator oder aus den Speichern 307 ) arbeiten die Ausführungsbahnen der Ausführungsbahnmatrix 305 an den Daten und „schreiben“ die fertigen Daten letztendlich als ein Blatt direkt „zurück“ in den Blattgenerator oder in die Arbeitsspeicher 307 . Wenn die Ausführungsbahnen in die Arbeitsspeicher 907 zurückschreiben, ruft die E/A-Einheit 304 die Daten aus den Arbeitsspeichern 307 ab, um ein Ausgabeblatt zu bilden, das dann an den Blattgenerator weitergeleitet wird.
  • Der Skalarprozessor 302 beinhaltet einen Programmcontroller 309 , der die Befehle des Programmcodes des Schablonenprozessors aus dem Skalarspeicher 303 liest und die Befehle an die Ausführungsbahnen in der Ausführungsbahnmatrix 305 ausgibt. In einer Ausführungsform wird ein einzelner Befehl auf alle Ausführungsbahnen innerhalb der Matrix 305 übertragen, um ein einzelne Anweisung auf multiple Daten („Singlelnstruction-Multiple-Data - 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 eine prozessorähnlichere Funktionalität und damit mehr als 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 Multipler Anweisungen auf multiplen Daten(„Multiple-Instruction-Multiple-Data - MIMD“)-ähnlicherer Architekturen eine Logikschaltung beinhalten, die einen Befehl abruft und dekodiert. In Bezug auf MIMD-ähnliche Ansätze kann, obwohl ein zentraler Programmsteuerungsansatz hier weitgehend beschrieben wurde, auch ein verteilterer Ansatz in verschiedenen alternativen Ausführungsformen (z. B. unter anderem auch Programmcode und ein Programmcontroller innerhalb jeder Ausführungsbahn der Matrix 305 ) implementiert werden.
  • Die Kombination einer Ausführungsbahnmatrix 305, eines Programmcontrollers 309 und einer zweidimensionalen Schieberegisterstruktur 306 stellt eine weitgehend anpassbare/konfigurierbare Hardware-Plattform für ein breites Spektrum programmierbarer Funktionen bereit. Beispielsweise sind Anwendungssoftwareentwickler in der Lage, 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 von der Ausführungsbahnmatrix 305 bearbeitet werden, können die Arbeitsspeicher 307 zudem eine oder mehrere Wertetabellen verwalten. In verschiedenen Ausführungsformen können eine oder mehrere skalare Wertetabellen auch innerhalb des skalaren Speichers 303 instanziiert werden.
  • Ein skalarer Nachschlagevorgang beinhaltet das Übermitteln desselben Datenwertes aus derselben Wertetabelle von demselben Index an sämtliche Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305 . In verschiedenen Ausführungsformen wird das oben beschriebene VLIW-Befehlsformat erweitert, um darüber hinaus einen skalaren Operationscode einzuschließen, der eine vom Skalarprozessor ausgeführte Nachschlageoperation in eine skalare Wertetabelle leitet. Der für die Verwendung mit dem Operationscode angegebene Index kann ein unmittelbarer Operand sein oder von einem anderen Datenspeicherort abgerufen werden. Unabhängig davon umfasst in einer Ausführungsform ein Suchvorgang in einer skalaren Wertetabelle innerhalb des skalaren Speichers im Wesentlichen das Senden des gleichen Datenwertes an alle Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 305 während a des gleichen Taktzyklus. Weitere Details zur Verwendung und Operation von Wertetabellen werden nachfolgend bereitgestellt.
  • 4 zeigt eine Ausführungsform einer Datenberechnungseinheit 401. Wie in 4 ersichtlich, beinhaltet die Datenberechnungseinheit 401 eine Matrix von Ausführungsbahnen 405 , die logisch „oberhalb“ einer zweidimensionalen Schieberegistermatrixstruktur 406 positioniert sind. Wie oben beschrieben, wird in verschiedenen Ausführungsformen ein von einem Blattgenerator bereitgestelltes Bilddatenblatt in das zweidimensionale Schieberegister 406 geladen. Die Ausführungsbahnen bearbeiten dann die 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 hervorgehen, 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 x 5-Schablone, die am rechten Rand der Ausführungsbahnmatrix 405 zentriert ist, vier Ringregisterorte weiter nach rechts, wenn die linksseitigen Bildpunkte der Schablone verarbeitet werden. Zur Vereinfachung der Zeichnung zeigt 4 die Register der rechten Seite des Rings mit nur horizontalen Schiebeverbindungen und Registern der Unter-Seite 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 Ausweitungsraum wird durch Arbeitsspeicher 407 bereitgestellt, die mit jeder Zeile und/oder jeder Spalte in der Matrix oder Teilen davon verbunden sind (z. B. kann ein Arbeitsspeicher einem „Bereich“ der Ausführungsbahnmatrix zugewiesen werden, der reihenweise 4 Ausführungsbahnen und spaltenweise 2 Ausführungsbahnen überspannt. Zur Vereinfachung bezieht sich der Rest der Anwendung hauptsächlich auf zeilen- und/oder spaltenbasierte Zuordnungsschemen). Wenn die Kernsystemoperationen einer Ausführungsbahn es erfordern, Bildpunktwerte außerhalb der zweidimensionalen Schieberegistermatrix 406 zu verarbeiten (was einige Bildverarbeitungsroutinen ggf. erfordern), kann sich die Ebene der Bilddaten z. B. vom Ringbereich 409 in den Arbeitsspeicher 407 weiter ausweiten. Betrachten wir zum Beispiel eine 6X6-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 sich dann in den Arbeitsspeicher 407 ausweiten. Andere Anwendungen der Arbeitsspeicher 407 und des Schablonenprozessors aus 3 werden nachfolgend bereitgestellt.
  • 5a bis 5k zeigen ein Ausführungsbeispiel für die Art und Weise, in der die Bilddaten, wie oben angedeutet, innerhalb der zweidimensionalen Schieberegistermatrix „unterhalb“ der Ausführungsbahnmatrix verschoben werden. Wie in 5a dargestellt, sind die Dateninhalte der zweidimensionalen Verschiebungsmatrix in einer ersten Matrix 507 dargestellt, während die Ausführungsbahnmatrix durch 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 R1, das Daten von dem Schieberegister akzeptieren kann, Daten von einer ALU-Ausgabe (die sich z. B. durch 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 R1 ein physisches Register der Ausführungsbahn, während R2 ein physisches Register der zweidimensionalen Schieberegistermatrix ist. Die Ausführungsbahn beinhaltet eine ALU, die mit Operanden arbeiten kann, die von R1 und/oder R2 bereitgestellt werden. Wie weiter nachfolgend näher beschrieben wird, 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 zeigen einen dieser tieferen Registerpositionen, wie sie verwendet werden, um das resultierende X aus den jeweiligen Ausführungsbahnen zu speichern. Zur Veranschaulichung wird das tiefere resultierende Register neben anstatt unter dessen Gegenstückregister R2 gezogen.
  • 5a bis 5k konzentrieren sich auf die Berechnung von zwei Schablonen, deren zentrale Position mit dem Paar von Ausführungsbahnpositionen 511 ausgerichtet ist, die in der Ausführungsbahnmatrix 505 dargestellt werden. 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 511 auf deren zentralen Schablonenpositionen zentriert. 5b zeigt den Objektcode, der von beiden Ausführungsbahnen 511 ausgeführt wird. Wie in 5b dargestellt, bewirkt der Programmcode beider Ausführungsbahnen 511, dass sich die Daten innerhalb der Schieberegistermatrix 507 eine Position nach unten und eine Position nach rechts verschieben. Damit werden beide Ausführungsbahnen 511 an der oberen linken Ecke ihrer jeweiligen Schablonen ausgerichtet. Der Programmcode bewirkt dann, dass sich die Daten (in R2) an ihren jeweiligen Stellen in R1 laden lassen.
  • Wie in 5c dargestellt, bewirkt der Programmcode als Nächstes, dass das Paar von Ausführungsbahnen 511 die Daten innerhalb der Schieberegistermatrix 507 um eine Einheit nach links verschiebt, wodurch bewirkt wird, dass der Wert rechts von der jeweiligen Position der jeweiligen Ausführungsbahn in die jeweilige Position der Ausführungsbahn verschoben wird. Der Wert in R1 (vorheriger Wert) wird dann mit dem neuen Wert addiert, der sich in die Position der Ausführungsbahn (in R2) verschoben hat. Das Ergebnis wird in R1 geschrieben. Wie in 5d dargestellt, wird der gleiche Prozess wie oben für 5c wiederholt, wodurch bewirkt wird, dass das Ergebnis R1 nun den Wert A + B + C in der oberen Ausführungsbahn und F + G + H in der unteren Ausführungsbahn beinhaltet. Zu diesem Zeitpunkt haben beide Ausführungsbahnen 511 die obere Reihe ihrer jeweiligen Schablonen verarbeitet. Zu beachten ist die Ausweitung in einen Ringbereich auf der linken Seite der Ausführungsbahnmatrix 505 (falls einer auf der linken Seite existiert) oder in einen Arbeitsspeicher, falls auf der linken Seite der Ausführungsbahnmatrix 505 kein Ringbereich existiert.
  • Wie in 5e dargestellt, bewirkt der Programmcode als Nächstes, dass sich die Daten innerhalb der Schieberegistermatrix eine Einheit nach oben verschieben, wodurch bewirkt wird, dass beide Ausführungsbahnen 511 am rechten Rand der mittleren Reihe ihrer jeweiligen Schablonen ausgerichtet werden. Register R1 der beiden Ausführungsbahnen 511 beinhaltet derzeit die Summe der oberen Zeile der Schablone und den rechten Wert der mittleren Zeile. 5f und 5g zeigen weitere Fortschritte beim Bewegen über die mittlere Reihe der beiden Schablonen der Ausführungsbahn nach links. Die kumulative Addition setzt sich fort, sodass am Ende der Verarbeitung von 5g beide Ausführungsbahnen 511 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 nächsten Zeile ihrer entsprechenden Schablonen auszurichten. 5i und 5j zeigen eine fortlaufende Verschiebung zur Fertigstellung der Verarbeitung im Laufe der Schablonen der beiden Ausführungsbahnen. 5k zeigt eine zusätzliche Verschiebung, um jede Ausführungsbahn an ihrer korrekten Position im Datenfeld auszurichten und das Ergebnis in dasselbe zu schreiben.
  • In dem Beispiel aus 5a-5k ist zu beachten, dass der Objektcode für die Verschiebungsoperationen ein Befehlsformat beinhalten kann, das die Richtung und die Größe der in (X, Y)-Koordinaten ausgedrückten Verschiebung identifiziert. Der Objektcode für eine Verschiebung um eine Position nach oben kann im Objektcode beispielsweise als SHIFT 0, +1 ausgedrückt werden. Als weiteres Beispiel kann eine Verschiebung um eine Position nach rechts im Objektcode als SHIFT +1, 0 ausgedrückt werden. Darüber hinaus können in verschiedenen Ausführungsformen Verschiebungen größerer Größenordnung im Objektcode (z. B. SHIFT 0, +2) spezifiziert werden. Wenn die 2D-Schieberegister-Hardware hier nur Verschiebungen um eine Position pro Zyklus unterstützt, kann der Befehl der Maschine so interpretiert werden, dass eine Mehrfachzyklus-Ausführung erfordert wird, oder die 2D-Schieberegister-Hardware kann so ausgelegt sein, dass sie Verschiebungen um mehr als eine Position pro Zyklus unterstützt. Ausführungsformen der letzteren Variante werden nachfolgend näher beschrieben.
  • 6a zeigt eine weitere, detailliertere Darstellung der Einheitszelle für die Ausführungsbahnmatrix und die Schieberegisterstruktur (Register im Ringbereich beinhalten keine entsprechende Ausführungsbahn). Die Ausführungsbahn und der Registerbereich, der jeder Position in der Ausführungsbahnmatrix zugeordnet ist, werden in einer Ausführungsform implementiert, indem der in 6a ersichtliche Schaltkreis an jedem Knoten der Ausführungsbahnmatrix instanziiert wird. Wie in 6a ersichtlich, beinhaltet die Einheitszelle eine Ausführungsbahn 601, die mit einer Registerdatei 602 verbunden ist, die aus vier Registern R2 bis R5 besteht. Während eines Zyklus kann die Ausführungsbahn 601 aus einem Register R1 bis R5 lesen oder in diese schreiben. Für Befehle, die zwei Eingangsoperanden erfordern, kann die Ausführungsbahn beide Operanden von einem beliebigen R1 bis R5 abrufen.
  • In einer Ausführungsform wird die zweidimensionale Schieberegisterstruktur implementiert, indem es während eines einzigen Zyklus erlaubt wird, dass der Inhalt eines beliebigen von (nur) einem der Register R2 bis R4 zu einer seiner angrenzenden Registerdateien durch den Ausgangsmultiplexer 603 „heraus“ verschoben wird, und der Inhalt eines beliebigen von (nur) einem 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 sein Inhalt verschoben und durch den Inhalt ersetzt wird, der in demselben Zyklus verschoben wird, erlaubt die Multiplexeranordnung 603 , 604 unterschiedliche Schiebequellen- und Schiebezielregister innerhalb derselben 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 deren jeweiligen linken, rechten, oberen und unteren Nachbarn verschiebt. 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 derselben Verschiebungsrichtung für alle Ausführungsbahnen übereinstimmen (wenn z. B. die Verschiebung heraus zum rechten Nachbarn erfolgt, sollte die Verschiebung herein vom linken Nachbarn erfolgen).
  • Obwohl in einer Ausführungsform der Inhalt von nur einem Register pro Ausführungsbahn pro Zyklus verschoben werden darf, können andere Ausführungsformen zulassen, dass der Inhalt von mehr als einem Register herein-/herausverschoben wird. Beispielsweise kann der Inhalt von zwei Registern während eines gleichen Zyklus heraus-/hereinverschoben werden, wenn eine zweite Instanz der in 6a ersichtlichen Multiplexerschaltung 603 , 604 in das Design von 6a eingefügt wird. Selbstverständlich können in Ausführungsformen, bei denen der Inhalt von nur einem Register pro Zyklus verschoben werden kann, Verschiebungen von mehreren Registern zwischen mathematischen Operationen erfolgen, 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, während des gesamten Verschiebungszyklus lokal auf der Ausführungsbahn. Die in jeder Ausführungsbahn ersichtliche Speichereinheit („M“) wird verwendet, um Daten von dem Arbeitsspeicher zu laden oder in denselben zu speichern, der mit der Zeile und/oder Spalte der Ausführungsbahn innerhalb der Ausführungsbahnmatrix assoziiert 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 zu lesen und in ein lokales Register zu schreiben.
  • In Bezug auf die von der ALU-Einheit der Hardware-Ausführungsbahn 601 unterstützten ISA Operationscodes sind in verschiedenen Ausführungsformen die von der Hardware-ALU unterstützten mathematischen Operationscodes integral (d. h. im Wesentlichen gleich) mit den von den unterstützten mathematischen Operationscodes verbunden, die eine virtuelle Ausführungsbahn unterstützen (z. B. ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT). Wie oben beschrieben, können Speicherzugriffsbefehle von der Ausführungsbahn 601 ausgeführt werden, um Daten von ihrem zugehörigen Arbeitsspeicher abzurufen oder in denselben zu speichern. Zudem unterstützt die Hardware-Ausführungsbahn 601 Verschiebungsoperationsanweisungen (nach rechts, links, oben, unten), um Daten innerhalb der zweidimensionalen Schieberegisterstruktur zu verschieben. Wie oben beschrieben, werden Programmsteuerbefehle weitgehend durch den Skalarprozessor des Schablonenprozessors ausgeführt.
  • c. statistische Operationen, die auf einem Schablonenprozessor durchgeführt werden
  • 7 zeigt eine exemplarische Abbildung eines Frame 600 . Wie in 7 dargestellt, kann Bild 700 als in eine Matrix von Abschnitten untergliedert betrachtet werden. Das spezifische exemplarische Bild in 7 besteht aus einer Matrix von 16 Abschnitten mal 16 Abschnitten. Wie in 8 dargestellt, kann jeder Abschnitt weiter in eine Matrix von Blättern untergliedert werden. Die exemplarische Abbildung in 8 zeigt z. B. die ersten zwei Abschnitte 801, 802 entlang der obersten Zeile von Abschnitten des Bildes 700 in 7. Wie 8 zeigt, kann jeder Abschnitt in eine Matrix von Blättern untergliedert werden. Im spezifischen Beispiel in 8 besteht jeder Abschnitt aus einer Matrix von 16 x 16 Blättern. Jedes Blatt kann beispielsweise aus einer Matrix von 16 x 16 Bildpunktwerten bestehen.
  • Wie oben ausführlich beschrieben, ist ein Schablonenprozessor in mehreren Ausführungsformen dazu entworfen, ein Blatt als seine Dateneinheit zu verarbeiten. Hier wird ein Bilddatenblatt in den zweidimensionalen Registerbereich des Schablonenprozessors geladen, wonach der Prozessor gewisse Bildverarbeitungsaufgaben an dem Bilddatenblatt ausführt. Wie in 8 ersichtlich, beinhaltet in mehreren Ausführungsformen das Verarbeiten eines ganzen Bildes zum Beispiel das Verarbeiten einer Zeile von Blättern über einen gesamten ersten Abschnitt 801 (z. B. von links nach rechts über den gesamten Abschnitt) und dann das weitere Verarbeiten von Blättern in dieselbe Richtung entlang der selben Zeile innerhalb eines benachbarten zweiten Abschnitts 802 .
  • Der Prozess dauert an, bis alle Blätter entlang der bestimmten Zeile über alle Abschnitte des Bildes hinweg verarbeitet sind. Dann wird eine nächste (z. B. weiter unten befindliche) Blätterzeile verarbeitet und der Vorgang wiederholt. Nachdem beispielsweise das sechzehnte Blatt des sechzehnten Abschnitts entlang der ersten Zeile von Blättern verarbeitet ist, wird im Anschluss das erste Blatt des ersten Abschnitts entlang der zweiten Zeile von Blättern verarbeitet.
  • Das Verarbeiten von Statistiken für ein Bild schließt oft das Berechnen einer Addition von Bildpunktwerten innerhalb des Bildes ein. Zum Beispiel ist es eine übliche statistische Operation, einen durchschnittlichen Bildpunktwert zu berechnen. Im Allgemeinen werden Bildpunktwerte über ein Bild hinweg addiert und dann auf die Anzahl von Bildpunkten normalisiert, die addiert wurden. In verschiedenen Ausführungsformen werden Bildstatistiken in Abschnittsgranularität organisiert. Im Allgemeinen wird beispielsweise ein durchschnittlicher Bildpunktwert für jeden Abschnitt in einem Bild aufgezeichnet. Die Abschnitte werden dann anschließend nach Bedarf verarbeitet, um andere Statistiken für das Bild zu berechnen.
  • 9 zeigt einen Ansatz zum Addieren von Bildpunktwerten innerhalb eines Abschnitts. 9 zeigt die Blattanordnung für die obere linke Ecke eines Abschnitts. Wie in 9 dargestellt, werden gleich positionierte Bildpunktwerte innerhalb einer Blattmatrix über mehrere Blätter hinweg addiert. Zum Beispiel wird der obere linke Bildpunktwert von Blatt_0 zum oberen linken Bildpunktwert von Blatt_1 addiert. Die resultierende Summe wird dann zum obere linken Bildpunktwert von Blatt_2 addiert. Der Vorgang wird fortgesetzt, bis alle Blätter im Abschnitt bearbeitet wurden.
  • Unter Berücksichtigung dessen, dass der Schablonenprozessor Daten in Blatteinheiten verarbeitet, wird die Addition selbst Blatt für Blatt durchgeführt. Wie oben beschrieben, beinhaltet ein Schablonenprozessor in einer Ausführungsform eine Ausführungsbahn und einen verknüpften Registerbereich für jede Matrixposition innerhalb eines Blattes. Zunächst wird Blatt_0 in die zweidimensionale Schieberegisterstruktur des Schablonenprozessors geladen und verarbeitet. Ein mit jeder Matrixposition auf dem Blatt verknüpfter Bildpunktwert wird im lokalen Registerbereich dieser Matrixposition innerhalb des zweidimensionalen Schieberegisters abgelegt. Anschließend wird Blatt_1 in die zweidimensionale Schieberegisterstruktur des Schablonenprozessors geladen und verarbeitet.
  • Ein mit jeder Matrixposition auf Blatt_1 verknüpfter Bildpunktwert wird zu dem Bildpunktwert für dieselbe Matrixposition in Blatt_0 addiert. Das Ergebnis für jede Matrixposition wird im lokalen Registerbereich dieser Position in der zweidimensionalen Verschieberegisterstruktur abgelegt, und der Vorgang wird fortgesetzt. Somit kann mit jedem neuen Blatt, das der Schablonenprozessor verarbeitet, eine Addition über alle bis dahin verarbeiteten Blätter hinweg für alle Matrixpositionen innerhalb des Blattes akkumuliert werden. In einem alternativen Ansatz wird der obige Vorgang durchgeführt, mit der Ausnahme, dass die akkumulierten Additionsdaten in einem internen Speicherplatz des Schablonenprozessors statt in einem Registerbereich abgelegt werden (z. B. bezugnehmend auf 3, das RAM 307, das mit den Speicherausführungseinheiten der Ausführungsanordnung 305 verknüpft ist und/oder der skalare Speicher 303 , der mit dem skalaren Prozessor 303 verknüpft ist). In einer anderen alternativen Ausführungsform werden die akkumulierten Additionsdaten im Speicher abgelegt, der extern zum Schablonenprozessor ist, wie z. B. einem Speicher, der mit einer Zeilenpuffereinheit 101 verknüpft ist.
  • Es ist zu beachten, dass beim Vergleich von 8 und 9, Blatt_16 von Abschnitt 0 erst dann verarbeitet wird, wenn Blatt_15 von Abschnitt 15 verarbeitet wurde. Das heißt, dass eine gleiche Zeile von Blättern über Abschnitte hinweg verarbeitet wird. Somit muss, wenn Statistiken per Abschnitt verfolgt werden, ein Statistikkontext jedes Mal wechseln, wenn das Verarbeiten über Abschnittsgrenzen hinweg fortschreitet. 10 stellt den Kontextwechselvorgang grafisch dar. Hier wird davon ausgegangen, dass eine Datenstruktur, die Statistiken für einen bestimmten Abschnitt speichert, erstellt wird und sich im Registerbereich oder im internen Speicherplatz eines Schablonenprozessors befindet, wenn der Schablonenprozessor diesen bestimmten Abschnitt verarbeitet.
  • Beispielsweise wird, während Blätter 0 bis 15 für Abschnitt_0 verarbeitet werden, eine Datenstruktur für Abschnitt_0 im internen Speicher und/oder im zweidimensionalen Registerbereich des Schablonenprozessors abgelegt. Nachdem Blatt_15 für Abschnitt_0 zum Zeitpunkt 1001 verarbeitet wurde, wird die Statistik-Datenstruktur für Abschnitt_0 aus dem zweidimensionalen Registerbereich oder dem internen Speicherplatz des Schablonenprozessors herausgeschaltet, während die Statistik-Datenstruktur für Abschnitt_1 in den Registerbereich oder internen Speicherplatz des Schablonenprozessors hineingeschaltet wird. Ebenso wird, zum Zeitpunkt 1002 , zwischen dem Verarbeiten von Blatt_15 von Abschnitt_1 und Blatt_0 von Abschnitt_2, die Statistik-Datenstruktur für Abschnitt_1 aus dem Registerbereich oder internen Speicherplatz des Schablonenprozessors herausgeschaltet, während die Statistik-Datenstruktur für Abschnitt_2 in den Registerbereich oder Speicherplatz des Schablonenprozessors hineingeschaltet wird.
  • Nachdem Blatt_15 von Abschnitt_15 verarbeitet wurde wird die Statistik-Datenstruktur von Abschnitt_15, zum Zeitpunkt 1016 , aus dem Registerbereich oder internen Speicherplatz des Schablonenprozessors herausgeschaltet, während die Statistik-Datenstruktur für Abschnitt_0 in den Registerbereich oder Speicherplatz des Schablonenprozessors zurückgeschaltet wird, während der Prozess mit dem Verarbeiten der zweiten Zeile von Blättern innerhalb des Bildes beginnt. Ebenso wird, zum Zeitpunkt 1001, die Statistik-Datenstruktur für Abschnitt_0 aus dem Registerbereich oder internen Speicherplatz des Schablonenprozessors herausgeschaltet, während die Statistik-Datenstruktur für Abschnitt_1 in den Registerbereich oder internen Speicherplatz des Schablonenprozessors hineingeschaltet wird. Das Verarbeiten wird auf diese Weise fortgesetzt, bis alle Blätter von den Abschnitten 0 bis 15 verarbeitet wurden, woraufhin die Statistik-Datenstrukturen für alle Abschnitte von 0 bis 15 vollständig sind. Der Vorgang wird dann für die zweite Zeile von Blättern innerhalb des Bildes fortgesetzt.
  • 11 zeigt eine exemplarische Abbildung der besagten Statistik-Datenstrukturen, die für einen bestimmten Abschnitt abgelegt werden können. Hier kann, wie oben erläutert, beispielsweise die Statistik-Datenstruktur eine Summe aller Bildpunktwerte an derselben Bildpunktposition innerhalb eines Blattes des Abschnitts speichern. Eine „vollständige“ Datenstruktur für den Abschnitt wird erstellt, wenn alle Blätter innerhalb des Abschnitts addiert wurden. Das heißt, dass eine vollständige Datenstruktur eine Summe an der gleichen Bildpunktposition über alle Blätter innerhalb eines Abschnitts hinweg beinhaltet. Der illustrativen Einfachheit halber bildet 11 lediglich die Summe an den vier Eckbildpunktpositionen des Blattes grafisch ab.
  • Ein zusätzliches statistisches Verfahren besteht darin, die gesamte akkumulierte Matrix von 11 auf einen skalaren Wert zu reduzieren, der beispielsweise alle Bildpunktpositionen der Matrix von 11 addiert, welche wiederum einer Summe aller Bildpunktwerte innerhalb des gesamten Abschnitts entsprechen. Das heißt, wenn 11 die Matrix der Summe aller Bildpunktwerte innerhalb eines Abschnitts an der gleichen Bildpunktposition ist, dass die Summe über alle Elemente in der Matrix von 11 hinweg der Summe aller Bildpunktwerte innerhalb eines Abschnitts auf einer Basis per Blatt-Bildpunktposition entspricht. 12a bis 12e zeigen die Reduktion der gesamten Matrix auf einen Skalar. Wie aus der Erläuterung von 12a bis 12e ersichtlich, nutzt der Reduktionsvorgang besonders die zweidimensionale Schieberegistermatrix, die eine Komponente des Schablonenprozessors ist.
  • Hier wird angenommen, dass die statistische Matrix von 11 ursprünglich in die zweidimensionale Schieberegistermatrix des Schablonenprozessors geladen wird. 12a zeigt einen ersten Verschiebevorgang des Schieberegisters, bei dem jede zweite Datenspalte in ihren linken Nachbarn verschoben wird. Jede Verschiebung, die in 12a dargestellt wird, beinhaltet einen Bildpunktwert, der verschoben wird und einen Bildpunktwert an der Position, in die der verschobene Bildpunktwert verschoben wird. Dieses Paar von Bildpunktwerten wird dann in der Ausführungsbahn addiert, in die hineinverschoben wird, und im Registerbereich derselben Ausführungsbahn abgelegt.
  • Im Allgemeinen beinhaltet, nach dem Abschluss des Verschiebens aus 12a und der folgenden Addition, jede zweite Spalte der Matrix eine Summe des Paars von benachbarten Bildpunktwerten im Registerbereich jeder Bildpunktposition der Spalte. Das heißt z. B., dass Spalte 1201 eine Summe benachbarter Bildpunktwerte an jeder Bildpunktposition von Spalte 1201 beinhaltet, Spalte 1202 eine Summe benachbarter Bildpunktwerte an jeder Bildpunktposition von Spalte 1202 beinhaltet, usw. Es ist zu beachten, dass alle in 12a beobachteten Verschiebungen in einem einzelnen Zyklus auftreten können, und dass die Addition in einem unmittelbar darauf folgenden Zyklus auftreten kann. Im Allgemeinen kann die Reduktion die Matrix in nur zwei Zyklen (Zyklen C1 und C2) um 50 % reduzieren.
  • Wie in 12b zu sehen ist, werden die einander am nächsten liegenden Spalten, die eine Summe aus der Operation aus 12a aufweisen, verschoben und addiert. Das heißt, dass nur die Spalten 1200, 1202 , 1204, 1206, 1208, 1210, 1212 und 1214 nach dem Vorgang aus 12a Additionsinhalte aus der Additionsoperation aus 12a besitzen (die anderen Spalten können zwar auch Additionsinhalte besitzen, ihre Inhalte werden jedoch nicht genutzt; in einer Ausführungsform werden die Verschiebe- und Additionsoperationen, die die ungenutzten Inhalte bestimmen, nicht ausgeführt, um Strom zu sparen). Im Allgemeinen werden Bildpunktwerte aus Spalte 1202 um zwei Matrixpositionen in Spalte 1200 nach links verschoben. Entsprechende Quell-Ziel-Paare existieren auch für Spalten 1206 nach 1204, 1210 nach 1208 und 1214 nach 1212 . Wie bei der Operation von 12, werden die Bildpunktwertpaare am Zielort durch die Ausführungsbahnlogik addiert. Im Allgemeinen existieren jetzt nach der Operation von 12b Additionswerte in den Spalten 1200, 1204, 1208 und 1212 . Es ist zu beachten, dass das zweidimensionale Schieberegister in einer Ausführungsform dazu in der Lage ist, zwei Positionen überspringende Verschiebungen in einem einzelnen Zyklus durchzuführen. Somit können alle in 12b beobachtbaren Verschiebungen in einem einzelnen Zyklus (C3) durchgeführt werden, und die Additionsoperation kann in einem unmittelbar darauf folgenden Zyklus (C4) durchgeführt werden. Im Allgemeinen kann die Reduktionsoperation die Matrix von 11 nach vier Zyklen um 75 % reduzieren.
  • Hier ist es jedoch nötig, deutlich zu machen, dass in verschiedenen Ausführungsformen jede Ausführungsbahn mehrere Register aufweist. Das heißt, kurz erneut bezugnehmend auf 6, dass jede Ausführungsbahn mehrere Register R1 bis R5 zum Hinein-/ Herausverschieben von Daten und/oder zum Speichern eines Ergebnisses aus einer ALU-Operation besitzt. Zusätzlich besitzen viele Bildverarbeitungsalgorithmen mehrere Daten- „Kanäle“. Zum Beispiel kann ein Bild, das aus roten (R), grünen (G) und blauen (B) Bildpunkten besteht, einen ersten Kanal, der aus Blättern/Abschnitten/Frames von R-Daten besteht, separat von einem zweiten Kanal verarbeitet werden, der aus Blättern/Abschnitten/Frames von GDaten besteht, von denen wiederum alle separat von einem dritten Kanal aus Blättern/Abschnitten/Frames von B-Daten verarbeitet werden.
  • Obwohl das vorangegangene Beispiel aus 12a und 12b angab, dass zwei Zyklen durchlaufen werden müssen, um eine Verschiebung und eine Addition durchzuführen, ist es nötig, zu erkennen, dass diese Einschränkung aufgrund der Abhängigkeit der Addition von einer vorangehenden Verschiebung nur für Operationen innerhalb eines gleichen Kanals gilt. Es ist zu beachten, dass die Ausführungsbahnmatrix in einer Ausführungsform ein Befehlswort des VLIW-Typs empfängt, das sowohl eine Verschiebeoperation als auch eine ALU-Operation innerhalb eines einzelnen Zyklus spezifizieren kann. Mit diesem Befehlsformat und mehreren Registern pro Matrixposition können zwei verschiedene Kanäle gemäß dem Kernprozess aus 12a und 12b gleichzeitig reduziert werden. Das heißt, dass auf eine softwaregeleitete schleifenartige Weise beispielsweise in einem ersten Zyklus R verschoben und G addiert wird, und in einem zweiten darauffolgenden Zyklus das soeben verschobene R addiert wird und das Ergebnis des soeben addierten G verschoben wird. Auf diese Weise kann der Gesamtprozessor beispielsweise in jedem Zyklus über zwei Kanäle hinweg eine Verschiebungs- und Additionsreduktion durchführen.
  • Wie in 12c ersichtlich, wird der Reduktionsvorgang fortgesetzt, mit jedoch (erneut) längeren Verschiebungen. Hier werden Bildpunktwerte aus Spalte 1204 in Spalte 1200 verschoben und in Spalte 1200 addiert, und Bildpunktwerte aus Spalte 1212 werden in Spalte 1208 verschoben und in Spalte 1208 addiert. Im Allgemeinen existieren nach der Operation von 12c (die unter der Annahme, dass das zweidimensionale Schieberegister z. B. Verschiebungen um 4 Einheitspositionen unterstützt, wiederum lediglich die nächsten zwei Zyklen (C5 und C6) durchführen kann) nur Additionswerte in den Spalten 1200 und 1208 . 12d zeigt eine vollständige Reduktion entlang der horizontalen Achse, wobei die Werte in Spalte 1208 in Spalte 1200 verschoben werden und in Spalte 1200 addiert werden. Wiederum unter der Annahme, dass das zweidimensionale Schieberegister die in 12 beobachtbare Verschiebung in einem einzelnen Zyklus durchführen kann, wird die Reduktion aus 12d durch den achten Zyklus C8 erreicht (in einer Ausführungsform unterstützt das Schieberegister im Allgemeinen keine Verschiebungen der in 12d beobachtbaren Größenordnung, unterstützt jedoch eine Verschiebung von Spalte 1208 in Spalte 1200 in einem einzelnen Zyklus).
  • 12e zeigt die nachfolgenden Reduktionen, die entlang Spalte 1200 durchgeführt werden, die letztendlich bei Zyklus C16 die gesamte Matrix auf einen skalaren Summenwert reduzieren. Die Reduktionen aus 12e sind grundsätzlich dieselben Reduktionen wie in den 12a bis 12d, jedoch in vertikaler Richtung und entlang nur einer Spalte. In einer Ausführungsform benötigt jede Reduktionssequenz, wie bei den horizontalen Reduktionen aus 12a bis 12d, einen Zyklus, damit das Schieberegister seine entsprechende Verschiebung durchführt, und einen weiteren Zyklus, um einen lokalen Wert zu einem Wert zu addieren, der gerade in dieselbe Position verschoben wurde.
  • Die obige Erläuterung des Reduktionsvorgangs aus 12a bis 12d war auf eine Ausführungsform gerichtet, in der, wie in 11 gezeigt, ein separater Summenwert für jede Bildpunktposition in einem Blatt für alle Blätter innerhalb eines Abschnitts aufgezeichnet wurde. Wie in Bezug auf 10 erläutert, müssen jedoch, bevor eine „vollständige“ Statistik-Struktur für einen bestimmten Abschnitt erstellt werden kann, alle Zeilen in dem Abschnitt verarbeitet werden. Weil das Scannen über eine Bildzeile hinweg mehrere Abschnitte überquert, werden Datenstrukturen für die Abschnitte bei jeder Überquerung einer Abschnittsgrenze kontextuell hinein- und herausgeschaltet.
  • Jede Statistikdatenstruktur per Abschnitt beinhaltet somit einen Summenwert oder „Zähler“ für jede Bildpunktposition innerhalb eines Blattes für alle Blätter, die bis dahin verarbeitet worden sind. Somit entsprechen die Dimensionen der Statistikdatenstruktur für einen Abschnitt den Dimensionen eines Blattes innerhalb des Abschnitts (z. B. 16 x 16 Summenwerte). Falls mehrere Abschnitte innerhalb eines Bildes existieren (wie durch 9 und 10 angedeutet), kann die Menge an Statistikdaten, die für ein Bild abgelegt werden, groß sein (z. B. (die Zahl von Abschnitten im Bild) x (die Anzahl von Zählern pro Abschnitt)). Hier kann die Reduktion eines Abschnitts in einen Skalar, sobald eine vollständige Datenstruktur für einen Abschnitt existiert, die Last durch Statistikverfolgung verringern.
  • Alternativ dazu kann, erneut bezugnehmend auf 10, die Statistikmatrix immer dann auf einen Skalar reduziert werden, wenn sie kontextuell herausgeschaltet werden soll. Beispielsweise kann die Statistikmatrix für Abschnitt_0 zum Zeitpunkt 1001 auf einen Skalar reduziert werden, bevor sie gespeichert wird, und erneut zum Zeitpunkt 1017 , bevor sie gespeichert wird. Hier kann das Durchführen der Reduktion aus 12a bis 12e vor jedem kontextuellen Herausschalten mehr Verarbeitung erfordern (mehrere skalare Reduktionen werden pro Abschnitt durchgeführt an Stelle einer skalaren Reduktion pro Abschnitt), die Datenmindestgröße der herausgeschalteten Statistiken ist jedoch wesentlich kleiner, weshalb es wahrscheinlicher ist, dass die herausgeschalteten Statistikdaten intern im Speicher des Schablonenprozessors abgelegt werden können, anstatt über den gesamten Bildprozessor zum Zeilenpufferspeicher geleitet zu werden.
  • Andere statistische Operationen sind ggf. weniger aufwändig. Beispielsweise wird gemäß einem Statistiklagerungsmodus, der als „global“ bezeichnet wird, von einem gesamten Frame/Bild angenommen, dass es nur einen Abschnitt einnimmt. Somit existiert nur eine Statistikdatenstruktur und es kommt nicht zum kontextuellen Umschalten (d. h., dass bei der Rasterscanverarbeitung keine Abschnittsgrenzen überquert werden). Die Datenstruktur ist „vollständig“, wenn alle Blätter innerhalb des Bildes verarbeitet wurden, woraufhin ein Skalar für das gesamte Bild erstellt werden kann, indem die Reduktion aus 12a bis 12e durchgeführt wird, die oben erläutert wurde.
  • In einem weiteren in 12f dargestellten Statistik-Verfolgungsmodus werden Statistiken für ein oder mehrere „Fenster“ 1251, 1252, 1253 innerhalb eines Bildes 1250 abgelegt, die sich in verschiedenen Kombinationen überschneiden können oder nicht. Blätter können nach einem bestimmten Muster verarbeitet werden (z. B. von links nach rechts über das gesamte Bild hinweg, bevor ein Zeilensprung nach unten erfolgt, um eine nächste Zeile zu verarbeiten). Während die Verarbeitung in einem bestimmten Fenster erfolgt, werden Statistiken für jede Bildpunktposition akkumuliert, wobei die Blattdimensionen mit der Erläuterung von 9 oben übereinstimmen. Sobald ein Fenster verlassen wird, endet die Akkumulationstätigkeit. Die statistische Akkumulation läuft wieder an, sobald der Rasterscan wieder in das Fenster hineinläuft.
  • Zum Beispiel, bezugnehmend auf 12f, enden statistische Akkumulationen für Fenster 1251, wenn der Rasterscan Pfad 1254 folgt und Fenster 1251 verlässt, beginnt jedoch erneut, wenn der Rasterscan Pfad 1255 erreicht und wieder in Fenster 1251 hineinläuft. Es ist zu beachten, dass dieses Verhalten für alle Fenster befolgt wird, was dazu führen kann, dass Statistiken gleichzeitig für Bereiche sich überschneidender Fenster akkumuliert werden können. Zum Beispiel, bezugnehmend auf Rasterscanpfad 1256 , beginnt die Statistikverfolgung für Fenster 1251 erneut, wenn Punkt A erreicht wird. Später beginnt die Statistikverfolgung für Fenster 1252 erneut, wenn Punkt B erreicht wird. Weitere Zeit später endet die Statistikverfolgung für Fenster 1251, wenn Punkt C erreicht wird und dann für Fenster 1252 , wenn Punkt D erreicht wird. Sobald die Akkumulationen für ein Fenster vollständig sind, nachdem der Rasterscan die gesamte Oberfläche des Fensters abgedeckt hat, können die Daten, die für das Fenster akkumuliert wurden (wiederum ein akkumulierter Wert pro Bildpunktposition innerhalb eines Blattes), gemäß dem oben im Zusammenhang mit 12a bis 12e erläuterten Vorgang reduziert werden.
  • Aus der Erläuterung von 4 ist in Erinnerung zu rufen, dass Arbeitsspeicher 407 mit Ausführungsbahnmatrix 405 und dem zweidimensionalen Schieberegister 406 verbunden sein kann, um den Schablonenprozessor mit einer lokalen Systemspeicherfunktion zu versehen. Hier können sich mehrere Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 405 eine einzige Arbeitsspeichereinheit teilen. Beispielsweise, bezugnehmend auf 4, kann eine erste Teilmenge von Ausführungsbahnen mit einem Arbeitsspeicher 407_1 verbunden sein, eine zweite Teilmenge von Ausführungsbahnen kann mit Arbeitsspeicher 407_2 verbunden sein, usw. 4 zeigt einen Ansatz, bei dem Ausführungsbahnen, die entlang derselben Zeile angeordnet sind, mit demselben Arbeitsspeicher verbunden sind.
  • 13 zeigt einen weiteren Ansatz, bei dem zweidimensionale Blöcke von Ausführungsbahnen mit demselben Arbeitsspeicher verbunden sind. Im spezifischen Beispiel von 13, sind Blöcke von vier Ausführungsbahnen mit demselben Arbeitsspeicher verbunden. Hier sind beispielsweise die Blöcke in der linken oberen Ecke von vier Ausführungsbahnen mit Arbeitsspeicher 1307_1 verbunden, die Blöcke in der oberen rechten Ecke von vier Ausführungsbahnen sind mit Arbeitsspeicher 1307_2 verbunden, usw. Von anderen separaten Blöcken von vier Ausführungsbahnen wird angenommen, dass sie mit ihrem jeweils eigenen Arbeitsspeicher verbunden sind, sie werden jedoch der Einfachheit der Abbildung halber nicht dargestellt.
  • Ein weiterer häufiger Satz von Statistiken, der für ein Bild abgelegt wird, ist ein Histogramm. Ein Histogramm teilt im Wesentlichen einen bestimmten Parameter in eine Anzahl von Klassen. Ein Acht-Bit-Intensitätswert kann beispielsweise in 256 separate Klassen aufgeteilt werden (eine Klasse für jeden einzigartigen Acht-Bit-Wert). Die Zahl der Wiederholungen, wie oft ein Wert in den Daten beobachtet wird, wird in jeder Klasse verfolgt. Im Allgemeinen wird beispielsweise die Zahl der Wiederholungen, wie oft jeder Acht-Bit-Wert beobachtet wird, individuell mit einem Zählerwert für jede Klasse aufgezeichnet. Die Verbreitung der jeweiligen Zählerwerte über den Satz von Klassen hinweg entspricht einem Histogramm. 14 zeigt eine exemplarische Abbildung eines Histogramms, das eine separate Zählung (entlang der vertikalen Achse) für jede von mehreren Klassen (entlang der horizontalen Achse) zeigt.
  • 15a und 15b betreffen eine Technik zum Ausweiten der Fähigkeiten der Schablonenprozessoren von 4 und 13, um hochauflösende Histogramme zu erzeugen, d. h. Histogramme mit einer großen Anzahl von Klassen. 15a zeigt eine Ausführungsform eines Nennauslegungspunktes des Schablonenprozessors von 4 und 13, bei der jeder Ausführungsbahn innerhalb einer Gruppe von Ausführungsbahnen, die denselben Arbeitsspeicher teilen, ihr eigener reservierter Speicherplatz innerhalb des Arbeitsspeichers bereitgestellt wird. Hier, bezugnehmend auf 15a, ist der Satz von vier Ausführungsbahnen 1501 jeweils mit Arbeitsspeicher 1507 verbunden. Jede Ausführungsbahn ist jedoch nominell dafür ausgelegt, nur auf ihren eigenen reservierten Speicherplatz innerhalb von Arbeitsspeicher 1507 zuzugreifen. Wie in 15 gezeichnet, ist beispielsweise Ausführungsbahn 1501_1 dafür ausgelegt, nur auf den ansteuerbaren Bereich 1502_1 innerhalb des Arbeitsspeichers zuzugreifen. Es kann beobachtet werden, dass andere Partitionen von Arbeitsspeicher 1507 anderen Ausführungsbahnen innerhalb der Gruppe 1501 zugeordnet werden.
  • Ein Problem bei der Partitionierung per Ausführungsbahn von 15a ist, dass die Partitionen effektiv die Anzahl von Histogramm-Klassen begrenzen, in die die Ausführungsbahnen beobachtete Daten einlagern können. Das heißt, dass weil jede Partition einer begrenzten Menge von Speicherplatz entspricht, jede Ausführungsbahn nur Datenelemente über eine Gesamtzahl von Klassen hinweg einlagern kann, die innerhalb einer einzelnen Partition angelegt werden kann. Dies kann den unerwünschten Effekt haben, die Auflösung der Histogramme zu beschränken, in die die Ausführungsbahnen einlagern können (es ist auch zu beachten, dass in mehreren Ausführungsformen nur eine der Ausführungsbahnen in einer Gruppe in einem gegebenen Zyklus auf den Speicher zugreifen kann).
  • Im Allgemeinen zeigt 15b einen besseren Ansatz, in dem, zumindest in einem Histogramm-Modus, die Partitionen innerhalb eines Arbeitsspeichers effektiv zusammengelegt werden, sodass jede Ausführungsbahn, die den Arbeitsspeicher teilt, frei auf die Gesamtmenge von zusammengelegtem Speicherplatz zugreifen kann. Zusammenlegen der Partitionen und Erlauben, dass jede der Ausführungsbahnen, die den Arbeitsspeicher teilen, frei auf die Gesamtmenge von zusammengelegtem Speicherplatz zugreifen kann, ermöglicht effektiv ein weiteres Datenfeld, das mehr Klassen gestattet. Mit mehr möglichen Klassen können sich hochauflösendere Histogramme ergeben. Im Allgemeinen kann beispielsweise, falls eine einzelne Partition aus dem Ansatz von 15a nur Zählerwerte für 256 Klassen enthalten kann, der zusammengelegte Speicherplatz von 15b Zählerwerte für 1024 Klassen enthalten. Somit können die Ausführungsbahnen aus dem Ansatz von 15a nur Histogramme mit 256 Klassen erzeugen, während dieselben Ausführungsbahnen im Ansatz von 15b Histogramme mit 1024 Klassen erzeugen können. Andere Ausführungsformen können andere Mengen von Klassen besitzen.
  • 16 und 17a bis 17c betreffen einen Ansatz, in dem ein Histogramm über ein ganzes Bild hinweg bestimmt werden kann, indem die Ausführungsbahnen zuerst dazu gebracht werden, beobachtete Daten in ihren lokalen Speichern einzulagern, und dann die jeweiligen Zählerstände unter Nutzung der zweidimensionalen Schieberegisterstruktur und der ALU-Fähigkeiten der Ausführungsbahnen über die Klassen zu tabellieren.
  • 16 zeigt eine High-Level-Darstellung, in der benachbarte Ausführungsbahnen in benachbarte Viererblöcke gruppiert werden, wobei jeder Gruppe Zugriff auf einen jeweiligen Arbeitsspeicher gewährt wird, wobei der Speicherplatz jedes Arbeitsspeichers zusammengelegt wird, sodass jede Ausführungsbahn, wie oben im Hinblick auf die Beschreibungen der 15a und 15b beschrieben, innerhalb derselben Gruppe auf denselben zusammengelegten Speicherplatz zugreifen kann. Der Einfachheit halber werden nur zwei Blöcke der Gruppen von Ausführungsbahnen 1601, 1602 zusammen mit ihrem jeweils entsprechenden zusammengelegten Speicherplatz 1607_1, 1607_2 dargestellt.
  • Um ein Histogramm zu erzeugen, wird eine Reihe von Blättern für ein Bild in das zweidimensionale Schieberegister geladen. Die Klassen des Histogramms werden für jede Ausführungsbahngruppe im zusammengelegten Speicherplatz zugeordnet und die einzelnen Ausführungsbahnen erhöhen einen jeweiligen Zählerwert, der für jede Klasse innerhalb des zusammengelegten Speicherplatzes für den bestimmten Wert, den jede Ausführungsbahn beobachtet, aufgezeichnet wird. Wenn zum Beispiel Ausführungsbahnen 1, 2, 3 und 4 innerhalb derselben Gruppe jeweils Werte beobachten, die Klassen 4, 9, 12 und 21 entsprechen, aktualisiert die Ausführungsbahn den Zählerwert für Klasse 4, Ausführungsbahn 2 aktualisiert den Zählerwert für Klasse 9, Ausführungsbahn 3 aktualisiert den Zählerwert für Klasse 12 und Ausführungsbahn 4 aktualisiert den Zählerwert für Klasse 21. In verschiedenen Ausführungsformen führen die Ausführungsbahnen ihre erwähnten Aktualisierungen in aufeinanderfolgen Zyklen durch, weil nur eine Ausführungsbahn auf den Speicher zugreifen kann, den sich eine Gruppe von Ausführungsbahnen teilt.
  • Nachdem eine Anzahl von Blättern für das Bild verarbeitet wurde, enthält der zusammengelegte Speicherplatz jeder der Arbeitsspeicher im Wesentlichen ein Histogramm für die Ausführungsbahnen, aus denen derselbe besteht. Zum Beispiel, bezugnehmend auf 16, enthält der zusammengelegte Speicherplatz innerhalb von Arbeitsspeicher 1607_1 die Histogramm-Daten für Ausführungsbahnen innerhalb von Gruppe 1601 und der zusammengelegte Speicherplatz innerhalb von Arbeitsspeicher 1607_2 enthält die Histogramm-Daten für die Ausführungsbahnen innerhalb von Gruppe 1602 .
  • Eine nächste Operation besteht anschließend darin, die Inhalte jedes Arbeitsspeichers zusammenzulegen, sodass ein Histogramm für alle Ausführungsbahnen erstellt werden kann. 17a betrifft ein vereinfachendes Beispiel, in dem das Histogramm nur 32 Klassen enthält (Klassen 0 bis 31). Hier werden für jede Gruppe von Ausführungsbahnen und ihre entsprechenden zusammengelegten Speicherplätze die Zählerwerte für Klassen 0 bis 7 in den Registerbereich der oberen, linken Ausführungsbahn geladen, die Zählerwerte für Klassen 8 bis 15 werden in den Registerbereich der oberen, rechten Ausführungsbahn geladen, die Zählerwerte für Klassen 16 bis 23 werden in den Registerbereich für die untere, rechte Ausführungsbahn geladen und die Zählerwerte für Klassen 24 bis 31 werden in den Registerbereich für die untere, linke Ausführungsbahn geladen. 17a zeigt die Inhalte des jeweiligen Registerbereichs der Ausführungsbahnen für Gruppen 1701 und 1702 . Wiederum werden der darstellerischen Einfachheit halber nur zwei Gruppen gezeigt, zudem werden in verschiedenen Ausführungsformen die Inhaltsmuster für Gruppen 1701 und 1702 über alle Gruppen hinweg innerhalb der Ausführungsbahnmatrix wiederholt. In Ausführungsformen nimmt der geladene Registerinhalt die Form einer Vektordatenstruktur an, die jeweilige Zählerwerte für verschiedene Bitpositionen in der Datenstruktur aufzeichnet, wobei die verschiedenen Bitpositionen den verschiedenen Klassen entsprechen, die durch die Datenstruktur aufgezeichnet werden.
  • 17b zeigt eine erste Reduktionssequenz, in der die Histogramm-Inhalte von Ausführungsbahnen aus einer ersten Gruppe in den Registerbereich derselben relativ positionierten Ausführungsbahnen einer zweiten Gruppe verschoben werden. Das heißt, dass die Registerinhalte der oberen, linken Ausführungsbahn der zweiten Gruppe 1702 in den Registerbereich der ersten Gruppe 1701 verschoben werden, um die Histogrammdaten für Klassen 0 bis 7, die über beide Gruppen 1701, 1702 hinweg gesammelt wurden im Registerbereich der oberen, linken Ausführungsbahn von Gruppe 1701 zusammenzuführen. Eine entsprechende Operation wird für die anderen drei Ausführungsbahnpositionen durchgeführt. Es ist zu beachten, dass die Verschiebung in einem einzelnen Zyklus auftreten kann, angenommen, dass das zweidimensionale Schieberegister Datenstrukturen angemessener Größe in einem einzelnen Zyklus über zwei Matrixbahnpositionen hinweg verschieben kann. Wenn die Klasseninhalte für 8 Klassen mehr Daten benötigen als in einem einzelnen Zyklus verschoben werden können, können mehrere Zyklen verwendet werden.
  • Unabhängig davon führen die Ausführungsbahnen, nachdem die Klasseninhalte für die zweite Gruppe 1702 in den Registerbereich der ersten Gruppe 1701 verschoben wurden, eine Vektoraddition ihrer jeweiligen Paare von Klassendaten durch, um Gesamtzählerwerte für ihre jeweiligen Klassen zu akkumulieren. Das heißt zum Beispiel, dass nach der Vektoradditionsoperation die obere Ausführungsbahn von Gruppe 1701 eine Datenstruktur enthält, die die Gesamtzählerstände für jede der Klassen 0 bis 7 besitzt, die durch die beiden Gruppen 1701 und 1702 tabelliert wurden. Eine entsprechende Akkumulation von Zählerwerten existiert zudem im Registerbereich der anderen drei Ausführungsbahnen von Gruppe 1701 . Wiederum kann die Vektoraddition wie bei der Verschiebungsoperation in verschiedenen Ausführungsformen ebenfalls in einem einzelnen Zyklus durchgeführt werden. Obwohl 17a und 17b nur zwei Gruppen zeigen, werden wiederum in verschiedenen Ausführungsformen die Operationen von 17a und 17 gleichzeitig für alle Paare von Gruppen in der Ausführungsbahnmatrix durchgeführt.
  • 17c zeigt eine nächste Iteration, in der die akkumulierten Zählerstände, die (z. B. wie in 17b) gerade tabelliert wurden gemäß einem ähnlichen Prozess (mit der Ausnahme, dass die Verschiebungsdistanz größer ist) erneut zusammengeführt. Zum Beispiel kann man, erneut kurz bezugnehmend auf 17b, sich ein weiteres Paar von Gruppen 1703 , 1704 aus vier Ausführungsbahnen vorstellen, die sich physisch direkt unterhalb von Gruppe 1702 in der Matrix befinden. 17c zeigt diese beiden Gruppen 1703, 1704 . Nachdem die Operation von 17b vollständig ist, werden die Inhalte der Gruppen 1703 und 1704 in Gruppe 1703 akkumuliert. Im Allgemeinen verschiebt die Operation von 17c die akkumulierten Inhalte von Gruppe 1703 , die in den Registerbereich von Gruppe 1701 verschoben werden. Nach der Vektoradditionsoperation von 17c enthält Gruppe 1701 akkumulierte Zählerstände für alle Klassen, wie sie ursprünglich durch jede der Gruppen 1701 bis 1704 tabelliert wurden. In der vereinfachenden 8 x 8-Ausführungsbahnmatrix von 17c sind alle Werte nach der Vektoradditionsoperation von 17c in die obere Zeile der Gruppen akkumuliert worden.
  • Ab hier kann eine horizontale Reduktion, ähnlich den vertikalen Reduktionen von 12e (wobei jede unterschiedliche Ausführungsbahnposition innerhalb einer Gruppe weiterhin seinen eigenen Satz von Klassen aufzeichnet), in den oberen Zeilen der Gruppen beginnen. Schließlich führt der Prozess eine einzelne Gruppe zusammen, wobei jede Matrixposition in der Gruppe über den Gesamtzählerstand für ihre entsprechenden Klassen über das gesamte Bild hinweg verfügt.
  • In verschiedenen Ausführungsformen verfolgen Histogramme die Abschnittsgranularität. Im Allgemeinen kann ein kontextuelles Umschalten von Histogrammdaten, ähnlich dem oben in Bezug auf 10 erläuterten kontextuellen Umschalten, während der Akkumulation des Histogramms durchgeführt werden. Hier sind die bereits erwähnten zusammengeführten Datenstrukturen innerhalb des Arbeitsspeichers des Prozessors dazu konfiguriert, Histogrammdaten nur für einen spezifischen Abschnitt zu speichern. Wenn die RasterscanVerarbeitung von Bilddaten dazu führt, dass Abschnittsgrenzen gequert werden, wird die Histogrammdatenstruktur für den Abschnitt, den die Verarbeitung gerade verlassen hat herausgeschaltet (z. B. indem sie von den Speichern des Schablonenprozessors in z. B. einen Zeilenpuffer hineingeschrieben wird), und Histogrammdatenstrukturen für den Abschnitt, in den sich die Verarbeitung gerade hineinbegeben hat, werden hineingeschaltet (z. B. indem sie in die Schablonenverarbeitungsspeicher hineingeschrieben werden). Nachdem das Rasterscannen einen ganzen Abschnitt vollständig verarbeitet hat, können die Reduktionen von 17a bis 17c und Folgende durchgeführt werden, um ein komplettes Histogramm für den gesamten Abschnitt zu bestimmen.
  • Es ist zu beachten, dass möglicherweise niedriger auflösende Histogramme keinen zusammengeführten Speicherplatz in den Arbeitsspeichern des Schablonenprozessors benötigen. Hier kann beispielsweise der dedizierte Speicherplatz pro Ausführungsbahn von 15a ausreichend sein, um alle Klassen für ein niedriger auflösendes Histogramm in sich zu fassen. Im Allgemeinen kann es sein, dass ein Zusammenführen der Speicherplätze per Ausführungsbahn nicht nötig ist (und somit möglicherweise nur für hochauflösende Histogramme vorzusehen ist). Des Weiteren können einige Histogramme eine ausreichend niedrige Auflösung besitzen, sodass die Klassen-Zählerwerte im jeweiligen Registerbereich der Ausführungsbahnen abgelegt werden können (hier kann die Registerdatei dergestalt dynamisch mit einem Bildpunktwert indiziert werden, sodass jede Ausführungsbahn auf ein unterschiedliches Register zugreifen kann). In diesem Fall ist die Benutzung des Arbeitsspeichers nicht notwendig. Für niedriger auflösende Histogramme, wie z. B. diejenigen, die kein Zusammenführen von dediziertem Speicher oder eines Registerbereichs per Ausführungsbahn erfordern, können Klassengesamtzahlen unter Nutzung der Prozesse von 12a bis 12e statt jener von 17a bis 17c akkumuliert werden.
  • Ebenso ist es in Bezug auf kontextuelles Umschalten vorstellbar, dass nur hochauflösende Histogrammdatenstrukturen aus dem Speicher oder Registerbereich des Schablonenprozessors (z. B. in einen Zeilenpuffer) herausgeschaltet werden müssen. Hier sind niedriger auflösende Histogramme ggf. dazu in der Lage, „herausgeschalteten“ Histogrammdatenkontext in den lokalen Speichern und/oder im Registerbereich des Schablonenprozessors abzulegen.
  • 16 und 17a-17c beschreiben einen Mechanismus für eine Gruppe von Ausführungsbahnen, um die Speicherressourcen, mit denen sie verbunden sind, gemeinsam zu nutzen, um Histogramme mit größeren Mengen von Klassen zu ermöglichen. Im Gegensatz dazu beschreiben 18a und 18b einen Mechanismus, durch den die Klassenanzahl eines Histogramms über Ausführungsbahnen unterschiedlicher Gruppen hinweg erweitert werden kann. 18 zeigt beispielsweise die obere, linke Ecke einer Ausführungsbahnmatrix. Hier werden eine erste 4 x 2- Gruppe 1810 von Ausführungsbahnen und eine zweite 4 x 2-Gruppe von Ausführungsbahnen 1811 beobachtet. Beide Gruppen 1810, 1811 können Speicherressourcen gemeinsam nutzen, um die Klassengröße, wie oben in Bezug auf 16 und 17a-c beschrieben, zu erweitern.
  • Hier könnten, sofern jede der Gruppen 1810, 1811dazu in der Lage ist, unterschiedliche Histogrammklassen individuell zu unterstützen 1024, beide Gruppen 1810, 1811 auch logisch kombiniert werden, um 2048 Klassen zu unterstützen. Somit kann die Histogrammgröße im Hinblick auf die Anzahl von Klassen durch das Kombinieren von Gruppen von Ausführungsbahnen erweitert werden. Gemäß einem Ansatz, der als „räumlich“ bezeichnet wird, sind die unterschiedlichen Ausführungsbahngruppen innerhalb derselben logischen Kombination für das Einlagern in unterschiedliche Klassenbereiche verantwortlich. Zum Beispiel sind die Ausführungsbahnen innerhalb von Gruppe 1810 dafür verantwortlich, in die Klassen 0 bis 1023 einzulagern, während die Ausführungsbahnen innerhalb von Gruppe 1811 dafür verantwortlich sind, in die Klassen 1024 bis 2047 einzulagern. Somit werden Daten, wie in 18b ersichtlich, verschoben, um eingegebene Bildpunktdaten vollständig zu verarbeiten, sodass sicher ist, dass sie in den spezifischen, korrekten Klassen eingelagert werden, in den sie eingelagert werden sollen. Das heißt beispielsweise, dass Daten, die eingelagert werden sollen, zuerst in die Ausführungsbahnen der ersten Gruppe 1810 geladen werden, und sofern Datenelemente in die Klassen 0-1023 fallen, werden diese durch ihre jeweiligen Ausführungsbahnen in Gruppe 1810 eingelagert. Nach der ursprünglichen Einlagerungsverarbeitung werden die Daten, die in die erste Gruppe geladen wurden, wie in 18b ersichtlich, in die zweite Gruppe 1811 verschoben. Jedwede verbleibenden Datenelemente, die nicht durch die erste Gruppe eingelagert wurden, weil sie in die Klassenbereiche 1024-2047 gefallen sind, werden durch die jeweiligen Ausführungsbahnen innerhalb von Gruppe 1811 eingelagert.
  • Somit werden Daten in diesem Beispiel ursprünglich in jede Bahn jeder Gruppe in der Ausführungsbahnmatrix geladen, während die gesamte Matrix die Verarbeitung der Daten, einschließlich des Verschiebens zwischen den Einlagerungsprozessen, durchführt. Zum Beispiel werden Daten ursprünglich sowohl in Gruppe 1810 als auch in Gruppe 1811 geladen. Nachdem die Daten geladen wurden, lagert Gruppe 1810 jene Datenwerte ein, die in Gruppe 1810 geladen wurden, die in die Klassen 0-1023 fallen, und Gruppe 1811 lagert jene Datenwerte ein, die in Gruppe 1811 geladen wurden, die in die Klassen 1024-2047 fallen. Nach dieser anfänglichen Einlagerungssequenz werden die Daten, die ursprünglich in Gruppe 1810 geladen wurde, in Gruppe 1811 verschoben, während die Daten, die ursprünglich in Gruppe 1811 geladen wurden, in eine andere Gruppe (wie etwa die Gruppe direkt unterhalb von Gruppe 1811 ) verschoben werden, die in die Klassen 0-1023 einlagert. Der Einfachheit halber wird in 18b das Verschieben von Daten, die ursprünglich in Gruppe 1811 geladen wurden, nicht gezeigt. Es ist zu beachten, dass Klassengrößen sogar noch weiter ausgeweitet werden können, indem mehr als zwei Gruppen kombiniert werden. Beispielsweise kann die 4 x 2-Gruppe von Ausführungsbahnen direkt unterhalb von Gruppe 1811 dazu verwendet werden, in den Klassenbereich 2048-3072 einzulagern.
  • In einem weiteren alternativen Einlagerungserweiterungsansatz, der als temporal bezeichnet wird, werden, anstatt physische Gruppen von Ausführungsbahnen zu kombinieren und das zweidimensionale Schieberegister zu verwenden, um zwischen kombinierten Gruppen umzuschalten, Gruppen von Ausführungsbahnen nicht kombiniert. Stattdessen werden die Einlagerungsbereiche kontextuell in die Ausführungsbahnen hineinund herausgeschaltet. In diesem Fall werden Daten beispielsweise anfänglich in alle Ausführungsbahngruppen geladen. Während einer ersten Iteration lagert jede Gruppe entsprechend eines ersten Klassenbereichs ein (z. B. Klassen 0-1023). Nachdem das Einlagern in den ersten Bereich vollständig ist, werden die Daten nicht innerhalb der Registermatrix verschoben, Einlagerungskontextinformationen, die jedoch bestimmen, welche Einlagerungsbereiche gültig sind, werden umgeschaltet (z. B. wird Kontext für das Einlagern in Bereiche 0-1023 aus den Ausführungsbahngruppen herausgeschaltet, und Kontext für das Einlagern in Bereiche 1024-2047 wird in die Ausführungsbahngruppen hineingeschaltet). Die Ausführungsbahnen führen dann erneut einen Einlagerungsprozess für den neuen, höheren Bereich aus. Der Prozess wird fortgesetzt, bis der letzte Einlagerungsbereichskontext hineingeschaltet ist und eingelagert wurde.
  • In verschiedenen Ausführungsformen hat der Bildprozessor einen Konfigurationsregisterbereich, um jegliche der oben beschriebenen Betriebsmodi einzurichten (z. B. kontextuelles Herausschalten des Schablonenprozessors, Zusammenführen des Ausführungsbahnregisterbereichs, globales Statistikverfolgen, Statistikverfolgen per Abschnitt, Fensterstatistikverfolgen, usw.). Die oben beschriebenen Statistikoperationen können in Programmcode kodifiziert werden (z. B. Objektcode, der durch einen Schablonenprozessor ausgeführt wird) und auf einem maschinenlesbaren Speichermedium gespeichert werden.
  • Obwohl verschiedene der obigen Ausführungsformen in gewissen Situationen Prozesse auf Zeilen und in anderen Situationen auf Spalten angewendet haben, sollte es leicht verständlich sein, dass Prozesse, die bei Zeilen durchgeführt werden stattdessen bei Spalten durchgeführt werden können und umgekehrt.
  • 19 zeigt eine integrierte Kamera 1901, ISP/IPU, und Prozessor 1902 . Die Kamera 1901 kann ein Objektiv 1907 und Bildsensor 1906 beinhalten. Rohbilddaten von der Kamera 1901 können von der Kamera 1901 an ein ISP-Subsystem weitergegeben werden, das einen Bildsignalprozessor (ISP) und/oder eine Bildverarbeitungseinheit (IPU) 1904 und eine Kamerastatistikeinheit 1905 beinhaltet. In verschiedenen Ausführungsformen ist die Kamerastatistikeinheit 1905 eine Hardwarekomponente, die Statistiken aus den Rohbilddaten berechnet, die von der Kamera 1901 mit dedizierten Logikschaltungen erzeugt werden. In noch weiteren Ausführungsformen ist die Kamerastatistikeinheit 1905 eine Softwarekomponente, und Kamerastatistiken werden auf IPU-Hardware 1904 ausgeführt, die dazu in der Lage ist, Programmcode auszuführen (hier ist Bildsignalverarbeitungs-(ISP)-Hardware gewöhnlich nicht dazu in der Lage, Programmcode auszuführen). Hier kann die IPU dazu konfiguriert sein, herkömmliche ISP-bezogene Aufgaben in Software durchzuführen, weshalb keine herkömmliche ISP tatsächlich auf der Plattform angebracht ist (d. h., dass alle Statistiken und Bildsignalverarbeitungsfunktionen durch eine IPU in Software durchgeführt werden). In noch weiteren Ansätzen kann das ISP/IPU-Subsystem als Kombination aus dedizierten Hardware-Statistikschaltungen auf einer IPU ausgeführter Software und/oder ISPHardwareschaltungen implementiert werden. Davon unabhängig kann die ISP/IPU 1904 in Implementierungen, in denen IPU-Hardware 1904 zumindest teilweise Statistiksoftware ausführt (oder in denen ISP/IPU-Hardware 1904 als Koprozessor oder Beschleuniger fungiert, der anstatt feinkörnigen Programmcode auszuführen, grobkörnigere Befehle in Bezug auf Statistik von einer Hardware-Statistikengine 1905 empfängt), eine zweidimensionale Schieberegistermatrixstruktur enthalten und Reduktionen durchführen und/oder Histogramme gemäß einer beliebigen der oben ausführlich dargelegten Erläuterungen und Lehren erzeugen. In solchen Ausführungsformen kann die ISP/IPU 1904 dafür ausgelegt sein, beliebige/ sämtliche IPU-Funktionen zu beinhalten, die oben in vorangegangenen Abschnitten ausführlich beschrieben werden.
  • Verschiedene Hardwareschaltungskomponenten des ISP/IPU-Subsystems können in ein großes System-On-Chip integriert werden, das außerdem den Prozessor 1902 und andere elektrische Funktionen (z. B. eine Grafikverarbeitungseinheit (GPU)) beinhaltet. Obwohl der Prozessor 1902 in vielen Ausführungsformen auch ein Prozessorkern eines Computersystems (wie z. B. ein Mobilgerät) sein kann. In anderen Ausführungsformen kann der Prozessor 1902 enger mit der Kamera 1901 verbunden oder sogar eine ihrer Komponenten sein.
  • Die Kamera-Statistikengine 1905 berechnet Statistiken von den Bildpunktdaten, die durch die Kamera 1901 erzeugt werden. Die Statistiken, die durch die Statistikengine 1905 erzeugt werden, können dann für Prozesse höherer Ordnung verwendet werden. Die Statistiken werden beispielsweise an den Prozessor 1902 weitergeleitet, der unter Nutzung der Statistiken Kamerasteuerungsfunktionen höherer Ordnung durchführt, wobei diese Funktionen höherer Ordnung Autofokus, automatische Belichtung und/oder automatischen Weißabgleich einschließen. Die Kamerasteuerungsfunktion kann z. B. als Software 1903 implementiert sein, die auf dem Prozessor 1902 ausgeführt wird (wie z. B. 3AKamerasteuerungssoftware, die mit einem Android-Betriebssystem assoziiert ist). Andere Arten von Statistikdaten für andere Nutzungen als zur Kamerasteuerung können darüber hinaus an den Prozessor 1902 oder an andere Positionen für andere Prozesse weitergeleitet werden (z. B. Statistikinformationen für Computer-Vision-Software oder -Hardware).
  • 20 zeigt eine Methodik, die durch die vorangegangenen Erläuterungen beschrieben wird. Wie in 20 ersichtlich, beinhaltet das Verfahren ein Laden einer Matrix von Inhalten in ein zweidimensionales Schieberegister 2001, wobei das zweidimensionale Schieberegister mit einer Ausführungsbahnmatrix verbunden ist. Das Verfahren beinhaltet des Weiteren ein wiederholtes Durchführen einer ersten Sequenz 2002 , die Folgendes umfasst: Verschieben, mit dem Schieberegister, von ersten Inhalten, die entlang einer bestimmten Zeile oder Spalte residieren, in eine andere, parallele Zeile oder Spalte, in der zweite Inhalte residieren, und Durchführen von mathematischen Operationen mit einer bestimmten entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte. Das Verfahren beinhaltet des Weiteren, wiederholt eine zweite Sequenz 2003 durchzuführen, die umfasst, Inhalte mit dem Schieberegister von einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz ist, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte zu verschieben. Die resultierende Zeile oder Spalte hat Werte, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden. Die zweite Sequenz beinhaltet des Weiteren ein Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz von ersten Positionen und entsprechende Inhaltselemente aus dem Satz von zweiten Positionen mit der Ausführungsbahnmatrix.
  • d. Ausführungsformen zur Implementierung
  • Es ist wichtig, darauf hinzuweisen, dass die oben beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur nicht zwangsläufig auf die Bildverarbeitung im herkömmlichen Sinne beschränkt sind und daher auf andere Anwendungen angewendet werden können, die ggf. veranlassen, dass der Bildprozessor neu charakterisiert wird (oder auch nicht). Wenn beispielsweise eines der vorstehend beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur bei der Erstellung und/oder Erzeugung und/oder Wiedergabe von Animationen anstatt bei der Verarbeitung von tatsächlichen Kamerabildern verwendet werden soll, kann der Bildprozessor als grafische Verarbeitungseinheit charakterisiert sein. Zudem können die oben beschriebenen Architekturmerkmale des Bildprozessors in anderen technischen Anwendungen, wie z. B. in der Videoverarbeitung, Bildverarbeitung, Bilderkennung und/oder dem maschinellen Lernen, angewendet werden. Auf diese Weise kann der Bildprozessor (z. B. als Koprozessor) in einen allgemeineren Universalprozessor (z. B. als Teil einer CPU des Computersystems) mit integriert werden oder ein eigenständiger Prozessor innerhalb eines Computersystems sein.
  • Die oben beschriebenen Hardware-Ausführungsformen können in einem Halbleiterchip und/oder als Beschreibung eines Schaltkreisdesigns zur letztendlichen Ausrichtung auf einen Halbleiterherstellungsprozess enthalten sein. Im letzteren Fall können diese Schaltkreisbeschreibungen die Form einer (z. B. VHDL oder Verilog) Beschreibung einer Registerüberleitungsschaltung (RTL), einer Torschaltung, einer Transistorschaltung oder einer Maske oder verschiedener Kombinationen derselben annehmen. Schaltungsbeschreibungen sind in der Regel auf einem computerlesbaren Speichermedium (wie z. B. einer CD-ROM oder einer anderen Art von Speichertechnologie) enthalten.
  • Aus den vorangehenden Abschnitten ist zu erkennen, dass ein Bildprozessor, wie oben beschrieben, in der Hardware auf einem Computersystem (z. B. als Teil eines Handgerätsystems on Chip (SOC), das Daten von der Kamera des Handgerätes verarbeitet) enthalten sein kann. In Fällen, in denen der Bildprozessor als Hardware-Schaltung ausgebildet ist, ist zu beachten, dass die Bilddaten, die von dem Bildprozessor verarbeitet werden, direkt von einer Kamera empfangen werden können. Hier kann der Bildprozessor Teil einer diskreten Kamera oder Teil eines Computersystems mit einer integrierten Kamera sein. Im letzteren Fall können die Bilddaten direkt von der Kamera oder aus dem Systemspeicher des Computersystems empfangen werden (z. B. sendet die Kamera ihre Bilddaten statt an den Bildprozessor an den Systemspeicher). Zu beachten ist außerdem, dass viele der in den vorangehenden Abschnitten beschriebenen Merkmale auf eine Bildprozessoreinheit (zur Darstellung von Animationen) anwendbar sind.
  • 21 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 etwa einem Smartphone oder Tablet-Computer) anwendbar. Fachleute auf dem Gebiet werden leicht zwischen beiden unterscheiden können.
  • Wie in 21 dargestellt, kann das grundlegende Computersystem eine zentrale Verarbeitungseinheit 2101 (die beispielsweise eine Vielzahl von Universal-Verarbeitungskernsystemen 2115_1 bis 2015_N und einen auf einem Multikernprozessor oder einem Anwendungsprozessor angeordneten Hauptspeichercontroller 2117 beinhalten kann), Systemspeicher 2102 , ein Display 2103 (z. B. Touchscreen, Flachbildschirm), eine lokal verdrahtete Punkt-zu-Punkt-Verbindung (z. B. eine USB-Schnittstelle) 2104 , verschiedene Netzwerk-E/A-Funktionen 2105 (wie z. B. eine Ethernet-Schnittstelle und/oder ein Mobilfunkmodem-Teilsystem), ein drahtloses lokales Netzwerk (z. B. WLAN) 2106, eine drahtlose Punkt-zuPunkt-Verbindung (z. B. Bluetooth-Schnittstelle) 2107 und eine globale Positionierungssystemschnittstelle 2108 , verschiedene Sensoren 2109_1 bis 2109_N , eine oder mehrere Kameras 2110, eine Batterie 2111, eine Energieverwaltungssteuereinheit 2112 , einen Lautsprecher und ein Mikrofon 2113 , sowie einen Audio-Kodierer/Dekodierer 2114 , beinhalten.
  • Ein Anwendungsprozessor oder Multikernprozessor 2150 kann einen oder mehrere Universalprozessorkerne 2115 innerhalb seiner CPUs 2101, eine oder mehrere grafische Verarbeitungseinheiten 2116, eine Speicherverwaltungsfunktion 2117 (z. B. einen Speichercontroller), eine E/A-Steuerfunktion 2118 und eine Bildverarbeitungseinheit 2119 beinhalten. Die Universalverarbeitungskerne 2115 führen in der Regel das Betriebssystem und die Anwendungssoftware des Computersystems aus. Die Grafikverarbeitungseinheiten 2116 führen in der Regel grafikintensive Funktionen aus, um z. B. Grafikdaten zu erzeugen, die auf dem Display 2103 dargestellt werden. Die Speichersteuerfunktion 2117 ist mit dem Systemspeicher 2102 verbunden, um Daten in den Systemspeicher 2102 zu schreiben bzw. aus diesem einzulesen. Die Leistungsverwaltungssteuereinheit 2112 steuert im Allgemeinen den Energieverbrauch des Systems 2100 .
  • Die Bildverarbeitungseinheit 2119 kann gemäß einer der oben in den vorangehenden Abschnitten beschriebenen Ausführungsformen der Bildverarbeitungseinheit implementiert sein. Alternativ dazu oder in Kombination kann die IPU 2119 mit einer oder sowohl der GPU 2116 als auch dem CPU 2101 als Koprozessor derselben gekoppelt sein. Darüber hinaus kann in verschiedenen Ausführungsformen die GPU 2116 mit einem der oben beschriebenen Prozessormerkmale implementiert sein.
  • Das Touchscreen-Display 2103 , die Kommunikationsschnittstellen 2104 -2107 , die GPS-Schnittstelle 2108, die Sensoren 2109, die Kamera 2110 und der Lautsprecher/Mikrofon-Codec 2113 , 2114 können alle als unterschiedliche Formen von E/A (Eingabe und/oder Ausgabe) in Bezug auf das gesamte Rechensystem betrachtet werden, darunter auch gegebenenfalls ein integriertes Peripheriegerät (z. B. die eine oder mehrere Kameras 2110 ). Je nach Implementierung können verschiedene dieser E-/A-Komponenten auf dem Anwendungsprozessor/Multikernprozessor 2150 integriert sein oder sich außerhalb des Chips oder außerhalb des Pakets des Anwendungsprozessors/Multikernprozessors 2150 befinden.
  • In einer Ausführungsform beinhalten eine oder mehrere Kameras 2110 eine Tiefenkamera, die in der Lage ist, die Tiefe zwischen der Kamera und einem Objekt in deren Sichtfeld zu messen. Anwendungssoftware, Betriebssystemsoftware, Gerätetreibersoftware und/oder Firmware, die auf einem universellen CPU-Kern (oder einem anderen Funktionsblock mit einer Befehlsausführungspipeline zum Ausführen eines Programmcodes) eines Anwendungsprozessors oder eines anderen Prozessors ausgeführt werden, können sämtliche der oben beschriebenen Funktionen ausführen.
  • Ausführungsformen der Erfindung können, wie oben dargelegt, verschiedene Verfahren beinhalten. Die Prozesse können in maschinenausführbaren Befehlen enthalten sein. Die Befehle können dazu verwendet werden, einen Universalprozessor oder Spezialprozessor dazu zu veranlassen, bestimmte Prozesse auszuführen. Alternativ dazu können diese Prozesse von spezifischen Hardwarekomponenten ausgeführt werden, die eine fest verdrahtete Logik zum Ausführen der Prozesse oder eine beliebige Kombination von programmierten Computerkomponenten und benutzerdefinierten Hardwarekomponenten enthalten.
  • Elemente der vorliegenden Erfindung können darüber hinaus als maschinenlesbares Medium zum Speichern der maschinenausführbaren Befehle bereitgestellt sein. Das maschinenlesbare Medium kann unter anderem Disketten, optische Platten, CD-ROMs und magneto-optische Platten, FLASH-Speicher, ROMs, RAMs, EPROMs, EEPROMs, magnetische oder optische Karten, Ausbreitungsmedien oder andere Arten von Medien/maschinenlesbaren Medien, die für die Speicherung von elektronischen Befehlen geeignet sind, beinhalten. Elemente können 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 wird.
  • In der vorangegangenen Spezifikation wurden spezifische exemplarische Ausführungsformen beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von dem in den beigefügten Ansprüchen dargelegten Erfindungsgedanken und Umfang der Erfindung abzuweichen. Die Beschreibung und die Zeichnungen sind daher in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.

Claims (23)

  1. Verfahren, umfassend: Laden (2001) einer Matrix von Inhalten in ein zweidimensionales Schieberegister, wobei das zweidimensionale Schieberegister mit einer Ausführungsbahnmatrix verbunden ist; wiederholtes Durchführen (2002) einer ersten Sequenz, die Folgendes umfasst: Verschieben mit dem Schieberegister erster Inhalte, die sich entlang einer bestimmten Zeile oder Spalte befinden, in eine andere parallele Zeile oder Spalte, in der sich zweite Inhalte befinden und Durchführen mathematischer Operationen mit einer bestimmten entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte; und wiederholtes Durchführen (2003) einer zweiten Sequenz, die Folgendes umfasst: Verschieben mit dem Schieberegister von Inhalten von einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte, wobei die resultierende Zeile oder Spalte Werte aufweist, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden, und Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz von ersten Positionen und entsprechende Inhaltselemente aus dem Satz von zweiten Positionen mit der Ausführungsbahnmatrix; des Weiteren umfassend das wiederholte Laden der ersten Sequenz und der zweiten Sequenz über jedwedes der Folgenden hinweg: ein gesamtes Bild als Ganzes (global); Abschnitte eines Bildes; ein Fenster eines Bildes; wobei über Abschnitte eines Bildes operiert wird und des Weiteren ein kontextuelles Umschalten akkumulierter Inhalte über das Verarbeiten von Abschnittsgrenzen hinweg durchgeführt wird.
  2. Verfahren nach Anspruch 1, wobei die mathematischen Operationen Additionen umfassen.
  3. Verfahren nach Anspruch 2, wobei die Inhalte Bildintensitätswerte umfassen.
  4. Verfahren nach Anspruch 2, wobei die Inhalte Zählungen per Klassen eines Histogramms umfassen.
  5. Verfahren nach Anspruch 4, wobei Inhalte, die Zählungen für einen Satz von Klassen des Histogramms enthalten, in eine Position verschoben werden, die Inhalte aufweist, die Zählungen für denselben Satz von Klassen des Histogramms enthalten.
  6. Verfahren nach Anspruch 4 oder 5, wobei der Satz von ersten Positionen und der zweite Satz von ersten Positionen Zählungen per Klassen von unterschiedlichen Klassen des Histogramms beinhaltet.
  7. Verfahren nach Anspruch 6, des Weiteren umfassend, vor der ersten und zweiten Sequenz, ein Zusammenführen von Speicherplatz, der nominell für individuelle Ausführungsbahnen reserviert ist, und ein Veranlassen von Gruppen von Ausführungsbahnen, in zusammengeführten Speicherplatz zu schreiben, um Klassenzählerstände zu aktualisieren.
  8. Verfahren nach jedwedem der vorangegangenen Ansprüche, wobei die Inhalte Bildinhalten entsprechen.
  9. Verfahren nach jedwedem der vorangegangenen Ansprüche, wobei die zweite Sequenz des Weiteren umfasst: Verschieben mit dem Schieberegister von Inhalten von einem zweiten Satz von ersten Positionen entlang einer zweiten resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden zweiten Satz von zweiten Positionen entlang der zweiten resultierenden Zeile oder Spalte, wobei die zweite resultierende Zeile oder Spalte Werte aufweist, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden, und Durchführen zweiter mathematischer Operationen auf Inhaltselemente aus dem zweiten Satz von ersten Positionen und entsprechende Inhaltselemente aus dem zweiten Satz von zweiten Positionen.
  10. Maschinenlesbares Speichermedium, das Programmcode enthält, der, wenn er von einem Prozessor verarbeitet wird, der ein zweidimensionales Schieberegister umfasst, das mit einer Ausführungsbahnmatrix verbunden ist, ein Verfahren zur Durchführung veranlasst, wobei dieses Folgendes umfasst: Laden (2001) einer Matrix von Inhalten in das zweidimensionale Schieberegister; Wiederholtes Durchführen (2002) einer ersten Sequenz, die Folgendes umfasst: Verschieben, mit dem Schieberegister, von ersten Inhalten, die entlang einer bestimmten Zeile oder Spalte residieren, in eine andere, parallele Zeile oder Spalte, in der zweite Inhalte residieren, und Durchführen von mathematischen Operationen mit einer bestimmten entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte; und Wiederholtes Durchführen (2003) einer zweiten Sequenz, die Folgendes umfasst: Verschieben mit dem Schieberegister von Inhalten von einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte, wobei die resultierende Zeile oder Spalte Werte aufweist, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden, und Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz von ersten Positionen und entsprechende Inhaltselemente aus dem Satz von zweiten Positionen mit der Ausführungsbahnmatrix; des Weiteren umfassend das Laden der ersten Sequenz und der zweiten Sequenz über jedwedes der Folgenden hinweg: ein gesamtes Bild als Ganzes (global); Abschnitte eines Bildes; ein Fenster eines Bildes; wobei Abschnitte eines Bildes bearbeitet werden und des Weiteren ein kontextuelles Umschalten akkumulierter Inhalte über das Verarbeiten von Abschnittsgrenzen hinweg durchgeführt wird.
  11. Maschinenlesbares Speichermedium nach Anspruch 10, wobei die mathematischen Operationen Additionen umfassen.
  12. Maschinenlesbares Speichermedium nach Anspruch 11, wobei die Inhalte Bildintensitätswerte umfassen.
  13. Maschinenlesbares Speichermedium nach Anspruch 12, wobei die Inhalte Zählungen per Klassen eines Histogramms umfassen.
  14. Maschinenlesbares Speichermedium nach Anspruch 13, wobei Inhalte, die Zählungen für einen Satz von Klassen des Histogramms enthalten, in eine Position verschoben werden, die Inhalte aufweist, die Zählungen für den selben Satz von Klassen eines Histogramms enthalten.
  15. Maschinenlesbares Speichermedium nach Anspruch 13 oder 14, wobei die Inhalte eine Zählung per Klassen eines Histogramms umfassen, wobei der Satz von ersten Positionen und der zweite Satz von ersten Positionen Zählungen per unterschiedlicher Klassen des Histogramms beinhalten.
  16. Maschinenlesbares Speichermedium nach Anspruch 15, des Weiteren umfassend, vor der ersten und zweiten Sequenz, ein Zusammenführen von Speicherplatz, der nominell für individuelle Ausführungsbahnen reserviert ist, und ein Veranlassen von Gruppen von Ausführungsbahnen, in zusammengeführten Speicherplatz zu schreiben, um Klassenzählerstände zu aktualisieren.
  17. Maschinenlesbares Speichermedium nach jedwedem der Ansprüche 10 bis 16, wobei die Inhalte Bildinhalten entsprechen.
  18. Maschinenlesbares Speichermedium nach jedwedem der Ansprüche 10 bis 17, wobei die zweite Sequenz des Weiteren umfasst: Verschieben mit dem Schieberegister von Inhalten von einem zweiten Satz von ersten Positionen entlang einer zweiten resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden zweiten Satz von zweiten Positionen entlang der zweiten resultierenden Zeile oder Spalte, wobei die zweite resultierende Zeile oder Spalte Werte aufweist, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden, und Durchführen zweiter mathematischer Operationen auf Inhaltselemente aus dem zweiten Satz von ersten Positionen und entsprechende Inhaltselemente aus dem zweiten Satz von zweiten Positionen.
  19. Computersystem, umfassend: eine Vielzahl von Prozessorkernen; einen mit dem Systemspeicher und der Vielzahl von Prozessorkernen gekoppelten Speichercontroller; einen Bildprozessor, wobei der Bildprozessor ein zweidimensionales Schieberegister aufweist, das mit einer Ausführungsbahnmatrix verbunden ist; Speichermedium, das einen Programmcode enthält, der bei Verarbeitung durch den Bildprozessor bewirkt, dass ein Verfahren ausgeführt wird., das Folgendes umfasst: Laden (2001) einer Matrix von Inhalten in das zweidimensionale Schieberegister; Wiederholtes Durchführen (2002) einer ersten Sequenz, die Folgendes umfasst: Verschieben, mit dem Schieberegister, von ersten Inhalten, die entlang einer bestimmten Zeile oder Spalte residieren, in eine andere, parallele Zeile oder Spalte, in der zweite Inhalte residieren, und Durchführen von mathematischen Operationen mit einer bestimmten entsprechenden Zeile oder Spalte der Ausführungsbahnmatrix auf die ersten und zweiten Inhalte; und Wiederholtes Durchführen (2003) einer zweiten Sequenz, die Folgendes umfasst: Verschieben mit dem Schieberegister von Inhalten von einem Satz von ersten Positionen entlang einer resultierenden Zeile oder Spalte, die parallel zu den Zeilen oder Spalten der ersten Sequenz verläuft, in einen entsprechenden Satz von zweiten Positionen entlang der resultierenden Zeile oder Spalte, wobei die resultierende Zeile oder Spalte Werte aufweist, die zumindest teilweise aus den mathematischen Operationen der ersten Sequenz bestimmt werden, und Durchführen mathematischer Operationen auf Inhaltselemente aus dem Satz von ersten Positionen und entsprechende Inhaltselemente aus dem Satz von zweiten Positionen mit der Ausführungsbahnmatrix des Weiteren umfassend das Laden der ersten Sequenz und der zweiten Sequenz über jedwedes der Folgenden hinweg: ein gesamtes Bild als Ganzes (global); Abschnitte eines Bildes; ein Fenster eines Bildes; wobei Abschnitte eines Bildes bearbeitet werden und des Weiteren ein kontextuelles Umschalten akkumulierter Inhalte über das Verarbeiten von Abschnittsgrenzen hinweg durchgeführt wird.
  20. Computersystem nach Anspruch 19, wobei die mathematischen Operationen Additionen umfassen.
  21. Computersystem nach Anspruch 20, wobei die Inhalte Bildintensitätswerte umfassen.
  22. Computersystem nach Anspruch 21, wobei die Inhalte Zählungen per Klassen eines Histogramms umfassen.
  23. Computersystem nach Anspruch 22, wobei Inhalte, die Zählungen für einen Satz von Klassen des Histogramms enthalten, in eine Position verschoben werden, die Inhalte aufweist, die Zählungen für denselben Satz von Klassen eines Histogramms enthalten.
DE102017113735.1A 2016-07-01 2017-06-21 Statistische Operationen auf einem zweidimensionalen Bildprozessor Active DE102017113735B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/201,134 US20180005059A1 (en) 2016-07-01 2016-07-01 Statistics Operations On Two Dimensional Image Processor
US15/201,134 2016-07-01

Publications (2)

Publication Number Publication Date
DE102017113735A1 DE102017113735A1 (de) 2018-01-04
DE102017113735B4 true DE102017113735B4 (de) 2022-09-01

Family

ID=59227904

Family Applications (2)

Application Number Title Priority Date Filing Date
DE202017103695.2U Active DE202017103695U1 (de) 2016-07-01 2017-06-21 Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE102017113735.1A Active DE102017113735B4 (de) 2016-07-01 2017-06-21 Statistische Operationen auf einem zweidimensionalen Bildprozessor

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE202017103695.2U Active DE202017103695U1 (de) 2016-07-01 2017-06-21 Statistische Operationen auf einem zweidimensionalen Bildprozessor

Country Status (8)

Country Link
US (2) US20180005059A1 (de)
JP (1) JP6895466B2 (de)
KR (1) KR102253027B1 (de)
CN (1) CN107563951B (de)
DE (2) DE202017103695U1 (de)
GB (1) GB2554492B (de)
TW (2) TWI661360B (de)
WO (1) WO2018005029A1 (de)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503689B2 (en) * 2017-05-15 2019-12-10 Google Llc Image processor I/O unit
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
CN111183433B (zh) 2017-08-09 2023-10-31 谷歌有限责任公司 减少量子网格中的寄生相互作用
JP6931122B2 (ja) 2017-08-09 2021-09-01 グーグル エルエルシーGoogle LLC 表面符号誤り訂正のためのキュービットグリッドにおける寄生相互作用の低減
US11087233B2 (en) * 2017-08-09 2021-08-10 Google Llc Frequency pattern for reducing parasitic interactions in a qubit grid
US10467142B1 (en) * 2019-05-07 2019-11-05 12 Sigma Technologies Enhancement of real-time response to request for detached data analytics
US11500811B2 (en) * 2020-06-12 2022-11-15 Alibaba Group Holding Limited Apparatuses and methods for map reduce
KR20220049325A (ko) * 2020-10-14 2022-04-21 삼성전자주식회사 가속기 및 이를 포함한 전자 장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5093871A (en) 1989-10-10 1992-03-03 Unisys Corporation Method and apparatus for effecting background suppression of image data

Family Cites Families (113)

* 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
JPS60151789A (ja) * 1984-01-19 1985-08-09 Hitachi Ltd 多機能画像処理プロセツサ
JPS6379180A (ja) 1987-03-06 1988-04-09 Hitachi Ltd 並列画像処理用lsi
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
US4972495A (en) * 1988-12-21 1990-11-20 General Electric Company Feature extraction processor
US4939642A (en) * 1989-02-01 1990-07-03 The Board Of Trustees Of The Leland Stanford Jr. University Virtual bit map processor
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
US5173947A (en) * 1989-08-01 1992-12-22 Martin Marietta Corporation Conformal image processing apparatus and method
GB8925723D0 (en) * 1989-11-14 1990-01-04 Amt Holdings Processor array system
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
US5581773A (en) * 1992-05-12 1996-12-03 Glover; Michael A. Massively parallel SIMD processor which selectively transfers individual contiguously disposed serial memory elements
US5644517A (en) * 1992-10-22 1997-07-01 International Business Machines Corporation Method for performing matrix transposition on a mesh multiprocessor architecture having multiple processor with concurrent execution of the multiple processors
US5428804A (en) * 1992-12-18 1995-06-27 Xerox Corporation Edge crossing circuitry for SIMD architecture
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
EP0875031B1 (de) 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6148111A (en) * 1998-04-27 2000-11-14 The United States Of America As Represented By The Secretary Of The Navy Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
WO2000055810A1 (fr) 1999-03-16 2000-09-21 Hamamatsu Photonics K. K. Capteur de vision ultra-rapide
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US6681058B1 (en) * 1999-04-15 2004-01-20 Sarnoff Corporation Method and apparatus for estimating feature values in a region of a sequence of images
EP1107107A1 (de) * 1999-12-10 2001-06-13 Koninklijke Philips Electronics N.V. Parallele Datenverarbeitung und Mischung
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
GB2371459B (en) * 2001-01-19 2005-05-04 Pixelfusion Ltd Image scaling
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
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
US7506135B1 (en) * 2002-06-03 2009-03-17 Mimar Tibet Histogram generation with vector operations in SIMD and VLIW processor by consolidating LUTs storing parallel update incremented count values for vector data elements
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
EP1450214A1 (de) * 2002-12-16 2004-08-25 Ricoh Company System zur Datenkonversion für Bildverarbeitung und Bilderzeugungsgerät
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
ATE504043T1 (de) 2005-04-28 2011-04-15 Univ Edinburgh Umkonfigurierbares anweisungs-zellen-array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US20070198901A1 (en) * 2005-07-12 2007-08-23 Amit Ramchandran Configurable interface for connecting various chipsets for wireless communication to a programmable (multi-)processor
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US20070073999A1 (en) * 2005-09-28 2007-03-29 Verheyen Henry T Hardware acceleration system for logic simulation using shift register as local cache with path for bypassing shift register
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
US20070126673A1 (en) 2005-12-07 2007-06-07 Kostadin Djordjev Method and system for writing data to MEMS display elements
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7750915B1 (en) * 2005-12-19 2010-07-06 Nvidia Corporation Concurrent access of data elements stored across multiple banks in a shared memory resource
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US8176265B2 (en) * 2006-10-30 2012-05-08 Nvidia Corporation Shared single-access memory with management of multiple parallel requests
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
US7876330B2 (en) * 2007-03-30 2011-01-25 Kabushiki Kaisha Toshiba Color conversion apparatus, filter processing apparatus and color conversion method
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
US8117137B2 (en) * 2007-04-19 2012-02-14 Microsoft Corporation Field-programmable gate array based accelerator system
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
EP2663071B1 (de) 2007-09-05 2015-11-18 Tohoku University Festkörperabbildungssensor und Ansteuerungsverfahren dafür
US9513905B2 (en) * 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
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
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
JP5302769B2 (ja) * 2009-05-14 2013-10-02 キヤノン株式会社 スキャン変換装置及び画像符号化装置及びそれらの制御方法
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8726281B2 (en) * 2009-08-31 2014-05-13 Imec Method and system for improving performance and reducing energy consumption by converting a first program code into a second program code and implementing SIMD
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
GB2483225B (en) * 2010-08-27 2018-07-11 Nvidia Tech Uk Limited Improved processor architecture
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
US9337459B2 (en) * 2011-09-29 2016-05-10 Panasonic Intellectual Property Management Co., Ltd. Sealed secondary battery
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
KR20140085468A (ko) 2011-10-28 2014-07-07 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘.피. 행 시프팅 시프트가능 메모리
US9538177B2 (en) * 2011-10-31 2017-01-03 Mediatek Inc. Apparatus and method for buffering context arrays referenced for performing entropy decoding upon multi-tile encoded picture and related entropy decoder
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
JP6020091B2 (ja) 2012-11-27 2016-11-02 富士通株式会社 演算処理装置の制御プログラム、演算処理装置の制御方法および演算処理装置
US9490971B2 (en) * 2012-12-28 2016-11-08 Intel Corporation Instruction for fast ZUC algorithm processing
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9146885B2 (en) * 2013-05-17 2015-09-29 Analog Devices, Inc. Parallel atomic increment
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
JP6329412B2 (ja) * 2014-03-26 2018-05-23 株式会社メガチップス Simdプロセッサ
US9569811B2 (en) * 2014-06-26 2017-02-14 Qualcomm Incorporated Rendering graphics to overlapping bins
GB2533284B (en) 2014-12-11 2017-04-12 Imagination Tech Ltd Performing object detection
US9678716B2 (en) * 2014-12-22 2017-06-13 Arm Limited Apparatus and method for performing absolute difference operation
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10402946B2 (en) * 2015-03-17 2019-09-03 Lexmark International, Inc. System and method for performing orthogonal rotation and mirroring operation in a device
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
KR102370617B1 (ko) * 2015-04-23 2022-03-04 삼성전자주식회사 적응적 샘플링을 수행하여 영상을 처리하는 방법 및 장치.
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9632979B2 (en) * 2015-06-01 2017-04-25 Intel Corporation Apparatus and method for efficient prefix sum operation
WO2017015649A1 (en) * 2015-07-23 2017-01-26 Mireplica Technology, Llc Performance enhancement for two-dimensional array processor
US9760794B2 (en) * 2015-09-25 2017-09-12 Intel Corporation Method and system of low-complexity histrogram of gradients generation for image processing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5093871A (en) 1989-10-10 1992-03-03 Unisys Corporation Method and apparatus for effecting background suppression of image data

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HAMEED, Rehan. Balancing Efficiency and Flexibility in Specialized Computing. Dissertation, Stanford University, 2013.

Also Published As

Publication number Publication date
TWI661360B (zh) 2019-06-01
TWI736880B (zh) 2021-08-21
TW201812641A (zh) 2018-04-01
US10915773B2 (en) 2021-02-09
CN107563951B (zh) 2021-06-08
WO2018005029A1 (en) 2018-01-04
DE202017103695U1 (de) 2017-11-21
US20180005059A1 (en) 2018-01-04
GB201709787D0 (en) 2017-08-02
DE102017113735A1 (de) 2018-01-04
KR102253027B1 (ko) 2021-05-17
KR20190028453A (ko) 2019-03-18
TW201928760A (zh) 2019-07-16
CN107563951A (zh) 2018-01-09
GB2554492A (en) 2018-04-04
JP6895466B2 (ja) 2021-06-30
US20180005061A1 (en) 2018-01-04
GB2554492B (en) 2020-05-06
JP2019526849A (ja) 2019-09-19

Similar Documents

Publication Publication Date Title
DE102017113735B4 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE102017113733B4 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE202017103725U1 (de) Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102017103764A1 (de) Compilerverwalteter speicher für bildprozessor
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE112016001835T5 (de) Blattgenerator für Bildprozessor
DE102017113867A1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102016211642A1 (de) Patch-speichersystem
DE102019115060A1 (de) Verfahren and einrichtung zur speicherzugriffsverwaltung für die datenverarbeitung
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE102013020614A1 (de) Mit Mehrfachauflösung konsistente Rastereinteilung
DE102015107869A1 (de) Vergabe von Primitiven an Primitiv-Blöcke
DE102008031998A1 (de) System, Verfahren und Computerprogrammprodukt zum Ausführen einer Scanfunktion
DE112005003265T5 (de) Registerdateibereiche für ein Verarbeitungssystem
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität
DE102009038454A1 (de) System und Verfahren zum Reduzieren einer Ausführungsdivergenz in Parallelverarbeitungsarchitekturen
DE102019112353A1 (de) Lade/speicher-befehl
DE102015101543A1 (de) Verarbeitung von primitivblöcken in parallelen kachelungsmaschinen-pipes
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102010050430A1 (de) Das Durchführen paralleler Schattierungsoperationen
DE102014119038A1 (de) Ausführung von Verarbeitungsvorgängen in einer SIMD-Verarbeitungseinheit
DE102016125846A1 (de) Makro-E/A-Einheit für Grafikprozessor

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R081 Change of applicant/patentee

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

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

R082 Change of representative

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

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

R082 Change of representative

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

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final