DE112016005521T5 - Multifunktionale Ausführungsbahn für Bildprozessor - Google Patents

Multifunktionale Ausführungsbahn für Bildprozessor Download PDF

Info

Publication number
DE112016005521T5
DE112016005521T5 DE112016005521.8T DE112016005521T DE112016005521T5 DE 112016005521 T5 DE112016005521 T5 DE 112016005521T5 DE 112016005521 T DE112016005521 T DE 112016005521T DE 112016005521 T5 DE112016005521 T5 DE 112016005521T5
Authority
DE
Germany
Prior art keywords
instruction
alu
unit
alu logic
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112016005521.8T
Other languages
English (en)
Inventor
Artem VASILYEV
Jason Rupert Redgrave
Albert Meixner
Ofer Shacham
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE112016005521T5 publication Critical patent/DE112016005521T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Processing Or Creating Images (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

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 des dritten Befehls zu ermitteln. Der vierte Befehl soll eine iterative Divisionsoperation durchführen, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und zweite Divisionsresultantziffernwerte zu ermitteln.

Description

  • 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.

Claims (23)

  1. Vorrichtung, umfassend: eine Ausführungseinheit, umfassend eine Multiplikations-Additions-Berechnungseinheit, eine erste ALU-Logikeinheit und eine zweite ALU-Logikeinheit, wobei die Ausführungseinheit Folgendes durchführen soll: einen ersten Befehl, wobei der erste Befehl ein Multiplikations-Additions-Befehl ist; einen zweiten Befehl, wobei der zweite Befehl parallele Operationen mit den ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, durchführen soll, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren; einen dritten Befehl, wobei der dritte Befehl sequenzielle ALU-Operationen mit einer der ALU-Logikeinheiten durchführen soll, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten des dritten Befehls zu ermitteln; einen vierten Befehl, wobei der vierte Befehl eine iterative Divisionsoperation durchführen soll, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und zweite Divisionsresultantziffernwerte zu ermitteln.
  2. Vorrichtung nach Anspruch 1, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl außerdem parallele ALU-Operationen mit der ersten und zweiten ALU-Logikeinheit durchführen soll, die gleichzeitig betrieben werden.
  3. Vorrichtung nach Anspruch 2, wobei die zweiten und fünften Befehle gemäß verschiedenen Datenbreiten arbeiten.
  4. Vorrichtung nach Anspruch 3, wobei eine der Breiten 8 Bit ist und eine andere der Breiten 16 Bit ist.
  5. Vorrichtung nach Anspruch 1, wobei die ersten und zweiten ALU-Logikeinheiten mit einer Übertragungsterm-Signalleitung gekoppelt sind.
  6. Vorrichtung nach Anspruch 1, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl ein FUSED-Befehl ist.
  7. Vorrichtung nach Anspruch 1, wobei der Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl einen Befehl doppelter Breite ist, bei dem die ersten und zweiten ALU-Logikeinheiten jeweils verschiedene Hälften eines Resultanten erzeugen.
  8. Vorrichtung nach Anspruch 1, wobei die zweiten, dritten und vierten Befehle nicht mehr Zeit in Anspruch nehmen als der erste Befehl und die Zykluszeit der Ausführungseinheit dem Multiplikations-Additions-Befehl entspricht.
  9. Vorrichtung, umfassend: einen Bildprozessor, umfassend eine Matrix von Ausführungsbahnen, wobei jede Ausführungsbahn eine Ausführungseinheit umfasst, wobei die Ausführungseinheit eine Multiplikations-Additions-Berechnungseinheit, eine erste ALU-Logikeinheit und eine zweite ALU-Logikeinheit umfasst, wobei die ALU-Einheit Folgendes durchführen soll: einen ersten Befehl, wobei der erste Befehl ein Multiplikations-Additions-Befehl ist; einen zweiten Befehl, wobei der zweite Befehl parallele ALU-Operationen mit den ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, durchführen soll, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren; einen dritten Befehl, wobei der dritte Befehl sequenzielle ALU-Operationen mit einer der ALU-Logikeinheiten durchführen soll, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten des dritten Befehls zu ermitteln; einen vierten Befehl, wobei der vierte Befehl eine iterative Divisionsoperation durchführen soll, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und zweite Resultantziffernwerte zu ermitteln.
  10. Vorrichtung nach Anspruch 9, wobei der Bildprozessor ferner eine zweidimensionale Schieberegister-Matrixstruktur umfasst, wobei Matrixpositionen der zweidimensionalen Schieberegistermatrix lokal mit jeweiligen Ausführungsbahnen der Matrix der Ausführungsbahnen gekoppelt sind.
  11. Vorrichtung nach Anspruch 9, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl außerdem parallele ALU-Operationen mit der ersten und zweiten ALU-Logikeinheit durchführen soll, die gleichzeitig betrieben werden.
  12. Vorrichtung nach Anspruch 11, wobei die zweiten und fünften Befehle gemäß verschiedenen Datenbreiten arbeiten.
  13. Vorrichtung nach Anspruch 12, wobei eine der Breiten 8 Bit ist und eine andere der Breiten 16 Bit ist.
  14. Vorrichtung nach Anspruch 11, wobei die ersten und zweiten ALU-Logikeinheiten mit einer Übertragungsterm-Signalleitung gekoppelt sind.
  15. Vorrichtung nach Anspruch 10, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl ein FUSED-Befehl ist.
  16. Vorrichtung nach Anspruch 10, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl ein Befehl doppelter Breite ist, bei dem die ersten und zweiten ALU-Logikeinheiten jeweils verschiedene Hälften eines Resultanten erzeugen.
  17. Vorrichtung nach Anspruch 9, wobei die zweiten, dritten und vierten Befehle weniger Zeit in Anspruch nehmen als der erste Befehl und die Zykluszeit der Ausführungseinheit der Zeit entspricht, die durch den ersten Befehl in Anspruch genommen wird.
  18. Vorrichtung nach Anspruch 9, wobei sich der Bildprozessor in einem Computersystem befindet.
  19. Vorrichtung, umfassend: eine mit einem Schaltungsdesign-Synthesetool kompatible Beschreibung einer Ausführungseinheit, wobei die Ausführungseinheit eine Multiplikations-Additions-Berechnungseinheit, eine erste ALU-Logikeinheit und eine zweite ALU-Logikeinheit umfasst, wobei die ALU-Einheit Folgendes durchführen soll: einen ersten Befehl, wobei der erste Befehl ein Multiplikations-Additions-Befehl ist; einen zweiten Befehl, wobei der zweite Befehl parallele ALU-Operationen mit den ersten und zweiten ALU-Logikeinheiten, die gleichzeitig betrieben werden, durchführen soll, um verschiedene jeweilige Ausgaberesultanten des zweiten Befehls zu produzieren; einen dritten Befehl, wobei der dritte Befehl sequenzielle ALU-Operationen mit einer der ALU-Logikeinheiten durchführen soll, die von einer Ausgabe der anderen der ALU-Logikeinheiten betrieben wird, um einen Ausgaberesultanten des dritten Befehls zu ermitteln; einen vierten Befehl, wobei der vierte Befehl eine iterative Divisionsoperation durchführen soll, bei der die erste ALU-Logikeinheit und die zweite ALU-Logikeinheit betrieben werden, um erste und zweite Divisionsresultantziffernwerte zu ermitteln.
  20. Vorrichtung nach Anspruch 19, wobei die Beschreibung ferner einen Bildprozessor beschreibt, der eine Matrix von Ausführungsbahnen umfasst, wobei eine der Ausführungsbahnen die Ausführungseinheit umfasst.
  21. Vorrichtung nach Anspruch 20, wobei der Bildprozessor ferner eine zweidimensionale Schieberegister-Matrixschaltung umfasst, wobei Matrixpositionen der zweidimensionalen Schieberegister-Matrixschaltung lokal mit jeweiligen ALU-Einheiten der Matrix der Ausführungsbahnen gekoppelt sind.
  22. Vorrichtung nach Anspruch 19, wobei die Ausführungseinheit ferner einen fünften Befehl durchführen soll, wobei der fünfte Befehl außerdem parallele ALU-Operationen mit der ersten und zweiten ALU-Logikeinheit durchführen soll, die gleichzeitig betrieben werden.
  23. Verfahren, umfassend: Durchführen des Folgenden mit einer Ausführungseinheit eines Bildprozessors: Ausführen eines ersten Befehls, wobei der erste Befehl ein Multiplikations-Additions-Befehl 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; 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; 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 zu ermitteln.
DE112016005521.8T 2015-12-04 2016-10-19 Multifunktionale Ausführungsbahn für Bildprozessor Pending DE112016005521T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/960,334 US9830150B2 (en) 2015-12-04 2015-12-04 Multi-functional execution lane for image processor
US14/960,334 2015-12-04
PCT/US2016/057771 WO2017095547A1 (en) 2015-12-04 2016-10-19 Multi-functional execution lane for image processor

Publications (1)

Publication Number Publication Date
DE112016005521T5 true DE112016005521T5 (de) 2018-08-30

Family

ID=57223790

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016005521.8T Pending DE112016005521T5 (de) 2015-12-04 2016-10-19 Multifunktionale Ausführungsbahn für Bildprozessor

Country Status (9)

Country Link
US (4) US9830150B2 (de)
EP (2) EP3384376B1 (de)
JP (1) JP6789287B2 (de)
KR (1) KR102000894B1 (de)
CN (1) CN108139886B (de)
DE (1) DE112016005521T5 (de)
GB (1) GB2561306A (de)
TW (3) TWI622014B (de)
WO (1) WO2017095547A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261786B2 (en) 2017-03-09 2019-04-16 Google Llc Vector processing unit
US10534736B1 (en) 2018-12-31 2020-01-14 Texas Instruments Incorporated Shared buffer for multi-output display systems
CN109902795B (zh) * 2019-02-01 2023-05-23 京微齐力(北京)科技有限公司 处理单元设置有输入复用器的人工智能模块和系统芯片
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions

Family Cites Families (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US542600A (en) * 1895-07-09 Lattice hedge fence and method of plashing
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
US4486848A (en) * 1982-07-28 1984-12-04 Sperry Corporation Microprocessor parallel additive execution of a computer count ones instruction
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
US4935894A (en) 1987-08-31 1990-06-19 Motorola, Inc. Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
US5258944A (en) 1992-09-01 1993-11-02 Cray Research, Inc. High performance mantissa divider
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5426600A (en) 1993-09-27 1995-06-20 Hitachi America, Ltd. Double precision division circuit and method for digital signal processor
JPH07234778A (ja) 1994-02-22 1995-09-05 Texas Instr Japan Ltd 演算回路
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
US7395298B2 (en) * 1995-08-31 2008-07-01 Intel Corporation Method and apparatus for performing multiply-add operations on packed data
US5777918A (en) * 1995-12-22 1998-07-07 International Business Machines Corporation Fast multiple operands adder/subtracter based on shifting
EP0875031B1 (de) 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
WO2000055810A1 (fr) 1999-03-16 2000-09-21 Hamamatsu Photonics K. K. Capteur de vision ultra-rapide
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6606700B1 (en) * 2000-02-26 2003-08-12 Qualcomm, Incorporated DSP with dual-mac processor and dual-mac coprocessor
US7124160B2 (en) * 2000-03-08 2006-10-17 Sun Microsystems, Inc. Processing architecture having parallel arithmetic capability
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
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
ATE459042T1 (de) * 2003-04-15 2010-03-15 Koninkl Philips Electronics Nv Rechnersystem mit parallelität auf befehls- und draht-ebene
DE602004006516T2 (de) * 2003-08-15 2008-01-17 Koninklijke Philips Electronics N.V. Parallel-verarbeitungs-array
GB2409065B (en) * 2003-12-09 2006-10-25 Advanced Risc Mach Ltd Multiplexing operations in SIMD processing
US7873815B2 (en) * 2004-03-04 2011-01-18 Qualcomm Incorporated Digital signal processors with configurable dual-MAC and dual-ALU
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
ATE504043T1 (de) 2005-04-28 2011-04-15 Univ Edinburgh Umkonfigurierbares anweisungs-zellen-array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7555514B2 (en) * 2006-02-13 2009-06-30 Atmel Corportation Packed add-subtract operation in a microprocessor
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7882307B1 (en) * 2006-04-14 2011-02-01 Tilera Corporation Managing cache memory in a parallel processing environment
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 ブラザー工業株式会社 画像処理装置および画像処理プログラム
US8521800B1 (en) * 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
EP2663071B1 (de) 2007-09-05 2015-11-18 Tohoku University Festkörperabbildungssensor und Ansteuerungsverfahren dafür
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
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 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8429453B2 (en) 2009-07-16 2013-04-23 Hitachi, Ltd. Management system for outputting information denoting recovery method corresponding to root cause of failure
TWI398781B (zh) * 2009-08-03 2013-06-11 Hon Hai Prec Ind Co Ltd 離散餘弦轉換電路及裝置
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
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 京セラドキュメントソリューションズ株式会社 画像形成装置
EP2798467A4 (de) 2011-12-30 2016-04-27 Intel Corp Konfigurierbarer kern mit eingeschränktem befehlssatz
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
CN102637124B (zh) * 2012-03-22 2015-09-30 中国电子科技集团公司第五十八研究所 一种基4fft算法的并行处理装置及方法
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
CN102750133B (zh) * 2012-06-20 2014-07-30 中国电子科技集团公司第五十八研究所 支持simd的32位三发射的数字信号处理器
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9588766B2 (en) 2012-09-28 2017-03-07 Intel Corporation Accelerated interlane vector reduction instructions
US10318308B2 (en) 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9323535B2 (en) 2013-06-28 2016-04-26 Intel Corporation Instruction order enforcement pairs of instructions, processors, methods, and systems
GB2522290B (en) * 2014-07-14 2015-12-09 Imagination Tech Ltd Running a 32-bit operating system on a 64-bit machine
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
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
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure

Also Published As

Publication number Publication date
KR102000894B1 (ko) 2019-07-16
CN108139886A (zh) 2018-06-08
GB201805590D0 (en) 2018-05-23
US20190213006A1 (en) 2019-07-11
TWI680435B (zh) 2019-12-21
US20220206796A1 (en) 2022-06-30
EP3633504A1 (de) 2020-04-08
TWI622014B (zh) 2018-04-21
TW201721580A (zh) 2017-06-16
US10185560B2 (en) 2019-01-22
GB2561306A (en) 2018-10-10
EP3384376A1 (de) 2018-10-10
TW201816715A (zh) 2018-05-01
EP3384376B1 (de) 2019-12-04
TW202004655A (zh) 2020-01-16
US9830150B2 (en) 2017-11-28
CN108139886B (zh) 2021-11-16
TWI724545B (zh) 2021-04-11
US20170161064A1 (en) 2017-06-08
US20170242695A1 (en) 2017-08-24
WO2017095547A1 (en) 2017-06-08
JP6789287B2 (ja) 2020-11-25
JP2018532200A (ja) 2018-11-01
KR20180052721A (ko) 2018-05-18
EP3633504B1 (de) 2021-10-06

Similar Documents

Publication Publication Date Title
DE102017113733B4 (de) Faltendes neuronales Netzwerk auf programmierbarem zweidimensionalem Bildprozessor
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE112008002158B4 (de) Verfahren und System zur Multiplikation großer Zahlen
DE112016001835T5 (de) Blattgenerator für Bildprozessor
DE112016001837T5 (de) Architektur für leistungseffiziente und programmierbare hochleistungs-bildverarbeitung
DE102008059371B4 (de) Funktionseinheit für verschmolzenes Multiplizieren und Addieren
DE102017103764A1 (de) Compilerverwalteter speicher für bildprozessor
DE212007000102U1 (de) Rekonfigurierbarer Array-Prozessor für Gleitkomma-Operationen
DE112016001844T5 (de) Zweidimensionale Verschiebungsmatrix für Bildprozessor
DE102017113867A1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE112016001866T5 (de) Zeilenpuffereinheit für Bildprozessor
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112016005521T5 (de) Multifunktionale Ausführungsbahn für Bildprozessor
DE19540102A1 (de) Gleitkomma-Recheneinheit mit einer Logik für eine Vierfach-Präzisions-Arithmetik
DE102017113735A1 (de) Statistische Operationen auf einem zweidimensionalen Bildprozessor
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112011103211T5 (de) Auf einem Halbleiterchip implementierte vektorlogische Reduktionsoperation
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018005859A1 (de) Einrichtung und Verfahren zur Multiplikation und Akkumulation von komplexen und echten gepackten Datenelementen
DE102018128626A1 (de) Systeme, Verfahren und Vorrichtungen für Matrixoperationen
DE202016107470U1 (de) Makro E/A-Einheit für Grafikprozessor
DE102018006736A1 (de) Einrichtung und Verfahren zum Durchführen von Transformationen von gepackten komplexen Daten mit echten und imaginären Komponenten
DE102018132196A1 (de) Vorrichtung und verfahren zum verarbeiten von reziproken quadratwurzeloperationen

Legal Events

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

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