-
Gebiet der Erfindung
-
Das Gebiet der Erfindung betrifft im Allgemeinen die Computerwissenschaften und, insbesondere, eine multifunktionale Ausführungsbahn für einen Bildprozessor.
-
Hintergrund
-
Die Bildverarbeitung beinhaltet in der Regel die Verarbeitung von Bildpunktwerten, die in einer Matrix angeordnet sind. Hierbei erfasst eine räumlich angeordnete zweidimensionale Matrix die zweidimensionale Beschaffenheit der Bilder (zusätzliche Dimensionen können unter anderem Zeit (z. B. eine Sequenz von zweidimensionalen Bildern) und Datentyp (z. B. Farben) einschließen). In einem typischen Szenario werden die angeordneten Bildpunktwerte von einer Kamera bereitgestellt, die ein Standbild oder eine Folge von Frames erzeugt hat, um Bewegungsbilder zu erfassen. Herkömmliche Bildprozessoren fallen in der Regel unter eines von zwei Extremen.
-
Ein erstes Extrem führt Bildverarbeitungsschritte als Softwareprogramme aus, die auf einem Universalprozessor oder einem universell verwendbaren Prozessor (z. B. einem Universalprozessor mit Vektorbefehlserweiterungen) ausgeführt werden. Obwohl das erste Extrem in der Regel eine vielseitig einsetzbare Anwendungssoftware-Entwicklungsplattform bereitstellt, resultiert dessen Verwendung feinerer Datenstrukturen kombiniert mit den zugehörigen Verwaltungsdaten (z. B. Befehlsabruf und -dekodierung, Handhabung von chipinternen und chipexternen Daten, spekulative Ausführung) letztendlich in einem Verbrauch größerer Energiemengen pro Dateneinheit während der Ausführung des Programmcodes.
-
Ein zweites, entgegengesetztes Extrem wendet stationäre, fest verdrahtete Schaltkreise auf viel größere Datenblöcke an. Die Verwendung von größeren (im Gegensatz zu feineren) Datenblöcken, die direkt auf benutzerdefinierte Schaltkreise angewendet werden, verringert den Energieverbrauch pro Dateneinheit erheblich. Jedoch führt die Verwendung von benutzerdefinierten stationären Funktionsschaltkreisen im Allgemeinen zu einer begrenzten Menge von Arbeitsschritten, die der Prozessor ausführen kann. Dementsprechend fehlt im zweiten Extrem die vielseitige Programmierumgebung (die mit dem ersten Extrem assoziiert ist).
-
Eine Technologieplattform, die sowohl vielseitige Anwendungssoftware-Entwicklungsmöglichkeiten als auch eine verbesserte Energieeffizienz pro Dateneinheit bietet, bleibt eine wünschenswerte und dennoch fehlende Lösung.
-
Überblick
-
Eine Vorrichtung wird beschrieben, die eine Ausführungseinheit mit einer Multiplikations-Additions-Recheneinheit, einer ersten ALU-Logikeinheit und einer zweiten ALU-Logikeinheit beinhaltet. Die ALU-Einheit soll erste, zweite, dritte und vierte Befehle ausführen. Der erste Befehl ist ein Multiplikations-Additions-Befehl. Der zweite Befehl ist die Durchführung paralleler ALU-Operationen mit den ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren. Der dritte Befehl ist die Durchführung sequenzieller ALU-Operationen mit einer der ALU-Logikeinheiten, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten der dritten Befehl zu ermitteln. Der vierte Befehl ist die Durchführung einer iterativen Divisionsoperation, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit während einer Iteration abwechselnd betrieben werden, um einen Quotientenziffernwert zu ermitteln.
-
Eine Vorrichtung wird beschrieben, die eine Ausführungseinheit eines Bildprozessors umfasst. Die ALU-Einheit umfasst Mittel für das Ausführen eines ersten Befehls, wobei der erste Befehl ein Multiplikations-Additions-Befehl ist. Die ALU-Einheit umfasst Mittel für das Ausführen eines zweiten Befehls, der die Durchführung paralleler ALU-Operationen mit ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, beinhaltet, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren. Die ALU-Einheit umfasst Mittel für das Ausführen eines dritten Befehls, der die Durchführung sequenzieller ALU-Operationen mit einer der ALU-Logikeinheiten beinhaltet, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten des dritten Befehls zu ermitteln. Die ALU-Einheit umfasst Mittel für das Ausführen eines vierten Befehls, der die Durchführung einer iterativen Divisionsoperation beinhaltet, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und Resultantziffernwerte erster und zweiter Ziffern zu ermitteln.
-
Figurenliste
-
Die folgende Beschreibung und begleitenden Zeichnungen dienen dazu, Ausführungsformen der Erfindung zu veranschaulichen. In den Zeichnungen:
- 1 zeigt eine Schablonenprozessorkomponente eines Bildprozessors;
- 2 zeigt eine Instanz einer Ausführungsbahn und deren Kupplung an ein zweidimensionales Schieberegister;
- 3 zeigt relative Verzögerung von Funktionen, die durch eine Ausführungsform der Ausführungsbahn von 2 durchgeführt wird;
- 4 zeigt ein Design für eine multifunktionale Ausführungsbahn;
- 5a und 5b zeigen einen Schaltkreis und eine Methodologie zum Durchführen einer iterativen Divisionsoperation;
- 6 zeigt eine Methodologie, die durch die Ausführungsbahn durchgeführt wird, die in Bezug auf 3 bis 5a, b beschrieben ist;
- 7 zeigt eine Ausführungsform eines Computersystems.
-
Ausführliche Beschreibung
-
1 zeigt eine Ausführungsform einer Schablonenprozessorarchitektur 100. Ein Schablonenprozessor ist, wie aus der folgenden Erläuterung klarer ersichtlich sein wird, ein Prozessor, der für die Verarbeitung von Schablonen von Bilddaten optimiert oder anderweitig konzipiert ist. Einer oder mehrere Schablonenprozessoren können in einen Bildprozessor integriert sein, der schablonenbasierte Aufgaben bei Bildern durchführt, die vom Prozessor verarbeitet werden. Wie in 1 dargestellt, beinhaltet der Schablonenprozessor eine Datenberechnungseinheit 101, einen Skalarprozessor 102 und einen zugehörigen Speicher 103 sowie eine E/A-Einheit 104. Die Datenberechnungseinheit 101 beinhaltet eine Matrix von Ausführungsbahnen 105, eine zweidimensionale Verschiebungsmatrixstruktur 106 und separate Direktzugriffsspeicher 107, die mit bestimmten Zeilen oder Spalten der Matrix verbunden sind.
-
Die E/A-Einheit 104 ist verantwortlich für das Laden von „Blättern“ von Bilddaten, die in der Datenberechnungseinheit 101 empfangen wurden, sowie das Speichern von Ausgabeblättern der Daten von der Datenberechnungseinheit außerhalb des Schablonenprozessors. In einer Ausführungsform umfasst das Laden von Blattdaten in die Datenberechnungseinheit 101 das Parsen eines empfangenen Blattes in die Zeilen/Spalten der Bilddaten sowie das Laden der Zeilen/Spalten der Bilddaten in die zweidimensionale Schieberegisterstruktur 106 oder in die jeweiligen Direktzugriffsspeicher 107 der Zeilen/Spalten der Ausführungsbahnmatrix (wie nachfolgend näher beschrieben).
-
Wird das Blatt anfänglich in die Speicher 107 geladen, können die einzelnen Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 105 dann die Blattdaten, sofern geeignet, in die zweidimensionale Schieberegisterstruktur 106 aus den Direktzugriffsspeichern 107 laden (z. B. als Ladebefehl kurz vor der Operation der Blattdaten). Nach Beendigung des Ladens eines Datenblattes in die Registerstruktur 106 (ob direkt aus einem Blattgenerator oder aus den Speichern 107) arbeiten die Ausführungsbahnen der Ausführungsbahnmatrix 105 an den Daten und „schreiben“ letztendlich die fertigen Daten außerhalb des Schablonenprozessors oder in die Direktzugriffsspeicher 107 „zurück“. Im letzteren Fall ruft die E/A-Einheit 104 die Daten aus den Direktzugriffsspeichern 107 ab, um ein Ausgabeblatt zu bilden, das dann außerhalb des Schablonenprozessors geschrieben wird.
-
Der Skalarprozessor 102 beinhaltet einen Programmcontroller 109, der die Befehle des Programmcodes des Schablonenprozessors aus dem Befehlsspeicher 103 liest und die Befehle an die Ausführungsbahnen in der Ausführungsbahnmatrix 105 ausgibt. In einer Ausführungsform wird ein einzelner Befehl auf alle Ausführungsbahnen innerhalb der Matrix 105 übertragen, um ein SIMD-ähnliches Verhalten der Datenberechnungseinheit 101 zu bewirken. In einer Ausführungsform beinhaltet das Befehlsformat der Befehle, die aus dem Skalarspeicher 103 gelesen und an die Ausführungsbahnen der Ausführungsbahnmatrix 105 ausgegeben werden, ein sehr langes Befehlswortformat (VLIW), das mehr als einen ALU-Operationscode pro Befehl beinhaltet. In einer weiteren Ausführungsform beinhaltet das VLIW-Format sowohl einen ALU-Operationscode, der eine mathematische Funktion anweist, die von der ALU einer Ausführungsbahn ausgeführt wird, als auch einen Speicheroperationscode (der eine Speicheroperation für eine spezifische Ausführungsbahn oder eine Gruppe von Ausführungsbahnen anweist).
-
Der Begriff „Ausführungsbahn“ bezieht sich auf eine Gruppe von einer oder mehreren Ausführungseinheiten, die einen Befehl ausführen können (z. B. eine Logikschaltung, die einen Befehl ausführen kann). Eine Ausführungsbahn kann in verschiedenen Ausführungsformen jedoch prozessorähnlichere Funktionen und nicht nur Ausführungseinheiten beinhalten. Beispielsweise kann eine Ausführungsbahn neben einer oder mehreren Ausführungseinheiten auch Logikschaltungen beinhalten, die einen empfangenen Befehl dekodieren, oder für den Fall MIMD-ähnlicherer Architekturen eine Logikschaltung beinhalten, die einen Befehl abruft und dekodiert. In Bezug auf MIMD-ähnliche Ansätze kann, obwohl ein zentraler Programmsteuerungsansatz hier weitgehend beschrieben wurde, auch ein verteilterer Ansatz in verschiedenen alternativen Ausführungsformen (z. B. unter anderem auch Programmcode und ein Programmcontroller innerhalb jeder Ausführungsbahn der Matrix 105) implementiert werden.
-
Die Kombination einer Ausführungsbahnmatrix 105, eines Programmcontrollers 109 und einer zweidimensionalen Schieberegisterstruktur 106 stellt eine weitgehend anpassbare/konfigurierbare Hardware-Plattform für ein breites Spektrum programmierbarer Funktionen bereit. Beispielsweise können Anwendungssoftwareentwickler in der Lage sein, Kernsysteme mit einem breiten Spektrum unterschiedlicher Funktionsfähigkeiten sowie Abmessungen (z. B. Schablonengrößen) zu programmieren, da die einzelnen Ausführungsbahnen in der Lage sind, eine breite Palette von Funktionen auszuführen und ohne Weiteres auf Eingabebilddaten in der Nähe einer beliebigen Ausgabematrixposition zuzugreifen.
-
Wegen der Ausführungsbahnmatrix 105 und des zweidimensionalen Schieberegisters 106 können während des Betriebs zwei Schablonen eines Bildes gleichzeitig betrieben werden (wie in der Technik bekannt, wird eine Schablone normalerweise als fortlaufende NxM- oder NxMxC-Gruppe von Bildpunktwerten in einem Bild implementiert (wobei N gleich M sein kann)). Hier führt beispielsweise jede Ausführungsbahn Operationen aus, um die Verarbeitung für eine bestimmte Schablone mit Daten innerhalb der Bilddaten durchzuführen, während die zweidimensionale Schiebematrix ihre Daten verschiebt, um die Daten jeder Schablone sequenziell in den Registerraum weiterzugeben, der mit der Ausführungsbahn gekoppelt ist, die die Aufgaben für die Schablone ausführt. Es ist zu beachten, dass das zweidimensionale Schieberegister 106 auch eine größere Dimension haben kann als die Ausführungsbahnmatrix 105 (z. B. wenn die Ausführungsbahnmatrix die Dimension XxX hat, kann das zweidimensionale Schieberegister 106 die Dimension YxY haben, wobei Y>X). Um die Schablonen vollständig zu verarbeiten, werden hier, wenn der linke Rand der Schablonen durch die Ausführungsbahnen verarbeitet wird, die Daten im Schieberegister 106 aus dem rechten Rand der Ausführungsbahnmatrix 105 „herausgeschoben“. Die zusätzliche Dimension des Schieberegisters 106 kann die Daten absorbieren, die vom Rand der Ausführungsbahnmatrix herausgeschoben werden.
-
Abgesehen davon, dass diese als Datenspeicher für Bilddaten genutzt werden, die durch die Ausführungsbahnmatrix 105 bearbeitet werden, können die Direktzugriffsspeicher 107 zudem eine oder mehrere Wertetabellen verwalten. In verschiedenen Ausführungsformen können eine oder mehrere skalare Wertetabellen auch innerhalb des skalaren Speichers 103 instanziiert werden.
-
Ein skalarer Nachschlagevorgang beinhaltet das Übermitteln desselben Datenwertes aus derselben Wertetabelle von demselben Index an sämtliche Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 105. In verschiedenen Ausführungsformen wird das oben beschriebene VLIW-Befehlsformat erweitert, um darüber hinaus einen skalaren Operationscode einzuschließen, der eine vom Skalarprozessor ausgeführte Nachschlageoperation in eine skalare Wertetabelle leitet. Der für die Verwendung mit dem Operationscode angegebene Index kann ein unmittelbarer Operand sein oder von einem anderen Datenspeicherort abgerufen werden. Unabhängig davon umfasst, in einer Ausführungsform, ein Nachschlagevorgang in einer skalaren Wertetabelle innerhalb des skalaren Speichers im Wesentlichen das Senden desselben Datenwertes an alle Ausführungsbahnen innerhalb der Ausführungsbahnmatrix 105 während desselben Taktzyklus.
-
2 zeigt eine weitere, detailliertere Darstellung der Einheitszelle für die ALU-Ausführungseinheit 205 innerhalb einer Ausführungsbahn 201 und die entsprechende lokale Schieberegisterstruktur. Die Ausführungsbahn und der Registerbereich, die jeder Position in der Ausführungsbahnmatrix zugeordnet sind, werden in einer Ausführungsform implementiert, indem der in 2 ersichtliche Schaltkreis an jedem Knoten der Ausführungsbahnmatrix instanziiert wird. Wie in 2 ersichtlich, beinhaltet die Einheitszelle eine Ausführungsbahn 201, die mit einer Registerdatei 202 gekoppelt ist, die aus vier Registern R1 bis R4 besteht. Während eines Zyklus kann eine ALU-Ausführungseinheit von jedem der Register R1 bis R4 lesen und in jedes der Register R1 bis R4 schreiben.
-
In einer Ausführungsform wird die zweidimensionale Schieberegisterstruktur implementiert, indem es während eines einzigen Zyklus erlaubt wird, dass der Inhalt eines beliebigen von (nur) einem der Register R1 bis R3 zu einer seiner angrenzenden Registerdateien durch den Ausgangsmultiplexer 203 „heraus“ verschoben wird, und der Inhalt eines beliebigen von (nur) einem der Register R1 bis R3 durch den Inhalt ersetzt wird, der von einem entsprechenden Nachbarn durch den Eingangsmultiplexer 204 „hinein“ verschoben wird, sodass Verschiebungen zwischen den Nachbarn in gleicher Richtung (z. B. alle Ausführungsbahnen nach links, alle Ausführungsbahnen nach rechts usw.) erfolgen. In verschiedenen Ausführungsformen führen die Ausführungsbahnen selbst ihre eigene jeweilige Verschiebungsanweisung aus, um eine umfangreiche zweidimensionale SIMD-Verschiebung der Inhalte des Schieberegisters durchzuführen. Obwohl es für ein gleiches Register üblich sein kann, dass dessen Inhalt verschoben und durch den Inhalt ersetzt wird, der in demselben Zyklus verschoben wird, erlaubt die Multiplexeranordnung 203, 204 unterschiedliche Schiebequellen- und Schiebezielregister innerhalb einer gleichen Registerdatei während eines gleichen Zyklus.
-
Wie in 2 dargestellt, ist zu beachten, dass während einer Verschiebungssequenz eine Ausführungsbahn den Inhalt aus ihrer Registerdatei 202 zu deren jeweiligen linken, rechten, oberen und unteren Nachbarn schiebt. In Verbindung mit derselben Verschiebungssequenz verschiebt die Ausführungsbahn zudem den Inhalt in deren Registerdatei von einem bestimmten seiner linken, rechten, oberen und unteren Nachbarn. Das Herausverschiebungsziel und die Hereinverschiebungsquelle sollten wiederum mit einer gleichen Verschiebungsrichtung für alle Ausführungsbahnen übereinstimmen (wenn z. B. die Verschiebung heraus zum rechten Nachbarn erfolgt, sollte die Verschiebung herein vom linken Nachbarn erfolgen).
-
Obwohl in einer Ausführungsform der Inhalt von nur einem Register pro Ausführungsbahn pro Zyklus verschoben werden darf, können andere Ausführungsformen zulassen, dass der Inhalt von mehr als einem Register herein-/herausverschoben wird. Beispielsweise kann der Inhalt von zwei Registern während eines gleichen Zyklus heraus-/hereinverschoben werden, wenn eine zweite Instanz des in 2 ersichtlichen Multiplexerschaltkreises 203, 204 in das Design von 2 eingefügt wird. Selbstverständlich können bei Ausführungsformen, bei denen der Inhalt von nur einem Register pro Zyklus verschoben werden kann, Verschiebungen von mehreren Registern zwischen mathematischen Operationen stattfinden, indem mehr Taktzyklen für Verschiebungen zwischen mathematischen Operationen verbraucht werden (z. B. kann der Inhalt von zwei Registern zwischen mathematischen Operationen verschoben werden, indem zwei Verschiebungsoperationen zwischen den mathematischen Operationen verbraucht werden).
-
Falls weniger als der gesamte Inhalt der Registerdateien einer Ausführungsbahn während einer Verschiebungssequenz verschoben wird, ist zu beachten, dass der Inhalt der nicht verschobenen Register jeder Ausführungsbahn an Ort und Stelle bleibt (nicht verschoben wird). Dementsprechend bleibt jeder nicht verschobene Inhalt, der nicht durch verschobenen Inhalt ersetzt wird, durch den Verschiebungszyklus hinweg lokal auf der Ausführungsbahn. In jeder Ausführungsbahn 201 kann eine Speicherausführungseinheit, zur vereinfachten Veranschaulichung in 2 nicht dargestellt, vorhanden sein, um Daten von/zu dem Direktzugriffsspeicher zu laden/zu speichern, der mit der Zeile und/oder Spalte der Ausführungsbahn innerhalb der Ausführungsbahnmatrix verbunden ist. Hier fungiert die Speichereinheit als Standard-M-Einheit, indem sie häufig zum Laden/Speichern von Daten verwendet wird, die nicht von/in den eigenen Registerbereich der Ausführungsbahn geladen/gespeichert werden können. In verschiedenen Ausführungsformen besteht die primäre Operation der M-Einheit darin, Daten von einem lokalen Register in den Speicher zu schreiben und Daten aus dem Speicher einzulesen und in ein lokales Register zu schreiben.
-
In Bezug auf die von der ALU-Einheit 205 der Hardware-Ausführungsbahn 201 unterstützten ISA-Operationscodes in verschiedenen Ausführungsformen können die von der ALU-Einheit 205 unterstützten mathematischen Operationscodes beliebige der folgende ALU-Operationen beinhalten: Addition (ADD), Subtraktion (SUB), Verschiebung (MOV), Multiplikation (MUL), Multiplikation-Addition (MAD), absoluter Wert (ABS), Division (DIV), Verschieben nach links (SHL), Verschieben nach rechts (SHR), Rückkehr zu Min. oder Max. (MIN/MAX), Auswahl (SEL), logisches AND (AND), logisches OR (OR), logisches XOR (XOR), Zählen führender Nullen (CLZ oder LZC) und eine logische Ergänzung (NOT). Eine Ausführungsform einer ALU-Einheit 205 oder eines Teils davon wird nachfolgend in Bezug auf 3 bis 5 genauer beschrieben. Wie zuvor beschrieben, können Speicherzugriffsbefehle von der Ausführungsbahn 201 ausgeführt werden, um Daten von/zu ihrem zugehörigen Direktzugriffsspeicher abzurufen/zu speichern. Zudem unterstützt die Hardware-Ausführungsbahn 201 Verschiebungsoperationen (nach rechts, links, oben, unten), um Daten innerhalb der zweidimensionalen Schieberegisterstruktur zu verschieben. Wie zuvor beschrieben, werden Programmsteuerbefehle weitgehend durch den Skalarprozessor des Schablonenprozessors ausgeführt.
-
3 zeigt eine Verbrauchszeitkarte für eine Ausführungseinheit oder einen Teil davon, einer Ausführungsbahn, wie gerade zuvor beschrieben. Insbesondere zeigt 3 die Zeitdauer, die durch jede der Anzahl verschiedener Befehle in Anspruch genommen wird, die durch die Ausführungseinheit ausgeführt werden können. Wie in 3 beobachtet, kann die Ausführungseinheit Folgendes durchführen: 1) einen Multiplikations-Additions-Befehl (MAD) 301; 2) zwei ALU-Operationen voller Breite (FW) oder vier halber Breite (HW) parallel 302; 3) eine ALU-Operation doppelter Breite (2XW) 303; 4) eine FUSED-Operation der Form ((C op D) op B) 304; und, 5) eine iterative Divisionsoperation (DIV) 306.
-
Wie in 3 ersichtlich, nimmt die MAD-Operation 301 selbst die meiste Zeit unter den verschiedenen Befehlen in Anspruch, die die Ausführungseinheit ausführen kann. Daher ist eine Designperspektive, dass die Ausführungseinheit durch mehrere ALU-Logikeinheiten neben der Logikeinheit, die die MAD-Operation durchführt, verbessert wird, um z. B. mehrere ALU-Operationen parallel (wie Operation 302) und/oder mehrere ALU-Operationen in Reihe (wie Operation 304) durchzuführen.
-
4 zeigt eine Ausführungsform eines Designs für eine Ausführungseinheit 405, die die verschiedenen in 3 veranschaulichten Befehle unterstützen kann. Wie in 4 ersichtlich, beinhaltet die Ausführungseinheit 405 eine erste ALU-Logikeinheit 401 und eine zweite ALU-Logikeinheit 402 sowie eine Multiplikations-Additions-Logikeinheit 403. Eingaben von der Registerdatei werden als A, B, C, D bezeichnet, während Ausgaben, die von der Registerdatei zurück geschrieben werden, als X und Y bezeichnet werden. Daher ist die Ausführungseinheit 405 eine Ausführungseinheit mit 4 Eingangsports und 2 Ausgangsports.
-
Die Multiplikations-Additions-Logikeinheit 403 führt in einer Ausführungsform einen vollständigen Multiplikations-Additions-Befehl durch. Das heißt, die Multiplikations-Additions-Logikeinheit 403 führt die Funktion (A*B)+(C,D) durch, wobei A ein Eingabeoperand voller Breite ist, B ein Operand voller Breite ist und (C,D) eine Verkettung von zwei Operanden voller Breite ist, um einen Summierungsterm doppelter Breite zu bilden. Wenn beispielsweise die volle Breite 16 Bit entspricht, ist A 16 Bit, B ist 16 Bit und der Summierungsterm ist 32 Bit. Wie in der Technik bekannt, kann eine Multiplikation-Addition von zwei Werten voller Breite einen Resultanten doppelter Breite produzieren. Daher wird das Ergebnis der MAD-Operation über die Ausgangsports X, Y geschrieben, wobei z. B. X die obere Hälfte des Resultanten beinhaltet und Y die untere Hälfte des Resultanten beinhaltet. In einer weiteren Ausführungsform unterstützt die Multiplikations-Additions-Einheit 403 eine Multiplikation-Addition halber Breite. Hier wird zum Beispiel die untere Hälfte von A als erster Multiplikant verwendet, die untere Hälfte von B wird als zweiter Multiplikant verwendet und entweder C oder D (jedoch keine Verkettung) wird als Summand verwendet.
-
Wie zuvor in Bezug auf 3 erwähnt, kann die Ausführung der MAD-Operation mehr Zeit in Anspruch nehmen als eine typische ALU-Logikeinheit. Daher beinhaltet die Ausführungseinheit ein Paar ALU-Logikeinheiten 401, 402, um nicht nur parallele Ausführung von ALU-Operationen, sondern auch sequenzielle ALU-Operationen bereitzustellen.
-
Wie unter Bezugnahme auf 3 und 4 ersichtlich, führt die erste ALU-Logikeinheit 401, unter Beachtung der doppelten parallelen FW-Operation 302, hier die erste ALU-Operation voller Breite (A op B) durch, während die zweite ALU-die zweite ALU-Operation voller Breite (C op D) parallel mit der ersten durchführt. Erneut entspricht in einer Ausführungsform die Operation voller Breite 16 Bit. Hier schreibt die erste ALU-Logikeinheit 401 den Resultanten von (A op B) in Register X, während die zweite ALU-Logikeinheit 402 den Resultanten von (C op D) in Register Y schreibt.
-
In einer Ausführungsform beinhaltet das Befehlsformat für das Ausführen der doppelten parallelen ALU-Operation voller Breite 302 einen Operationscode, der die doppelte parallele Operation voller Breite und die Zielregister angibt. In einer weiteren Ausführungsform gibt der Operationscode, neben dem Angeben der doppelten parallelen Operation voller Breite, auch eine oder zwei ALU-Operationen an. Wenn der Operationscode nur eine Operation angibt, führen beide ALU-Logikeinheiten 401, 402 dieselbe Operation durch. Dagegen führt, wenn der Operationscode erste und zweite unterschiedliche ALU-Operationen angibt, die erste ALU-Logikeinheit 401 eine der Operationen durch und die zweite ALU-Logikeinheit 402 führt die zweite der Operationen durch.
-
In Bezug auf das Merkmal halbe Breite (HW) der Operation 302 werden vier ALU-Operationen halber Breite parallel durchgeführt. Hier wird verstanden, dass jeder der Eingaben A, B, C und D zwei getrennte Eingabeoperanden beinhaltet. Das heißt, eine obere Hälfte von A entspricht beispielsweise einem ersten Eingabeoperanden, eine untere Hälfte von A entspricht einem zweiten Eingabeoperanden, eine obere Hälfte von B entspricht einem dritten Eingabeoperanden, eine untere Hälfte von B entspricht einem vierten Eingabeoperanden usw.
-
Daher behandelt die ALU-Logikeinheit 401 zwei ALU-Operationen parallel und die ALU-Logikeinheit 402 behandelt zwei ALU-Operationen parallel. Somit werden, während der Ausführung, alle vier Operationen halber Breite parallel durchgeführt. Am Ende der Operation 302 schreibt die ALU-Logikeinheit 401 zwei Resultanten halber Breite in Register X und die ALU-Logikeinheit 402 schreibt zwei Resultanten halber Breite in Register Y. Daher gibt es vier getrennte Resultanten halber Breite in Register X und Y.
-
In einer Ausführungsform gibt das Befehlsformat nicht nur an, dass die parallele Operation halber Breite durchzuführen ist, sondern gibt auch an, welche ALU-Operation(en) durchzuführen ist/sind. In verschiedenen Ausführungsformen kann das Befehlsformat angeben, dass alle vier Operationen gleich sind, und nur eine Operation angeben, und/oder kann angeben, dass alle vier Operationen verschieden sind und vier verschiedene Operationen angeben. Im letzteren Fall kann alternativ, um dieselben Operationen für alle vier Operationen zu bewirken, das Befehlsformat dieselbe Operation vier Mal angeben. Verschiedene Kombinationen dieser Befehlsformatansätze sind ebenfalls möglich.
-
In Bezug auf die ALU-Operation doppelter Breite 303 von Fig. 3 führt, in einer Ausführungsform, die Ausführungseinheit 405 die Operation (A,C) op (B,D) durch, wobei (A,C) eine Verkettung der Eingaben A und C ist, die einen ersten Eingabeoperanden doppelter Breite bilden, und (B,D) ist eine Verkettung der Eingaben B und D, die einen zweiten Eingabeoperanden doppelter Breite bilden. Hier kann ein Übertragungsterm entlang Übertragungszeile 404 von der ersten ALU-Logikeinheit 401 zur zweiten ALU-Logikeinheit 402 weitergegeben werden, um Operationen voller Breite auf doppelte Breite zu übertragen.
-
Das heißt, in einer Ausführungsform stellen die Terme C und D die weiter unten angeordneten Hälften der zwei Eingabeoperanden doppelter Breite dar. Die zweite ALU-Logikeinheit 402 führt die angegebene Operation (z. B. ADD) bei den zwei unteren Hälften durch und der Resultant, der erzeugt wird, entspricht der unteren Hälfte des gesamten Resultanten doppelter Breite. Daher wird der Resultant von der zweiten ALU-Logikeinheit 402 in Register Y geschrieben. Die Operation der unteren Hälften kann einen Übertragungsterm erzeugen, der zur ersten ALU-Logikeinheit 401 übertragen wird, die die Operation der zwei jeweiligen oberen Hälften A und C der Eingabeoperanden fortsetzt. Der Resultant von der ersten ALU-Logikeinheit 401 entspricht der oberen Hälfte des gesamten Resultanten, der in das Ausgaberegister X geschrieben wird. Da die Operation bei den oberen Hälften der ersten ALU-Logikeinheit 401 möglicherweise nicht in der Lage ist, zu starten, bevor sie den Übertragungsterm von der zweiten ALU-Logikeinheit 402 empfängt, ist die Operation der ALU-Logikeinheiten 402, 401 eher sequenziell als parallel. Daher können, wie in 3 ersichtlich, Operationen doppelter Breite 303 ungefähr doppelt so lang dauern wie parallele Operationen voller/halber Breite 302.
-
Trotzdem kann, da die MAD-Operation 301 mehr Zeit in Anspruch nehmen kann als zwei aufeinanderfolgende ALU-Logikeinheit-Operationen, die Maschine rund um eine Ausführungseinheit 405 gebaut werden, die versuchen kann, so viel Funktionalität wie möglich in den Zeitraum einzufügen, der durch die Operation mit der längsten Ausbreitungsverzögerung in Anspruch genommen wird. Daher entspricht, in einer Ausführungsform, die Zykluszeit der Ausführungseinheit 405 der Ausführungszeit des MAD-Befehls 301. In einer Ausführungsform gibt das Befehlsformat für eine Operation doppelter Breite nicht nur die durchzuführende Operation an, sondern auch, dass die Operation eine Operation doppelter Breite ist.
-
In Bezug auf die FUSED-Operation 304 führt die Ausführungseinheit 405 die Operation (C op D) op B durch. Hier werden, wie die gerade zuvor erläuterte ALU-Operation doppelter Breite 303, die doppelten ALU-Logikeinheiten 401, 402 sequenziell betrieben, da die zweite Operation bei dem Resultanten der ersten Operation durchgeführt wird. Hier führt die ALU-Logikeinheit 402 die anfängliche Operation bei Eingaben C und D voller Breite durch. Der Resultant der zweiten ALU-Logikeinheit 402 wird, statt in den Resultantregisterraum geschrieben zu werden, stattdessen in eine Eingabe der ersten ALU-Logikeinheit 401 über Multiplexer 406 gemultiplext. Die erste ALU-Logikeinheit 401 führt dann die zweite Operation durch und schreibt den Resultanten in Register X.
-
In einer weiteren Ausführungsform kann eine FUSED-Operation halber Breite ebenfalls durchgeführt werden. Hier ist die Operation wie zuvor beschrieben, mit der Ausnahme, dass nur die Hälfte der Eingabeoperanden verwendet wird. Das heißt, zum Beispiel beim Berechnen von (C op D) op B werden nur die untere Hälfte von C und die untere Hälfte von D verwendet, um ein Ergebnis halber Breite für die erste Operation zu ermitteln, woraufhin nur die untere Hälfte von B zusammen mit dem Resultanten halber Breite der ersten Operation verwendet wird, um die zweite Operation durchzuführen. Der Resultant wird als Wert halber Breite in Register X geschrieben. Noch weiter können zwei FUSED-Operationen halber Breite parallel durchgeführt werden. Hier ist die Operation wie gerade zuvor beschrieben gleichzeitig mit denselben logischen Operationen, jedoch für die obere Hälfte der Operanden. Das Ergebnis sind zwei Hälften mit Werten, die in Register X geschrieben werden.
-
In einer Ausführungsform gibt das Befehlsformat für eine FUSED-Operation an, dass eine FUSED-Operation durchzuführen ist, und gibt die zwei Operationen an. Wenn dieselbe Operation zweimal durchzuführen ist, gibt, in einer Ausführungsform, der Befehl die Operation nur einmal an oder gibt sie zweimal an. In einer weiteren Ausführungsform kann, neben dem Angeben der FUSED-Operation und der durchzuführende(n) Operation(en), das Befehlsformat ferner angeben, ob eine Operation voller Breite oder halber Breite durchzuführen ist.
-
Operation 306 von 3 veranschaulicht, dass eine iterative Divisionsoperation ebenfalls von der Ausführungseinheit durchgeführt werden kann. Insbesondere nehmen, wie nachfolgend genauer erklärt, in verschiedenen Ausführungsformen beide ALU-Logikeinheiten 401, 402 gemeinsam parallel während der iterativen Divisionsoperation teil.
-
5a und 5b gehören zu einer Ausführungsform für das Ausführen des iterativen Divisionsbefehls 306 von 3. 5a zeigt einen zusätzlichen Schaltkreis, der zum Ausführungseinheit-Schaltkreis 405 von 4 hinzugefügt werden muss, um die Ausführung des iterativen Divisionsbefehls zu ermöglichen (mit Ausnahme der ALU-Logikeinheiten 501, 502, die als gleich den ALU-Logikeinheiten 401, 402 von 4 verstanden werden). 5b zeigt eine Ausführungsform der Mikrosequenzoperation der Ausführungseinheit während der Ausführung des iterativen Divisionsbefehls. Wie aus der folgenden Erläuterung klarer ersichtlich wird, führt eine einzelne Ausführung des Befehls im Grunde zwei Iterationen durch, die dem atomaren Akt der schriftlichen Division ähnlich sind, bei denen ein Versuch unternommen wird, die führende(n) Ziffer(n) eines Dividenden (des Werts, der dividiert wird) durch einen Divisor (der Wert, durch den der Dividend dividiert wird) zu dividieren.
-
Zur Einfachheit wird eine 16-Bit-Division beschrieben (Fachleute auf dem Gebiet werden die vorliegenden Lehren auf Ausführungsformen verschiedener Breite ausweiten können). Da die hierin beschriebene Ausführungsform atomare Akte mit schriftlicher Division durchführt, werden acht sequenzielle Ausführungen der Befehle verwendet, um einen 16-Bit-Dividenden durch einen 16-Bit-Divisor zu dividieren. Das heißt, jeder atomare Akt mit schriftlicher Division entspricht der Verarbeitung des nächsten signifikanten Bits des Dividenden. Zwei dieser signifikanten Bits werden während einer einzigen Ausführung des Befehls verarbeitet. Daher sind, um alle Bits des Dividenden zu verarbeiten, acht sequenzielle Ausführungen der Befehle nötig, um die komplette Division vollständig durchzuführen. Die Ausgabe des ersten Befehls wird in die Registerdatei geschrieben und als Eingabe für den darauf folgenden Befehl verwendet.
-
Wie unter Bezugnahme auf 5a ersichtlich, wird die Dividendeneingabe bei Eingabe B bereitgestellt, während der Divisor bei Eingabe D bereitgestellt wird. Erneut sind, in der vorliegenden Ausführungsform, sowohl der Eingabeoperand B als auch D 16 Bit. Eine „gepackte“ 32-Bit-Datenstruktur „PACK“, die eine Verkettung A,B der Eingabeoperanden A und B (der Operand A ist ebenfalls 16 Bit) ist, kann als anfängliche Datenstruktur eines kompletten Divisionsvorgangs betrachtet werden. Als anfängliche Bedingung ist A auf eine Zeichenfolge von sechzehn Nullen (000...0) eingestellt und B ist der Dividendenwert.
-
Wie unter Bezugnahme auf 5a und 5b ersichtlich, wird, während einer ersten Mikrosequenz, eine linke Verschiebung der PACK-Datenstruktur durchgeführt, um eine Datenstruktur A[14:0], B[15], bezeichnet als das signifikanteste Wort PACK („PACK msw“), zu erstellen. Der Divisor D wird dann von PACK msw durch die zweite ALU-Logikeinheit 502 subtrahiert 511. Diese Operation entspricht der schriftlichen Division, wobei der Divisor anfänglich in die führende Ziffer des Dividenden dividiert wird. Es ist zu beachten, dass in einer Ausführungsform die ALU-Logikeinheiten 501, 502 tatsächlich ALUs mit drei Eingaben und nicht ALUs mit zwei Eingaben sind, wie 4 nahelegt (die dritte Eingabe ist für den Divisor D für die iterative Divisionsoperation reserviert).
-
Je nach Vorzeichen 512 des Ergebnisses der Subtraktion 511 werden dann verschiedene Datenverarbeitungsverfahren verfolgt. Was am wichtigsten ist, das erste Quotientenresultant-Bit (d. h. das erste Bit des Divisionsergebnisses) wird für das Schreiben in das vorletzte signifikante Bit des Y-Ausgabeports 509 („NEXT B[1]“) abgestuft. Wenn das Ergebnis der Subtraktion negativ ist, wird das Quotientenresultant-Bit B[1] 513 auf eine 0 eingestellt. Wenn das Ergebnis der Subtraktion positiv ist, wird das Quotientenresultant-Bit B[1] 514 auf eine 1 eingestellt. Die Einstellung dieses Bits entspricht dem Prozess bei der schriftlichen Division, wo die erste Ziffer des Quotientenergebnisses durch Festlegen ermittelt wird, ob der Divisorwert in die erste Ziffer des Dividenden dividiert werden kann oder nicht.
-
Außerdem werden zwei verschiedene Datenstrukturen erstellt und den jeweiligen Eingabeports („1“, „2“) eines Multiplexers 506 präsentiert (bei dem es sich um denselben Multiplexer wie Multiplexer 406 von 4 handeln kann). Die erste Datenstruktur entspricht einer Linksverschiebung von Pack msw (A[13:0], B[15], B[14]) und wird bei Eingabe 1 des Multiplexers 506 präsentiert. Die Erstellung dieser Datenstruktur entspricht dem Prozess in der schriftlichen Division, wo die nächste Ziffer des Dividenden an dessen signifikantesten Nachbarn angehängt wird, sofern der Divisor nicht in den signifikantesten Nachbarn dividiert werden kann.
-
Die zweite erstellte Datenstruktur entspricht einer Linksverschiebung des Ergebnisses der Subtraktion 511, die gerade von der zweiten ALU-Logikeinheit 502 durchgeführt wurde, angehängt mit Bit B[13], und wird bei der zweiten Eingabe („2“) des Multiplexers 506 präsentiert. Die Erstellung dieser Datenstruktur entspricht einer Situation in der schriftlichen Division, wo ein Divisor in die erste(n) Ziffer(n) des Dividenden dividiert wird, der eine nächste Division im Ergebnis der Differenz zwischen der/den ersten Ziffer(n) des Dividenden und einem Vielfachen des Divisors einrichtet.
-
Die ersten und zweiten Datenstrukturen werden dann vom Multiplexer 506 abhängig davon, ob das Ergebnis der durch die zweite ALU-Logikeinheit 502 durchgeführten Subtraktion ein positives oder negatives Ergebnis ergeben hat, ausgewählt. Wenn die Subtraktion ein negatives Ergebnis ergeben hat (das dem entspricht, dass der Divisor nicht in die nächste signifikante Ziffer des Dividenden dividiert werden kann), wird die erste Datenstruktur ausgewählt 513. Wenn die Subtraktion ein positives Ergebnis ergeben hat (das dem entspricht, dass der Divisor in die nächste signifikante Ziffer des Dividenden dividiert werden kann), wird die zweite Datenstruktur ausgewählt 514.
-
Die Ausgabe des Multiplexers 506 wird jetzt als nächstes signifikantestes Wort der PACK-Datenstruktur (neue Pack msw) verstanden und entspricht dem nächsten Wert in einer schriftlichen Divisionssequenz, in die versucht wird, den Divisor zu dividieren. Daher subtrahiert 515 die ALU-Logikeinheit 501 den Divisor D vom neuen PACK msw-Wert. Das am wenigsten signifikante Bit 510 des Y-Ausgangs B[0] wird abgestuft, um als 1 oder 0 je nach Vorzeichen des Subtraktionsergebnisses von der ersten ALU 501 geschrieben zu werden, und stellt die nächste Ziffer im Quotientenresultanten 517, 518 dar.
-
Ein zweiter Multiplexer 508 wählt zwischen ersten und zweiten Datenstrukturen je nach 516 Vorzeichen der Subtraktion 515 der ersten ALU-Logikeinheit aus. Eine erste Datenstruktur, präsentiert als Eingabe „1“ des zweiten Multiplexers 508, entspricht dem neuen PACK msw-Wert. Eine zweite Datenstruktur, präsentiert als Eingabe „2“ des zweiten Multiplexers 508 entspricht dem Ergebnis der Subtraktion, die durch die erste ALU-Logikeinheit 501 durchgeführt wird. Welche der zwei Datenstrukturen ausgewählt wird, hängt vom Vorzeichen des Ergebnisses der Subtraktion 515 ab, die durch die erste ALU 501 durchgeführt wird. Wenn das Ergebnis der Subtraktion negativ ist, wählt der Multiplexer den neuen PACK msw-Wert 517 aus. Wenn das Ergebnis der Subtraktion positiv ist, wählt der Multiplexer den neuen PACK msw - D-Wert 518 aus.
-
Die Ausgabe des zweiten Multiplexers 508 entspricht dem NEXT A-Wert, der in die Registerdatei aus der X-Ausgabe geschrieben wird. Der bei der Y-Ausgabe (B[15:0]) präsentierte Wert ist am führenden Rand des B-Operanden minus seiner zwei siginifikantesten Bits, die durch die zwei gerade durchgeführten Iterationen (B[13:0]) in Anspruch genommen wurden, zusammengesetzt. Die Verkettung dieser Restbits von B mit den zwei neu berechneten Quotientenzifferresultanten wird in die Registerdatei als neuer B-Operand NEXT B geschrieben. Für eine nächste Iteration wird die X-Ausgabe von dem vorherigen Befehl in den A-Operanden gelesen und die Y-Ausgabe von dem vorherigen Befehl wird in den B-Operanden gelesen. Der Vorgang wird dann wiederholt, bis alle Ziffern des ursprünglichen B-Operanden verarbeitet sind (was erneut im Fall eines 16-Bit-B-Operanden acht sequenzielle Ausführungen des Befehls in Anspruch nimmt). Bei Abschluss aller Iterationen wird der endgültige Quotient aus der Y-Ausgabe in die Registerdatei geschrieben und jeglicher Rest wird im Wert NEXT A repräsentiert, der aus der X-Ausgabe in die Registerdatei geschrieben wird.
-
6 zeigt eine Ausführungsform einer Methodologie, die durch die oben beschriebene ALU-Einheit durchgeführt wird. Wie in 6 ersichtlich, beinhaltet das Verfahren das Durchführen der Verfolgung eines Bildprozessors mit einer ALU-Einheit. Ausführen eines ersten Befehls, wobei der erste Befehl ein Multiplikations-Additions-Befehl 601 ist. Ausführen eines zweiten Befehls, der die Durchführung paralleler ALU-Operationen mit ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, beinhaltet, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren 602. Ausführen eines dritten Befehls, der die Durchführung sequenzieller ALU-Operationen mit einer der ALU-Logikeinheiten beinhaltet, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten des dritten Befehls 603 zu ermitteln. Ausführen eines vierten Befehls, der die Durchführung einer iterativen Divisionsoperation beinhaltet, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und zweite Divisionsresultantziffernwerte 604 zu ermitteln.
-
Es ist wichtig, darauf hinzuweisen, dass die oben beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur nicht zwangsläufig auf die Bildverarbeitung im herkömmlichen Sinne beschränkt sind und daher auf andere Anwendungen angewendet werden können, die ggf. veranlassen, dass der Bildprozessor neu charakterisiert wird oder auch nicht. Wenn beispielsweise eines der vorstehend beschriebenen verschiedenen Merkmale der Bildprozessorarchitektur bei der Erstellung und/oder Erzeugung und/oder Wiedergabe von Animationen anstatt bei der Verarbeitung von tatsächlichen Kamerabildern verwendet werden soll, kann der Bildprozessor als grafische Verarbeitungseinheit charakterisiert sein. Zudem können die zuvor beschriebenen Architekturmerkmale des Bildprozessors in anderen technischen Anwendungen, wie z. B. in der Videoverarbeitung, Bildverarbeitung, Bilderkennung und/oder dem maschinellen Lernen, angewendet werden. Auf diese Weise kann der Bildprozessor (z. B. als Koprozessor) in einen allgemeineren Universalprozessor (z. B. als Teil einer CPU des Computersystems) mit integriert werden oder ein eigenständiger Prozessor innerhalb eines Computersystems sein.
-
Die zuvor beschriebenen Hardware-Ausführungsformen können in einem Halbleiterchip und/oder als Beschreibung eines Schaltungsdesigns zur letztendlichen Ausrichtung auf einen Halbleiterherstellungsprozess enthalten sein. Im letzteren Fall können diese Schaltungsbeschreibungen die Form einer (z. B. VHDL oder Verilog) Beschreibung einer Registerüberleitungsschaltung (RTL), einer Torschaltung, einer Transistorschaltung oder einer Maske oder verschiedener Kombinationen derselben annehmen. Schaltungsbeschreibungen sind in der Regel auf einem computerlesbaren Speichermedium (wie z. B. einer CD-ROM oder einer anderen Art von Speichertechnologie) enthalten.
-
Aus den vorangehenden Abschnitten ist zu erkennen, dass ein Bildprozessor, wie zuvor beschrieben, in der Hardware auf einem Computersystem (z. B. als Teil eines Handgerätsystems on Chip (SOC), das Daten von der Kamera des Handgerätes verarbeitet) enthalten sein kann. In Fällen, in denen der Bildprozessor als Hardware-Schaltung ausgebildet ist, ist zu beachten, dass die Bilddaten, die von dem Bildprozessor verarbeitet werden, direkt von einer Kamera empfangen werden können. Hier kann der Bildprozessor Teil einer diskreten Kamera oder Teil eines Computersystems mit einer integrierten Kamera sein. Im letzteren Fall können die Bilddaten direkt von der Kamera oder aus dem Systemspeicher des Computersystems empfangen werden (z. B. sendet die Kamera ihre Bilddaten anstatt an den Bildprozessor an den Systemspeicher). Zu beachten ist auch, dass viele der in den vorangehenden Abschnitten beschriebenen Merkmale auf eine Bildprozessoreinheit (zur Darstellung von Animationen) anwendbar sind.
-
7 zeigt eine exemplarische Darstellung eines Computersystems. Viele der Komponenten des nachstehend beschriebenen Computersystems sind auf ein Computersystem mit einer integrierten Kamera und einem zugehörigen Bildprozessor (z. B. einem Handgerät, wie z. B. einem Smartphone oder Tablet-Computer) anwendbar. Fachleute auf dem Gebiet werden leicht zwischen beiden unterscheiden können.
-
Wie in 7 ersichtlich, kann das grundlegende Computersystem eine zentrale Verarbeitungseinheit 701 (die beispielsweise eine Vielzahl von Universal-Verarbeitungskernsystemen 715_1 bis 715_N und einen auf einem Multikernprozessor oder einem Anwendungsprozessor angeordneten Hauptspeichercontroller 717 beinhalten kann), Systemspeicher 702, eine Anzeige 703 (z. B. Touchscreen, Flachbildschirm), eine lokal verdrahtete Punkt-zu-Punkt-Verbindung (z. B. eine USB-Schnittstelle) 704, verschiedene Netzwerk-E-/A-Funktionen 705 (wie z. B. eine Ethernet-Schnittstelle und/oder ein Mobilfunkmodem-Teilsystem), ein drahtloses lokales Netzwerk (z. B. WLAN) 706, eine drahtlose Punkt-zu-Punkt-Verbindung (z. B. Bluetooth-Schnittstelle) 707 und eine globale Positionsbestimmungssystemschnittstelle 708, verschiedene Sensoren 709_1 bis 709_N, eine oder mehrere Kameras 710, eine Batterie 711, eine Energieverwaltungssteuereinheit 712, einen Lautsprecher und ein Mikrofon 713 sowie einen Audio-Kodierer/Dekodierer 714 beinhalten.
-
Ein Anwendungsprozessor oder Multikernprozessor 750 kann einen oder mehrere Universalprozessorkerne 715 innerhalb seiner CPUs 701, eine oder mehrere grafische Verarbeitungseinheiten 716, eine Speicherverwaltungsfunktion 717 (z. B. einen Speichercontroller), eine E-/A-Steuerfunktion 718 und eine Bildverarbeitungseinheit 719 beinhalten. Die Universalprozessorkerne 715 führen typischerweise das Betriebssystem und die Anwendungssoftware des Computersystems aus. Die Grafikprozessoren 716 führen typischerweise intensive Grafikfunktionen aus, um z. B. Grafikinformationen, die auf der Anzeige 703 dargestellt werden, zu erzeugen. Die Speichersteuerungsfunktion 717 verbindet sich mit dem Systemspeicher 702, um Daten in den Systemspeicher 702 zu schreiben bzw. daraus einzulesen. Die Energieverwaltungssteuereinheit 712 steuert generell den Stromverbrauch des Systems 700.
-
Die Bildverarbeitungseinheit 719 kann gemäß einer der zuvor in den vorangehenden Abschnitten beschriebenen Ausführungsformen der Bildverarbeitungseinheit implementiert sein. Alternativ dazu oder in Kombination kann die IPU 719 mit einer oder sowohl der GPU 716 als auch dem CPU 701 als Koprozessor derselben gekoppelt sein. Darüber hinaus kann in verschiedenen Ausführungsformen die GPU 716 mit einem der zuvor beschriebenen Prozessormerkmale implementiert sein.
-
Die Touchscreen-Anzeigen 703, die Kommunikationsschnittstellen 704 bis 707, die GPS-Schnittstelle 708, die Sensoren 709, die Kamera 710 und die Lautsprecher/Mikrofon-Codecs 713, 714 können jeweils als verschiedene E/A-Formen (Eingabe und/oder Ausgabe) relativ zu dem gesamten Computersystem betrachtet werden, einschließlich gegebenenfalls eines integrierten Peripheriegeräts (wie z. B. der einen oder mehreren Kameras 710). Abhängig von der Implementierung können verschiedene dieser E/A-Komponenten im Anwendungsprozessor/Mehrkernprozessor 750 integriert sein oder sich außerhalb des Chips oder Pakets des Anwendungsprozessors/Mehrkernprozessors 750 befinden.
-
In einer Ausführungsform beinhalten eine oder mehrere Kameras 710 eine Tiefenkamera, die in der Lage ist, die Tiefe zwischen der Kamera und einem Objekt in dessen Sichtfeld zu messen. Anwendungssoftware, Betriebssystemsoftware, Gerätetreibersoftware und/oder Firmware, die auf einem universellen CPU-Kern (oder einem anderen Funktionsblock mit einer Befehlsausführungspipeline zum Ausführen eines Programmcodes) eines Anwendungsprozessors oder eines anderen Prozessors ausgeführt werden, können sämtliche der zuvor beschriebenen Funktionen ausführen.
-
Ausführungsformen der Erfindung können, wie zuvor dargelegt, verschiedene Verfahren beinhalten. Die Prozesse können in maschinenausführbaren Befehlen enthalten sein. Die Befehle können dazu verwendet werden, einen Universalprozessor oder Spezialprozessor zu veranlassen, bestimmte Prozesse auszuführen. Alternativ dazu können diese Prozesse von spezifischen Hardwarekomponenten ausgeführt werden, die eine fest verdrahtete Logik zum Ausführen der Prozesse oder eine beliebige Kombination von programmierten Computerkomponenten und benutzerdefinierten Hardwarekomponenten enthalten.
-
Elemente der vorliegenden Erfindung können darüber hinaus als maschinenlesbares Medium zum Speichern der maschinenausführbaren Befehle bereitgestellt sein. Das maschinenlesbare Medium kann unter anderem Disketten, optische Platten, CD-ROMs und magneto-optische Platten, FLASH-Speicher, ROMs, RAMs, EPROMs, EEPROMs, magnetische oder optische Karten, Ausbreitungsmedien oder andere Arten von Medien/maschinenlesbare Medien, die für die Speicherung von elektronischen Befehlen geeignet sind, beinhalten. Die vorliegende Erfindung kann beispielsweise als ein Computerprogramm heruntergeladen werden, das von einem dezentralen Computer (z. B. einem Server) mittels eines in einer Trägerwelle oder in einem anderen Ausbreitungsmedium enthaltenen Datensignals an einen anfordernden Computer (z. B. einen Client) über eine Kommunikationsverbindung (z. B. ein Modem oder eine Netzwerkverbindung) übertragen werden kann.
-
In der vorstehenden Spezifikation wurde die Erfindung unter Bezugnahme auf spezifische exemplarische Ausführungsformen derselben beschrieben. Es ist jedoch offensichtlich, dass verschiedene Modifikationen und Änderungen daran vorgenommen werden können, ohne von dem in den beigefügten Ansprüchen dargelegten Erfindungsgedanken und Umfang der Erfindung abzuweichen. Die Beschreibung und die Zeichnungen sind daher in einem veranschaulichenden und nicht in einem einschränkenden Sinne zu betrachten.