DE102006027181A1 - Prozessor mit internem Raster von Ausführungseinheiten - Google Patents

Prozessor mit internem Raster von Ausführungseinheiten Download PDF

Info

Publication number
DE102006027181A1
DE102006027181A1 DE102006027181A DE102006027181A DE102006027181A1 DE 102006027181 A1 DE102006027181 A1 DE 102006027181A1 DE 102006027181 A DE102006027181 A DE 102006027181A DE 102006027181 A DE102006027181 A DE 102006027181A DE 102006027181 A1 DE102006027181 A1 DE 102006027181A1
Authority
DE
Germany
Prior art keywords
data
execution
alu
configuration
execution units
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.)
Granted
Application number
DE102006027181A
Other languages
English (en)
Other versions
DE102006027181B4 (de
Inventor
Sascha Dr. Uhrig
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.)
Universitaet Augsburg
Original Assignee
Universitaet Augsburg
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 Universitaet Augsburg filed Critical Universitaet Augsburg
Priority to DE102006027181A priority Critical patent/DE102006027181B4/de
Priority to US12/304,655 priority patent/US20090249028A1/en
Priority to PCT/DE2007/001022 priority patent/WO2007143972A2/de
Publication of DE102006027181A1 publication Critical patent/DE102006027181A1/de
Application granted granted Critical
Publication of DE102006027181B4 publication Critical patent/DE102006027181B4/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/30181Instruction operation extension or modification
    • 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/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path

Abstract

Die vorliegende Erfindung betrifft einen Prozessor, der als Hauptmerkmal ein internes Raster von ALUs aufweist, mit dessen Hilfe sequentielle Programme abgearbeitet werden. Die Verbindungen zwischen den ALUs werden automatisch dynamisch zur Laufzeit über Multiplexer hergestellt. Verantwortlich für das Herstellen der Verbindungen ist eine zentrale Dekodier- und Konfigurationseinheit, die aus einem Strom herkömmlicher Assembler-Befehle Konfigurationsdaten für das ALU-Grid zur Laufzeit erzeugt. Neben dem ALU-Grid ist eine spezielle Einheit für die Ausführung von Speicherzugriffen und eine weitere Einheit für die Behandlung von Sprungbefehlen vorhanden. Die dem Prozessor zugrunde liegende neuartige Architektur ermöglicht die effiziente Durchführung sowohl von Kontrollfluss- als auch von Datenfluss-orientierten Aufgaben.

