DE102016125846A1 - Makro-E/A-Einheit für Grafikprozessor - Google Patents
Makro-E/A-Einheit für Grafikprozessor Download PDFInfo
- Publication number
- DE102016125846A1 DE102016125846A1 DE102016125846.6A DE102016125846A DE102016125846A1 DE 102016125846 A1 DE102016125846 A1 DE 102016125846A1 DE 102016125846 A DE102016125846 A DE 102016125846A DE 102016125846 A1 DE102016125846 A1 DE 102016125846A1
- Authority
- DE
- Germany
- Prior art keywords
- graphics processor
- external memory
- data
- unit
- image data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/003—Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
- G09G5/006—Details of the interface to the display terminal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/17—Interprocessor communication using an input/output type connection, e.g. channel, I/O port
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G5/00—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
- G09G5/02—Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N1/00—Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
- H04N1/32—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
- H04N1/32358—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09G—ARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
- G09G2340/00—Aspects of display data processing
- G09G2340/02—Handling of images in compressed format, e.g. JPEG, MPEG
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N2201/00—Indexing scheme relating to scanning, transmission or reproduction of documents or the like, and to details thereof
- H04N2201/32—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device
- H04N2201/3285—Circuits or arrangements for control or supervision between transmitter and receiver or between image input and image output device, e.g. between a still-image camera and its memory or between a still-image camera and a printer device using picture signal storage, e.g. at transmitter
- H04N2201/329—Storage of less than a complete document page or image frame
- H04N2201/3291—Storage of less than a complete document page or image frame of less than a complete line of data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
- Memory System (AREA)
Abstract
Description
- VERWEIS AUF VORANMELDUNG
- Diese Anmeldung beansprucht die Priorität der provisorischen US-Anmeldung Nr. 62/300,880, „Makro-E/A-Einheit für Grafikprozessor“, eingereicht am 28. Februar 2016, die hiermit in ihrer Gesamtheit durch Bezugnahme aufgenommen ist.
- Gebiet der Erfindung
- Das Gebiet der Erfindung betrifft im Allgemeinen die Bildverarbeitung und insbesondere eine Makro-E/A-Einheit für einen Grafikprozessor.
- Hintergrund
- Die Bildverarbeitung beinhaltet in der Regel die Verarbeitung von Bildpunktwerten, die in einer Matrix gegliedert sind. Hierbei erfasst eine räumlich gegliederte zweidimensionale Matrix die zweidimensionale Natur von Bildern (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 die Bewegung in Bildern zu erfassen. Herkömmliche Grafikprozessoren fallen in der Regel auf eine Seite 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 Anwendungs-Software-Entwicklungsplattform bereitstellt, resultiert dessen Verwendung feinerer Datenstrukturen, die mit den zugehörigen Verwaltungsdaten kombiniert werden (z. B. Befehlsabruf und -dekodierung, Handhabung von chipinternen und chipexternen Daten, spekulative Ausführung) letztendlich in einen Verbrauch größerer Energiemengen pro Dateneinheit während der Ausführung der 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 Funktionsschaltkreise im Allgemeinen zu einer begrenzten Menge von Arbeitsschritten, die der Prozessor ausführen kann. Dementsprechend fehlt im zweiten Extrem die vielseitige Programmierumgebung (die mit dem ersten Extrem verbunden ist).
- Eine Technologieplattform, die sowohl vielseitige Anwendungssoftware-Entwicklungsmöglichkeiten als auch eine verbesserte Energieeffizienz pro Dateneinheit bietet, bleibt eine wünschenswerte und dennoch fehlende Lösung.
- Kurzdarstellung
- Ein Grafikprozessor wird beschrieben. Der Grafikprozessor beinhaltet eine E/A-Einheit zum Einlesen von Eingangsbilddaten aus einem externen Speicher, welche von dem Grafikprozessor verarbeitet und als Ausgabebilddaten von dem Grafikprozessor in den externen Speicher geschrieben werden. Die E/A-Einheit beinhaltet mehrere logische Kanaleinheiten. Jede logische Kanaleinheit dient dazu, einen logischen Kanal zwischen dem externen Speicher und einer jeweiligen Erzeuger- oder Abnehmerkomponente innerhalb des Grafikprozessors zu bilden. Jede logische Kanaleinheit ist dafür ausgelegt, eine Umformatierungs- und eine Adressierungsschaltung zu verwenden. Die Adressierungsschaltung dient zum Steuern von Adressierungsschemata, die auf den externen Speicher angewendet werden, und zum Umformatieren von Bilddaten zwischen dem externen Speicher und der jeweiligen Erzeuger- oder Abnehmerkomponente. Die Umformatierungsschaltung dient zur Durchführung der Umformatierung.
- Eine Vorrichtung wird beschrieben. Die Vorrichtung beinhaltet ein Instrument, die eine logische Verbindung zu einer Abnehmerkomponente innerhalb eines Grafikprozessors ermöglicht. Die Vorrichtung beinhaltet zudem ein Instrument zum Einlesen einer Reihe von Bildbereichen mit begrenzter Breite aus einem Frame von Bilddaten, wobei jeder der Bildbereiche gemäß einem RGB-Format formatiert ist. Die Vorrichtung beinhaltet außerdem Instrumente zum Umformatieren der Reihe von Bildbereichen mit begrenzter Breite in Bilddatenblöcke mit derselben Farbe. Die Vorrichtung beinhaltet darüber hinaus ein Instrument zum Weiterleiten der Bilddatenblöcke, die dieselbe Farbe aufweisen, an die Abnehmerkomponente.
- Figurenverzeichnis
- Die folgende Beschreibung und begleitenden Zeichnungen dienen dazu, Ausführungsformen der Erfindung zu veranschaulichen. Für die Zeichnungen gilt:
-
1 zeigt verschiedene Komponenten einer Technologieplattform; -
2a zeigt eine Ausführungsform einer Anwendungssoftware, die mit Systemkernen aufgebaut ist; -
2b zeigt eine Ausführungsform der Struktur eines Systemkerns; -
3 zeigt eine Ausführungsform des Betriebs eines Systemkerns; -
4 zeigt eine Ausführungsform einer Grafikprozessor-Hardwarearchitektur; -
5a ,5b ,5c ,5d und5e zeigen das Parsen von Bilddaten in eine Zeilengruppe, das Parsen einer Zeilengruppe in ein Datenblatt und die an einem Datenblatt mit überlappenden Schablonen durchgeführte Operation; -
6 zeigt eine Ausführungsform eines Schablonenprozessors; -
7 zeigt eine Ausführungsform der Konfiguration und Programmierung eines Grafikprozessors -
8 zeigt ein aus Zeilengruppen bestehendes Frame; -
9a ,9b und9c zeigen Konstruktions- und Ausführungsformen einer Zeilenpuffereinheit; -
9d und9e zeigen Ausführungsformen eines programmierbaren Registerbereichs eines Grafikprozessors; -
10a und10b zeigen eine virtuell schlanke Betriebsart; -
11a und11b zeigen Ausführungsformen der Makro-E/A-Einheiten; -
12a und12b zeigen eine erste Fähigkeit einer Ausführungsform einer Makro-E/A-Einheit; -
13 zeigt eine zweite Fähigkeit einer Ausführungsform einer Makro-E/A-Einheit; -
14 zeigt eine Methodik, die mithilfe einer Ausführungsform einer Makro-E/A-Einheit durchgeführt wird; -
15 zeigt eine Ausführungsform eines Rechensystems. - Ausführliche Beschreibung
- i. Einführung
- Die nachfolgende Beschreibung beschreibt zahlreiche Ausführungsformen, die eine neue Bildverarbeitungstechnologieplattform betreffen, welche eine vielseitig einsetzbare Anwendungssoftware-Entwicklungsumgebung bereitstellt, die größere Datenblöcke (z. B. Zeilengruppen und Arbeitsblätter, wie weiter unten beschrieben) verwendet, um für eine verbesserte Energieeffizienz zu sorgen.
- 1.0 Anwendungssoftware-Entwicklungsumgebung
- a. Anwendung und Struktur der Kernsysteme
-
1 zeigt eine umfassende Ansicht einer Grafikprozessortechnologieplattform, die eine virtuelle Bildverarbeitungsumgebung101 , die eigentliche Bildverarbeitungshardware103 und einen Compiler102 beinhaltet, um einen übergeordneten für die virtuelle Verarbeitungsumgebung101 geschriebenen Code in Objektcode übersetzt, welcher von der eigentlichen Hardware103 physisch ausgeführt wird. Wie nachfolgend näher beschrieben wird, ist die virtuelle Verarbeitungsumgebung101 in Bezug auf die Anwendungen, die entwickelt werden können, vielseitig und für eine einfache Visualisierung der Prozesse einer Anwendung zugeschnitten. Nach Beendigung des Programmcode-Entwicklungsaufwands durch den Entwickler104 übersetzt der Compiler102 den Code, der in die virtuelle Verarbeitungsumgebung101 geschrieben wurde, in einen Objektcode, der für die eigentliche Hardware103 ausgerichtet ist. -
2a zeigt eine exemplarische Ausführungsform der Struktur und Form, welche die Anwendungssoftware, die in die virtuelle Umgebung geschrieben wird, annehmen kann. Wie in2a dargestellt, kann erwartet werden, dass der Programmcode ein oder mehrere Frames der Eingangsbilddaten201 verarbeitet, um eine Gesamttransformation an den Eingangsbilddaten201 zu bewirken. Die Transformation wird mit dem Betrieb eines oder mehrerer Kernsysteme des Programmcodes202 realisiert, die an den Eingangsbilddaten in einer abgestimmten Sequenz arbeiten, welche von dem Entwickler gebildet wird. - Wie in
2a erkennbar, wird die Gesamttransformation durch eine erste Verarbeitung der jeweiligen Eingangsbilder mit einem ersten Kernsystem K1 beeinflusst. An den vom Kernsystem K1 erzeugten Ausgabebildern arbeitet dann das Kernsystem K2. An jedem der vom Kernsystem K2 erzeugten Ausgabebilder arbeitet dann das Kernsystem K3_1 oder K3_2 gearbeitet. An den vom bzw. von den Kernsystem(en) K3_1/K3_2 erzeugten Ausgabebildern arbeitet dann das Kernsystem K4. Die Kernsysteme K3_1 und K3_2 können identische Kernsysteme sein, die so beschaffen sind, dass sie die Gesamtverarbeitung beschleunigen, indem sie eine Parallelverarbeitung in der K3-Stufe auferlegen, oder können unterschiedliche Kernsysteme sein (z. B. wird das Kernsystem K3_1 auf Eingabebildern eines ersten spezifischen Typs und das Kernsystem K3_2 auf Eingabebildern eines zweiten, unterschiedlichen Typs betrieben). - Daher kann die größere Gesamtbildverarbeitungssequenz die Form einer Bildverarbeitungspipeline oder eines gerichteten azyklischen Graphen (DAG) annehmen und die Entwicklungsumgebung kann dafür ausgestattet sein, dem Entwickler eine tatsächliche Darstellung des entwickelten Programmcodes anzuzeigen. Kernsysteme können von einem Entwickler einzeln entwickelt und/oder von einer Einheit, die eine darunterliegende Technologie (wie z. B. die eigentliche Signalprozessor-Hardware und/oder eine Konstruktion derselben) und/oder durch einen Dritten (z. B. eine für die Entwicklungsumgebung geschriebene Kernsystem-Software) bereitgestellt werden. Dementsprechend wird davon ausgegangen, dass eine nominale Entwicklungsumgebung eine „Bibliothek“ von Kernsystemen einschließt, die von Entwicklern in verschiedenen Weisen „verbunden“ werden können, um den Gesamtablauf ihres größeren Entwicklungsaufwands herbeizuführen. Einige grundlegende Kernsysteme, von denen erwartet wird, dass sie Teil einer solchen Bibliothek sind, können Kernsysteme beinhalten, um eine oder mehrere der folgenden grundlegenden Bildverarbeitungsschritte bereitzustellen: Querwindungen, Entrauschung, Farbraumumwandlungen, Kanten- und Eckenerfassung, Schärfung, Weißabgleich, Gammakorrektur, Tonwertumsetzung, Matrix-Multiplikation, Bildregistrierung, Pyramidenbau, Wavelet-Transformation, blockweise diskrete Kosinus- und Fourier-Transformationen.
-
2b zeigt eine exemplarische Darstellung der Struktur eines Kernsystems203 , das von einem Entwickler in Betracht gezogen werden kann. Wie in2b dargestellt, kann das Kernsystem203 als eine Anzahl von parallelen Strängen von Programmcode („Threads“)204 betrachtet werden, die jeweils auf einem entsprechenden zugrunde liegenden Prozessor205 arbeiten, wobei jeder Prozessor205 auf eine bestimmte Position in einem Ausgabefeld206 (z. B. als eine bestimmte Bildpunktposition in dem von dem Kernsystem erzeugten Ausgabebild) ausgerichtet ist. Der Einfachheit halber sind in2b nur drei Prozessoren und entsprechende Threads dargestellt. In verschiedenen Ausführungsformen weist jede dargestellte Ausgabefeldposition einen eigenen fest zugeordneten Prozessor und einen entsprechenden Thread auf. Das heißt, dass für jeden Bildpunkt im Ausgabefeld ein separater Prozessor und Thread zugewiesen werden kann. - Wie nachstehend näher beschrieben, arbeiten eine Matrix von Ausführungsbahnen und entsprechenden Threads in der tatsächlichen zugrunde liegenden Hardware in verschiedenen Ausführungsformen im Gleichklang (z. B. bei der Datenverarbeitung durch gleichzeitiges Anwenden eines einzigen Befehls auf mehrere Daten), um für einen Teil einer „Zeilengruppe“ des gerade verarbeiteten Frames Bildausgabedaten zu erzeugen. Eine Zeilengruppe ist ein zusammenhängender, beträchtlicher Abschnitt eines Frames. In verschiedenen Ausführungsformen kann sich der Entwickler im Klaren darüber sein, dass die Hardware auf Zeilengruppen arbeitet, oder die Entwicklungsumgebung eine Abstraktion darstellen kann, in der es einen separaten Prozessor und einen Thread für beispielsweise jeden Bildpunkt in dem Ausgabeframe (z. B. jeden durch einen eigenen fest zugeordneten Prozessor und Thread in einem Ausgabeframe erzeugten Bildpunkt) geben kann. Unabhängig davon versteht der Entwickler, dass das Kernsystem in verschiedenen Ausführungsformen einen einzelnen Thread für jeden Ausgabebildpunkt beinhaltet (unabhängig davon, ob das Ausgabefeld als vollständiger Ausgabeframe oder Abschnitt desselben visualisiert wird).
- Wie nachfolgend näher beschrieben wird, weisen die Prozessoren
205 , die dem Entwickler in der virtuellen Umgebung präsentiert werden, eine Befehlssatzarchitektur (ISA) auf, die nicht nur Standard-(z. B. RISC)Maschinenbefehle unterstützt, sondern auch speziell formatierte Datenzugriffsbefehle beinhaltet, die es dem Entwickler ermöglichen, die durchgeführte Bildpunktverarbeitung leicht zu visualisieren. Die Fähigkeit, eine beliebige Eingangsmatrixposition in Kombination mit einer vollständigen Befehlssatzarchitektur herkömmlicher mathematischer und programmgesteuerter Maschinenbefehle leicht zu definieren/zu visualisieren, ermöglicht eine extrem vielseitige Programmierumgebung, die es einem Anwendungsprogrammentwickler im Wesentlichen ermöglicht, im Idealfall jede gewünschte Funktion, die ausgeführt werden soll, auf einer beliebig großen Bildfläche zu definieren. Zum Beispiel kann im Idealfall jede mathematische Operation leicht programmiert und auf jede Schablonengröße angewendet werden. - Hinsichtlich der Datenzugriffsbefehle beinhaltet die Befehlssatzarchitektur der virtuellen Prozessoren („virtuelle ISA“) in einer Ausführungsform einen speziellen Datenladebefehl und einen speziellen Datenspeicherbefehl. Der Datenladebefehl ist in der Lage, jede Position innerhalb eines Eingangsfeldes von Bilddaten einzulesen. Der Datenspeicherbefehl kann an eine beliebige Stelle innerhalb des Ausgabefeldes von Bilddaten schreiben. Der letztgenannte Befehl ermöglicht es, mehrere Instanzen desselben Prozessors problemlos verschiedenen Ausgabebildpunktpositionen zuzuordnen (jeder Prozessor schreibt in einen anderen Bildpunkt in dem Ausgabefeld). Dementsprechend kann beispielsweise die Schablonengröße selbst (z. B. als Bildpunktbreite und Bildpunkthöhe ausgedrückt) zu einem leicht programmierbaren Merkmal gemacht werden. Die Visualisierung der Verarbeitungsvorgänge wird weiter vereinfacht, wobei jede der speziellen Lade- und Speicherbefehle ein spezielles Befehlsformat aufweist, wodurch Zielfeldpositionen vereinfacht als X- und Y-Koordinaten angegeben werden.
- Unabhängig davon, können durch Instanziieren eines getrennten Prozessors für jede der Positionen in dem Ausgabefeld die Prozessoren ihre jeweiligen Threads parallel ausführen, so dass z. B. die jeweiligen Werte für alle Positionen in dem Ausgabefeld gleichzeitig erzeugt werden. Es ist zu beachten, dass viele Bildverarbeitungsroutinen in der Regel die gleichen Vorgänge an verschiedenen Bildpunkten des gleichen Ausgabebildes ausführen. Dementsprechend wird in einer Ausführungsform der Entwicklungsumgebung davon ausgegangen, dass jeder Prozessor identisch ist und denselben Thread-Programmcode ausführt. Somit kann die virtualisierte Umgebung als eine Art zweidimensionaler (2D) SIMD-Prozessor betrachtet werden, der aus einer 2D-Matrix von z. B. identischen Prozessoren besteht, die jeweils identischen Code im Sperrschritt ausführen.
-
3 zeigt eine ausführlichere exemplarische Ausführungsform der Verarbeitungsumgebung für zwei virtuelle Prozessoren, die identischen Code für zwei unterschiedliche Bildpunktpositionen in einem Ausgabefeld verarbeiten.3 zeigt eine Ausgabematrix304 , die einem erzeugten Ausgabebild entspricht. Hier verarbeitet ein erster virtueller Prozessor den Code des Threads301 , um einen Ausgabewert an der Position X1 der Ausgabematrix304 zu erzeugen, und ein zweiter virtueller Prozessor verarbeitet den Code des Threads302 , um einen Ausgabewert am Ort X2 der Ausgabematrix zu erzeugen304 . In verschiedenen Ausführungsformen würde der Entwickler wiederum verstehen, dass es einen separaten Prozessor und Thread für jede Bildpunktposition in der Ausgabematrix304 gibt (der Einfachheit halber werden in3 lediglich zwei derselben dargestellt). Jedoch muss der Entwickler (aufgrund der SIMD-ähnlichen Beschaffenheit der Maschine) in verschiedenen Ausführungsformen nur Code für einen Prozessor und einen Thread entwickeln. - Wie auf dem Fachgebiet bekannt ist, wird ein Ausgabebildpunktwert oft durch die Verarbeitung der Bildpunkte einer Eingangsmatrix bestimmt, die die entsprechende Ausgabebildpunktposition beinhaltet und umgibt. Beispielsweise entspricht, wie aus
3 ersichtlich, die Position X1 der Ausgabematrix304 der Position E der Eingangsmatrix303 . Die Schablone der zu verarbeitenden Eingangsmatrix303 -Bildpunktwerte, um den Ausgabewert X1 zu bestimmen, würde daher den Eingangswerten ABCDEFGHI entsprechen. Ähnlich würde die Schablone der zu verarbeitenden Eingangsmatrixbildpunkte, um den Ausgabewert X2 zu bestimmen, den Eingangswerten DEFGHIJKL entsprechen. -
3 zeigt eine exemplarische Ausführungsform eines entsprechenden virtuellen Umgebungsprogrammcodes für ein Thread-Paar301 ,302 , das verwendet werden könnte, um die Ausgabewerte X1 bzw. X2 zu berechnen. In der exemplarischen Ausführungsform von3 sind beide Code-Paare identisch und entsprechen durchschnittlich einer Schablone von neun Eingangsmatrixwerten, um einen entsprechenden Ausgabewert zu bestimmen. Der einzige Unterschied zwischen den beiden Threads sind die Variablen, die aus der Eingabematrix und der Position der zu beschreibenden Ausgabematrix aufgerufen werden. Insbesondere arbeitet der Thread, der die Ausgabeposition X1 schreibt, auf der Schablone ABCDEFGHI und der Thread, der die Ausgabeposition X2 schreibt, auf der Schablone DEFGHIJKL. - Wie aus dem jeweiligen Programmcode aus dem Thread-Paar
301 ,302 ersichtlich, beinhaltet jeder virtuelle Prozessor zumindest die internen Register R1 und R2 und unterstützt zumindest folgende Befehle: 1) einen LADE-Befehl aus der Eingangsmatrix in R1; 2) einen LADE-Befehl aus dem Eingangsfeld in R2; 3) einen ADDIER-Befehl, der den Inhalt von R1 und R2 addiert und das Ergebnis in R2 einfügt; 4) einen DIVIDIER-Befehl, der den Wert innerhalb R2 durch den unmittelbaren Operanden 9 teilt; und, 5) ein SPEICHER-Befehl, der den Inhalt von R2 in die Ausgabematrixposition speichert, für die der Thread bestimmt ist. Obwohl in3 nur zwei Ausgabematrixpositionen und nur zwei Threads und entsprechende Prozessoren dargestellt sind, könnte jeder Position in der Ausgabematrix durchaus ein virtueller Prozessor und ein entsprechender Thread zugewiesen werden, der diese Funktionen ausführt. In verschiedenen Ausführungsformen werden die Mehrfach-Threads im Einklang mit der SIMD-artigen Beschaffenheit der Verarbeitungsumgebung isoliert voneinander ausgeführt. Das heißt, es gibt keine Thread-Thread-Kommunikation zwischen virtuellen Prozessoren (ein SIMD-Kanal verhindert den Übergang in einen anderen SIMD-Kanal). - b. Virtuelles Prozessorspeichermodell
- In verschiedenen Ausführungsformen ist ein wichtiges Merkmal der virtuellen Prozessoren ihr Speichermodell. Wie auf dem Fachgebiet bekannt ist, liest ein Prozessor Daten aus dem Speicher, arbeitet an diesen Daten und schreibt neue Daten in den Speicher zurück. Ein Speichermodell ist die Perspektive oder Ansicht, die ein Prozessor von der Art und Weise hat, in der die Daten im Speicher gegliedert sind. In einer Ausführungsform beinhaltet das Speichermodell der virtuellen Prozessoren sowohl Eingangs- als auch Ausgabematrixbereiche. Eingabebildpunktwerte für Threads werden in dem Eingangsmatrixbereich gespeichert, und Ausgabebildpunktwerte, die durch Threads erzeugt werden, werden in dem Ausgabematrixbereich gespeichert.
- In einer Ausführungsform wird ein neuartiges Speicheradressierschema verwendet, um zu definieren, welche bestimmten Eingangswerte von einem Eingangsmatrixbereich des Speichermodells des virtuellen Prozessors aufgerufen werden sollen. Genauer gesagt, wird ein „positionsbezogenes“ Adressierungsschema verwendet, das die gewünschten Eingangsdaten anstatt einer herkömmlichen linearen Speicheradresse mit X-, Y-Koordinaten definiert. Dementsprechend beinhaltet der Ladebefehl der Befehlssatzarchitektur der virtuellen Prozessoren ein Befehlsformat, das eine spezifische Speicherposition innerhalb der Eingangsmatrix mit einer X-Komponente und einer Y-Komponente identifiziert. Daher wird ein zweidimensionales Koordinatensystem verwendet, um Speicher für Eingangswerte zu adressieren, die aus der Eingangsmatrix eingelesen werden.
- Die Verwendung eines positionsbezogenen Speicheradressierungsansatzes ermöglicht es, dass der Bereich eines Bildes, an dem ein virtueller Prozessor arbeitet, für einen Entwickler leichter identifizierbar ist. Wie oben erwähnt, ermöglicht die Fähigkeit, eine beliebige Eingangsmatrixposition in Kombination mit einer gesamten Befehlssatzarchitektur von herkömmlichen mathematischen und programmgesteuerten Maschinenbefehlen leicht zu definieren/sichtbar zu machen, eine extrem vielseitige Programmierumgebung, die es im Wesentlichen ermöglicht, dass ein Anwendungsprogrammentwickler im Idealfall beliebig jede gewünschte Funktion definieren kann, die auf einer beliebigen Größe der Bildfläche durchgeführt werden soll. Verschiedene Befehlsformat-Ausführungsformen für Befehle, die ein positionsbezogenes Adressierungsschema übernehmen, sowie Ausführungsformen anderer Merkmale der unterstützten Befehlssatzarchitektur werden nachfolgend näher beschrieben.
- Die Ausgabematrix enthält die Ausgabebilddaten, für deren Generierung die Threads verantwortlich sind. Die ausgegebenen Bilddaten können endgültige Bilddaten, wie z. B. die tatsächlichen Bilddaten, sein, die auf einem Display dargestellt werden, das der Gesamtbildverarbeitungssequenz folgt, oder es können Zwischenbilddaten sein, die ein nachfolgendes Kernsystem der Gesamtbildverarbeitungssequenz als Eingangsbilddateninformationen verwendet. Virtuelle Prozessoren konkurrieren in der Regel jedoch nicht für dieselben Ausgabedatenelemente, da sie während desselben Zyklus auf verschiedene Bildpunktpositionen der ausgegebenen Bilddaten schreiben.
- In einer Ausführungsform wird das positionsbezogene Adressierungsschema auch für Schreibvorgänge in die Ausgabematrix verwendet. Dementsprechend beinhaltet die Befehlssatzarchitektur für jeden virtuellen Prozessor einen Speicherbefehl, dessen Befehlsformat anstelle einer herkömmlichen Speicherung mit wahlfreiem Zugriff eine zielgerichtete Schreibposition im Speicher als eine zweidimensionale XY-Koordinate definiert.
- 2.0 Hardwarearchitektur-Ausführungsformen
- a. Grafikprozessor-Hardware-Architektur und -Betrieb
-
4 zeigt eine Ausführungsform einer Architektur400 für einen in der Hardware implementierten Grafikprozessor. Der Grafikprozessor 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 in4 dargestellt, beinhaltet die Architektur400 eine Vielzahl von Zeilenpuffereinheiten401_1 bis401_M , die mit einer Vielzahl von Schablonenprozessoreinheiten402_1 bis402_N und entsprechenden Datenblattgeneratoreinheiten403_1 bis403_N über ein Netzwerk404 (z. B. ein Netzwerk auf Chip (NOC), unter anderem auch ein Chip-Switch-Netzwerk, ein On-Chip-Ring-Netzwerk oder einer anderen Art von Netzwerk) verbunden ist. In einer Ausführungsform kann eine Zeilenpuffereinheit mit einem Datenblattgenerator und einem entsprechenden Schablonenprozessor über das Netzwerk404 verbunden sein. - In einer Ausführungsform wird der Programmcode kompiliert und auf einen entsprechenden Schablonenprozessor
402 geladen, um die zuvor von einem Softwareentwickler definierten Bildverarbeitungsvorgänge auszuführen (der Programmcode kann je nach Konzipierung und Implementierung auch auf den zugehörigen Datenblattgenerator des Schablonenprozessors geladen werden403 ). In zumindest einigen Fällen kann eine Bildverarbeitungsleitung realisiert werden, indem ein erstes Kernprogramm für eine erste Pipelinephase in einen ersten Schablonenprozessor402_1 geladen, ein zweites Kernprogramm für eine zweite Pipelinephase in einen zweiten Schablonenprozessor402_2 , usw. geladen wird, wobei das erste Kernsystem die Funktionen der ersten Leitungsphase durchführt, das zweite Kernsystem die Funktionen der zweiten Pipelinephase usw. ausführt, und zusätzliche Steuerflussverfahren installiert werden, um Ausgabebilddaten von einer Pipelinephase zu der nächsten Leitungsphase zu leiten. - In anderen Konfigurationen kann der Grafikprozessor als eine parallele Maschine realisiert sein, die zwei oder mehr Schablonenprozessoren
402_1 ,402_2 aufweist, die auf demselben Kernsystemprogrammcode 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 DAG von Kernsystemen auf den Hardwareprozessor geladen werden, indem jeweilige Schablonenprozessoren mit deren eigenen jeweiligen Kernsystemprogrammcodes konfiguriert und geeignete Ablaufsteuerungs-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
405 empfangen und zu einer oder mehreren der Zeilenpuffereinheiten401 auf einer Frame-per-Frame-Basis weitergeleitet. 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 Netzwerk404 zu einem bestimmten Datenblattgenerator. Eine vollständige oder „volle“ singuläre Zeilengruppe kann sich beispielsweise aus den Daten mehrerer zusammenhängender vollständiger Zeilen oder Spalten eines Frames zusammensetzen (der Einfachheit halber bezieht sich die vorliegende Beschreibung hauptsächlich auf zusammenhängende Zeilen). Der Datenblattgenerator parst des Weiteren die Zeilengruppe von Bilddaten in einen kleineren Bereich von Bilddaten, der als „Datenblatt“ bezeichnet wird, und präsentiert das Datenblatt seinem entsprechenden Schablonenprozessor. - Im Falle einer Bildverarbeitungspipeline oder eines DAG-Ablaufs mit einem einzigen Eingang werden im Allgemeinen Eingangsframes an die gleiche Zeilenpuffereinheit
401_1 geleitet, die die Bilddaten in Zeilengruppen parst und die Zeilengruppen zu dem Datenblattgenerator leitet403_1 , dessen entsprechender Schablonenprozessor402_1 den Code des ersten Kernsystems in der Leitung/dem DAG ausführt. Nach Beendigung der Vorgänge an den durch den Schablonenprozessor402_1 verarbeiteten Zeilengruppen sendet der Datenblattgenerator403_1 Ausgabezeilengruppen an eine „nachgeschaltete“ Zeilenpuffereinheit401_2 (in manchen Anwendungsfällen kann die Ausgabezeilengruppe zurück an die gleiche Zeilenpuffereinheit401_1 gesendet werden, die zuvor die Eingabezeilengruppen gesendet hatte). - Ein oder mehrere „Abnehmerkernsysteme“, die die nächste Phase/den nächsten Vorgang in der Leitung/dem DAG darstellen, die auf deren eigenen anderen Datenblattgenerator und Schablonenprozessor (z. B. Datenblattgenerator
403_2 und Schablonenprozessor402_2 ) ausführt werden, empfangen anschließend die von dem ersten Schablonenprozessor402_1 erzeugten Bilddaten von der nachgelagerten Zeilenpuffereinheit401_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äß der Konzipierung der gesamten Pipeline oder des DAGs ausführt. - Ein Schablonenprozessor
402 ist dafür ausgelegt, gleichzeitig an mehreren überlappenden Schablonen von Bilddaten zu arbeiten. Die mehreren überlappenden Schablonen und die interne Hardwareverarbeitungskapazität des Schablonenprozessors bestimmen effektiv die Größe eines Datenblattes. Hier arbeiten innerhalb eines Schablonenprozessors402 Matrizen von Ausführungsbahnen zusammen, um gleichzeitig den Bilddatenoberflächenbereich zu bearbeiten, der von den mehreren überlappenden Schablonen bedeckt ist. - Wie nachstehend näher beschrieben, werden in verschiedenen Ausführungsformen, Datenblätter von Bilddaten in eine zweidimensionale Registermatrixstruktur innerhalb des Schablonenprozessors
402 geladen. Es wird davon ausgegangen, dass die Verwendung von Datenblä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 verschoben. Zudem stellt die Verwendung einer Ausführungsbahnmatrix und einer entsprechenden Registermatrix verschiedene Schablonengrößen bereit, die leicht programmierbar/konfigurierbar sind. -
5a bis5e veranschaulichen umfassend Ausführungsformen sowohl der Parsing-Aktivität einer Zeilenpuffereinheit401 als auch der feineren Parsing-Aktivität einer Datenblattgeneratoreinheit403 , sowie der Schablonenverarbeitungsaktivität des Schablonenprozessors402 , der mit der Datenblatt-Erzeugereinheit403 gekoppelt ist. -
5a zeigt eine Ausführungsform eines Eingabeframes der Bilddaten501 .5a zeigt zudem einen Umriss drei überlappender Schablonen502 (die jeweils eine Dimension von 3 Pixeln × 3 Pixeln aufweisen), die ein Schablonenprozessor ausgelegt ist, zu bedienen. Der Ausgabebildpunkt, für den jede Schablone die jeweiligen Ausgabebilddaten erzeugt, wird in schwarzer Farbe hervorgehoben. Der Einfachheit halber sind die drei überlappenden Schablonen502 nur in vertikaler Richtung überlappend dargestellt. Es ist relevant, zu erkennen, dass ein Schablonenprozessor in Wirklichkeit so ausgestaltet sein kann, dass dieser sowohl in vertikaler als auch in horizontaler Richtung überlappende Schablonen aufweist. - Aufgrund der vertikalen überlappenden Schablonen
502 innerhalb des Schablonenprozessors, wie in5a dargestellt, gibt es ein breites Band von Bilddaten innerhalb des Frames, das ein einzelner Schablonenprozessor bedienen kann. Wie nachfolgend näher beschrieben, verarbeiten die Schablonenprozessoren innerhalb ihrer überlappenden Schablonen Daten von links nach rechts quer durch die Bilddaten (und wiederholen den Vorgang dann für die nächste Gruppe von Zeilen in der Reihenfolge von oben nach unten). Somit wird, da die Schablonenprozessoren mit ihrem Betrieb fortfahren, die Anzahl der schwarzen Ausgabebildpunktblöcke horizontal nach rechts zunehmen. Wie oben erwähnt, ist eine Zeilenpuffereinheit401 für das Parsen einer Zeilengruppe von Eingangsbilddaten aus einem eingehenden Frame verantwortlich, der für die Schablonenprozessoren ausreichend ist, um eine erweiterte Anzahl anstehender Zyklen zu bedienen. Eine exemplarische Darstellung einer Zeilengruppe ist als schattierter Bereich503 dargestellt. In einer weiter unten beschriebenen Ausführungsform kann die Zeilenpuffereinheit401 unterschiedliche Dynamiken zum Senden/Empfangen einer Zeilengruppe an einen/von einem Datenblattgenerator umfassen. Beispielsweise werden gemäß einem Modus, der als „vollständige Gruppe“ bezeichnet wird, die gesamten Bilddatenzeilen mit voller Breite zwischen einer Zeilenpuffereinheit und einem Datenblattgenerator übermittelt. Gemäß einem zweiten Modus, der als „virtuell schlank“ bezeichnet wird, wird eine Zeilengruppe zunächst mit einer Untermenge 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
503 der Eingabebilddaten durch die Zeilenpuffereinheit definiert und an die Datenblattgeneratoreinheit übermittelt worden ist, parst die Datenblattgeneratoreinheit die Zeilengruppe weiter in feinere Datenblä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 an Daten innerhalb ihrer eigenen Schablone arbeitet (d. h. jede Ausführungsbahn ihre eigene Schablone von Informationen verarbeitet, um eine Ausgabe für diese Schablone zu erzeugen). In einer Ausführungsform sind Datenblätter Oberflächenbereiche von Eingabebilddaten, die die zweidimensionale Schieberegistermatrix „ausfüllen“ oder anderweitig in dieselbe geladen werden. - Wie in
5b dargestellt, parst der Datenblattgenerator ein Anfangsblatt504 von der Zeilengruppe503 und stellt es dem Schablonenprozessor zur Verfügung (hier entspricht das Datenblatt dem schattierten Bereich, der im Allgemeinen mit dem Bezugszeichen504 gekennzeichnet ist). Wie in den5c und5d dargestellt, arbeitet der Schablonenprozessor an dem Datenblatt der eingegebenen Bilddaten durch effektives Bewegen der überlappenden Schablonen502 von links nach rechts über dem Datenblatt. Wie in5d ist die Anzahl der Bildpunkte, für die ein Ausgabewert aus den Daten innerhalb des Datenblattes berechnet werden könnte, erschöpft (keine anderen Bildpunktpositionen können einen Ausgabewert haben, der aus den Informationen innerhalb des Datenblattes bestimmt wird). Zur Vereinfachung wurden die Randbereiche des Bildes ignoriert. - Wie in
5e dargestellt, liefert der Datenblattgenerator dann ein nächstes Datenblatt505 für den Schablonenprozessor, um die Vorgänge fortzusetzen. Zu beachten ist, dass die Anfangspositionen der Schablonen, wenn sie mit der Bearbeitung an dem nächsten Datenblatt beginnen, der nächsten Progression (wie zuvor in5d dargestellt) vom Erschöpfungspunkt nach rechts auf dem ersten Datenblatt entsprechen. Mit dem neuen Datenblatt505 bewegen sich die Schablonen einfach weiter nach rechts, sofern der Schablonenprozessor auf dem neuen Datenblatt auf die gleiche Weise arbeitet wie bei der Verarbeitung des ersten Datenblattes. - Zu beachten ist, dass zwischen den Daten des ersten Datenblattes
504 und den Daten des zweiten Datenblattes505 aufgrund der Randbereiche der Schablonen, die eine Ausgabebildpunktposition umgeben, eine gewisse Überlappung vorliegt. Die Überlappung könnte einfach gehandhabt werden, indem der Datenblattgenerator die überlappenden Daten zweimal überträgt. In alternativen Implementierungen kann, um dem Schablonenprozessor ein nächstes Datenblatt zuzuführen, der Datenblattgenerator damit fortfahren, ausschließlich neue Daten an den Schablonenprozessor zu senden, während der Schablonenprozessor die überlappenden Daten aus dem vorhergehenden Datenblatt verwendet. - b. Schablonenprozessorarchitektur und -betrieb
-
6 zeigt eine Ausführungsform einer Schablonenprozessorarchitektur600 . Wie in6 dargestellt, beinhaltet der Schablonenprozessor eine Datenberechnungseinheit601 , einen Skalarprozessor602 und einen zugehörigen Speicher603 , sowie eine E-/A-Einheit604 . Die Datenberechnungseinheit601 beinhaltet eine Matrix von Ausführungsbahnen605 , eine zweidimensionale Verschiebungsfeldstruktur606 und getrennte Speicher mit wahlfreiem Zugriff607 , die mit bestimmten Zeilen oder Spalten der Matrix assoziiert sind. - Die E-/A-Einheit
604 ist verantwortlich für das Einladen der „eingegebenen“ Datenblätter, die von dem Datenblattgenerator empfangen werden, in die Datenberechnungseinheit601 , sowie das Speichern der von dem Schablonenprozessor in den Datenblattgenerator „ausgegebenen“ Datenblätter. In einer Ausführungsform beinhaltet das Einladen von Blattdaten in die Datenberechnungseinheit601 das Parsen eines empfangenen Datenblattes in die Zeilen/Spalten der Bilddaten, sowie das Einladen der Zeilen/Spalten der Bilddaten in die zweidimensionale Schieberegisterstruktur606 oder in die jeweiligen Speicher mit wahlfreiem Zugriff607 der Zeilen/Spalten der Ausführungsbahnmatrix (wie nachfolgend näher beschrieben). Wird das Datenblatt anfänglich in die Speicher607 geladen, können die einzelnen Ausführungsbahnen innerhalb der Ausführungsbahnmatrix605 dann die Blattdaten, sofern geeignet (z. B. als Ladebefehl kurz vor der Bearbeitung der Blattdaten) in die zweidimensionale Schieberegisterstruktur606 der Speicher mit wahlfreiem Zugriff607 einladen. Nach Beendigung des Einladens eines Datenblattes in die Registerstruktur606 (ob direkt aus einem Datenblattgenerator oder aus den Speichern607 ) arbeiten die Ausführungsbahnen der Ausführungsbahnmatrix605 an den Daten und schreiben letztendlich die fertigen Daten als ein Blatt direkt „zurück“ in den Datenblattgenerator oder in die Speicher mit wahlfreiem Zugriff607 . Im letzteren Fall ruft die E/A-Einheit604 die Daten aus den Speichern mit wahlfreiem Zugriff607 ab, um ein Ausgabeblatt zu bilden, das dann an den Datenblattgenerator weitergeleitet wird. - Der Skalarprozessor
602 beinhaltet einen Programmcontroller609 , der die Befehle des Programmcodes des Schablonenprozessors aus dem Skalarspeicher603 liest und die Befehle an die Ausführungsbahnen in der Ausführungsbahnmatrix605 ausgibt. In einer Ausführungsform wird ein einzelner Befehl auf alle Ausführungsbahnen innerhalb der Matrix605 übertragen, um ein SIMD-ähnliches Verhalten der Datenberechnungseinheit601 zu bewirken. In einer Ausführungsform, beinhaltet das Befehlsformat der Anweisungen, die aus dem Skalarspeicher603 gelesen und an die Ausführungsbahnen der Ausführungsbahnmatrix605 ausgegeben werden, ein sehr langes Befehlswortformat (VLIW), welches mehr als einen Maschinenbefehl pro Anweisung beinhaltet. In einer weiteren Ausführungsform beinhaltet das VLIW-Format sowohl einen ALU-Maschinenbefehl, der eine mathematische Funktion ausführt, die von der ALU einer Ausführungsbahn ausgeführt wird (wie nachstehend beschrieben, kann in einer Ausführungsform mehr als ein herkömmlicher ALU-Vorgang angegeben sein) als auch einen Speichermaschinenbefehl (der einen Speichervorgang für eine spezifische Ausführungsbahn oder eine Gruppe von Ausführungsbahnen steuert). - 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 mehr Prozessor-ähnliche Funktionalität 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 MIMD-ähnlicherer Architekturen eine Logikschaltung, 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
605 ) implementiert werden. - Die Kombination einer Ausführungsbahnmatrix
605 , eines Programmcontrollers609 und einer zweidimensionalen Schieberegisterstruktur606 stellt eine weitgehend anpassbare/konfigurierbare Hardware-Plattform für ein breites Spektrum programmierbarer Funktionen bereit. Beispielsweise können Anwendungssoftwareentwickler in der Lage sein, Kernsysteme mit einem breiten Spektrum unterschiedlicher Funktionsfähigkeiten sowie Dimensionen (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 Ausgabefeldposition zuzugreifen. - Abgesehen davon, dass dieselben als Datenspeicher für Bilddaten genutzt werden, die durch die Ausführungsbahnmatrix
605 bedient werden, können die Speicher mit wahlfreiem Zugriff607 zudem eine oder mehrere Nachschlagetabellen beibehalten. In verschiedenen Ausführungsformen können eine oder mehrere skalare Nachschlagetabellen auch innerhalb des skalaren Speichers603 instanziiert werden. - Ein skalarer Suchvorgang beinhaltet das Übermitteln desselben Datenwerts aus der gleichen Nachschlagtabelle von demselben Index an sämtliche Ausführungsbahnen innerhalb der Ausführungsbahnmatrix
605 . In verschiedenen Ausführungsformen wird das oben beschriebene VLIW-Befehlsformat erweitert, um auch einen skalaren Maschinenbefehl einzuschließen, der eine vom Skalarprozessor ausgeführte Nachschlageoperation in eine skalare Nachschlagetabelle leitet. Der für die Verwendung mit dem Maschinenbefehl 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 Nachschlagetabelle innerhalb des skalaren Speichers im Wesentlichen das Senden des gleichen Datenwertes an alle Ausführungsbahnen innerhalb der Ausführungsbahnmatrix605 während a des gleichen Taktzyklus. - 3.0 Zeilenpuffereinheit-Ausführungsformen
- a. Zeilenpuffereinheit-Übersicht
- Aus der obigen Beschreibung in Abschnitt 1.0 wird entnommen, dass in verschiedenen Ausführungsformen der für die Hardwareplattform geschriebene Programmcode unter Verwendung eines einzigartigen virtuellen Codes geschrieben wird, der einen Befehlssatz mit Lade- und Speicherbefehlen beinhaltet, deren Befehlsformat die Eingabe- und Ausgabefeldpositionen z. B. als X-, Y-Koordinaten kennzeichnet. In verschiedenen Implementierungen können die X-, Y-Koordinateninformationen tatsächlich in die Hardwareplattform programmiert werden und von verschiedenen ihrer Komponenten erkannt/verstanden werden. Dies unterscheidet sich beispielsweise von der Übersetzung der X-, Y-Koordination (z. B. innerhalb des Compilers) in unterschiedliche Informationen. Im Fall der zweidimensionalen Schieberegisterstruktur innerhalb des Schablonenprozessors werden die X-, Y-Koordinateninformationen beispielsweise in Registerverschiebungsbewegungen übersetzt. Im Gegensatz dazu können andere Teile der Hardwareplattform die ursprünglich auf der höheren virtuellen Codeebene ausgedrückten X-, Y-Koordinateninformationen empfangen und verstehen.
- Wie in
7 dargestellt und in Abschnitt 1.0 beschrieben, drückt ein Programmcode-Entwickler Datenpositionen als X-, Y-Koordinaten mit dem speziellen Befehlsformat auf der virtuellen Codeebene710 aus. Während der Kompilierungsphase wird der virtuelle Code in Programmcode übersetzt, der genau genommen durch die Hardware (den Objektcode) und entsprechende Konfigurationsinformationen, die in den Hardwarekonfigurationsbereich (z. B. Registerregister) geladen werden, verarbeitet wird. Wie in7 dargestellt, wird in einer Ausführungsform der Objektcode für ein bestimmtes Kernsystem in den Programmbereich des Skalarprozessors705 des Schablonenprozessors geladen. - Im Rahmen des Konfigurationsprozesses lädt die auf dem Skalarprozessor
705 ausgeführte Konfigurationssoftware die entsprechenden Konfigurationsinformationen711 ,712 sowohl in die an den Schablonenprozessor702 gekoppelte Datenblattgeneratoreinheit703 , als auch an die Zeilenpuffereinheit701 , die neue Datenblätter für den Schablonenprozessor702 erzeugt, um an den von dem Schablonenprozessor702 erzeugten Datenblättern zu arbeiten oder diese zu empfangen. Im Allgemeinen können die hierin genannten Datenblätter in Form von X-, Y-Koordinaten eines Gesamtbildes betrachtet werden. Das heißt, sobald ein Bild oder Frame (z. B. in Form einer Anzahl von Bildpunkten pro Zeile, Anzahl von Zeilen, Anzahl von Bildpunkten pro Spalte und Anzahl von Spalten) definiert ist, kann auf jeden Abschnitt bzw. jede Position des Bildes weiterhin mit X, Y-Koordinaten verwiesen werden. - Dementsprechend sind in verschiedenen Ausführungsformen entweder die Datenblattgeneratoreinheit
703 oder die Zeilenpuffereinheit701 mit Informationen711 ,712 in ihrem jeweiligen Konfigurationsbereich706 ,707 konfiguriert, die eine Informationsplattform bilden, von der aus bestimmte Positionen und/oder Bereiche (z. B. Zeilengruppen, Datenblätter) eines Bildes oder Frames mit X-, Y-Koordinaten identifiziert werden. In verschiedenen Implementierungen/Anwendungen können die X, Y-Koordinaten dieselben X, Y-Koordinaten sein, die auf der Ebene des virtuellen Codes ausgedrückt werden. - Zu Beispielen für derartige Informationen zählen z. B. die Anzahl aktiver Zeilengruppen in der Zeilenpuffereinheit, die Bildgröße für jede Zeilengruppe (z. B. als eine Menge von vier X-, Y-Koordinaten (eine für jede Ecke) oder ein Paar von Zeilenpaaren X-, Y-Koordinaten (eine für eine untere näher gelegene Ecke und eine für eine obere weiter entfernte Ecke)), die absolute Bildbreite und Bildhöhe, die Schablonengröße (als X-, Y-Werte ausgedrückt, die die Größe einer einzelnen Schablone und/oder des Bereichs der überlappenden Schablonen des Schablonenprozessors definieren), die Datenblatt- und/oder Zeilengruppengröße (z. B. genauso angegeben wie eine Bildgröße, jedoch mit kleineren Abmessungen) usw. darüber hinaus kann zumindest die Zeilenpuffereinheit
701 mit zusätzlichen Konfigurationsinformationen, wie beispielsweise der Anzahl der Erzeugerkernsystem-Schreibvorgänge und der Anzahl der Abnehmerkernsysteme, die die von der Zeilenpuffereinheit701 verwalteten Zeilengruppen einlesen, programmiert werden. Die Anzahl der Kanäle und/oder die den Bilddaten zugeordneten Abmessungen sind in der Regel auch als Konfigurationsinformationen enthalten. -
8 zeigt die Verwendung von X-, Y-Koordinaten, um, nur um ein Beispiel anzuführen, Liniengruppen innerhalb eines Bildes zu definieren. Hierbei sind die N-Zeilengruppen801_1 ,801_2 , ...801_N innerhalb eines Bildes801 erkennbar. Wie aus8 ersichtlich, kann jede Zeilengruppe leicht durch Bezugnahme auf X-, Y-Koordinaten innerhalb des Bildes definiert werden, die z. B. einen oder mehrere Eckpunkte einer Zeilengruppe definieren. Somit kann in verschiedenen Ausführungsformen der Name einer Zeilengruppe oder eine andere Datenstruktur, die verwendet wird, um eine bestimmte Zeilengruppe zu definieren, X-, Y-Koordinatenpositionen beinhalten, die mit der Zeilengruppe verbunden sind, um speziell diese zu identifizieren. - Unter Bezugnahme auf
7 ist zu beachten, dass7 zeigt, dass ein Datenblattgenerator703 während der Laufzeit beispielsweise durch X-, Y-Koordinateninformationen, die den gewünschten Datenbereich definieren, von der Zeilenpuffereinheit701 eine „nächste“ Zeilengruppe (oder einen Teil einer Zeilengruppe) anfordern kann.8 zeigt nominelle Zeilengruppen „mit voller Breite“, die nur aus vollständigen Reihen von Bilddaten bestehen. In einer alternativen als „virtuell schlank“ bezeichneten Konfiguration, die weiter unten näher beschrieben wird, leitet die Zeilenpuffereinheit701 anfänglich nur einen ersten oberen Abschnitt einer Zeilengruppe als Reihen mit voller Breite von Bilddaten durch. Die nachfolgenden unteren Reihen der Zeilengruppe werden dann vom Datenblattgenerator in zusammenhängenden Blöcken, die kleiner als eine Reihe mit voller Breite sind, speziell und gesondert angefordert. Daher werden Mehrfachanforderungen durch den Datenblattgenerator durchgeführt, um die vollständige Liniengruppe zu erhalten. Hier kann jede derartige Anforderung einen nächstniedrigeren Abschnitt durch X-, Y-Koordinaten definieren, die dem nächsten unteren Abschnitt zuzuordnen sind. -
9a bis9c zeigen verschiedene Merkmale einer Zeilenpuffereinheit-Ausführungsform900 . Wie in9a dargestellt, beinhaltet eine Zeilenpuffereinheit einen Speicher902 , in dem Zeilengruppen903_1 bis903_N gespeichert sind (z. B. statischer oder dynamischer Direktzugriffsspeicher (SRAM oder DRAM)).9a zeigt die Aktivität zwischen den verschiedenen Kernsystemen, die die Zeilengruppen903_1 bis903_N für ein bestimmtes Bild/einen bestimmten Frame innerhalb des Speichers902 erzeugen und abnehmen. - Wie in
9a dargestellt, sendet ein Erzeugerkernsystem K1 über getrennte Zeitinstanzen P1, P2 bis PN neue Zeilengruppen an den Speicher902 . Das Erzeugerkernsystem K1 wird auf einem Schablonenprozessor ausgeführt, der neue Datenblätter erzeugt. Der Datenblattgenerator, der mit dem Schablonenprozessor gekoppelt ist, akkumuliert Datenblätter, um Zeilengruppen zu bilden, und leitet die Zeilengruppen an den Speicher902 weiter. - Wie auch in
9a dargestellt, gibt es zwei Abnehmerkernsysteme K2, K3, die an den vom Abnehmerkernsystem K1 erzeugten Zeilengruppen903_1 bis903_N arbeiten. Hier empfangen die Abnehmerkernsysteme K2 und K3 die erste Zeilengruppe903_1 zu den Zeitinstanzen C21 bzw. C31. Natürlich treten die Zeitinstanzen C21 und C31 nach der Zeitinstanz P1 auf. Andere Einschränkungen sind ggf. nicht vorhanden. Beispielsweise können C21 und/oder C31 vor oder nach einer der Zeitinstanzen P2 bis PN auftreten. Dabei fordern die jeweiligen Datenblattgeneratoren für die Kernsysteme K2 und K3 eine nächste Zeilengruppe zu einer Zeitinstanz an, die für deren jeweiliges Kernsystem geeignet ist. Wenn irgendeines der Kernsysteme K2, K3 die Zeilengruppe903_1 vor der Zeitinstanz P1 anfordert, liegt die Anforderung im Leerlauf, bis die Zeilengruppe903_1 tatsächlich in den Speicher902 geschrieben ist. In vielen Implementierungen wird ein Erzeugerkernsystem auf einem anderen Schablonenprozessor betrieben als ein Abnehmerkernsystem. - Denkbar ist, dass Anforderungen von einem oder beiden der Kernsysteme K2 und K3 für alle Zeilengruppen
903_1 bis903_N vor der Zeitinstanz P1 eintreffen können. Somit können von Abnehmerkernsystemen jederzeit Zeilengruppen angefordert werden. Die Zeilengruppen werden an die Abnehmerkernsysteme weitergeleitet, während diese von denselben angefordert werden, jedoch nur so schnell, wie das Erzeugerkernsystem K1 diese erzeugen kann. In verschiedenen Ausführungsformen erfordern Abnehmerkernsysteme Sequenzgruppen in Folge und empfangen diese ebenfalls in Folge (Kernsystem K2 empfängt Zeilengruppen902_2 bis902_N zu Zeitinstanzen C22 bis C2N in Folge). Der Einfachheit halber wird für eine spezielle Zeilengruppe nur ein Erzeugerkernsystem dargestellt. Es ist denkbar, dass verschiedene Ausführungsformen entworfen werden können, um es verschiedenen Erzeugern zu ermöglichen, auf eine gleiche Zeilengruppe zu schreiben (z. B. dann, wenn Erzeuger nicht gewartet werden dürfen, bis alle Erzeuger in die Zeilengruppe geschrieben haben). - In Fällen, in denen es kein Erzeugerkernsystem gibt (weil der oder die Abnehmerkernsysteme die ersten Kernsysteme im DAG-Prozessablauf des Prozessors sind), können die Frames der Bilddaten (beispielsweise über einen direkten Speicherzugriff (DMA) oder von einer Kamera) in den Speicher
902 übertragen und in Zeilengruppen geparst werden. In Fällen, in denen es kein(e) Abnehmerkernsystem(e) gibt (weil das Erzeugerkernsystem das letzte Kernsystem im gesamten Programmablauf des Prozessors ist), können resultierende Zeilengruppen kombiniert werden, um Ausgabeframes zu bilden. -
9b zeigt eine detailliertere Ausführungsform einer gesamten Zeilenpuffereinheit900 . Zum Zwecke der Erklärung wird die Zeilenpuffereinheit900 aus9b mit der Aktivität aus9a überlagert. Wie aus9b ersichtlich, beinhaltet eine Zeilenpuffereinheit900 einen Speicher902 , der mit der Zeilenpufferschaltkreiseinheit901 gekoppelt ist. Die Zeilenpufferschaltkreiseinheit901 kann beispielsweise mit einer speziell dafür vorgesehenen Logikschaltung ausgestattet sein. Innerhalb der Zeilenpufferschaltkreiseinheit901 ist eine Zeilenpuffer-Schnittstelleneinheit904_1 bis904_N für jede Zeilengruppe903_1 bis903_N innerhalb des Speichers902 reserviert. In verschiedenen Ausführungsformen gibt es eine feste Anzahl von Zeilenpuffer-Schnittstelleneinheiten904_1 bis904_N , die eine Obergrenze für die Anzahl von Zeilengruppen festlegt, die eine Zeilenpuffereinheit zu jeder Zeitinstanz verwalten kann (sind weniger als N Zeilengruppen aktiv, wird eine entsprechende kleinere Anzahl von Schnittstellen der Zeilenpuffereinheit aktiviert und zu einem beliebigen Zeitpunkt in Betrieb genommen). - Wie in
9b dargestellt, bearbeitet die Zeilenpuffereinheit900 mit einer Gesamtanzahl von N Zeilenpuffer-Schnittstelleneinheiten904 innerhalb der Zeilenpufferschaltkreiseinheit901 eine maximale Anzahl von Zeilengruppen. Darüber hinaus kann bei einer größten zulässigen Zeilengruppengröße (bei der die Zeilengruppengröße ein konfigurierbarer Parameter ist) eine ungefähre Größe für den Speicher902 bestimmt werden (um Hardware-Effizienz zu ermöglichen, kann natürlich ein kleinerer Speicherbedarf instanziiert werden, wobei N Zeilengruppen mit maximaler Größe nicht gleichzeitig zugelassen werden können). - Jede Zeilenpuffer-Schnittstelleneinheit
904_1 bis904_N ist verantwortlich für die Verarbeitung der Erzeuger- und Abnehmeranforderungen für eine spezielle ihr zugewiesene Zeilengruppe. Beispielsweise verarbeitet die Zeilenpuffer-Schnittstelleneinheit904_1 die Anfrage von dem Erzeuger K1 zu der Zeitinstanz P1, um die Zeilengruppe903_1 zu speichern, und verarbeitet die Anforderungen von den Abnehmerkernsystemen K2 und K3 für die Zeilengruppe903_1 . In Reaktion auf den ersteren schreibt die Zeilenpuffer-Schnittstelleneinheit904_1 die Zeilengruppe903_1 in den Speicher902 . In Reaktion auf die letzteren führt die Zeilenpuffer-Schnittstelleneinheit904_1 jeweilige Lesevorgänge der Zeilengruppe903_1 aus dem Speicher902 aus und leitet die Zeilengruppe903_1 K3 jeweils zu den Zeitinstanzen C21 bzw. C31 an die Abnehmer K2 weiter. - Nachdem alle Abnehmer einer Zeilengruppe ihre Kopie der Zeilengruppe weitergeleitet haben, ist die Zeilenpuffer-Schnittstelleneinheit „frei“ und kann einer anderen Zeilengruppe zugeordnet werden. Wenn beispielsweise die Zeilengruppe
903_1 die erste Zeilengruppe innerhalb eines ersten Bildframes einer Folge von Frames darstellt, kann nach dem Weiterleiten der Zeilengruppe903_1 an die Abnehmer K2 und K3 zu den Zeitinstanzen C21 und C31 die Zeilenpuffer-Schnittstelleneinheit904_1 als nächstes zugeordnet werden, um die erste Zeilengruppe innerhalb des nächsten, zweiten Bildframes der Folge von Frames zu verarbeiten. Auf diese Weise kann die Zeilenpufferschaltkreiseinheit901 als einen „Pool“ von Zeilenpuffer-Schnittstelleneinheiten904 betrachtet werden, wobei jeder Schnittstelleneinheit eine neue Zeilengruppe zugewiesen wird, die zu verwalten ist, nachdem ihre unmittelbar vorangehende Zeilengruppe an ihren letzten Abnehmer geliefert wurde. Somit gibt es eine Rotation von Schnittstelleneinheiten, während diese wiederholt eintreffen und aus einem „freien Pool“ von Zeilenpuffer-Schnittstelleneinheiten, die ihren letzten Abnehmer bedient haben und auf ihre nächste Zeilengruppe warten, entfernt werden. -
9c zeigt eine Ausführungsform der Rotation im Detail. Wie in9c dargestellt, wird eine verfügbare Zeilenpuffer-Schnittstelleneinheit aus einem freien Pool von Zeilenpuffer-Schnittstelleneinheiten innerhalb der Zeilenpufferschaltkreiseinheit910 ausgewählt. Die Zeilenpuffer-Schnittstelleneinheit wird dann mit geeigneten Konfigurationsinformationen911 (z. B. X-, Y-Positionsdaten der neuen Zeilengruppe oder eines linearen Speicheradressenäquivalents) konfiguriert. Hier in9b ist zu beachten, dass jede Zeilenpuffer-Schnittstelleneinheit einen Konfigurationsregisterbereich905 aufweisen kann, in dem die besagten Konfigurationsinformationen aufbewahrt werden. - Die Zeilenpuffer-Schnittstelleneinheit fährt dann damit fort, Erzeuger- und Abnehmeranforderungen für ihre neu zugewiesene Zeilengruppe
912 zu verarbeiten. Nachdem der letzte Erzeuger in die Zeilengruppe geschrieben hat (in verschiedenen Ausführungsformen gibt es nur einen Erzeuger pro Zeilengruppe) und nachdem der letzte Abnehmer mit der Version der Zeilengruppe versehen wurde, die von ihrem bzw. ihren Erzeuger(n) geschrieben wurde, wird die Zeilenpuffer-Schnittstelleneinheit in den freien Pool zurückgeführt, und der Prozess910 für eine nächste Zeilengruppe wiederholt. Die Steuerlogikschaltung innerhalb der Zeilenpufferschaltkreiseinheit901 , die den Steuerablauf von9c überwacht, ist der Einfachheit halber in9b nicht dargestellt. - b. programmierbare Registerbereichsausführungen
- In Bezug auf die aktualisierte Konfigurationsinformationen
911 , die im Rahmen der Zuweisung einer nächsten Zeilengruppe an einer Zeilenpuffer-Schnittstelleneinheit vorgesehen ist, verarbeitet die Zeilenpuffereinheit900 selbst im Normalfall eine statische Anordnung von z. B. nur einem festen Erzeuger, der eine feste Gruppe von einem oder mehreren Abnehmern speist. In diesem Fall sind die primären Konfigurationsinformationen (z. B. die Zeilengruppengröße, die Anzahl der Abnehmer usw.) ebenfalls geeignet, statisch zu sein und werden sich von Zeilengruppe zu Zeilengruppe nicht ändern. Stattdessen identifizieren die an eine Zeilenpuffer-Schnittstelleneinheit gelieferten neuen Konfigurationsinformationen hauptsächlich die neue Zeilengruppe (z. B. die Position der Zeilengruppe im Speicher usw.). Kompliziertere potentielle Anordnungen/Entwürfe sind jedoch möglich. Einige davon werden nachfolgend näher beschrieben. -
9d zeigt eine Ausführungsform des Inhalts des Registerbereichs einer Zeilenpuffer-Schnittstelleneinheit (z. B. des Inhalts des Registerbereichs905_1 aus9b ). Eine Beschreibung einiger der Registerfelder folgt unmittelbar. - Das LB_Enable-Feld
921 aktiviert im Wesentlichen eine Zeilenpuffer-Schnittstelleneinheit und wird im Rahmen des Prozesses der Entnahme der Zeilenpuffer-Schnittstelleneinheit aus dem freien Pool „eingestellt“. Das Num_Channels-Feld922 definiert die Anzahl der Kanäle innerhalb der Bilddaten der Zeilengruppe. In einer Ausführungsform kann das Num_Channels-Feld922 verwendet werden, um die Gesamtmenge an Daten pro Zeilengruppe zu bestimmen. Beispielsweise beinhaltet ein Videostrom häufig eine Framesequenz aus roten (R) Bildpunkten, einer Framesequenz aus blauen (B) Bildpunkten und einer Framesequenz aus grünen (G) Bildpunkten. Somit gibt es für jede Zeilengruppe tatsächlich drei Zeilengruppen von Informationen (R, G und B). - Das Num_Consumers-Feld
923 beschreibt die Anzahl der Abnehmer, von denen die Zeilengruppe angefordert wird. In einer Ausführungsform wird die Zeilenpuffer-Schnittstelleneinheit in den freien Pool eingegeben, nachdem eine Zeilengruppeninstanz, die dem Wert in dem Num_Consumers-Feld923 entspricht, einige Male geliefert wurde. - Das Row_Width-Feld
924 definiert die Breite einer Gruppe mit voller Zeile (z. B. in einer Anzahl von Bildpunkten). Zu beachten ist, dass der Wert „Row_Width924 “ als X-Koordinatenwert ausgedrückt werden kann, der vom Compiler bereitgestellt wird. Das FB_Rows-Feld926 definiert die Höhe einer Gruppe mit voller Zeile (z. B. in einer Anzahl von Bildpunkten). Zu beachten ist, dass das FB_Rows-Feld924 als ein Y-Koordinatenwert ausgedrückt werden kann, der von dem Compiler bereitgestellt wird. - Das Feld FB_Base_Address
930 definiert die Position der Zeilengruppe im Speicher der Zeilenpuffereinheit. In einem als „vollen“ Zeilengruppenmodus bezeichneten ersten Betriebsmodus wird im Speicher auf eine Zeilengruppe voller Größe zugegriffen (Zeilengruppen werden von den Erzeugern empfangen und mit der gesamten Menge ihrer jeweiligen Daten an die Abnehmer geliefert). Im vollen Zeilengruppenmodus können das Num_Channels-Feld922 , das Row_Width-Feld924 und das FB_Rows-Feld926 mit dem FB_Address-Feld930 verwendet werden, um den Bereich von Adressen zu bestimmen, die auf den Speicher angewendet werden sollen, um auf eine volle Zeilengruppe vollständig zugreifen zu können. Zusätzlich können dieselben Parameter verwendet werden, um eine Anforderung von einem Datenblattgenerator zu „übersetzen“, der die Zeilengruppe in X-, Y-Koordinaten in eine lineare Speicheradresse angefordert hat. - Die VB_Enable-, VB_Rows-, VB_Cols-, Num_Reuse_Rows- und VB_Base_Address-Felder
925 ,927 ,928 ,931 werden in einem anderen Betriebsmodus verwendet, der als der „virtuell schlanke“ Zeilengruppenmodus bezeichnet und weiter unten näher beschrieben wird. - Während
9d den Konfigurationsregisterbereich905 für eine Einzelzeilenpuffer-Schnittstelleneinheit darstellte, zeigt9e im Gegensatz dazu eine Ausführungsform des Inhalts des globalen Konfigurationsregisterbereichs907 für die gesamte Zeilenpufferschaltkreiseinheit901 . Während der Puffer-Schnittstelleneinheit-Registerbereich pro Zeile von9d auf eine bestimmte Zeilengruppe fokussiert ist, ist der globale Registerraum907 aus9e im Gegensatz dazu auf das Verständnis des Parsens verschiedener Zeilengruppen aus dem gleichen Bild, sowie anderer Informationen fokussiert, die für die Erzeuger-/Abnehmer-Kombination spezifisch und mit der Verarbeitung des Bildes verbunden sind. - Wie in
9e dargestellt, beinhaltet eine Ausführungsform des globalen Registerbereichs die Anzahl der Kanäle932 und die Anzahl der Abnehmer933 für ein bestimmtes Bild. Der Einfachheit halber wird in dem Registerbereich von9e nur ein Bild mit einer Gruppe von Erzeugern und Abnehmern (z. B. nur einen einzigen Videostream und einen einzigen Punkt in einem DAG) betrachtet. Denkbar ist, dass mehrere Instanzen des Registerbereichs von9e zugewiesen werden, um der Zeilenpufferschaltkreiseinheit ein effektives Multitasking zu ermöglichen. - Eine erste Form von Multitasking befindet sich innerhalb einer DAG- oder Software-Pipeline, die auf dem Grafikprozessor implementiert ist. Hier könnte die gleiche Zeilenpuffereinheit dafür konfiguriert sein, die Zeilengruppierung für zwei verschiedene Knoten innerhalb des DAG oder für zwei verschiedene Phasen der Pipeline zu behandeln (das heißt, eine einzelne Zeilenpuffereinheit könnte mehr als einen Schablonenprozessor unterstützen). Die verschiedenen Knoten/Phasen könnten leicht unterschiedliche Anzahlen von Abnehmern haben, in vielen Fällen sind jedoch die gleichen Bild- und Schablonengrößencharakteristiken wahrscheinlich. Eine zweite Form von Multitasking läuft über mehrere verschiedene DAGs und/oder mehrere unterschiedliche Pipelines, die auf der gleichen Grafikprozessor-Hardware implementiert sind. Beispielsweise könnte ein Grafikprozessor mit vier Schablonenprozessoren gleichzeitig zwei völlig unterschiedliche zweistufige Pipelines ausführen, die jeweils völlig unterschiedliche Bildgrößen mit völlig unterschiedlichen Schablonenabmessungen verarbeiten.
- Unter erneuter Bezugnahme auf die spezielle Ausführungsform von
9e ist zu beachten, dass ein bestimmter Knoten in einem DAG oder zwischen Pipeline-Phasen durch die Anzahl von Kanälen im Bild, die Bildgröße, die Abmessungen der anwendbaren Schablone und die Anzahl der Abnehmer der Zeilengruppen umfassend charakterisiert werden kann (9e geht wiederum von einen Erzeuger pro Zeilengruppe aus, es können jedoch mehr als ein Erzeuger in eine einzige Zeilengruppe schreiben, wobei in diesem Fall der globale Registerbereich aus9e auch ein Feld für die Anzahl der Erzeuger beinhalten würde). Die Felder Num_Channels und Num_Consumers932 ,933 sind im Wesentlichen die gleichen wie die entsprechenden Felder922 ,923 aus9c . - Die Bildfelder
934 ,935 für Image_Size und Stencil_Dimension beschreiben im Wesentlichen die Abmessungen des zu bearbeitenden Bildes und die Abmessungen der Schablone, die auf den Zeilengruppen arbeiten, die aus dem Bild geschnitzt werden sollen. Zu beachten ist, dass beide Felder934 ,935 in Form von X-, Y-Koordinatenwerten ausgedrückt und vom Compiler bereitgestellt werden können. Darüber hinaus verwendet in einer Ausführungsform die Steuerlogikschaltung innerhalb der Zeilenpufferschaltkreiseinheit (in9b nicht dargestellt) die Image_Size- und Stencil_Dimension-Felder934 ,935 , um die Row_Width-924 , FB_Rows-926 und FB_Base_Address-Werte930 zu bestimmen, die in einen Registerbereich einer Zeilenpuffer-Schnittstelle geladen werden, wenn die Zeilenpuffer-Schnittstelleneinheit zugeordnet ist, um Zeilengruppen von der Erzeuger-/Abnehmergruppe zu verarbeiten, auf die sich die globalen Informationen beziehen. In einer alternativen oder weiteren Ausführungsform wird die Bildgröße als zwei getrennte Werte, image_width und image_height ausgedrückt, die einen eigenen separat adressierbaren Registerbereich haben können. Ebenso kann die Schablonengröße als zwei getrennte Werte, stencil_width und stencil_height ausgedrückt werden, die einen eigenen separat adressierbaren Registerbereich haben können. - Row_Width
924 ist direkt aus den Informationen der Image_Size934 erhältlich. Wenn beispielsweise Image_Size als das X-, Y-Koordinatenpaar am entferntesten Bildpunkt vom Bildursprung (obere rechte Ecke, wenn sich der Ursprung an der unteren linken Ecke befindet) ausgedrückt wird, kann Row_Width als der X-Koordinatenwert bestimmt werden. - Die Felder FB_Rows und FB_Base_Address
926 ,930 können aus den Image_Size- und Stencil_Dimension-Feldern934 ,935 ermittelt werden. Hier kann insbesondere die Höhe jeder Zeilengruppe (FB_Rows926 ) aus der Höhe des Bildes (Y-Koordinatenwert von Image_Size934 ) und der Schablonenhöhe (Y-Koordinatenwert der Stencil_Dimension935 ) berechnet werden. Sobald die Höhe der Zeilengruppen bekannt ist, kann auch die Anzahl der zu parsenden Zeilengruppen aus dem Bild und die Startlinearadresse für jede der besagten Zeilengruppen im Speicher (FB_Base_Adresse930 ) bestimmt werden. - Wenn also in einer Ausführungsform eine Zeilenpuffereinheit damit beauftragt ist, eine Zeilengruppe für eine bestimmte Erzeuger-/Abnehmer-Kombination zu verarbeiten, deren globaler Registerbereich durch die Registerfelder von
9e gekennzeichnet ist, werden die oben beschriebenen Bestimmungen gleichzeitig berechnet und die jeweiligen FB_Width-924 , FB_Rows-926 , Base_Address-Werte934 zusammen mit den direkt kopierten Num_Channels922 und Num_Consumers923 in den spezifischen Registerbereich der Zeilenpuffer-Schnittstelleneinheit geladen. Logikschaltungen und Datenpfade können daher zwischen dem globalen Registerbereich und jeder Instanz des Registerbereichs der Zeilenpuffer-Schnittstelleneinheit vorhanden sein, um die besagten Bestimmungen und Datenübertragungen auszuführen. - In einer alternativen Ausführungsform führt der Compiler die jeweiligen Berechnungen durch, wodurch ein Großteil, wenn nicht gar der gesamte globale Registerbereich beseitigt wird. Hier kann beispielsweise der Compiler für jede Zeilengruppe den Base_Address-Wert ermitteln und die Werte in eine Nachschlagetabelle innerhalb der Zeilenpufferschaltkreiseinheit einladen. Die Werte werden aus der Nachschlagetabelle abgerufen und, sobald die entsprechenden Zeilengruppen konfiguriert sind, in einen Registerbereich der Zeilenpuffer-Schnittstelleneinheit geladen. Es können auch verschiedene Kombinationen zwischen diesen beiden Extremen (Hardware-improvisiert und statisch von einem Compiler ermittelt) implementiert werden.
- Obwohl die obigen Ausführungsformen das Aufbewahren der Konfigurationsinformationen in der Registerschaltung (dem „Registerbereich“) hervorgehoben haben, können in anderen oder kombinierten Ausführungsformen Konfigurationsinformationen im Speicher (wie z. B. einem Pufferspeicher) oder in anderen Speichern oder Informationsaufbewahrungsschaltkreis aufbewahrt werden.
- c. Vollzeilen-Gruppen-Modus vs. virtuell schlanker Modus
- Die obigen Erklärungen sind weitgehend auf den Modus „Vollzeilengruppe“ gerichtet, bei dem Zeilengruppen zwischen den Datenblattgeneratoren und der Zeilenpuffereinheit als vollständige, ganze Zeilengruppen bezeichnet und übermittelt werden. In einem anderen als „virtuell schlank“ bezeichneten Modus werden Zeilengruppen zwischen den Datenblattgeneratoren als oberer Abschnitt mit voller Breite und unterer Abschnitt, der in getrennten, diskreten Segmenten vervollständigt wird, bezeichnet und übermittelt.
-
10a und10b zeigen eine Darstellung einer exemplarischen, virtuell schlanken Modus-Sequenz. Wie in10a dargestellt, ist eine Zeilengruppe anfänglich als ein oberer Abschnitt1003 von Reihen mit voller Breite und ein erster unterer Abschnitt1004_1 mit nur einem ersten, kürzeren Breitensegment ausgebildet. Die anfängliche Bildung einer Zeilengruppe kann durch einen Erzeuger-Datenblattgenerator an eine Zeilenpuffereinheit oder durch eine Zeilenpuffereinheit an einen Abnehmer-Datenblattgenerator geliefert werden. - Im Fall eines Erzeugers wird die Zeilengruppe gebildet, nachdem die Schablonen
1002 über dem unteren Abschnitt1004_1 die Verarbeitung abgeschlossen haben (die ungefähre Schablonenpositionierung ist in10b zu sehen). Nachdem der Erzeuger-Schablonenprozessor über dem unteren Abschnitt1004_1 die Verarbeitung abgeschlossen hat, fahren die Schablonen horizontal weiter nach rechts. Letztendlich werden diese über einem nächsten unteren Abschnitt1004_2 die Verarbeitung fortsetzen. Nach Beendigung des nächstniedrigeren Abschnitts1004_2 wird der nächste untere Abschnitt1004_2 von dem Datenblattgenerator an die Zeilenpuffereinheit gesendet, die diesen in dem Speicher an der richtigen Position, z. B. „neben“ dem ersten unteren Abschnitt1004_1 , speichert. Der Vorgang wird fortgesetzt, bis die Zeilengruppe vollständig in den Zeilenpufferspeicher geschrieben ist. - Im Fall von Abnehmern wird die Zeilengruppe anfänglich, wie in
10a dargestellt, an den Datenblattgenerator geliefert. Der Schablonenprozessor arbeitet über dem ersten Abschnitt1004_1 der Zeilengruppe. Nach Beendigung der Verarbeitung des ersten Abschnitts1004_1 fordert der Datenblattgenerator den nächsten unteren Abschnitt1004_2 an, der aus dem Speicher abgerufen und von der Zeilenpuffereinheit geliefert wird. Der Vorgang wird fortgesetzt, bis die Zeilengruppe vollständig verarbeitet ist. - Zu beachten ist, dass sowohl für Erzeuger als auch für Abnehmer niedrigere Abschnitte durch den Datenblattgenerator spezifisch identifiziert werden. Das heißt, sowohl im Erzeugerfall als auch im Abnehmerfall wird der untere Abschnitt
1004_2 durch den Datenblattgenerator spezifisch identifiziert, während die Zeilenpuffereinheit speziell auf den Speicher zugreift, um den unteren Abschnitt1004_2 zu speichern/abzurufen. In einer Ausführungsform identifiziert der Datenblattgenerator den unteren Abschnitt1004_2 durch X-, Y-Koordinatenwerte, die basierend auf den vom Compiler bereitgestellten Informationen betrachtet werden (beispielsweise eine der Ecken des unteren Abschnitts1004_2 , alle vier Ecken des unteren Abschnitts1004_2 , nur ein X-Koordinatenwert usw.). - 4.0-Makro-E-/A-Ausführungsformen
- Wie aus der Erklärung von
4 hervorgeht, leitet eine Makro-E-/A-Einheit405 Frames der Bilddaten an eine Zeilenpuffereinheit401 , um dem Grafikprozessor Eingabebilddaten zuzuführen. Ebenso werden verarbeitete Ausgabeframes der Bilddaten von einer Zeilenpuffereinheit401 an die Makro-E-/A-Einheit405 übertragen, um von dem Grafikprozessor verarbeitete Bilddaten an jene Systemressource zu liefern, die von dem Grafikprozessor (z. B. einem Anwendungssoftwareprogramm, einem Display, einer Kamera usw.) Gebrauch macht. -
11a zeigt eine Ausführungsform der Makro-E-/A-Einheit1105 im Detail. Wie in11a dargestellt, ist die Makro-E-/A-Einheit1105 gemäß einer Ausführungsform mit dem Speicher1106 gekoppelt, der sich außerhalb des Grafikprozessors1101 befindet. Beispielsweise kann es sich bei dem externen Speicher1106 um den Systemspeicher eines Computersystems, den lokalen Speicher für eine Kamera, einen Grafikprozessor, einen Beschleuniger und/oder einen Coprozessor handeln, bei dem der Grafikprozessor1101 ein Bestandteil ist oder anderweitig zugeordnet ist. Als externer Speicher1106 wird ein beliebiger Speicher verstanden, der von der Logik des Grafikprozessors1101 selbst extern ist und sich daher von dem internen Speicher des Grafikprozessors unterscheidet (wie beispielsweise der Speicher, der gegenüber den Zeilenpuffereinheiten401 oder den Datenblattgeneratoren403 lokal ist). - Während des nominalen Betriebs werden von dem Grafikprozessor
1101 zu verarbeitende Eingabeframes von Bilddaten zunächst in den externen Speicher1106 geschrieben. Die Makro-E-/A-Einheit1105 liest dann die Bildframes aus dem externen Speicher1106 und speist sie in den Grafikprozessor1101 . Nachdem der Grafikprozessor1101 die Verarbeitung von ausreichenden Abschnitten eines oder mehrerer Frames abgeschlossen hat, schreibt die Makro-E-/A-Einheit die verarbeiteten Abschnitte als Ausgabe des Grafikprozessors in den externen Speicher1006 . Zu beachten ist, dass Abschnitte eines Frames in den externen Speicher geschrieben werden können, bevor der Frame vollständig verarbeitet wird. -
11a zeigt eine umfassende Darstellung einer Ausführungsform der Makro-E-/A-Einheit1105 . Wie in11a dargestellt, ist die Makro-E-/A-Einheit1105 so ausgelegt, dass sie eine Anzahl von logischen Kanaleinheiten1110_1 bis1110_N beinhaltet, die jeweils für die Einrichtung eines logischen Kanals zwischen dem externen Speicher1106 und einem internen Abnehmer der aus dem externen Speicher zu lesenden Bilddaten, die durch den Grafikprozessor verarbeitet werden, oder für die Einrichtung eines internen Erzeugers von Ausgabebilddaten verantwortlich ist, die aus dem Grafikprozessor in den externen Speicher1106 geschrieben werden müssen. - In verschiedenen Ausführungsformen kann es sich bei den besagten Abnehmern oder Erzeugern um eine Zeilenpuffereinheit oder den Datenblattgenerator eines Schablonenprozessors handeln. Unter erneuter Bezugnahme auf
4 , ist zu erkennen, dass die Makro-E-/A-Einheit405 in einer Ausführungsform direkt mit dem Netzwerk404 gekoppelt ist, um eine Kommunikation nicht nur zu mit den Zeilenpuffereinheiten401 , sondern auch mit einem Datenblattgenerator403 eines speziellen Schablonenprozessors zu ermöglichen402 . In verschiedenen anderen Ausführungsformen ist das Netzwerk404 in dem Sinne globaler, dass die Makro-E-/A-Einheit405 mit den Zeilenpuffereinheiten401 über das Netzwerk404 anstatt, wie in4 erklärt, direkt mit den Zeilenpuffereinheiten401 kommuniziert. -
11b zeigt eine Ausführungsform des Logikschaltungsentwurfs für eine logische Kanaleinheit1110 . Wie in11b dargestellt, beinhaltet die logische Kanaleinheit1110 eine Zustandsmaschinen-Logikschaltung1111 , einen Kontextregisterbereich1112 , eine Umformatierungslogik1113 , eine Eingabewarteschlange1114 , eine Ausgabewarteschlange1115 und einen Kommunikationskanal mit anderen logischen Kanaleinheiten1116 . Zu beachten ist, dass in alternativen Ausführungsformen die Umformatierungslogik1113 als ein einziger zentralisierter Block implementiert sein kann, der von mehreren logischen Kanaleinheiten gemeinsam genutzt wird, anstatt, dass, wie in11b erklärt, jeder Kanal seine eigene dedizierte Umformatierungslogik aufweist. Der Einfachheit halber wird der Rest der Erklärung davon ausgehen, dass Umformatierungslogikblöcke pro Kanal implementiert worden sind, anstatt eine zentrale Umformatierung durchzuführen. - Bilddaten, die von der logischen Kanaleinheit
1110 empfangen werden, werden in der Eingabewarteschlange1114 empfangen. Die in der Eingabewarteschlange1114 residenten Bildpunkte der Eingabedaten werden durch Umformatieren der Logik1113 oft selektiv ausgewählt, wodurch Einheiten von Ausgabedaten in der Ausgabewarteschlange1115 gemäß einem anderen Format aufgebaut werden, das sich von dem Format unterscheidet, gemäß dem die Eingabebildpunkte in der Eingabewarteschlange1114 formatiert werden. Das heißt, die Bildpunkte der Ausgabedaten werden in der Regel in der Ausgabewarteschlange1115 gemäß einer anderen Formatstruktur angeordnet als die Eingabebildpunkte in der Eingabewarteschlange1114 . - Beispielsweise können im Fall, dass dem Grafikprozessor Eingabedaten aus dem externen Speicher zugeführt werden, die in dem externen Speicher residenten Eingangsbilddaten gemäß RGB-, RGB-, RGB-, Bildpunktdatenformat angeordnet werden. Der (die) Schablonenprozessor(en) kann (können) jedoch auf Datenblättern von Bildpunktdaten arbeiten, die dieselbe Farbe haben. Das heißt, der (die) Schablonenprozessor(en) kann (können) separat auf Datenblättern von R-Bildpunkten, Datenblättern von G-Bildpunkten und Datenblättern von B-Bildpunkten arbeiten. Um die eingegebenen Bilddaten aus ihrem Format in einem externen Speicher auf das von den Schablonenprozessoren verwendete Format vorzubereiten, wird die Umformatierungslogik
1113 , z. B. R-Bildpunkte aus der Eingabewarteschlange1114 auswählen, um Blöcke von R-Bildpunkten in der Ausgabewarteschlange1115 zu erzeugen. Sobald ein Block von R-Bildpunkten von ausreichender Größe in der Ausgabewarteschlange1115 erstellt worden ist, wird der Block an eine Zeilenpuffereinheit oder einen Datenblattgenerator eines Schablonenprozessors weitergeleitet. - Nachdem beispielsweise eine Einspeisung von R-Bildpunkten erschöpft ist und tiefer in den Grafikprozessor weitergeleitet wurde, kann die Umformatierungslogik
1113 nur G-Bildpunkte aus der Eingabewarteschlange1114 auswählen, um Blöcke von G-Bildpunkten in der Ausgabewarteschlange1115 zu erstellen. Wiederum wird, nachdem eine Einspeisung von G-Bildpunkten erschöpft ist und weitergeleitet wurde, die Umformatierungslogik1113 B-Bildpunkte aus der Eingabewarteschlange1114 auswählen, um Blöcke von B-Bildpunkten in der Ausgabewarteschlange1105 zu erstellen und tiefer in den Grafikprozessor weiterzuleiten. - Gegenläufig werden in der umgekehrten Richtung, in der die Logikkanaleinheit
1110 verwendet wird, um das Schreiben von Ausgabebildern aus dem Grafikprozessor in einen externen Speicher zu unterstützen, Blöcke derselben Bildpunkttypen in die Eingabewarteschlange1114 geladen. Das heißt, dass z. B. Blöcke von R-Bildpunkten, G-Bildpunkten und B-Bildpunkten an einer Eingabewarteschlange1114 von einer Zeilenpuffereinheit oder einem Datenblattgenerator eines Schablonenprozessors empfangen werden. Die Umformatierungslogik1113 wählt dann bestimmte dieser Bildpunkteaus, um Ausgabeblöcke mit der ursprünglichen RGB-, RGB-Formatstruktur in der Ausgabewarteschlange1115 zu bilden und diese in den externen Speicher zu schreiben. - Die Zustandsmaschinenlogik
1111 steuert das Umformatierungsverhalten der Umformatierungslogik1113 , bestimmt, welche Adressen und/oder Adressierungsschemata beim Zugriff auf den externen Speicher zu verwenden sind, und versteht zudem, mit welcher Zeilenpuffereinheit oder welchem Datenblattgenerator diese bei der Bildung eines logischen Verbindungskanals mit dem externen Speicher kommuniziert. - In verschiedenen Ausführungsformen sind die Zustandsmaschinenlogik
1111 und die Umformatierungslogik1113 mit einer dedizierten Logikschaltung implementiert. In anderen Ausführungsformen können die Zustandsmaschinenlogik1111 und/oder die Umformatierungslogik1113 als ein Mikrocontroller implementiert sein, der einen Programmcode ausführt, um die Zustandsmaschinen-/Umformatierungsfunktionen zu implementieren. In noch anderen Ausführungsformen kann die Zustandsmaschinenlogik1111 /Umformatierungslogik1113 als eine Kombination aus programmierter und dedizierter Logikschaltung implementiert sein. Die dedizierte Logikschaltung kann als festverdrahtete und/oder programmierbare logische Schaltung (z. B. als programmierbare logische Schaltung, Universalschaltkreis (PLD) (FPGA) oder programmierbare logische Schaltung (PLAs) exemplarisch für letztere) implementiert sein. - Die Informationseinheit, auf die sich die Zustandsmaschine bezieht, um ihre verschiedenen Zuständigkeiten zu verstehen, wird in dem Kontextregisterbereich
1112 aufbewahrt, der anfänglich mit den entsprechenden Kontextinformationen für einen bestimmten DAG oder eine bestimmte Pipeline geladen wird, wenn z. B. der Grafikprozessor dafür konfiguriert ist, den DAG oder die Pipeline auszuführen. Nachfolgende Aktualisierungen des Registerbereichs1112 während der Ausführung des DAG oder der Pipeline können durch die Zustandsmaschinenlogik1111 , anderweitiger Intelligenz innerhalb des Grafikprozessors (wie etwa den skalaren Prozessor innerhalb eines Schablonenprozessors und/oder das System, (z. B. Computer, Kamera usw.)) vorgenommen werden. - In einer Ausführungsform enthält der Kontextregisterbereich
1112 die folgenden Informationen: 1) die Basis-externe Speicheradresse des Frames von Bilddaten, die, für den Fall, dass dem Grafikprozessor Eingabedaten zugeführt werden, aus dem externen Speicher eingelesen werden soll, oder, für den Fall, dass Ausgabedaten aus dem Grafikprozessor geschrieben werden, in den externen Speicher geschrieben werden soll; 2) die Größe des Bildframes (z. B. in Form von Breite und Gewicht in Einheiten von Bildpunkten); 3) das Format der Daten im externen Speicher; 4) das Format der Daten, die innerhalb des Grafikprozessors verwendet werden; und 5) die Identität des jeweiligen Datenblattgenerators, Schablonenprozessors oder der Zeilenpuffereinheit, den bzw. die der Kanal mit dem externen Speicher logisch koppelt. In verschiedenen Ausführungsformen beinhalten unterstützte Bilddatenformate in beiden Richtungen RGB, alle eine Farbe und unter anderem gepackte RAW. - Wie in
11 dargestellt, beinhaltet die logische Kanaleinheit1110 zudem eine Kommunikationsverbindung1116 , sodass sie den Zustand anderer logischer Kanäle verstehen und eine Koordination zwischen mehreren logischen Kanälen bewirken kann. Ein logischer Kanal, der dem Grafikprozessor Eingabedaten zuführt, kann beispielsweise dafür konfiguriert werden, nach anfänglichem Einladen der Bilddaten in den Grafikprozessor auf das Einladen eines nächsten Frames der Eingabebilddaten in den Grafikprozessor aus dem externen Speicher zu verzichten, bis ein nächster Ausgabebildframe aus dem Grafikprozessor in den externen Speicher geschrieben wurde. Ohne eine die besagte Koordination könnten die internen Speicherressourcen des Grafikprozessors beispielsweise für einige DAG- oder Pipeline-Entwürfe überfordert werden. -
12a , b und13 erläutern noch ein paar relevante Merkmale der Verarbeitungsvorgangsarten, die die Zustandsmaschine1111 eines logischen Kanals bewirken kann.12a und12b betreffen spezielle Adressierungsverfahren des externen Speichers, die durch eine logische Kanaleinheit ausgeführt werden können, sodass eine logische Puffereinheit effizienter arbeiten kann. - Wie aus der Erklärung der
10a und10b hervorging, kann eine Zeilenpuffereinheit gemäß einem „virtuell schlanken“ Modus arbeiten, bei dem zwei sich nicht über die gesamte Vollbildbreite erstreckende zweidimensionale Bildbereiche1004_1 ,1004_2 von einem Zeilenpuffer an einen Datenblattgenerator in Folge übermittelt werden, anstatt Zeilenpuffer mit voller Breite oder zu übermitteln oder die gesamte Framebreite per Rasterverfahren abzutasten, wobei die Daten aus einer nächsten Zeile nicht weitergeleitet werden, bis alle Daten aus einer vorherigen Zeile vollständig weitergeleitet worden sind. -
12a und12b zeigen ein Speicheradressierungsschema, das die Zustandsmaschinenlogik1111 einer logischen Kanaleinheit1110 implementieren kann, um die Weiterleitung der Daten an einen Datenblattgenerator gemäß einer Methode, wie z. B. „der virtuell schlanken“, an eine logische Puffereinheit zu ergänzen, wobei die Daten aus den nächsten Zeilen weitergeleitet werden, bevor alle Daten aus einer vorhergehenden Zeile vollständig weitergeleitet wurden. In12a kann der Bildbereich1201 beispielsweise als die Bilddaten, die die Bilddaten1004_1 aus10a beinhalten, gesehen werden. - Hier werden die Bilddaten
1201 innerhalb des Bildframes1220 aus dem externen Speicher eingelesen und an die Zeilenpuffereinheit weitergeleitet, bevor die Zeilenpuffereinheit die Bilddaten1004_1 an einen Datenblattgenerator weiterleitet. Um die Bilddaten1201 an die Zeilenpuffereinheit weiterzuleiten, sollte beachtet werden, dass die Speicheradressierung auf das Einlesen über eine gesamte Datenzeile des Bildframes1220 verzichten sollte und stattdessen eine begrenzte Ausdehnung einer Zeile1210 einlesen und dann „nach unten rutschen“ sollte, um eine nächste begrenzte Ausdehnung einer nächstniedrigeren Reihe1211 einzulesen. - Der Vorgang wird fortgesetzt, bis der gesamte Bereich
1201 aus dem externen Speicher eingelesen wird (der z. B. nach dem Einlesen der Zeile mit der begrenzten Ausdehnung1212 abgeschlossen ist), sodass dieser an die Zeilenpuffereinheit übermittelt werden kann. Nachdem der Bildbereich1201 an die Zeilenpuffereinheit übermittelt wurde, ist die Zeilenpuffereinheit in der Lage, die Bilddaten1004_1 an einen Datenblattgenerator weiterzuleiten. - Mit dem gleichen Ansatz wie in
12b wird gemäß der gleichen Adressierungsmethode1210 ,1211 ...1212 , wie weiter oben mit Bezug auf12a und dem Bildbereich1201 beschrieben, ein nächster Bildbereich1202 aus dem externen Speicher eingelesen. Nachdem der Bildbereich1202 gemäß dem speziellen Speicheradressierungsansatz aus dem externen Speicher eingelesen wurde, kann der Bildbereich1202 an die Zeilenpuffereinheit weitergeleitet werden, wodurch diese in der Lage ist, die Bilddaten1004_2 aus10b an denselben Datenblattgenerator weiterzuleiten. - Dementsprechend kann die logische Kanaleinheit, die zwischen dem externen Speicher und der logischen Puffereinheit liegt, die Daten an die Zeilenpuffereinheit in einer Weise weiterleiten, die der Weise ähnelt, in der die Zeilenpuffereinheit die Bilddaten an einen Datenblattgenerator weiterleitet. Dadurch, dass die Eingabedaten der Logikpuffereinheit in einer Weise zugeführt werden, die der Weise ähnelt, in der die Zeilenpuffereinheit die Eingabedaten einem Datenblattgenerator zuführt, wird der Gesamtdurchsatz und die Effizienz der Zeilenpuffereinheit verbessert. Zu beachten ist, dass die logische Kanaleinheit darüber hinaus zwischen dem Einlesen der Eingabedaten aus dem externen Speicher und der Weiterleitung derselben an die Zeilenpuffereinheit die zuvor erwähnte Umformatierung (zum Beispiel RGB in ausschließlich R, ausschließlich G und ausschließlich B) durchführen kann.
- Der spezielle Adressierungsmodus der
12a und12b kann zudem in der Schreibrichtung der Ausgabedaten aus dem Grafikprozessor in den externen Speicher angewendet werden. Hier kann ein Datenblattgenerator im „virtuellen Zahlen“-Modus verarbeitete Ausgabebilddaten an einen Zeilenpuffer übermitteln, wodurch eine Zeilenpuffereinheit wiederum dazu veranlasst wird, Bilddatenbereiche mit begrenzter Ausdehnung ähnlich den Bereichen1201 ,1202 aus12 an die logische Kanaleinheit weiterzuleiten. Als Reaktion darauf schreibt die logische Kanaleinheit gemäß demselben speziellen Adressierungsansatz1210 ,1211 ...1212 die Daten in den externen Speicher. Wiederum kann zwischen dem Empfang der Ausgabebilddaten aus einer Zeilenpuffereinheit und dem Schreiben derselben in den externen Speicher eine Umformatierung durch den logischen Kanal durchgeführt werden. -
13 bezieht sich auf einen anderen speziellen Adressierungsansatz, bei dem z. B. ein auf einem Schablonenprozessor ausgeführtes Kernsystem besonders individuelle Oberflächenbereiche anfordert, die sich mehr zufällig oder ad hoc an ihrer Position innerhalb des Eingabeframes befinden, anstatt in Reihenfolge geordnet oder ausgerichtet zu werden. Beispielsweise kann, wie in13 dargestellt, ein Schablonenprozessor die Bildbereiche1301 ,1302 ,1303 und1304 nacheinander anfordern, anstatt Daten in einem geordneten sequentiellen Modus auf der gesamten Breite des Eingabeframes (ob Zeilengruppe, virtuell schlank oder anderweitig) anzufordern. Hier wird jeder Bereich1301 bis1304 unter Verwendung des Adressierungsansatzes mit begrenzter Ausdehnung1210 ,1211 ...1212 der12a , b, jedoch innerhalb der Begrenzungen der Ad-hoc-Bildbereiche1301 bis1304 eingelesen. Dementsprechend ist die Form des externen Speicherabrufbereichs konfigurierbar. - Die Verarbeitung von Bildbereichen in einer ad hoc anstatt einer geordneten Sequenz kann beispielsweise für Bewegungskompensationsroutinen (bei denen sich ein Merkmal in einem Bildstrom bewegt), für geometrische Verzerrungsroutinen (z. B. zum Kompensieren der Linse oder anderer Bildaufnahmen) für Mängel, bei denen der gesammelte Frame der Bilddaten verzerrt ist) und für Matrixmehrfach- oder Transponierungsoperationen nützlich sein.
- In einer Ausführungsform verbraucht die Ad-hoc-Adressierung zwei logische Kanaleinheiten
1110 innerhalb der Makro-E-/A-Einheit1105 . Eine erste logische Kanaleinheit empfängt Basiskoordinatenwerte von jedem Ad-hoc-Bildbereich, die der Schablonenprozessor anfordert. Beispielsweise kann ein gewünschter Bildbereich durch den Schablonenprozessor spezifiziert werden, der die Höhe und Breite des Bereichs zusammen mit der Adresse der unteren linken Ecke des Bereichs identifiziert. - Unter der Annahme, dass der nominale Betrieb jeden gewünschten Bereich mit der gleichen Breite und Höhe aufweist, kann eine Sequenz von Ad-hoc-Bildbereichen identifiziert werden, indem die Koordinatenwerte der unteren linken Ecke jedes gewünschten Bereiches an die erste logische Kanaleinheit weitergeleitet werden (z. B. werden zunächst die Koordinatenwerte der unteren linken Ecke des Bereichs
1301 an die erste logische Kanaleinheit gesendet, und anschließend werden die Koordinatenwerte der unteren linken Ecke des Bereichs1302 an die erste logische Kanaleinheit gesendet usw.). Die erste logische Kanaleinheit leitet dann die empfangenen Koordinatenwerte zu einer zweiten logischen Kanaleinheit (z. B. über einen Kommunikationskanal1106 von11a ), der die gewünschten Bereiche aus dem externen Speicher einliest, umformatiert und diese dann an den anfordernden Schablonenprozessor weiterleitet. Zu beachten ist, dass die Möglichkeit besteht, dass die Ad-hoc-Bildbereiche einer Sequenz untereinander eine beträchtliche Überlappung aufweisen. Das heißt, dass ein erster Bildbereich viel von demselben Bildbereich verbrauchen kann, den ein zweiter Bildbereich ebenfalls verbraucht. In einer Ausführungsform ist ein Cache zwischen dem externen Speicher und den logischen Kanälen implementiert, um die Überlappung der Bilddaten zwischen mehreren Bildbereichen aufrechtzuerhalten, sodass mehrere Speicherzugriffe für dieselben Daten vermieden werden können. -
14 zeigt eine Methodik, die, wie oben beschrieben, durch eine logische Kanaleinheit ausgeführt werden kann. Wie in14 dargestellt, beinhaltet die Methodik das Ermöglichen einer logischen Verbindung mit einer Abnehmerkomponente innerhalb eines Grafikprozessors1401 . Das Verfahren beinhaltet zudem das Einlesen einer Reihe von Bildbereichen mit begrenzter Breite aus einem Frame von Bilddaten, wobei jeder der Bildbereiche gemäß einem RGB-Format1402 formatiert ist. Darüber hinaus beinhaltet das Verfahren das Umformatieren der Serie von Bildbereichen mit begrenzter Breite in Bilddatenblöcke, die die gleiche Farbkomponente1403 aufweisen. Außerdem beinhaltet das Verfahren das Weiterleiten der Bilddatenblöcke, die die gleiche Farbkomponente aufweisen, wie die Abnehmerkomponente1404 . - e. Implementierungsausführungsformen
- Es ist wichtig, darauf hinzuweisen, dass die oben beschriebenen verschiedenen Merkmale der Grafikprozessorarchitektur 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 Grafikprozessor neu charakterisiert wird oder auch nicht. Wenn beispielsweise eines der vorstehend beschriebenen verschiedenen Merkmale der Grafikprozessorarchitektur bei der Erstellung und/oder Erzeugung und/oder Wiedergabe von Animationen anstatt bei der Verarbeitung von tatsächlichen Kamerabildern verwendet werden soll, kann der Grafikprozessor als grafische Verarbeitungseinheit charakterisiert sein. Zudem können die oben beschriebenen Architekturmerkmale des Grafikprozessors in anderen technischen Anwendungen, wie in der Videoverarbeitung, Bildverarbeitung, Bilderkennung und/oder dem maschinellen Lernen, angewendet werden. Auf diese Weise kann der Grafikprozessor (z. B. als Coprozessor) in einen allgemeineren Universalprozessor (z. B. als Teil eines CPUs 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 Schaltkreisentwurfs zur letztendlichen Ausrichtung auf ein Halbleiterherstellungsverfahren enthalten sein. Im Falle des Letzteren können derartige 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 Grafikprozessor, 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 Grafikprozessor als Hardware-Schaltung ausgebildet ist, ist zu beachten, dass die Bilddaten, die von dem Grafikprozessor verarbeitet werden, direkt von einer Kamera empfangen werden können. Hier kann der Grafikprozessor Teil einer diskreten Kamera oder Teil eines Computersystems mit einer integrierten Kamera sein. In dem Fall des Letzteren können die Bilddaten direkt von der Kamera oder aus dem Systemspeicher des Computersystems empfangen werden (z. B. sendet die Kamera ihre Bilddaten anstatt an den Grafikprozessor an den Systemspeicher). Zu beachten ist auch, dass viele der in den vorangehenden Abschnitten beschriebenen Merkmale auf eine Grafikprozessoreinheit (zur Darstellung von Animationen) anwendbar sind.
-
15 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 Grafikprozessor (z. B. einem Handgerät, wie etwa einem Smartphone oder Tablet-Computer) anwendbar. Durchschnittliche Fachleute auf dem Gebiet werden leicht zwischen beiden unterscheiden können. - Wie in
15 dargestellt, kann das grundlegende Computersystem eine zentrale Verarbeitungseinheit1501 (die beispielsweise eine Vielzahl von Universal-Verarbeitungskernsystemen1515_1 bis1515_N und einen auf einem Multikernprozessor oder einem Anwendungsprozessor angeordneten Hauptspeichercontroller1517 enthalten kann), Systemspeicher1502 , ein Display1503 (z. B. Touchscreen, Flachbildschirm), eine lokal verdrahtete Punkt-zu-Punkt-Verbindung (z. B. eine USB-Schnittstelle)1504 , verschiedene Netzwerk-E-/A-Funktionen1505 (wie z. B. eine Ethernet-Schnittstelle und/oder ein Mobilfunkmodem-Teilsystem), ein drahtloses lokales Netzwerk (z. B. WLAN)1506 , eine drahtlose Punkt-zu-Punkt-Verbindung (z. B. Bluetooth-Schnittstelle)1507 und eine globale Positionierungssystemschnittstelle1508 , verschiedene Sensoren1509_1 bis1509_N , eine oder mehrere Kameras1510 , eine Batterie1511 , eine Energieverwaltungssteuereinheit1512 , einen Lautsprecher und ein Mikrofon1513 , sowie einen Audio-Kodierer/Dekodierer1514 beinhalten. - Ein Anwendungsprozessor oder Multikernprozessor
1550 kann einen oder mehrere Universalprozessorkerne1515 innerhalb seiner CPU1501 , eine oder mehrere grafische Verarbeitungseinheiten1516 , eine Speicherverwaltungsfunktion1517 (z. B. einen Speichercontroller), eine E-/A-Steuerfunktion1518 und eine Bildverarbeitungseinheit1519 beinhalten. Die Universalverarbeitungskerne1515 führen in der Regel das Betriebssystem und die Anwendungssoftware des Computersystems aus. Die Grafikverarbeitungseinheiten1516 führen in der Regel grafikintensive Funktionen aus, um z. B. Grafikdaten zu erzeugen, die auf dem Display1503 dargestellt werden. Die Speichersteuerfunktion1517 ist mit dem Systemspeicher1502 verbunden, um Daten in den Systemspeicher1502 zu schreiben bzw. aus demselben einzulesen. Die Leistungsverwaltungssteuereinheit1512 steuert im Allgemeinen den Leistungsverbrauch des Systems1500 . - Die Bildverarbeitungseinheit
1519 kann gemäß einer der oben in den vorangehenden Abschnitten beschriebenen Ausführungsformen der Bildverarbeitungseinheit implementiert sein. Alternativ dazu oder in Kombination kann die IPU1519 mit einer oder beiden der GPU1516 und der CPU1501 als Coprozessor derselben gekoppelt sein. Darüber hinaus kann in verschiedenen Ausführungsformen die GPU1516 mit einem der oben beschriebenen Prozessormerkmale implementiert sein. - Das Touchscreen-Display
1503 , die Kommunikationsschnittstellen1504 –1507 , die GPS-Schnittstelle1508 , die Sensoren1509 , die Kamera1510 und der Lautsprecher/Mikrofon-Codec1513 ,1514 können allesamt 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. der einen oder mehreren Kameras1510 ). Je nach Implementierung können verschiedene dieser E-/A-Komponenten auf dem Anwendungsprozessor/Multikernprozessor1550 integriert sein oder sich außerhalb des Chips oder außerhalb des Pakets des Anwendungsprozessors/Multikernprozessors1550 befinden. - In einer Ausführungsform beinhalten eine oder mehrere Kameras
1510 eine Tiefenkamera, die in der Lage ist, die Tiefe zwischen der Kamera und einem Objekt in seinem 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 Anweisungen enthalten sein. Die Anweisungen können dazu verwendet werden, einen Universalprozessor oder Spezialprozessor dazu zu veranlassen, bestimmte Prozesse auszuführen. Alternativ dazu können die besagten 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 Floppy-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, geeignet für die Speicherung von elektronischen Befehlen einschließen. Die vorliegende Erfindung kann beispielsweise als ein Computerprogramm heruntergeladen werden, das von einem dezentralen Computer (z. B. einem Server) mittels eines in einer Trägerwelle oder einer anderen Ausbreitungsmedium enthaltenen Datensignals an einen anfordernden Computer (z. B. einen Client) über eine Kommunikationsverbindung (z. B. ein Modem oder eine Netzwerkverbindung) übertragen werden kann.
- In der vorstehenden Beschreibung wurde die Erfindung unter Bezugnahme auf spezifische exemplarische Ausführungsformen derselben beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von den in den beigefügten Ansprüchen dargelegten Erfindungsgedanken und Schutzumfang der Erfindung abzuweichen. Die Beschreibung und die Zeichnungen sind daher in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.
Claims (20)
- Grafikprozessor, der Folgendes umfasst: eine E-/A-Einheit zum Einlesen von Eingabebilddaten aus einem externen Speicher zur Verarbeitung durch den Grafikprozessor und zum Schreiben von Ausgabedaten aus dem Grafikprozessor in den externen Speicher, wobei die E-/A-Einheit Folgendes umfasst: mehrere logische Kanaleinheiten, wobei jede logische Kanaleinheit einen logischen Kanal zwischen dem externen Speicher und einer jeweiligen Erzeuger- oder Abnehmerkomponente innerhalb des Grafikprozessors bildet, und wobei jede logische Kanaleinheit dafür ausgelegt ist, Folgendes zu nutzen: eine Adressierungsschaltung zum Steuern von auf dem externen Speicher angewendeten Adressierungsschemata sowie einer Umformatierung von Bilddaten zwischen dem externen Speicher und der jeweiligen Erzeuger- oder Abnehmerkomponente; eine Umformatierungsschaltung zur Durchführung der Umformatierung.
- Grafikprozessor nach Anspruch 1, wobei die Adressierungsschaltung in der Lage ist, den externen Speicher derart zu adressieren, dass Bereiche eines Eingabebildframes mit einer geringeren Breite als der Bildframe zwischen dem externen Speicher und der jeweiligen Erzeuger- oder Abnehmerkomponente übermittelt werden können.
- Grafikprozessor nach Anspruch 2, wobei die Bereiche ad hoc über den gesamten Eingabebildframe ausgerichtet werden können.
- Grafikprozessor nach Anspruch 1, wobei die Umformatierungsschaltung in der Lage ist, Bildpunktblöcke einer Farbe zu konstruieren und dem Grafikprozessor darzustellen.
- Grafikprozessor nach Anspruch 4, wobei der Grafikprozessor mehrere interne Prozessoren enthält, die jeweils eine entsprechende zweidimensionale Schieberegistermatrixschaltungsstruktur aufweisen, die Datenblätter von gleichfarbigen Bildpunktwerten verarbeitet.
- Grafikprozessor nach Anspruch 1, wobei die Umformatierungsschaltung in der Lage ist, RGB-formatierte Ausgabedaten zum Schreiben in den externen Speicher aus Blöcken von gleichfarbigen Bildpunktausgabedaten zu konstruieren, die von dem Bildprozessor erzeugt wurden.
- Grafikprozessor nach Anspruch 6, wobei der Grafikprozessor mehrere interne Prozessoren enthält, die jeweils eine entsprechende zweidimensionale Schieberegistermatrixschaltungsstruktur aufweisen, die Datenblätter von gleichfarbigen Bildpunktwerten verarbeitet.
- Computersystem, das Folgendes umfasst: einen oder mehrere Universalprozessoren; einen Systemspeicher; einen Speichercontroller, der mit dem Systemspeicher gekoppelt ist; einen Grafikprozessor, der Folgendes umfasst: eine E-/A-Einheit zum Einlesen von Eingabebilddaten aus einem externen Speicher zur Verarbeitung durch den Grafikprozessor und zum Schreiben von Ausgabedaten aus dem Grafikprozessor in den externen Speicher, wobei die E/A-Einheit Folgendes umfasst: mehrere logische Kanaleinheiten, wobei jede logische Kanaleinheit einen logischen Kanal zwischen dem externen Speicher und einer jeweiligen Erzeuger- oder Abnehmerkomponente innerhalb des Grafikprozessors bildet, und wobei jede logische Kanaleinheit dafür ausgelegt ist, Folgendes zu nutzen: eine Adressierungsschaltung zum Steuern von Adressierungsschemata, die auf dem externen Speicher angewendet werden, sowie einer Umformatierung von Bilddaten zwischen dem externen Speicher und der jeweiligen Erzeuger- oder Abnehmerkomponente; eine Umformatierungsschaltung zur Durchführung der Umformatierung.
- Computersystem nach Anspruch 8, wobei die Adressierungsschaltung in der Lage ist, einen externen Speicher anzupassen, sodass Bereiche eines Eingabebildframes mit einer geringeren Breite als der Bildframe zwischen dem externen Speicher und der jeweiligen Erzeuger- oder Abnehmerkomponente übermittelt werden können.
- Das Computersystem nach Anspruch 9, wobei die Bereiche ad hoc über den gesamten Bildframe ausgerichtet werden können.
- Computersystem nach Anspruch 8, wobei die Umformatierungsschaltung in der Lage ist, Blöcke von Bildpunkten einer Farbe zu konstruieren und dem Grafikprozessor darzustellen.
- Computersystem nach Anspruch 11, wobei der Grafikprozessor mehrere interne Prozessoren enthält, die jeweils eine entsprechende zweidimensionale Schieberegisterarrayschaltungsstruktur aufweisen, die Datenblätter von gleichfarbigen Bildpunktwerten verarbeitet.
- Computersystem nach Anspruch 8, wobei die Umformatierungsschaltung in der Lage ist, RGB-formatierte Ausgabedaten zum Schreiben in den externen Speicher aus Blöcken gleichfarbiger Bildpunktausgabedaten zu konstruieren, die von dem Grafikprozessor erzeugt werden.
- Computersystem nach Anspruch 13, wobei der Grafikprozessor mehrere interne Universalprozessoren enthält, die jeweils eine entsprechende zweidimensionale Schieberegisterarrayschaltungsstruktur aufweisen, die Datenblätter von gleichfarbigen Bildpunktwerten verarbeitet.
- Computersystem nach Anspruch 13, wobei mindestens ein Teil des externen Speichers innerhalb des Systemspeichers liegt.
- Verfahren, das Folgendes umfasst: das Ermöglichen einer logischen Verbindung mit einer Abnehmerkomponente innerhalb eines Grafikprozessors; das Einlesen einer Reihe von Bildbereichen mit begrenzter Breite aus einem Frame von Bilddaten, wobei jeder der Bildbereiche gemäß einem RGB-Format formatiert ist; das Umformatieren der Serie von Bildbereichen mit begrenzter Breite in Bilddatenblöcke mit derselben Farbkomponente; und, das Weiterleiten der Bilddatenblöcke, die dieselbe Farbkomponente aufweisen, an die Abnehmerkomponente.
- Verfahren nach Anspruch 16, des Weiteren umfassend das Verarbeiten der Bilddatenblöcke, die dieselbe Farbe aufweisen, mit einer Anordnung von Ausführungsbahnen, die Eingabeoperanden von einer zweidimensionalen Schieberegistermatrixschaltungsstruktur empfangen und Ausgabeoperanden in dieselbe schreiben.
- Verfahren nach Anspruch 17, wobei die zweidimensionale Schieberegistermatrixschaltungsstruktur Bilddatenblätter mit derselben Farbe enthält.
- Verfahren nach Anspruch 17, wobei die Abnehmerkomponente eine Zeilenpuffereinheit ist, die den Ausführungsbahnen gleichfarbige Bereiche von Bilddaten zuführt.
- Verfahren nach Anspruch 16, wobei die Bildbereiche mit begrenzter Breite in einer Ad-hoc-Weise über den gesamten Bildframe verteilt sind.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662300880P | 2016-02-28 | 2016-02-28 | |
US62/300,880 | 2016-02-28 | ||
US15/389,168 | 2016-12-22 | ||
US15/389,168 US10380969B2 (en) | 2016-02-28 | 2016-12-22 | Macro I/O unit for image processor |
Publications (1)
Publication Number | Publication Date |
---|---|
DE102016125846A1 true DE102016125846A1 (de) | 2017-08-31 |
Family
ID=57861271
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE102016125846.6A Pending DE102016125846A1 (de) | 2016-02-28 | 2016-12-29 | Makro-E/A-Einheit für Grafikprozessor |
DE202016107470.3U Active DE202016107470U1 (de) | 2016-02-28 | 2016-12-29 | Makro E/A-Einheit für Grafikprozessor |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE202016107470.3U Active DE202016107470U1 (de) | 2016-02-28 | 2016-12-29 | Makro E/A-Einheit für Grafikprozessor |
Country Status (9)
Country | Link |
---|---|
US (3) | US10380969B2 (de) |
EP (1) | EP3420526A1 (de) |
JP (1) | JP6750022B2 (de) |
KR (1) | KR102072145B1 (de) |
CN (1) | CN107133016B (de) |
DE (2) | DE102016125846A1 (de) |
GB (2) | GB2551412B (de) |
TW (3) | TWI745084B (de) |
WO (1) | WO2017146817A1 (de) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10503689B2 (en) * | 2017-05-15 | 2019-12-10 | Google Llc | Image processor I/O unit |
US11386644B2 (en) * | 2017-10-17 | 2022-07-12 | Xilinx, Inc. | Image preprocessing for generalized image processing |
KR102502526B1 (ko) * | 2018-04-16 | 2023-02-23 | 에밀 바덴호르스트 | 프로세서 및 프로세서 작동 방법 |
CN110782387B (zh) * | 2018-07-30 | 2023-09-22 | 阿里巴巴(中国)有限公司 | 图像处理方法、装置、图像处理器及电子设备 |
Family Cites Families (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4445177A (en) | 1981-05-22 | 1984-04-24 | Data General Corporation | Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions |
DE3851005T2 (de) | 1987-06-01 | 1995-04-20 | Applied Intelligent Syst Inc | Paralleles Nachbarverarbeitungssystem und -Verfahren. |
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 |
US5162788A (en) * | 1989-06-16 | 1992-11-10 | Apple Computer, Inc. | Chunky planar data packing apparatus and method for a video memory |
US5253308A (en) | 1989-06-21 | 1993-10-12 | Amber Engineering, Inc. | Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing |
WO1994009595A1 (en) | 1991-09-20 | 1994-04-28 | Shaw Venson M | Method and apparatus including system architecture for multimedia communications |
JP3482660B2 (ja) | 1993-09-08 | 2003-12-22 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US5671440A (en) | 1994-08-08 | 1997-09-23 | Eastman Kodak Company | Color image data reorientation and format conversion system |
US5612693A (en) | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
US5736988A (en) * | 1995-12-04 | 1998-04-07 | Silicon Graphics, Inc. | Apparatus and method for accelerated tiled data retrieval |
US5960211A (en) * | 1995-12-15 | 1999-09-28 | Hughes Aircraft | Data formatting method and apparatus for a data processing array |
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 |
JPH10271299A (ja) * | 1997-03-27 | 1998-10-09 | Ricoh Co Ltd | デジタル複合機 |
US5943040A (en) * | 1997-06-27 | 1999-08-24 | Sun Microsystems, Inc. | Graphical image reformatting |
US6466265B1 (en) | 1998-06-22 | 2002-10-15 | Eastman Kodak Company | Parallel output architectures for CMOS active pixel sensors |
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 |
US6970196B1 (en) | 1999-03-16 | 2005-11-29 | Hamamatsu Photonics K.K. | High-speed vision sensor with image processing function |
JP3922859B2 (ja) | 1999-12-28 | 2007-05-30 | 株式会社リコー | 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6745319B1 (en) | 2000-02-18 | 2004-06-01 | Texas Instruments Incorporated | Microprocessor with instructions for shuffling and dealing data |
US6728862B1 (en) | 2000-05-22 | 2004-04-27 | Gazelle Technology Corporation | Processor array and parallel data processing methods |
US6728722B1 (en) | 2000-08-28 | 2004-04-27 | Sun Microsystems, Inc. | General data structure for describing logical data spaces |
US7286717B2 (en) | 2001-10-31 | 2007-10-23 | Ricoh Company, Ltd. | Image data processing device processing a plurality of series of data items simultaneously in parallel |
JP4146654B2 (ja) | 2002-02-28 | 2008-09-10 | 株式会社リコー | 画像処理回路、複合画像処理回路、および、画像形成装置 |
US9170812B2 (en) | 2002-03-21 | 2015-10-27 | Pact Xpp Technologies Ag | Data processing system having integrated pipelined array data processor |
AU2003221680A1 (en) | 2002-04-09 | 2003-10-27 | The Research Foundation Of State University Of New York | Multiplier-based processor-in-memory architectures for image and graphics processing |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
JP4284501B2 (ja) | 2003-03-28 | 2009-06-24 | セイコーエプソン株式会社 | 画像データ縮小装置、マイクロコンピュータ及び電子機器 |
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 |
JP2006013701A (ja) | 2004-06-23 | 2006-01-12 | Seiko Epson Corp | 表示コントローラ、電子機器及び画像データ供給方法 |
JP4111192B2 (ja) | 2004-12-28 | 2008-07-02 | セイコーエプソン株式会社 | メモリコントローラ、表示コントローラ及びメモリ制御方法 |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
ATE504043T1 (de) | 2005-04-28 | 2011-04-15 | Univ Edinburgh | Umkonfigurierbares anweisungs-zellen-array |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
JP2007067917A (ja) | 2005-08-31 | 2007-03-15 | Matsushita Electric Ind Co Ltd | 画像データ処理装置 |
US7602974B2 (en) | 2005-10-21 | 2009-10-13 | Mobilic Technology (Cayman) Corp. | Universal fixed-pixel-size ISP scheme |
US8094552B1 (en) * | 2005-11-03 | 2012-01-10 | Seagate Technology Llc | Adaptive buffer for frame based storage communications protocols |
FR2895103B1 (fr) | 2005-12-19 | 2008-02-22 | Dxo Labs Sa | Procede et systeme de traitement de donnees numeriques |
US7802073B1 (en) | 2006-03-29 | 2010-09-21 | Oracle America, Inc. | Virtual core management |
US7595805B2 (en) | 2006-04-11 | 2009-09-29 | Qualcomm Incorporated | Techniques to facilitate use of small line buffers for processing of small or large images |
US20080111823A1 (en) | 2006-11-13 | 2008-05-15 | Faraday Technology Corp. | Graphics processing system |
EP1927949A1 (de) | 2006-12-01 | 2008-06-04 | Thomson Licensing | Verarbeitungselement-Array mit lokalen Registern |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
US20080244222A1 (en) | 2007-03-30 | 2008-10-02 | Intel Corporation | Many-core processing using virtual processors |
JP4389976B2 (ja) | 2007-06-29 | 2009-12-24 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
US20090015850A1 (en) | 2007-07-13 | 2009-01-15 | Kenneth Edward Smith | Rapid loading of interleaved RGB data into SSE registers |
JP4844853B2 (ja) | 2007-09-05 | 2011-12-28 | 国立大学法人東北大学 | 固体撮像素子及びその駆動方法 |
CN102047241B (zh) | 2008-05-30 | 2014-03-12 | 先进微装置公司 | 本地与全局数据共享 |
US20090319007A1 (en) | 2008-06-20 | 2009-12-24 | Mcnulty Jr James F | Shocking device having a time-based monitoring and recording circuit |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
JP5339824B2 (ja) | 2008-09-08 | 2013-11-13 | キヤノン株式会社 | 画像形成装置およびその制御方法 |
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 | 삼성전자주식회사 | 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법 |
US20110055495A1 (en) | 2009-08-28 | 2011-03-03 | Qualcomm Incorporated | Memory Controller Page Management Devices, Systems, and Methods |
US8700877B2 (en) | 2009-09-25 | 2014-04-15 | Nvidia Corporation | Address mapping for a parallel thread processor |
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 |
US8751771B2 (en) | 2010-09-29 | 2014-06-10 | Nvidia Corporation | Efficient implementation of arrays of structures on SIMT and SIMD architectures |
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 | 株式会社索思未来 | 程序生成装置、程序生成方法、处理器装置以及多处理器系统 |
US9201781B2 (en) | 2011-03-16 | 2015-12-01 | Panasonic Intellectual Property Management Co., Ltd. | Data processing apparatus, data processing method and data sharing system |
US9092267B2 (en) | 2011-06-20 | 2015-07-28 | Qualcomm Incorporated | Memory sharing in graphics processing unit |
US20130027416A1 (en) | 2011-07-25 | 2013-01-31 | Karthikeyan Vaithianathan | Gather method and apparatus for media processing accelerators |
JP5742651B2 (ja) | 2011-10-15 | 2015-07-01 | コニカミノルタ株式会社 | 画像処理装置、連携方法および連携プログラム |
JP5746100B2 (ja) | 2011-12-27 | 2015-07-08 | 京セラドキュメントソリューションズ株式会社 | 画像形成装置 |
US8823736B2 (en) | 2012-01-20 | 2014-09-02 | Intel Corporation | Graphics tiling architecture with bounding volume hierarchies |
US10244246B2 (en) | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
US9235769B2 (en) | 2012-03-15 | 2016-01-12 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
TWI520598B (zh) | 2012-05-23 | 2016-02-01 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
US9232139B2 (en) | 2012-07-24 | 2016-01-05 | Apple Inc. | Image stabilization using striped output transformation unit |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
US8954992B2 (en) | 2013-03-15 | 2015-02-10 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Distributed and scaled-out network switch and packet processing |
US9098924B2 (en) | 2013-07-15 | 2015-08-04 | Nvidia Corporation | Techniques for optimizing stencil buffers |
US9749548B2 (en) | 2015-01-22 | 2017-08-29 | Google Inc. | Virtual linebuffers for image signal processors |
US9772852B2 (en) | 2015-04-23 | 2017-09-26 | Google Inc. | Energy efficient processor core architecture for image processor |
US9965824B2 (en) | 2015-04-23 | 2018-05-08 | Google Llc | Architecture for high performance, power efficient, programmable image processing |
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 |
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 |
US10291813B2 (en) | 2015-04-23 | 2019-05-14 | Google Llc | Sheet generator for image processor |
US9756268B2 (en) | 2015-04-23 | 2017-09-05 | Google Inc. | Line buffer unit for image processor |
US9769356B2 (en) | 2015-04-23 | 2017-09-19 | Google Inc. | Two dimensional shift array for image processor |
US10297003B2 (en) * | 2015-09-21 | 2019-05-21 | Qualcomm Incorporated | Efficient saving and restoring of context information for context switches |
-
2016
- 2016-12-22 US US15/389,168 patent/US10380969B2/en active Active
- 2016-12-29 JP JP2018539874A patent/JP6750022B2/ja active Active
- 2016-12-29 EP EP16829209.2A patent/EP3420526A1/de not_active Withdrawn
- 2016-12-29 DE DE102016125846.6A patent/DE102016125846A1/de active Pending
- 2016-12-29 DE DE202016107470.3U patent/DE202016107470U1/de active Active
- 2016-12-29 KR KR1020187022065A patent/KR102072145B1/ko active IP Right Grant
- 2016-12-29 WO PCT/US2016/069215 patent/WO2017146817A1/en active Application Filing
- 2016-12-30 TW TW109131928A patent/TWI745084B/zh active
- 2016-12-30 TW TW105144285A patent/TWI650013B/zh active
- 2016-12-30 CN CN201611273166.6A patent/CN107133016B/zh active Active
- 2016-12-30 TW TW107146642A patent/TWI702840B/zh active
- 2016-12-30 GB GB1622425.5A patent/GB2551412B/en active Active
- 2016-12-30 GB GB1910667.3A patent/GB2577959B/en active Active
-
2017
- 2017-05-18 US US15/599,086 patent/US10504480B2/en active Active
-
2019
- 2019-11-15 US US16/685,388 patent/US10733956B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
GB2577959A (en) | 2020-04-15 |
US20170256230A1 (en) | 2017-09-07 |
TWI702840B (zh) | 2020-08-21 |
TWI745084B (zh) | 2021-11-01 |
GB2577959B (en) | 2020-10-07 |
TW201921955A (zh) | 2019-06-01 |
GB2551412B (en) | 2019-09-04 |
US10380969B2 (en) | 2019-08-13 |
GB2551412A (en) | 2017-12-20 |
EP3420526A1 (de) | 2019-01-02 |
CN107133016A (zh) | 2017-09-05 |
CN107133016B (zh) | 2021-03-30 |
TW202112140A (zh) | 2021-03-16 |
US20170249921A1 (en) | 2017-08-31 |
US10733956B2 (en) | 2020-08-04 |
TWI650013B (zh) | 2019-02-01 |
JP2019509549A (ja) | 2019-04-04 |
JP6750022B2 (ja) | 2020-09-02 |
GB201910667D0 (en) | 2019-09-11 |
US10504480B2 (en) | 2019-12-10 |
DE202016107470U1 (de) | 2017-06-30 |
GB201622425D0 (en) | 2017-02-15 |
KR102072145B1 (ko) | 2020-01-31 |
WO2017146817A1 (en) | 2017-08-31 |
US20200160809A1 (en) | 2020-05-21 |
TW201735650A (zh) | 2017-10-01 |
KR20180100362A (ko) | 2018-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112016001866T5 (de) | Zeilenpuffereinheit für Bildprozessor | |
US11182138B2 (en) | Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure | |
DE112016001837T5 (de) | Architektur für leistungseffiziente und programmierbare hochleistungs-bildverarbeitung | |
DE102017113733B4 (de) | Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor | |
DE102017103764A1 (de) | Compilerverwalteter speicher für bildprozessor | |
US10387988B2 (en) | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform | |
DE202017103725U1 (de) | Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister | |
DE102017113735B4 (de) | Statistische Operationen auf einem zweidimensionalen Bildprozessor | |
DE102020115026A1 (de) | Systeme und Verfahren zur Tonabbildung von Bildern mit hohem Dynamikumfang für auf tiefem Lernen basierende Verarbeitung von hoher Qualität | |
DE112016001836T5 (de) | Energieeffiziente Prozessorkernarchitektur für Bildprozessoren | |
DE112016001835T5 (de) | Blattgenerator für Bildprozessor | |
DE102016211642A1 (de) | Patch-speichersystem | |
DE102017113867A1 (de) | Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister | |
DE112016001844T5 (de) | Zweidimensionale Verschiebungsmatrix für Bildprozessor | |
DE102016125846A1 (de) | Makro-E/A-Einheit für Grafikprozessor | |
DE102020107080A1 (de) | Grafiksysteme und Verfahren zum Beschleunigen von Synchronisation mittels feinkörniger Abhängigkeitsprüfung und Planungsoptimierungen basierend auf verfügbarem gemeinsam genutztem Speicherplatz | |
DE102020126011A1 (de) | Hochauflösende interaktive video-segmentierung unter verwendung dichter merkmalszerlegung bei latenter diversität mit grenzverlust | |
DE102020118078A1 (de) | Gradientennäherungsfiltermechanismus |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |
|
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 |
|
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 |
|
R082 | Change of representative |
Representative=s name: PROCK, THOMAS, DR., GB |
|
R016 | Response to examination communication |