Description

  • Technisches Anwendungsgebiet/Stand der Technik
  • Die vorliegende Erfindung betrifft einen Prozessor für die Abarbeitung sequentieller Programme. Derartige Prozessoren arbeiten mit einer Folge von Befehlen, die sequentiell abgearbeitet werden. Die Befehle werden einzeln dekodiert und anschließend in sog. Ausführungseinheiten zur Ausführung gebracht. Die Ausführungseinheiten sind bei herkömmlichen Prozessoren, bspw. bei Superskalar- oder VLIW-Prozessoren, eindimensional angeordnet. Diesen Ausführungseinheiten können daher in einem Takt nur Befehle zugeordnet werden, die vollkommen unabhängig voneinander sind. Erst nach deren Ausführung können abhängige Befehle im nächsten Takt zugeordnet und demnach erst dann ausgeführt werden.
  • Sog. "Tiled Architectures" verbinden den Ansatz eines herkömmlichen Prozessors mit Array-Strukturen von rekonfigurierbaren Systemen. Die Array-Strukturen umfassen hierbei in der Regel eine zweidimensionale Anordnung aus kleinen Prozessoren zur Abarbeitung der Befehle. In vielen Fällen ist zur zentralen Steuerung der kleinen Prozessoren noch ein weiterer Steuerprozessor außerhalb des Arrays vorhanden. Die Datenpfade zwischen den kleinen Prozessoren können von diesen meist selbständig gesteuert werden, so dass ein Datenaustausch zwischen den Prozessoren stattfinden kann. Die Programmierung dieser "Tiled Architectures" erfolgt in Form mehrerer sequentieller Befehlsströme, die den einzelnen Prozessoren zugeordnet werden können.
  • Der Steuerprozessor arbeitet hierbei generell mit einem eigenen Befehlsstrom, ggf. sogar mit einem von den Array-Prozessoren verschiedenen Befehlssatz.
  • Neben den genannten Prozessoren bzw. Prozessorarchitekturen sind auch sog. rekonfigurierbare Systeme bekannt, die aus einer zentralen, in der Regel zweidimensionalen, mehr oder weniger homogenen Anordnung von Arbeitselementen bestehen. Bei diesen Systemen handelt es sich jedoch nicht um Prozessoren, sondern um Systeme, die zusätzlich zu Prozessoren eingesetzt werden. Den Arbeitselementen, die mehr oder weniger spezialisiert sind, wird während einer Konfigurationsphase eine Aufgabe zugeteilt. Über Datenpfade sind die Arbeitselemente miteinander verbunden und können Daten austauschen. Diese Datenpfade werden in der Regel auch während der Konfigurationsphase bereits gestellt bzw. programmiert. Die Konfigurationsdaten werden bei rekonfigurierbaren Systemen vorab, d.h. bereits bei der Programmierung des Gesamtsystems, explizit erstellt. Dies erfolgt in der Praxis manuell mit Hilfe von geeigneten Synthese-Werkzeugen. Durch einen speziellen Mechanismus werden die Konfigurationsdaten zur Laufzeit auf einmal aus einem Speicher in das rekonfigurierbare System geladen und verbleiben dort, solange diese Konfiguration benötigt wird. Die rekonfigurierbaren Systeme arbeiten in der Regel parallel zu einem herkömmlichen Prozessor, dessen Programm separat neben den Konfigurationsdaten gehalten wird.
  • Die Aufgabe der vorliegenden Erfindung besteht darin, einen Prozessor bereitzustellen, der sich sowohl effizient in Kontrollfluss- als auch in Datenflussorientierten Anwendungen einsetzen lässt und gegenüber bekannten Prozessoren Leistungsvorteile bei der Abarbeitung von Kontrollfluss-orientierten Programmen bietet.
  • Darstellung der Erfindung
  • Die Aufgabe wird mit dem Prozessor gemäß Patentanspruch 1 gelöst. Vorteilhafte Ausgestaltungen des Prozessors sind Gegenstand der Unteransprüche oder lassen sich der nachfolgenden Beschreibung sowie den Ausführungsbeispielen entnehmen.
  • Der vorliegende Prozessor umfasst eine zweidimensionale Anordnung aus mehreren Zeilen konfigurierbarer Ausführungseinheiten, die in Spalten angeordnet sein können und durch konfigurierbare Datenverbindungen von Zeile zu Zeile zu mehreren Ketten von Ausführungseinheiten verbunden werden können. Die Anordnung weist ein Rückführungsnetzwerk auf, über das ein am Datenausgang der untersten Ausführungseinheit jeder Kette ausgegebener Datenwert an ein Top-Register der Kette überführt werden kann. Die Ausführungseinheiten sind dabei so ausgebildet, dass sie während ein oder mehrerer Ausführungsphasen an ihrem Dateneingang anliegende Daten entsprechend ihrer momentanen Konfiguration behandeln, d.h. verarbeiten oder durchleiten, und die behandelten Daten an ihrem Datenausgang für die in der Kette nachfolgende Ausführungseinheit bereitstellen. Eine als Frontend vorgesehene Dekodier- und Konfigurationseinheit wählt während mehrerer durch ein oder mehrere Ausführungsphasen getrennte Dekodierphasen aus einem einzelnen eingehenden sequentiellen Befehlsstrom zur Laufzeit eigenständig Ausführungseinheiten aus, erzeugt Konfigurationsdaten für die ausgewählten Ausführungseinheiten und konfiguriert die ausgewählten Ausführungseinheiten über ein Konfigurationsnetzwerk zur Ausführung der Befehle. Die Dekodier- und Konfigurationseinheit kann sich dabei auch aus einer Dekodiereinheit und einer davon getrennten Konfigurationseinheit zusammensetzen. Der Prozessor weist weiterhin zumindest eine mit den Ausführungseinheiten über Datenleitungen verbundene Sprung-Kontrolleinheit für die Behandlung von Sprungbefehlen sowie ein oder mehrere mit den Ausführungseinheiten über Datenleitungen verbundene Speicherzugriffseinheiten zur Ausführung von Speicherzugriffen auf.
  • Zentraler Teil der Prozessorarchitektur, die dem vorgeschlagenen Prozessor zugrunde liegt, ist eine zweidimensionale Struktur aus einfachen Arbeitselementen, den Ausführungseinheiten, die keine eigenen Prozessoren aufweisen. Die Ausführungseinheiten sind in der Regel als arithmetisch logische Einheiten (ALU) ausgebildet, die in einer Ausgestaltung des Prozessors ein Raster aus Zeilen und Spalten bilden, im Folgenden auch als ALU-Grid bezeichnet. Die Ausführungseinheiten werden im Folgenden aufgrund ihrer bevorzugten Ausgestaltung stellvertretend nur noch als ALUs bezeichnet, ohne diese Ausführungseinheiten jedoch damit auf ALUs einzuschränken. In der genannten Ausgestaltung mit dem internen Raster von ALUs repräsentiert jede Spalte ein Architekturregister. Somit ist die Anzahl der Spalten in diesem Fall genauso hoch wie die Anzahl der Architekturregister der zugrunde liegenden Prozessor architektur, d.h. sie ist abhängig vom gewählten Assembler-Befehlssatz. Dies ist jedoch nicht in jedem Falle erforderlich, wie weiter unten näher erläutert wird. Die Anzahl an Zeilen ist abhängig von der zur Verfügung stehenden Chip-Fläche. Je höher die Zeilenanzahl, desto höher ist die zu erwartende Leistung. Für die Anwendung in einem Desktop-PC kann bspw. ein Bereich zwischen fünf und zehn Zeilen sinnvoll sein.
  • Die ALUs werden von der Dekodier- und Konfigurationseinheit dynamisch über ein Konfigurationsnetzwerk einzeln mit einer bestimmten Funktion belegt. Diese Programmierung der ALUs geschieht Takt-synchron. Einmal programmiert, arbeiten die ALUs dann asynchron mit den jeweils an ihren Dateneingängen anliegenden Werten, d.h. sie besitzen keinerlei Speicherelemente für die Arbeitsdaten. Die Arbeitsdaten oder ein Teil davon können bei der Konfiguration auch mit einem festgelegten Festwert belegt werden.
  • Zwischen den ALUs kann ein Datenaustausch stattfinden, der aber immer aus Sicht der Spalte bzw. Kette von oben nach unten gerichtet ist und die ALUs mit Arbeitsdaten versorgt. Oberhalb der obersten Zeile ist eine Reihe von Registern angeordnet, in der vorliegenden Patentanmeldung als Top-Register bezeichnet. Zusätzlich können optional weitere Registerreihen zwischen anderen Zeilen angeordnet sein. Diese Zwischenregister müssen allerdings mit einer Bypass-Technik ausgestattet sein, so dass ankommende Daten gespeichert oder direkt durchgeschleift werden können.
  • Im Folgenden wird bei der Beschreibung des Prozessors sowie bevorzugter Ausgestaltungen des Prozessors zur Vereinfachung nur der Begriff der Spalte benutzt. Selbstverständlich gelten jedoch sämtliche Ausführungen in gleicher Weise auch bei einer Verbindung der ALUs zu nicht geradlinig verlaufenden Ketten.
  • Zusätzlich zu den Datenpfaden, die (vorwärts) durch die ALUs führen und ein sog. Vorwärtsnetzwerk bilden, sind separate Datenrückführungen vorhanden, die die am Ende einer Spalte anliegenden Daten an den Anfang derselben Spalte, also in die Top-Register, zurückführen. Diese Datenrückführungen bilden ein sog. Rückführungsnetzwerk. Ebenso können die Datenrückführungen Daten optional an einer anderen Stelle innerhalb einer Spalte, z.B. den Zwischenregistern, abgreifen und an weiter oben liegender Stelle der Spalte, z.B. in eine andere Zwischenregisterreihe, wieder einspeisen.
  • Neben dem zentralen ALU-Grid sind ein oder mehrere Speicherzugriffseinheiten und eine Sprung-Kontrolleinheit vorgesehen. Die Sprung-Kontrolleinheit stößt unter bestimmten Bedingungen die Rückführung von Daten über die Datenrückführungen von unten nach oben an. Die Speicherzugriffseinheiten erlauben die Ausführung von Speicherzugriffen, um Daten aus dem ALU-Grid in den Speicher bzw. Daten aus dem Speicher in das ALU-Grid zu transportieren. Dabei ist vorzugsweise jeder Zeile des ALU-Grid eine bestimmte Anzahl von Speicherzugriffseinheiten beigeordnet.
  • Vorzugsweise verfügt jede ALU über einen speziellen Predication-Eingang, über den sie während der Arbeit deaktiviert werden kann. Ist eine ALU deaktiviert, so leitet sie den oberhalb, d.h. an ihrem Dateneingang anliegenden Wert, unverändert an ihren Datenausgang weiter. Die Predication-Eingänge werden von der Sprung-Kontrolleinheit bedient. Dadurch können sog. "predicated instructions" des Assembler-Befehlssatzes im ALU-Grid abgebildet werden, d.h. es besteht die Möglichkeit, einzelne Befehle nur unter bestimmten Bedingungen auszuführen.
  • Die dem Prozessor zugrunde liegende neuartige Prozessorarchitektur besitzt somit als Hauptmerkmal eine interne zweidimensionale Anordnung bzw. ein Raster von Ausführungseinheiten oder ALUs, mit dessen Hilfe sequentielle Programme abgearbeitet werden. Die Verbindungen zwischen den ALUs werden automatisch dynamisch zur Laufzeit über Multiplexer hergestellt. Verantwortlich für das Herstellen der Verbindungen ist eine zentrale Dekodier- und Konfigurationseinheit (Frontend), die aus einem Strom herkömmlicher bzw. leicht modifizierter Befehle Konfigurationsdaten für das ALU-Grid zur Laufzeit erzeugt. Diese neuartige Architektur bzw. der vorgeschlagene Prozessor stellt einen Mittelweg zwischen herkömmlichen Prozessoren und rekonfigurierbarer Hardware dar. Erstere eignen sich besser für Kontrollfluss-orientierte Aufgaben, z.B. Steuerungsaufgaben, während rekonfigurierbare Hardware ihre Stärke bei der Lösung von Datenfluss-orientierten Problemen, z.B. bei der Video- und Audioverarbeitung, aufweist. Eine einheitliche Architektur, die für beide Arten der Problemstellung gleichermaßen geeignet ist, war bisher nicht bekannt. Mit der hier vorgeschlagenen Architektur können sowohl Daten- als auch Kontrollfluss-orientierte Aufgaben mittels einer herkömmlichen Programmiersprache, z.B. C/C++, behandelt werden. Bei der Ausführung des Programmcodes ergeben sich dann je nach Bedarf die Vorteile von Prozessoren bzw. von rekonfigurierbarer Hardware.
  • Als Einsatzgebiete des neuen Prozessors kommen je nach Ausbaustufe alle Arten von Datenverarbeitungssystemen in Betracht. In einer mächtigen Variante kann der Prozessor bzw. die zugrunde liegende Architektur in Datenbank- oder Compute-Servern Anwendung finden. In einer reduzierten Ausbaustufe besteht auch die Möglichkeit des Einsatzes in mobilen Geräten. Da die Architektur in einer Richtung vollständig skalierbar ist, kann Software, die für eine Ausbaustufe entwickelt wurde, auch auf einer anderen Ausbaustufe ausgeführt werden. Es besteht also Kompatibilität in beiden Richtungen (aufwärts und abwärts).
  • Die grundsätzliche Idee bei der vorliegenden Prozessorarchitektur bzw. dem vorliegenden Prozessor besteht darin, die einzelnen Maschinenbefehle eines sequentiellen Befehlsstroms dynamisch auf ein rekonfigurierbares, mehrzeiliges Raster aus ALUs abzubilden und dadurch ein herkömmliches Programm abzuarbeiten. Diese Technik bietet neben der Möglichkeit des effizienten Einsatzes sowohl in Kontrollfluss- als auch Datenfluss-orientierten Anwendungsfeldern ebenfalls Leistungsvorteile gegenüber herkömmlichen Prozessoren bei der Abarbeitung reiner Kontrollfluss-orientierter Programme.
  • Im Gegensatz zu bekannten Prozessorarchitekturen ist es damit möglich, abhängige Befehle im selben Takt den Ausführungseinheiten zuzuordnen und ggf. auch in einem Takt auszuführen. Durch die vorerst nicht vorgesehene Sprungvorhersage entsteht kein "Miss-Prediction-Penalty" bei falsch vorhergesagten Sprüngen. Dennoch erlaubt die vorgestellte Architektur die effiziente Behandlung von Sprüngen, die bei der Ausführung von Schleifen ihre volle Leistungsfähigkeit entfaltet. Dabei entfällt die Dekodierung und Zuordnung neuer Befehle ins ALU-Grid und es erfolgt nur noch die Ausführung der bereits im ALU-Grid vorhandenen Befehle. Im ALU-Grid wird eine Schleife, nachdem diese als solche erkannt wurde, einmalig zugeordnet und verbleibt so lange im ALU-Grid, bis sie wieder verlassen wird. Die Dekodier- und Zuordnungseinheit kann somit in dieser Zeit deaktiviert werden. Demgegenüber muss jeder Befehl bei herkömmlichen Prozessoren pro Schleifendurchlauf bei der Abarbeitung von Schleifen einmal einer Ausführungseinheit zugeordnet werden. Somit ist die Zuordnungseinheit und bei Fehlen eines "Trace-Cache" auch die Dekodiereinheit in derartigen Prozessoren durchgehend aktiv. Im Gegensatz zu ähnlich aufgebauten "Tiled Architectures" sind für die hier vorgestellte Architektur keine speziellen Compiler oder sonstigen Software-Entwicklungswerkzeuge erforderlich. Anders als bei einfachen rekonfigurierbaren Systemen erfolgt die Programmierung des ALU-Grid mit einem sequentiellen Befehlsstrom, der direkt vom Compiler stammt und die Form herkömmlicher Assembler-Befehle besitzt. Die Ausführungseinheiten des ALU-Grid werden mittels dieser Befehle konfiguriert und behalten diese Konfiguration meist nur sehr kurze Zeit, es sei denn, es wird gerade eine Schleife abgearbeitet. Die Konfiguration des gesamten ALU-Grid ergibt sich somit dynamisch aus der Reihenfolge der abgearbeiteten Befehle und nicht aus statisch generierten Konfigurationsdaten.
  • Kurze Beschreibung der Zeichnungen
  • Der vorliegende Prozessor bzw. die zugrunde liegende Prozessorarchitektur wird nachfolgend anhand von Ausführungsbeispielen in Verbindung mit den Zeichnungen nochmals näher erläutert. Hierbei zeigen:
  • 1 ein Blockschaltbild einer Ausgestaltungsmöglichkeit des vorgeschlagenen Prozessors;
  • 2 ein Beispiel für die Ausgestaltung einer ALU;
  • 3 ein Beispiel einer Ausgestaltung beim Einsatz synchroner Datenfluss-Token;
  • 4 ein Beispiel für eine erste Belegung der ALUs mit einem Beispielprogramm;
  • 5 ein Beispiel für eine zweite Belegung der ALUs mit dem Beispielprogramm;
  • 6 ein Beispiel für die Integration komplexer Ausführungseinheiten in das ALU-Grid; und
  • 7 ein weiteres Beispiel für eine Belegung der ALUs mit dem Beispielprogramm bei einer Pipeline-Ausführung.
  • Wege zur Ausführung der Erfindung
  • 1 zeigt ein Beispiel für eine mögliche Ausgestaltung des Prozessors als Blockschaltbild. In diesem Blockschaltbild ist das ALU-Grid als zentraler Bestandteil des Prozessors zu erkennen. Das Frontend bilden eine Befehlshole-Einheit, eine Dekodiereinheit sowie eine Konfigurationseinheit. Der ebenfalls eingezeichnete Befehls-Cache, der Daten-Cache sowie die virtuelle Speicherverwaltung sind Standard-Baugruppen.
  • Die ALUs sind bei diesem Beispiel zeilen- und spaltenweise angeordnet, wobei am Eingang jeder Spalte ein entsprechendes Top-Register vorgesehen ist. Auch Zwischenregister mit Bypass sind zwischen einzelnen Zeilen der ALUs in der Figur angedeutet. Über ein Zeilen-Routing-Netzwerk sind die ALUs mit einer Sprung-Kontrolleinheit sowie mit mehreren Speicherzugriffseinheiten (Laden/Speichern) verbunden. Das Konfigurationsnetzwerk und das Predication-Netzwerk sind in diesem Blockschaltbild nicht eingezeichnet.
  • 2 zeigt ein Beispiel für die Ausgestaltung einer ALU, wie sie im vorliegenden Prozessor zum Einsatz kommen kann. Über die synchronen Eingänge werden die Konfigurationsdaten von der Konfigurationseinheit in ein Konfigurationsregister der ALU geschrieben und der Konfigurationstakt übertragen. Die ALU erhält die Arbeitsdaten über die asynchronen Dateneingänge A und B vom Top-Register oder der in der Spalte vorangehenden ALU. Anstelle der Arbeitsdaten am Dateneingang B kann die ALU auch mit einem bei der Konfiguration festgelegten Festwert arbeiten. Über die Konfiguration eines der dargestellten Multiplexer (MUX) lässt sich bei Bedarf erreichen, dass die ALU die Daten nur durchschleift. 2 zeigt auch den Predication-Eingang, über den jede ALU während der Arbeit von der Sprung-Kontrolleinheit deaktiviert werden kann.
  • Grundlage für die Programmausführung auf dem vorgeschlagenen Prozessor ist ein sequentieller Strom von Assembler-Befehlen, bspw. von RISC-Assembler-Befehlen. Diese werden paketweise (ein oder mehrere Befehle) von einer Befehlshole-Einheit aus dem Speicher in den Prozessor geladen und der Dekodiereinheit übergeben. Diese prüft Abhängigkeiten zu vorangegangenen Befehlen und gibt die aktuellen Befehle zusammen mit den Abhängigkeitsinformationen an die Konfigurationseinheit weiter. Aufgabe der Konfigurationseinheit ist es, für jeden Befehl eine ALU auszuwählen, dieser die entsprechende Funktionalität zuzuweisen und die Multiplexer für die Arbeitsdaten richtig zu konfigurieren. Handelt es sich um einen Sprung- oder Speicherzugriffsbefehl, so werden spezielle Maßnahmen ergriffen, die später genauer erläutert werden.
  • Die Arbeitsweise des Prozessors zerfällt in zwei Teile, nämlich die Befehlsanordnung der einzelnen Assembler-Befehle im ALU-Grid (Dekodierphase) und die eigentliche Abarbeitung der Befehle innerhalb der Grid sowie der Sprung-Kontroll- und den Speicherzugriffs einheiten (Ausführungsphase). Im Folgenden werden die beiden Teile separat erläutert, wohingegen diese Vorgänge im Prozessor teilweise zeitlich überlappt ausgeführt werden können.
  • Prinzipiell werden bei der Befehlsanordnung immer Teile des sequentiellen Programms in das ALU-Grid übertragen. Dabei muss zwischen folgenden drei Befehlsgruppen unterschieden werden:
    • – Speicherzugriffsbefehle: Darunter fallen alle Befehle, die einen Datenzugriff auf den externen Speicher verlangen, z.B. Load, Store, Push, Pop. Bei diesen Befehlen wird ggf. eine Adressberechnung im ALU-Grid angeordnet; der eigentliche Speicherzugriff erfolgt ausgehend von einer der Speicherzugriffseinheiten.
    • – Sprungbefehle: Hier muss wiederum zwischen bedingten und unbedingten Sprüngen unterschieden werden. Unbedingte Sprünge werden, sofern sie nicht eine indirekte Adressierung verwenden, unmittelbar in der Dekodiereinheit behandelt und sind für das ALU-Grid nicht relevant. Bedingte und indirekte Sprünge werden an die Sprung-Kontrolleinheit weitergeleitet. Diese verarbeitet die aus dem ALU-Grid erhaltenen Werte und löst ggf. einen tatsächlichen Sprung im Programmcode aus, d.h. es werden neue Befehle des Programms im ALU-Grid angeordnet. Werden keine neuen Befehle geladen, so werden Steuersignale für das ALU-Grid erzeugt, so dass diese entsprechend des gewünschten Programmverlaufs weiter arbeitet (z.B. beim Rücksprung innerhalb einer Schleife). Hierzu werden innerhalb des ALU-Grid die Datenrückführungen verwendet, um die berechneten Ergebnisse vom Ende des Grid an die Top-Register bzw. die entsprechenden Zwischenregister innerhalb des Grid zu senden.
    • – Arithmetisch-logische Befehle: Hierunter fallen alle übrigen Befehle. Diese werden jeweils einer ALU im Grid zugeordnet, d.h. eine ausgewählte ALU wird so konfiguriert, dass sie die Funktion des entsprechenden Befehls ausführt.
  • Für die Anordnung der arithmetisch-logischen Befehle im ALU-Grid muss für jede Operation einzeln sowohl die Spalte als auch die Zeile im Grid bestimmt werden. Dies erfolgt nach folgendem Schema:
    • – Auswahl der Spalte: Die Spalte, in der der Befehl zur Ausführung kommen soll, wird durch das Zielregister des Befehls bestimmt. Der Ausgang der ausgewählten ALU nimmt nach der Operation den berechneten Wert an und leitet diesen für weitere Operationen über ein Vorwärts-Netzwerk, d.h. die Datenverbindungen zwischen den ALUs in Spaltenrichtung, nach unten weiter. Das Vorwärts-Netzwerk der ausgewählten Spalte trägt somit abschnittsweise die Werte, die das entsprechende Architekturregister zwischen den Berechnungen annehmen würde.
    • – Auswahl der Zeile: die Zeile, in der die Operation ausgeführt werden muss, bestimmt sich aus dem tiefsten Punkt, also der am weitesten fortgeschrittenen Berechnungen, aller an der Operation beteiligten Register. Dies bedeutet, dass die neue Operation unterhalb der letzten Operation der Zielregister-Spalte angeordnet sein muss. Desweiteren müssen auch alle bereits zugeordneten Operationen des oder der Quellregister oberhalb der neu auszuwählenden ALU liegen.
  • Nach Auswahl der neu zu konfigurierenden ALU müssen die Multiplexer des horizontalen Netzwerks (Zeilen-Routing-Netzwerk) so geschalten werden, dass die Daten der Quellregister an der neuen ALU anliegen. Ebenso muss dafür Sorge getragen werden, dass die Werte der Quellregister unverändert bis zur gewünschten Zeile geleitet werden. Dazu müssen ggf. ALUs in den Spalten der Quellregister deaktiviert werden, sofern neben den ALUs keine Datenpfade in Vorwärts-Richtung vorgesehen sind. Die ausgewählte ALU wird derart konfiguriert, dass sie die Operation des aktuellen Befehls ausführt. Durch dieses Schema wird innerhalb des ALU-Grid der Datenflussgraph der angeordneten arithmetisch-logischen Assembler-Befehle aufgebaut.
  • Im Gegensatz zu den arithmetisch-logischen Befehlen werden die Speicherzugriffsbefehle neben dem ALU-Grid in einer der Speicherzugriffseinheiten untergebracht. Hierzu ist lediglich die Auswahl der Zeile von Interesse. Diese wird äquivalent zu den arithmetisch-logischen Befehlen, also abhängig von den verwendeten Quellregistern (für die Speicheradresse und ggf. für die Schreibdaten) ausgewählt. Eine ggf. auszuführende Adressberechnung (z.B. Addition zweier Register oder Addition eines Offset) wird äquivalent zu den arithmetisch-logischen Befehlen in dem ALU-Grid angeordnet.
  • Sprungbefehle erfüllen ihre Funktion ausgehend von der Sprung-Kontrolleinheit. Ebenfalls zeilenweise führen Datenleitungen aus dem ALU-Grid in die Sprung-Kontrolleinheit. Diese überprüft je nach auszuführendem Sprungbefehl die Datenleitungen und erzeugt ggf. entsprechende Steuersignale sowohl für das Prozessor-Frontend als auch das ALU-Grid. Werden von der Dekodier- bzw. der Konfigurationseinheit Vorwärtssprünge über eine kurze Distanz (wenige Befehle) erkannt, so können die übersprungenen Befehle grundsätzlich im ALU-Grid angeordnet werden. Die Sprung-Kontrolleinheit steuert über das Predication-Netzwerk während der Ausführungsphase, ob die entsprechenden Befehle tatsächlich ausgeführt werden.
  • Nachdem ausreichend viele Befehle im ALU-Grid und den seitlich angrenzenden Einheiten angeordnet wurden, wird das Dekodieren neuer Befehle gestoppt und es beginnt die Befehlsausführungsphase.
  • Die Initialwerte aller Architektur-Register sind in den Top-Registern gespeichert. Die Werte wandern unverzüglich durch das Vorwärtsnetzwerk in die vorher bestimmten ALUs. Dort erfolgen die gewünschten Operationen. Steht ein Speicherzugriffsbefehl an, so werden die benötigte Adresse und ggf. die Schreibdaten eingefangen und ein synchroner Speicherzugriff ausgeführt. Nach einem Lesezugriff werden die gelesenen Daten in das ALU-Grid geleitet und weiterverarbeitet.
  • Steht ein Sprungbefehl an, so werden die für den Sprungbefehl relevanten Datenworte in der Sprung- Kontrolleinheit ausgewertet (d.h. Daten ggf. verglichen und das Sprungziel berechnet) und eine der folgenden Aktionen ausgeführt:
    • – Das Sprungziel wurde noch nicht in das ALU-Grid integriert: Es werden alle Daten, die unterhalb des Sprungbefehls im Vorwärts-Netzwerk anliegen in das Top-Register der jeweiligen Spalte kopiert. Anschließend wird ein Reset des ALU-Grid durchgeführt, d.h. alle Funktionen der ALUs werden gelöscht und die Verbindungen aufgelöst. Ebenso werden sowohl alle Speicherzugriffseinheiten als auch die Sprung-Kontrolleinheit zurückgesetzt. Danach wird das Frontend des Prozessors reaktiviert und neue Befehle von der gewünschten Stelle des Programmcodes im ALU-Grid angeordnet.
    • – Das Sprungziel ist bereits im ALU-Grid vorhanden: in diesem Fall werden lediglich die Daten unterhalb des Sprungbefehls in die Register (Top- oder Zwischenregister) oberhalb der Stelle im Grid kopiert, an der das Sprungziel im Grid angeordnet ist. Danach erfolgt eine weitere Befehlsausführungsphase.
  • Stand während der Ausführungsphase kein Sprungbefehl an, so werden nach Ende der Ausführung alle Daten vom unteren Ende des ALU-Grid in die Top-Register kopiert; sie stellen jetzt die neuen Initialwerte für die später folgende nächste Ausführungsphase dar. Anschließend startet eine neue Dekodierphase.
  • Da die Ausführung der einzelnen Operationen in den ALUs asynchron erfolgt, kann ohne weitere Hilfsmittel das Ende einer Ausführungsphase bzw. der Zeitpunkt, an dem ein Speicherzugriff oder ein Sprung stattfinden kann, nicht bestimmt werden. Hierzu stehen drei verschiedene Techniken zur Auswahl:
    • – Tokens unter Verwendung von Verzögerungselementen: Jeder ALU wird ein Verzögerungselement beigeordnet, das während der Konfiguration der ALU einen entsprechenden Verzögerungswert erhält. Dieser muss der maximalen Signallaufzeit der gewünschten Operation der ALU entsprechen. Ebenso erhalten die Datenleitungen ein weiteres Bit (Token), das durch die Verzögerungselemente geschleift wird. Treffen die Tokens aller benötigten Operanden in einer ALU ein, so wird am Ausgang der ALU, um die entsprechende maximale Signallaufzeit verzögert, ein Token erzeugt.
    • – Laufzeitzähler: Während der Zuordnung der Funktionen an die ALUs werden die Signallaufzeiten aller Spalten (in Form sog. Pico-Takte, also in Bruchteilen eines Maschinen-Takts) mitgezählt. Die für synchrone Operationen relevanten Zeitpunkte werden in den jeweiligen Einheiten gespeichert. Zu den gegebenen Zeitpunkten werden dann die gewünschten Operationen angestoßen, d.h. jede synchrone Einheit wartet so lange ab, bis die benötigten Daten laut Laufzeitzähler bereit stehen.
    • – Synchrone Tokens: Hierzu werden ebenfalls Token verwendet. Das Weiterreichen der Token erfolgt allerdings nicht durch asynchrone Verzögerungselemente an jeder ALU, sondern durch Register mit Bypass an jeder ALU. Standardmäßig ist das Register deaktiviert, also der Bypass aktiv. Wie bei der vorangehenden Variante wird die Signallaufzeit der Daten bei der Konfiguration der ALUs mitgezählt. Wird die gezählte Signallaufzeit größer als ein Takt, so wird das Token-Register der aktuell konfigurierten ALU aktiviert und der Laufzeitzähler um einen Takt dekrementiert. Das Token läuft bei dieser Technik nicht synchron zu den Daten durch den Datenflussgraph sondern eilt maximal einen Takt voraus. Dies muss bei der Ausführung synchroner Operationen berücksichtigt werden. 3 zeigt ein Beispiel, bei dem alle drei ALUs Operationen ausführen, die eine Signallaufzeit von einem halben Maschinentakt besitzen. Die Token-Register der beiden oberen ALUs werden auf Bypass geschalten, während das Token-Register der unteren ALU das Token so lange aufhält, bis die Daten tatsächlich verfügbar sind.
  • Für die Funktion des ALU-Grid Prozessors muss lediglich eine der drei genannten Möglichkeiten zur Synchronisation realisiert werden. Die letzte Variante wird dabei aufgrund ihrer Flexibilität bevorzugt.
  • Im Folgenden wird als Beispiel ein Programm in einem Assembler-Code vorgegeben und in einen ALU-Grid Prozessor ohne Zwischenregister abgebildet. Aufgabe des Programms ist es, die Summe über die Beträge eines 15 Elemente langen Zahlenvektors zu bilden. Der Vektor muss dabei bereits in dem an den ALU-Grid Prozessor angeschlossenen Hauptspeicher vorhanden sein. Das Programm wird in mehreren Dekodier- und Ausführungsphasen abgearbeitet. Ebenso sind für jede Dekodierphase mehrere Befehlshole-Zyklen erforderlich, die hier aber zusammengefasst werden.
    move R1,#15 ;15 Datenwerte
    move R2,#adresse ;Startadresse des Vektors
    move R0,#0 ;Register für die Summe auf 0 ;setzen
    loop:
    load R3,[R2] ;ein Element aus dem ;Speicher lesen
    jmpnl R3,not_negativ ;ist dieser nicht negativ?
    neg R3 ;wenn negativ: negieren
    not_negativ:
    add R0,R3 ;absoluten Wert zum ;Summenregister (R0) addieren
    add R2,#4 ;Adresse für nächstes Element ;erhöhen
    sub R1,#1 ;ein Datenelement wurde ;abgearbeitet
    jmpnz R1,loop ;noch mehr Datenwerte?
  • Die Abarbeitung dieses Programmstücks erfolgt in zwei Dekodierphasen und in insgesamt 15 Ausführungsphasen. In der ersten Dekodierphase werden alle Befehle des Programms im ALU-Grid angeordnet. Die Dekodiereinheit bemerkt dabei, dass der erste Sprungbefehl lediglich einen einzigen arithmetisch-logischen Befehl überspringt. Dieser eine Befehl wird wie jeder andere arithmetisch-logische Befehl im ALU-Grid angeordnet, mit dem Unterschied, dass die Predication-Leitung der entsprechenden ALU mit der Sprung-Kontrolleinheit verbunden wird. Diese wird derart konfiguriert, dass sie zu gegebener Zeit den Wert von R3 auf ein negatives Vorzeichen hin überprüft. 4, in der nur die Register bzw. Spalten R0 bis R3 skizziert sind, zeigt die Belegung der ALUs, der Sprung-Kontrolleinheit und der Speicherzugriffseinheiten. Dabei wurde angenommen, dass die Befehle add, sub und neg jeweils einen vollen Maschinentakt und die move-Befehle einen halben Maschinentakt zur Ausführung benötigen. Für einen Cache-Zugriff werden hier zwei Takte veranschlagt, jeder der beiden Vergleichsoperationen in der Sprung-Kontrolleinheit benötigt einen halben Takt. Diese Zeiten sind hier nur beispielhaft gewählt und müssen bei der tatsächlichen Implementierung genau bestimmt werden.
  • Die in der 4 erkennbaren Zahlenwerte geben den Zeitpunkt in Maschinentakten an, zu dem der entsprechende Wert Gültigkeit erhält. Je nachdem, welches Verfahren zur Synchronisation verwendet wird, muss ein zentraler Zeitzähler vorhanden sein, der die verstrichene Zeit seit Berechnungsbeginn mitzählt. Erzeugt ein Speicherzugriff einen Cache-Miss, so wird dieser Zähler so lange angehalten, bis das gewünschte Datum aus dem Speicher geladen wurde. Werden Token verwendet, so ist kein Zeitzähler erforderlich. Dies führt zu einem deutlich flexibleren Laufzeitverhalten.
  • Zum Zeitpunkt 2,5 Maschinentakte ist der erste Wert des Vektors aus dem Speicher gelesen und die Sprung-Kontrolle überprüft diesen auf ein negatives Vorzeichen. Ist der gelesene Wert in Register R3 negativ, so wird der neg-Befehl ausgeführt, anderenfalls wird die entsprechende ALU über das Predication-Signal deaktiviert und der Eingangswert unverändert an den Ausgang weitergegeben.
  • Zum Zeitpunkt 5 Maschinentakte ist die Abarbeitung aller abgebildeten Befehle beendet und das Ergebnis der letzten Vergleichsoperation kann betrachtet werden. In diesem Fall ist der in Spalte R1 abgegriffene Wert 14, d.h. nicht 0, und es erfolgt ein Sprung. Die Sprung-Kontrolleinheit registriert, dass das Sprungziel nicht auf eine Zeile mit Registern (Top- oder Zwischenregister) abgebildet wurde. Dies hat zur Folge, dass alle Werte am unteren Ende des ALU-Grid abgegriffen und in die Top-Register kopiert werden. Danach erfolgt das Zurücksetzen aller ALU-Konfigurationen und es wird eine erneute Dekodierungsphase an der Stelle des Sprungziels im Programmcode gestartet. Nach Abschluss dieser Dekodierungsphase befindet sich der erste Befehl des Schleifenkörpers in der ersten Zeile, also direkt unter den Top-Registern. Das ALU-Grid besitzt jetzt die in 5 gezeigte Konfiguration.
  • Nach der zweiten Ausführungsphase (4,5 Takte nach ihrem Beginn) erfolgt wieder die Überprüfung des Registers R1, das diesmal den Wert 13 besitzt, auf den Wert 0. Somit wird der Sprung als „auszuführen" erkannt und es wird wieder geprüft, ob sich das Sprungziel bereits im ALU-Grid an passender Stelle befindet. Diesmal korrespondiert das Sprungziel mit dem ersten Befehl im ALU-Grid, d.h. es wird keine neue Dekodierungsphase gestartet, sondern es werden lediglich die Werte am unteren Ende des ALU-Grid in die Top-Register kopiert. Anschließend wird eine weitere Ausführungsphase gestartet.
  • Erreicht das Register R1 den Wert 0, so wird der Sprung am Ende der Schleife als „nicht auszuführen" ausgewertet. Dies hat zur Folge, dass eine neue Dekodierungsphase angestoßen wird. Dabei wird das ALU-Grid mit weiteren Befehlen (nicht im Beispiel angegeben) bestückt, bis die Kapazität des ALU-Grid erreicht ist oder ein weiterer Sprungbefehl im Programmcode auftaucht.
  • Die erste der oben gezeigten Ausführungsphasen erreicht einen IPC (Instructions Per Cycle) von 2 (10 Befehle in 5 Takten) und die zweite Ausführungsphase einen IPC von 1,4 (7 Befehle in 5 Takten). Dabei entfallen jeweils 2 Takte alleine auf den Speicherzugriff. Ein konventioneller (Superskalar-)Prozessor würde hier voraussichtlich deutlich schlechtere Ergebnisse liefern. Ebenso kommt hinzu, dass der ALU-Grid Prozessor ohne Sprungvorhersage arbeitet. Diese Sprungvorhersage kann in Superskalar-Prozessoren bei falschen Voraussagen weitere deutliche Leistungseinbußen verursachen. Außerdem führt das Fehlen der Sprungvorhersage zu vorhersagbarem Laufzeitverhalten des ALU-Grid Prozessors.
  • In dem vorherigen Beispiel ist zu erkennen, dass das ALU-Grid nur zu einem sehr geringen Prozentsatz ausgelastet ist. Werden die Architekturregister nicht direkt auf die Spalten des Grid abgebildet, sondern lediglich wenige ALUs pro Zeile integriert die von allen Registerspalten genutzt werden können, so lässt sich die Anzahl an ALUs reduzieren. Ebenso ist dadurch auch eine Spezialisierung der ALUs möglich, so dass nicht alle ALUs als komplexe Multi-Funktions-ALUs realisiert werden müssen. Evtl. kann hierbei eine Art Register-Renaming angewandt werden, d.h. eine Spalte ist nicht fest einem Register zugeordnet, sondern die Zuordnung wechselt von Zeile zu Zeile.
  • Weiterhin ist im vorherigen Beispiel zu sehen, dass die Dekodier- und Konfigurationseinheit sehr lange Zeit (13 von 15 Schleifendurchläufen) nicht benötigt wurde. Die Integration eines geeigneten Energiesparmechanismus, z.B. durch dynamische Abschaltung der Einheit(en), ist hier möglich. Gleiches gilt für nicht benötigte ALU-Zeilen unterhalb der zuletzt benötigten ALU. Da die beschriebene Architektur in Bezug auf die Anzahl an Zeilen frei skalierbar ist, besteht die Möglichkeit einer Minimal-Implementierung mit zwei Zeilen für den Einsatz in mobilen (Kleinst-)Systemen oder durch Kontext-gesteuerte Abschaltung von Zeilen (z.B. wenige aktive Zeilen bei Batteriebetrieb und viele aktive Zeilen bei Netzbetrieb von Notebooks).
  • Da jede der Speicherzugriffseinheiten nur einem Lade/Speicherbefehl zugeordnet werden kann, ist die Implementierung effizienter Streaming-Buffer direkt in jeder Speicherzugriffseinheit von Vorteil. Bereits das einfache Laden einer kompletten Cache-Line direkt in eine Speicherzugriffseinheit kann hier enorme Leistungsvorteile bringen. Die Speicherzugriffseinheiten können bei vorhandenen Daten ebenfalls asynchron arbeiten, was bei dem vorherigen Beispiel eine Verkürzung der Laufzeit eines Schleifendurchlaufs von 1–1,5 Takten bewirken würde.
  • Auch die Nachteile des Zeitzähler-Verfahrens zur Synchronisation werden hier sichtbar: Erstens muss bei einem Cache-Miss die „Zeit" vollständig angehalten werden, d.h. Berechnungen, die gleichzeitig zum Hauptspeicher-Zugriff erfolgen könnten, können ihren Vorteil nicht ausspielen. Zweitens muss beim Zeitzähler-Verfahren immer mit dem schlechtesten Fall gerechnet werden, d.h. es muss immer damit gerechnet werden, dass alle zugeordneten Befehle auch ausgeführt werden müssen. Im Beispiel benötigten alle Schleifendurchläufe dieselbe Zeit, egal ob die Negation ausgeführt werden muss oder nicht. Beide Probleme tauchen bei den beiden Token-Verfahren nicht auf.
  • Es ist nicht sinnvoll (und auch teilweise nicht möglich), aufwendige Funktionen wie Divisionen oder Gleitkommaberechnungen direkt in den asynchronen ALUs zu integrieren. Wird eine Technik verwendet, bei der, wie weiter oben beschrieben, wenige ALUs pro Zeile von allen Spalten genutzt werden können, so können auch Spezial-Ausführungseinheiten eingesetzt werden, die lediglich eine Aufgabe erfüllen können (z.B. Division). Hier ist es allerdings nicht sinnvoll, pro Zeile eine eigenständige Divisionseinheit zu realisieren. Vielmehr besteht die Möglichkeit, in jeder Zeile so genannte virtuelle Einheiten zu implementieren (siehe 6). Durch virtuelle Einheiten werden in jeder Zeile lediglich alle benötigten Anschlüsse (Ein- und Ausgänge) realisiert. Sind in einer Zeile alle Token vorhanden, d.h. die Arbeitsdaten stehen zur Verfügung, so kann die entsprechende Berechnung von einer mit der virtuellen Einheit verbundenen, zentralen (nunmehr getakteten) Spezial-Ausführungseinheit ausgeführt werden. Dabei kann die Berechnung auch gepipelined durchgeführt werden, so dass mehrere dieser Berechnungen zeitüberlappt stattfinden können. Diese Erweiterung kann nur sinnvoll integriert werden, wenn eines der beiden Token-basierten Synchronisationsverfahren zum Einsatz kommt.
  • Aus der Compiler-Technik ist ein Verfahren zur optimierten Verarbeitung von Schleifen bekannt, das sog. Software-Pipelining. Dabei wird der Programmcode eines Schleifenkörpers so gestaltet, dass bei der Abarbeitung einer Iteration bereits Berechnungen für die nächste Iteration durchgeführt werden. Dafür werden meist andere Register als die tatsächlich benötigten verwendet und die Ergebnisse zu gegebener Zeit in die relevanten Register kopiert.
  • Ist der realisierte ALU-Grid Prozessor mit Zwischenregistern ausgestattet, so bietet sich eine andere Art des Pipelining an: echtes Hardware-Pipelining. Dabei können die Zwischenregister als Pipeline-Register genutzt werden. Diese Technik funktioniert allerdings nur, wenn das Ergebnis des kritischen Pfads einer Iteration nicht für die nächste Iteration benötigt wird. Damit der ALU-Grid Prozessor das Pipelining umsetzen kann, ist entweder eine Befehlssatz-Erweiterung oder eine Erweiterung der Dekodiereinheit erforderlich. In beiden Fällen muss die Konfigurationseinheit mitgeteilt bekommen, welche Register den nicht benötigten kritischen Pfad darstellen und dass Pipelining hier möglich ist.
  • Dies wird am folgenden Beispiel deutlich: Würde das weiter oben beschriebene Beispielprogramm den Vektor nicht aufsummieren, sondern lediglich den Betrag jedes Elements wieder in den Speicher zurückschreiben, so wäre der kritische Pfad (im Beispiel R0) einer Iteration in der nächsten nicht relevant. Im Folgenden ist der abgewandelte Programmcode des Beispiels aufgeführt. 7 zeigt eine mögliche Zuordnung (ab der zweiten Iteration) der Befehle für die Ausführung in Form einer Pipeline. Ein zusätzlicher Befehl für das Pipelining wurde hier nicht berücksichtigt.
    move R1,#15 ;15 Datenwerte
    move R2,#adresse ;Startadresse des Vektors
    loop:
    load R3,[R2] ;ein Element aus dem ;Speicher lesen
    jmpnl R3,not_negativ ;ist dieser nicht negativ?
    neg R3 ;wenn negativ: negieren
    not_negativ:
    move R0,R2 ;Adresse für STORE ;zwischenspeichern
    add R2,#4 ;Adresse für nächstes ;Element erhöhen
    store [R0],R3 ;absoluten Wert wieder in ;den Speicher schreiben
    sub R1,#1 ;ein Datenelement wurde ;abgearbeitet
    jmpnz R1,loop ;noch mehr Datenwerte?
  • Bei der Pipeline-Ausführung muss beachtet werden, dass die Datenrückführung hier im Beispiel nicht vom Ende des Grid sondern von den Zwischenregistern in die Top-Register stattfinden muss. Die Entscheidung über das Schleifenende muss aber dennoch nach der letzten Pipelinestufe gefällt werden. Wurde der obere Teil einer Iteration bereits ausgeführt, obwohl die Schleifenbedingung nicht mehr erfüllt ist, so sind keine weiteren Maßnahmen bzgl. der Register notwendig. Da nur mit den Werten am Ende des Grid weitergearbeitet wird, werden automatisch alle Zwischenergebnisse in den Zwischenregistern verworfen. Erfolgen hingegen in einer anderen als der letzten Pipelinestufe Schreibzugriffe auf den Hauptspeicher, so müssen diese unterdrückt werden, bis klar ist, ob die jeweilige Iteration überhaupt ausgeführt werden muss.
  • Bei einer weiteren beispielhaften Ausgestaltung wird angenommen, dass der im Beispiel verwendete ALU-Grid Prozessor Zwischenregister besitzt. In diesem Fall können Daten aus den entsprechenden Zeilen innerhalb des ALU-Grid abgegriffen werden, um die Dekodierung weiterer Befehle schon während der Laufzeit der Ausführungsphasen zu starten.
  • Jetzt wird deutlich, aus welchem Grund für den ALU-Grid Prozessor nicht unbedingt eine Branch-Prediction notwenig ist: die beiden möglichen Pfade eines kurzen Sprungs können gleichzeitig mit der Predication-Technik im ALU-Grid angeordnet werden oder es besteht die Möglichkeit, den einen Pfad (Schleifenkörper) im ALU-Grid auszuführen, während der andere Pfad (nachfolgender Programmcode) für die spätere Verwendung bereits unterhalb im ALU-Grid angeordnet wird. Es bleiben somit nur noch Sprünge über große Distanzen, die keiner Schleife zugeordnet werden können, und unbedingte Sprünge, die aber bereits in der Dekodierungsphase aufgelöst werden.
  • Wird eine Schleife mit mehreren Aussprung-Punkten (z.B. bei einer C-Break-Anweisung) im ALU-Grid ausgeführt, so kann die Dekodier- und Konfigurationseinheit Befehle von allen möglichen Sprungzielen vorab dekodieren und entsprechende „theoretische" Anordnungen in einem Zwischenspeicher, ähnlich einem Trace-Cache, zwischenspeichern. Wird einer der Sprünge genommen, so kann die berechnete Konfiguration sehr schnell in das ALU-Grid geladen und die Ausführung fortgesetzt werden. Noch schneller kann die Umkonfiguration stattfinden, wenn nicht ein zentraler Zwischenspeicher verwendet wird, sondern die Konfigurationsregister im ALU-Grid mehrfach vorhanden und in sog. Planes angeordnet sind. Dabei ist es möglich, bei der Ausführung mit einem Plane zu arbeiten, während in ein anderes Plane gleichzeitig eine neue Konfiguration geschrieben wird. Somit kann von einer Konfiguration zur nächsten unmittelbar gewechselt werden.
  • Bei dem Einsatz eines Trace-Konfigurations-Cache oder mehreren Konfigurations-Planes wird der Einsatz einer Art Branch-Prediction sinnvoll. Ihre Aufgabe besteht dabei aber nicht darin, eine Vorhersage darüber zu machen, ob ein spezieller Sprung genommen wird oder nicht, sondern darin, mit welchem Sprung eine Schleife voraussichtlich verlassen wird. Diese Vorhersage ist dafür interessant, welcher Programmcode zuerst dekodiert und im Trace-Cache oder einem anderen Plane abgelegt wird, damit er dann beim tatsächlichen Verlassen der Schleife zur Verfügung steht. Je länger eine Schleife ausgeführt wird, desto weniger wichtig wird diese Vorhersage, da immer mehr Aussprung-Punkte bis zum Verlassen dekodiert worden sind.

Claims (14)

  1. Prozessor, zumindest umfassend – eine Anordnung aus mehreren Zeilen konfigurierbarer Ausführungseinheiten, die durch konfigurierbare Datenverbindungen von Zeile zu Zeile zu mehreren Ketten von Ausführungseinheiten verbunden werden können, und jeweils zumindest einen Dateneingang und Datenausgang aufweisen, mit einem Rückführungsnetzwerk, über das ein am Datenausgang der untersten Ausführungseinheit jeder Kette ausgegebener Datenwert an ein Top-Register der Kette überführt werden kann, wobei die Ausführungseinheiten jeder Kette so ausgebildet sind, dass sie während Ausführungsphasen an ihrem Dateneingang anliegende Datenwerte entsprechend ihrer momentanen Konfiguration behandeln und die behandelten Datenwerte an ihrem Datenausgang für die in der Kette nachfolgenden Ausführungseinheiten bereitstellen, – eine zentrale Dekodier- und Konfigurationseinheit, die während mehrerer durch Ausführungsphasen getrennter Dekodierphasen aus einem einzelnen eingehenden sequentiellen Befehlsstrom zur Laufzeit eigenständig Ausführungseinheiten auswählt, Konfigurationsdaten für die ausgewählten Ausführungseinheiten erzeugt und die ausgewählten Ausführungseinheiten über ein Konfigurationsnetzwerk zur Ausführung der Befehle konfiguriert, – eine mit den Ausführungseinheiten über Datenleitungen verbundene Sprung-Kontrolleinheit für die Behandlung von Sprungbefehlen und – ein oder mehrere mit den Ausführungseinheiten über Datenleitungen verbundene Speicherzugriffseinheiten zur Ausführung von Speicherzugriffen.
  2. Prozessor nach Anspruch 1, dadurch gekennzeichnet, dass zwischen allen oder einzelnen Zeilen der Anordnung Zwischenregister angeordnet sind, die mit einer Bypass-Technik ausgestattet sind, über die eingehende Datenwerte bei Bedarf auch ohne Speicherung durchgeschleift werden können.
  3. Prozessor nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass Datenausgänge und Dateneingänge mehrerer Ausführungseinheiten jeder Kette und/oder gegebenenfalls vorhandene Zwischenregister mit dem Rückführungsnetzwerk verbunden sind, um an einer weiter unten liegenden Stelle der Ketten erhaltene Datenwerte an einer weiter oben liegenden Stelle der Ketten wieder einspeisen zu können.
  4. Prozessor nach einem oder mehreren der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass die Ausführungseinheiten jeder Zeile über ein Zeilenrouting-Netzwerk miteinander verbunden sind, wobei jeder Zeile über das Zeilenrouting-Netzwerk ein oder mehrere Speicherzugriffseinheiten zugeordnet sind.
  5. Prozessor nach einem oder mehreren der Ansprüche 1 bis 4, dadurch gekennzeichnet, dass die Ausführungseinheiten mit der Sprung-Kontrolleinheit verbundene Predication-Eingänge aufweisen, über die die Sprung-Kontrolleinheit während der Ausführungsphasen steuert, ob die Befehle in den jeweiligen Ausführungseinheiten tatsächlich ausgeführt werden.
  6. Prozessor nach einem der Ansprüche 1 bis 5, dadurch gekennzeichnet, dass einige der Ausführungseinheiten mehreren Ketten zugeordnet werden können.
  7. Prozessor nach Anspruch 6, dadurch gekennzeichnet, dass zumindest ein Teil der Ausführungseinheiten, die mehreren Ketten zugeordnet werden können, für spezielle Funktionen ausgebildete Ausführungseinheiten sind.
  8. Prozessor nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, dass einige oder alle Zeilen eine virtuelle Ausführungseinheit aufweisen, die alle benötigten Anschlüsse für Dateneingang und Datenausgang bereitstellt und mit ein oder mehreren zentralen Spezial-Ausführungseinheiten verbindbar ist, wobei die virtuelle Ausführungseinheit nur dazu dient, die am Dateneingang anliegenden Datenwerte von der Spezial-Ausführungseinheit behandeln zu lassen und den behandelten Datenwert an ihrem Datenausgang bereitzustellen.
  9. Prozessor nach Anspruche 8, dadurch gekennzeichnet, dass virtuelle Ausführungseinheiten mehrerer Zeilen mit einem Arbiter verbunden sind, der den Zugriff auf die ein oder mehreren zentralen Spezial-Ausführungseinheiten steuert.
  10. Prozessor nach einem der Ansprüche 1 bis 9, dadurch gekennzeichnet, dass der Prozessor einen Energiesparmechanismus aufweist, der die Dekodier- und Konfigurationseinheit und/oder nicht benötigte Zeilen der Anordnung während der Ausführungsphase abschaltet.
  11. Prozessor nach einem der Ansprüche 1 bis 10, dadurch gekennzeichnet, dass die Speicherzugriffseinheiten Streaming-Buffer aufweisen.
  12. Prozessor nach einem der Ansprüche 1 bis 11, dadurch gekennzeichnet, dass ein zentraler Zwischenspeicher für Konfigurationsdaten vorgesehen ist und/oder jede Ausführungseinheit mehrere Konfigurationsregister für Konfigurationsdaten aufweist und die Dekodier- und Konfigurationseinheit so ausgebildet ist, dass sie bereits während der Ausführungsphasen weitere Befehle des sequentiellen Befehlsstroms vorab dekodiert und die zugehörigen Konfigurationen im Zwischenspeicher oder in für die momentane Konfiguration nicht genutzten Konfigurationsregistern ablegt, um die nächste Konfiguration bei Bedarf schnell bereitstellen zu können.
  13. Prozessor nach Anspruch 12, dadurch gekennzeichnet, dass die Dekodier- und Konfigurationseinheit so ausgebildet ist, dass sie bei der Ausführung einer Programmschleife mit mehreren möglichen Sprungzielen während der Ausführungsphase der Programmschleife Befehle der möglichen Sprungziele vorab dekodiert und die zugehörigen Konfigurationen im Zwischenspeicher oder in für die momentane Konfiguration nicht genutzten Konfigurationsregistern ablegt, um die nächste Konfiguration bei Bedarf schnell bereitstellen zu können.
  14. Prozessor nach einem der Ansprüche 1 bis 13, dadurch gekennzeichnet, dass Mittel für den Einsatz von Tokens in den Ketten der Anordnung zur Synchronisation vorgesehen sind.
DE102006027181A 2006-06-12 2006-06-12 Prozessor mit internem Raster von Ausführungseinheiten Expired - Fee Related DE102006027181B4 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102006027181A DE102006027181B4 (de) 2006-06-12 2006-06-12 Prozessor mit internem Raster von Ausführungseinheiten
US12/304,655 US20090249028A1 (en) 2006-06-12 2007-06-12 Processor with internal raster of execution units
PCT/DE2007/001022 WO2007143972A2 (de) 2006-06-12 2007-06-12 Prozessor mit internem raster von ausführungseinheiten

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102006027181A DE102006027181B4 (de) 2006-06-12 2006-06-12 Prozessor mit internem Raster von Ausführungseinheiten

Publications (2)

Publication Number Publication Date
DE102006027181A1 true DE102006027181A1 (de) 2007-12-13
DE102006027181B4 DE102006027181B4 (de) 2010-10-14

Family

ID=38663830

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102006027181A Expired - Fee Related DE102006027181B4 (de) 2006-06-12 2006-06-12 Prozessor mit internem Raster von Ausführungseinheiten

Country Status (3)

Country Link
US (1) US20090249028A1 (de)
DE (1) DE102006027181B4 (de)
WO (1) WO2007143972A2 (de)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101553780A (zh) * 2006-12-11 2009-10-07 Nxp股份有限公司 Vliw处理器的虚拟功能单元
US20150052330A1 (en) * 2013-08-14 2015-02-19 Qualcomm Incorporated Vector arithmetic reduction
JP6553694B2 (ja) * 2017-09-25 2019-07-31 Necスペーステクノロジー株式会社 プロセッサエレメント、プログラマブルデバイス及びプロセッサエレメントの制御方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020069343A1 (en) * 1997-06-30 2002-06-06 Bops, Inc. Manifold array processor

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681341B1 (en) * 1999-11-03 2004-01-20 Cisco Technology, Inc. Processor isolation method for integrated multi-processor systems
JP2004334429A (ja) * 2003-05-06 2004-11-25 Hitachi Ltd 論理回路及びその論理回路上で実行するプログラム
JP4104538B2 (ja) * 2003-12-22 2008-06-18 三洋電機株式会社 リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路
JP4728581B2 (ja) * 2004-02-03 2011-07-20 日本電気株式会社 アレイ型プロセッサ
JP4275013B2 (ja) * 2004-06-21 2009-06-10 三洋電機株式会社 データフローグラフ処理装置、処理装置、リコンフィギュラブル回路。

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020069343A1 (en) * 1997-06-30 2002-06-06 Bops, Inc. Manifold array processor

Also Published As

Publication number Publication date
DE102006027181B4 (de) 2010-10-14
WO2007143972A3 (de) 2008-03-27
US20090249028A1 (en) 2009-10-01
WO2007143972A2 (de) 2007-12-21

Similar Documents

Publication Publication Date Title
DE102018005172A1 (de) Prozessoren, verfahren und systeme mit einem konfigurierbaren räumlichen beschleuniger
EP0961980B1 (de) Verfahren zur selbstsynchronisation von konfigurierbaren elementen eines programmierbaren bausteines
DE102018006791A1 (de) Prozessoren, Verfahren und Systeme mit einem konfigurierbaren räumlichen Beschleuniger mit einem Sequenzer-Datenflussoperator
DE102015112202A1 (de) Kombinieren von Pfaden
EP0948842B1 (de) VERFAHREN ZUM SELBSTÄNDIGEN DYNAMISCHEN UMLADEN VON DATENFLUSSPROZESSOREN (DFPs) SOWIE BAUSTEINEN MIT ZWEI- ODER MEHRDIMENSIONALEN PROGRAMMIERBAREN ZELLSTRUKTUREN (FPGAs, DPGAs, o.dgl.)
DE69827589T2 (de) Konfigurierbare Verarbeitungsanordnung und Verfahren zur Benutzung dieser Anordnung, um eine Zentraleinheit aufzubauen
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE60115982T2 (de) Verfahren und Vorrichtung zum Zuordnen funktioneller Einheiten in einem Mehrfachthread-VLIM-Prozessor
WO2004038599A1 (de) Rekonfigurierbare sequenzerstruktur
DE112016001844T5 (de) Zweidimensionale Verschiebungsmatrix für Bildprozessor
DE102015002383A1 (de) Verfahren und Vorrichtung zum Implementieren einer dynamischen Out-of-order-Prozessorpipeline
DE102018126001A1 (de) Synchronisation in einem Multi-Kachel-Verarbeitungsarray
DE102011081585B4 (de) Prozessorarchitektur mit erhöhter Effizienz
DE19506990A1 (de) Einrichtung zur Datenumleitung in einem Prozessor mit mehreren Ausführungseinheiten
DE4217012A1 (de) Mit einer vielzahl von befehlsstroemen und statischer verschachtelung arbeitender mikroprozessor
DE3049437A1 (de) Matrixanordnung einer vielzahl von verarbeitungselementen fuer parallelprozessoren
DE2716369A1 (de) Mikroprozessorsystem
EP0825540A1 (de) Prozessor mit Pipelining-Aufbau
DE102006027181B4 (de) Prozessor mit internem Raster von Ausführungseinheiten
EP1472616B1 (de) Rekonfigurierbare elemente
DE102004009610B4 (de) Heterogener paralleler Multithread-Prozessor (HPMT) mit geteilten Kontexten
WO2003060747A2 (de) Reconfigurierbarer prozessor
DE19843663A1 (de) Konfigurierbarer Hardware-Block
DE102013114508B4 (de) Blockbasierte Signalverarbeitung
WO2004088502A2 (de) Verfahren und vorrichtung für die datenverarbeitung

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8364 No opposition during term of opposition
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20150101