DE102015109969A1 - Replizieren von Logikblöcken zum Ermöglichen eines erhöhten Durchsatzes - Google Patents

Replizieren von Logikblöcken zum Ermöglichen eines erhöhten Durchsatzes Download PDF

Info

Publication number
DE102015109969A1
DE102015109969A1 DE102015109969.1A DE102015109969A DE102015109969A1 DE 102015109969 A1 DE102015109969 A1 DE 102015109969A1 DE 102015109969 A DE102015109969 A DE 102015109969A DE 102015109969 A1 DE102015109969 A1 DE 102015109969A1
Authority
DE
Germany
Prior art keywords
logic
pipeline
block
register
paths
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
DE102015109969.1A
Other languages
English (en)
Inventor
Hugh Jackson
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102015109969A1 publication Critical patent/DE102015109969A1/de
Pending legal-status Critical Current

Links

Images

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/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
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Abstract

Eine Datenpfad-Pipeline, die replizierte Logikblöcke zum Erhöhen des Durchsatzes der Pipeline verwendet, wird beschrieben. In einer Ausführungsform umfasst die Pipeline oder Teile davon eine Anzahl von parallelen Logikpfaden, wobei jeder dieselbe Logik umfasst. Eingangsregisterstufen am Eingang eines jeden Logikpfades werden nacheinander an aufeinanderfolgenden Taktzyklen freigegeben, so dass Daten in jeden Logikpfad der Reihe nach gelesen werden und die Logik in verschiedenen Pfaden phasenverschoben arbeitet. Der Ausgang der Logikpfade wird in eine oder mehrere Ausgangsregisterstufen gelesen und die Logikpfade werden kombiniert, indem ein Multiplexer verwendet wird, der einen Ausgang aus einem der Logikpfade an irgendeinem Taktzyklus auswählt. Verschiedene Optimierungsmethoden werden beschrieben und in verschiedenen Beispielen kann auch Register-Retiming verwendet werden. In verschiedenen Beispielen ist die Datenpfad-Pipeline in einem Prozessor.

Description

  • Hintergrund
  • Es ist im Allgemeinen wünschenswert, den Durchsatz von Daten durch eine Pipeline (zum Beispiel eine arithmetische Logikeinheit) in einem Prozessor zu erhöhen und dies kann typischerweise durch eine Erhöhung der Taktfrequenz des Prozessors erzielt werden. Allerdings ist die Taktfrequenz aufgrund des Umfangs an Logik zwischen den Registerbänken innerhalb der Pipeline begrenzt, da diese gesamte Logik innerhalb eines Taktzyklus ausgeführt werden muss. Eine bekannte Lösung dieser Aufgabe ist, die kombinatorische Logik in mehrere Zyklen aufzuteilen und Registerbänke zwischen jedem Logikblock einzufügen. Da weniger Logik zwischen jeder Registerstufe vorhanden ist, kann die Taktfrequenz erhöht werden und die Taktfrequenz ist nun begrenzt durch die Zeit, die benötigt wird, um den langsamsten der resultierenden Logikblöcke auszuführen. Das Aufteilen der kombinatorischen Logik auf diese Weise ermöglicht, die Taktrate zu erhöhen, wodurch der Durchsatz erhöht wird, aber sich die Latenzzeit erhöht (da zusätzliche Taktzyklen benötigt werden, um Daten die gesamte Logik durchlaufen zu lassen). Zusätzlich zum manuellen Design kann eine Technik, die als ”Register-Retiming” bekannt ist, verwendet werden, um zu bestimmen, wie die Logik aufzuteilen ist und wo die Register platziert werden sollten.
  • Die unten beschriebenen Ausführungsformen sind nicht auf Ausführungen beschränkt, die einige oder alle Nachteile der bekannten Verfahren zum Entwerfen von Pipelines in einem Prozessor lösen.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten in einer vereinfachten Form vorzustellen, welche nachfolgend in der detaillierten Beschreibung weiter beschrieben sind. Diese Zusammenfassung dient weder dazu, Schlüsselmerkmale oder wesentliche Merkmale des beanspruchten Gegenstandes zu identifizieren, noch dazu, als ein Mittel bei der Bestimmung des Schutzbereiches des beanspruchten Gegenstandes verwendet zu werden.
  • Eine Datenpfad-Pipeline, die replizierte Logikblöcke verwendet, um den Durchsatz der Pipeline zu erhöhen, wird beschrieben. In einer Ausführungsform umfasst die Pipeline, oder ein Teil davon, eine Anzahl von parallelen Logikpfaden, wobei jeder dieselbe Logik umfasst. Eingangsregisterstufen werden am Eingang eines jeden Logikpfads der Reihe nach an aufeinanderfolgenden Taktzyklen freigegeben, so dass Daten in jeden Logikpfad der Reihe nach eingelesen werden und die Logik in den verschiedenen Pfaden phasenverschoben arbeitet. Der Ausgang (bzw. die Ausgabe) der Logikpfade wird in eine oder mehrere Ausgangsregisterstufen eingelesen und die Logikpfade werden unter Verwendung eines Multiplexers verbunden, der einen Ausgang von einem der Logikpfade an einem beliebigen Taktzyklus auswählt. Verschiedene Optimierungstechniken werden beschrieben und in verschiedenen Beispielen kann auch Register-Retiming verwendet werden. In verschiedenen Beispielen befindet sich die Datenpfad-Pipeline in einem Prozessor.
  • Ein erster Aspekt stellt eine Datenpfad-Pipeline bereit, umfassend: einen oder mehrere replizierte Logikblöcke, die parallele Logikpfade in der Pipeline bilden; einen Eingangsregisterblock am Eingang eines jeden Logikpfads, wobei in jedem Taktzyklus nur eine Teilmenge der Eingangsregisterstufen freigegeben sind; einen oder mehrere Ausgangsregisterblocks, die ausgelegt sind, Daten aus einem oder mehreren der Logikpfade zu empfangen; und einen Multiplexer, der ausgelegt ist, die parallelen Logikpfade in einen einzelnen Ausgang zu rekombinieren.
  • Ein zweiter Aspekt stellt ein Verfahren zum Betreiben einer Datenpfad-Pipeline bereit, wobei das Verfahren umfasst: Nacheinander Freigeben eines jeden Satzes von Eingangsregisterblöcken an aufeinanderfolgenden Taktzyklen, um Daten in eine Mehrzahl von Logikpfaden weiterzuleiten; Verarbeiten der Daten in jedem Logikpfad über eine Mehrzahl von Taktzyklen; und Auswählen eines Ergebnisses aus jedem Logikpfad an aufeinanderfolgenden Taktzyklen.
  • Ein dritter Aspekt stellt ein Verfahren zum Entwerfen einer Datenpfad-Pipeline bereit, wobei die Pipeline Logik umfasst und das Verfahren umfasst: Replizieren wenigstens eines Teils der Logik, um mehrfache Logikpfade zu bilden; Hinzufügen eines Eingangsregisterblocks zu einem Anfang eines jeden Logikpfads; Hinzufügen eines Ausgangsregisterblocks zu einem Ende eines jeden Logikpfads; Konfigurieren der Pipeline, um die Eingangsregisterblöcke nacheinander an aufeinanderfolgenden Taktzyklen freizugeben; Konfigurieren der Pipeline, um die Ausgangsregisterblöcke nacheinander an aufeinanderfolgenden Taktzyklen freizugeben; und Hinzufügen eines Multiplexers, um Ausgänge aus den Logikpfaden zu kombinieren.
  • Weitere Aspekte stellen ein computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors bereit, umfassend die oben beschriebene Pipeline und ein computerlesbares Speichermedium, aufweisend einen darauf codierten computerlesbaren Programmcode zum Erzeugen eines Prozessors, der konfiguriert ist, das oben beschriebene Verfahren auszuführen.
  • Die hier beschriebenen Verfahren können mittels eines Computers ausgeführt werden, der mit Software in maschinenlesbarer Form konfiguriert ist, gespeichert auf einem berührbaren Speichermedium, wie beispielsweise in Form eines Computerprogramms, das einen computerlesbaren Programmcode zum Konfigurieren eines Computers umfasst, so dass dieser Bestandteile der beschriebenen Verfahren ausführt oder in der Form eines Computerprogramms, das Computer-Programmcodemittel umfasst, die ausgelegt sind, alle Schritte eines beliebigen der hier beschriebenen Verfahren auszuführen, wenn das Programm auf einem Computer läuft und wobei das Computerprogramm auf einem computerlesbaren Speichermedium enthalten sein kann. Beispiele berührbarer (oder nicht-flüchtigen) Speichermedien beinhalten Disks, USB-Sticks, Speicherkarten, etc. und beinhalten keine weitergeleiteten Signale. Die Software kann zur Ausführung auf einem parallelen Prozessor oder einem seriellen Prozessor geeignet sein, so dass die Verfahrensschritte in einer beliebigen geeigneten Reihenfolge oder simultan ausgeführt werden können.
  • Die hier beschriebenen Hardware-Komponenten können mittels eines nicht-flüchtigen computerlesbaren Speichermediums erzeugt werden, das einen darauf codierten computerlesbaren Programmcode aufweist.
  • Dies zeigt, dass Firmware und Software separat verwendet werden und nützlich sein können. Es soll Software umfasst sein, die auf ”nicht-intelligenter” oder Standard-Hardware läuft oder diese steuert, um die gewünschten Funktionen auszuführen. Es soll auch Software umfasst sein, die das Konfigurieren der Hardware, wie zum Beispiel HDL-(Hardware Description Language)Software, ”beschreibt” oder definiert, wie sie für das Design von Silizium-Chips verwendet wird, oder für das Konfigurieren von universell programmierbaren Chips, um die erwünschten Funktionen durchzuführen.
  • Die bevorzugten Merkmale können nach Bedarf kombiniert werden, wie dies für einen Fachmann offensichtlich ist, und sie können mit beliebigen der Aspekte der Erfindung kombiniert werden.
  • Kurze Beschreibung der Zeichnungen
  • Es werden Ausführungsformen der Erfindung anhand von Beispielen mit Bezug auf die folgenden Figuren beschrieben werden, wobei:
  • 1 eine schematische Darstellung von beispielhaften Prozessoren zeigt, wobei das hier beschriebene Verfahren implementiert werden kann;
  • 2 zwei schematische Darstellungen von Ausführungspipelines zeigt;
  • 3 zeitliche Zustandsverläufe für eine verbesserte Ausführungspipeline, dargestellt in 2, zeigt;
  • 4 eine weitere Optimierung zeigt, die an der verbesserten Pipeline, dargestellt in 2, erfolgen kann;
  • 5 eine weitere Optimierung zeigt, die an einer Pipeline erfolgen kann;
  • 6 einen Vergleich einer vollständig gepipelineten Funktionseinheit mit einer Funktionseinheit, die eine Kombination des Pipelining und des Sidelining verwendet, zeigt;
  • 7 zwei weitere verbesserte Pipelines zeigt;
  • 8 ein Flussdiagramm ist, das ein beispielhaftes Verfahren für den Betrieb einer Pipeline zeigt, die Sidelining verwendet; und
  • 9 ein Flussdiagramm eines beispielhaften Verfahrens zum Entwerfen einer verbesserten Pipeline ist.
  • Gemeinsame Bezugszeichen werden in den Figuren durchgehend verwendet, um ähnliche Merkmale anzuzeigen.
  • Detaillierte Beschreibung
  • Ausführungsformen der vorliegenden Erfindung sind nachfolgend nur beispielhaft beschrieben. Diese Beispiele stellen die besten Wege dafür dar, die Erfindung in die Praxis umzusetzen, welche der Anmelderin derzeit bekannt sind, obwohl dies natürlich nicht die einzigen Wege sind, auf welchen dies erreicht werden könnte. Die Beschreibung legt die Funktionen des Beispiels und die Abfolge der Schritte für das Gestalten und den Betrieb des Beispiels dar. Jedoch können dieselben oder äquivalente Funktionen und Abfolgen von anderen Beispielen erzielt werden.
  • Wie oben beschrieben ist, befindet sich durch Hinzufügen von extra Registerstufen in einer Pipeline weniger Logik zwischen jeder Registerstufe und die Taktfrequenz kann erhöht werden. Da jedoch die Logik zwischen den Stufen reduziert wird, liefern die Setup-Zeit und die Haltezeit der Register einen größeren Beitrag zur Verzögerung zwischen den Registerstufen und dies ist einer der begrenzenden Faktoren, die Taktfrequenz weiter zu erhöhen (da die Verzögerung der minimal möglichen Taktperiode entspricht). Ferner kann das Hinzufügen von Extra-Registerstufen eine nachteilige Auswirkung auf die Größe eines Designs (wenn Register in der Mitte der Logik platziert werden, sind sie typischerweise erforderlich, um mehr Bits zu speichern als entweder am Eingang oder am Ausgang der Logik) und auch auf die Wirkleistung dieses Designs haben (wegen der hohen Anzahl an Registern, die bei jedem Zyklus takten, bei dem die Hardware in Betrieb ist).
  • Eine Datenpfad-Pipeline und Verfahren zum Ausbilden und zum Betreiben einer Datenpfad-Pipeline werden hier beschrieben, die ermöglichen, dass die Taktfrequenz erhöht wird und dadurch der Durchsatz der Pipeline erhöht werden kann. Wie unten beschrieben wird, können diese Verfahren in verschiedenen Beispielen zusammen mit Register-Retiming (oder anderen konventionellen Pipeline-Techniken) verwendet werden oder die Verfahren können unabhängig vom Register-Retiming verwendet werden. In den hier beschriebenen Verfahren wird die kombinatorische Logik repliziert und die replizierten Versionen werden parallel, aber phasenverschoben betrieben. Dies reduziert die effektive Taktfrequenz (oder effektive Taktrate) in jedem der replizierten Blöcke (zum Beispiel können Daten in einen replizierten Block nur bei wechselnden Taktzyklen getaktet werden, so dass der Block zwei Taktzyklen haben kann, in denen er abschließt). Durch Reduzierung der Anzahl der Registerstufen ist die gesamte Setup- und Haltezeit im Vergleich zu Standardlösungen reduziert, was es ermöglicht, dass die aktuelle Taktfrequenz erhöht wird. Wie weiter unten detaillierter beschrieben wird, können weitere Verbesserungen in der Taktfrequenz und/oder bezüglich der Schaltkreisfläche durch Optimierung, welche Teile der Logik repliziert werden und die Position der Ausgabe-Multiplexer (welche die Ergebnisse von den replizierenden Blocks zurück in einen einzelnen Pfad kombinieren) und der Ausgangsregister erzielt werden. In vielen Beispielen werden die hier beschriebenen Verfahren für kombinatorische Logik implementiert, die kein kombinatorisches Feedback beinhalten (zum Beispiel gibt der Logikblock kein Feedback zu sich selbst ab). In anderen Beispielen jedoch kann Feedback enthalten sein.
  • Der Begriff ”Datenpfad-Pipeline” (der auch als eine ”Ausführungs-Pipeline” oder ”Pipeline” bezeichnet werden kann) bezieht sich auf einen Logikblock, der mehrere Taktzyklen braucht, um Informationen zu verarbeiten und folglich häufig mehrere Registerstufen mit Logik zwischen den Registerstufen umfasst. In verschiedenen Beispielen kann die Pipeline Teil eines Prozessors sein (wie in den unten beschriebenen Beispielen), zum Beispiel Teil einer CPU, GPU oder eines DSP; jedoch können die hier beschriebenen Verfahren auch an anderer Stelle implementiert werden.
  • Der Begriff ”kombinatorische Logik” bezieht sich auf Logik, wobei das Ergebnis eine reine Funktion der gegenwärtigen Eingabe ist und das Ergebnis nicht abhängig von der Historie der Eingabe ist (im Unterschied zur sequentiellen Logik). Eine Pipeline kann kombinatorische und sequentielle Logik umfassen und der Teil einer arithmetischen Logikeinheit (ALU), der mathematische Berechnungen durchführt, kann nur kombinatorische Logik umfassen. Kombinatorische Logik kann auch als zeitunabhängige Logik oder Schaltungslogik bezeichnet werden.
  • 1 zeigt eine schematische Darstellung von zwei beispielhaften Prozessoren 100, 101, in denen die hier beschriebenen Verfahren implementiert sein können. Der erste beispielhafte Prozessor 100 ist ein Out-of-Order-Prozessor und der zweite beispielhafte Prozessor 101 ist ein In-Order-Prozessor. In diesem Beispiel sind die Prozessoren 100, 101 Single-Threaded-Prozessoren, allerdings sind die Verfahren auch bei Multi-Threaded-Prozessoren anwendbar. Ferner sind, wie oben beschrieben, obwohl die Pipelines 112 als Teil der beispielhaften Prozessoren 100, 101 gezeigt sind, die hier beschriebenen Verfahren und Pipelines nicht auf Pipelines innerhalb eines Prozessors (zum Beispiel innerhalb einer CPU) begrenzt.
  • Der Out-of-Order-Prozessor 100 umfasst eine Abrufstufe 102, eine Dekodier- und Umbenennungsstufe 104, einen Neuordnungspuffer 106, eine Festschreibstufe (Commit-Stufe) 108 und einen oder mehrere Funktionseinheiten 110, wobei jede einen oder mehrere Ausführungs-Pipelines 112 umfasst.
  • Die Abrufstufe 102 ist konfiguriert, um Instruktionen von einem Programm (in Programmreihenfolge) abzurufen, wie durch einen Programmzähler (Program Counter, PC) angezeigt wird. Sobald eine Instruktion abgerufen wird, wird sie der Dekodier- und Umbenennungsstufe 104 zur Verfügung gestellt, die ausgelegt ist, die Instruktionen zu interpretieren und Registerumbenennung durchzuführen.
  • Nachdem eine Instruktion die Dekodier- und Umbenennungsstufe 104 durchlaufen hat, wird sie in einen Neuordnungspuffer 106 (Reorder Buffer, ROB) eingefügt und an eine Funktionseinheit 110 zur Ausführung gesendet. Die Funktionseinheit 110, an welche die Instruktion gesendet wird, kann auf der Art von Instruktionen beruhen. Der Neuordnungspuffer 106 ist ein Puffer, der es ermöglicht, die Instruktionen außerhalb der Reihenfolge (”out-of-order”) auszuführen, aber in Reihenfolge (”in-order”) zu binden. Der Neuordnungspuffer 106 speichert die Instruktionen, die in ihn eingegeben werden, in Programmreihenfolge, aber die Instruktionen innerhalb des ROB 106 können außerhalb der Sequenz mittels der Funktionseinheiten 110 ausgeführt werden.
  • Jede Funktionseinheit 110 ist für das Ausführen von Instruktionen verantwortlich und kann dafür ausgelegt sein, spezielle Arten von Instruktionen auszuführen. Die Funktionseinheiten 110 können einen oder mehrere Lade-Speicher-Einheiten, eine Ganzzahl-Einheit, eine Gleitkomma-Einheit (Floating Point Unit, FPU), eine Digitalsignalverarbeitungs-(Digital Signal Processing, DSP)/Single Instruction Multiple Data(SIMD)-Einheit oder eine Multiply Accumulate(MAC)-Einheit umfassen. Die Pipelines 112 in den Funktionseinheiten können verschiedene Längen und/oder Komplexitäten aufweisen. Zum Beispiel ist eine FPU-Pipeline in der Regel länger als eine Ganzzahl-Ausführungs-Pipeline, weil sie im Allgemeinen kompliziertere Operationen ausführt.
  • Der In-Order-Prozessor 101 umfasst eine Abruf-Stufe 102, eine Dekodierstufe 105, eine oder mehrere Funktionseinheiten 110 (wobei jede einen oder mehrere Ausführungs-Pipelines 112 beinhaltet) und eine Registerdatei 114. Wie die Dekodier- und Umbenennungsstufe 104 in einem Out-of-Order-Prozessor 100 ist die Dekodierstufe 105 in einem In-Order-Prozessor angeordnet, um die Instruktionen zu interpretieren, die in der Abruf-Stufe 102 abgerufen wurden; allerdings führt in einem In-Order Prozessor die Dekodierstufe 105 keine Registerumbenennung durch.
  • Es versteht sich, dass andere Prozessoren weniger Funktionselemente, die in 1 dargestellt sind, umfassen können (d. h. eine oder mehrere der Funktionselemente, die in 1 dargestellt sind, können weggelassen sein) und sie können, in einigen Beispielen, zusätzliche Funktionselemente, die in 1 nicht dargestellt sind, umfassen.
  • 2 zeigt zwei schematische Darstellungen von Ausführungs-Pipelines 21, 22. Jede Ausführungs-Pipeline 21, 22 umfasst Blöcke von kombinatorischer Logik 202 (die auch als ”Logik” in der folgenden Beschreibung bezeichnet werden wird), die durch am Ende abgerundete Formen grafisch abgebildet sind, und Registerblöcke 204, die durch Vierecke grafisch abgebildet sind. Die erste Darstellung zeigt eine Standard-Pipeline 21, die drei Registerstufen (jede umfasst einen Registerblock 204) mit dazwischen angeordneten Logikblöcken 202 umfasst. Es gibt eine Registerstufe am Eingang zur Pipeline 21, diese kann als Eingangsregisterstufe bezeichnet werden und es gibt eine Registerstufe am Ausgang der Pipeline 21, diese kann als Ausgangregisterstufe bezeichnet werden.
  • Die zweite Darstellung in 2 zeigt ein erstes Beispiel einer verbesserten Pipeline 22 (wobei der Begriff ”Pipeline”, wie oben beschrieben wurde, sich auf irgendeinen Logikblock bezieht, der mehrere Zyklen benötigt, um Informationen zu verarbeiten). Wie der Darstellung zu entnehmen ist, wurde ein Logikblock gebildet, der den zwei Logikblöcken 202, dargestellt in der ersten Darstellung 21 in 2, entspricht und dann wurde dieser Logikblock (der zwei Zyklen zum Vervollständigen braucht) repliziert, wodurch zwei identische Logikblöcke 206, 208 und zwei Logikpfade, Pfad 1 210 und Pfad 2 212, erzeugt wurden. Jeder Pfad 210, 212 umfasst eine Eingangsregisterstufe (Registerblöcke 214, 216) und eine Ausgangsregisterstufe (Registerblöcke 218, 220) und die zwei Pfade 210, 212 werden im Anschluss an die Ausgangsregisterstufen 218, 220, unter Verwendung eines Multiplexers 222, kombiniert.
  • Der Betrieb der Pipeline 22 kann unter Bezugnahme auf die Darstellung, die in 3 gezeigt ist, beschrieben werden. Jeder der Eingangsregisterblöcke 214, 216 ist bei wechselnden Taktzyklen (wie durch Zustandswechsel 303 und 305 dargestellt) derart freigegeben (d. h. getaktet), dass er neue Daten bei wechselnden Taktzyklen empfängt und dann diese Daten für zwei Taktzyklen hält (wie durch Zustandswechsel 304 und 306 dargestellt, mit den gemeinsamen Eingabedaten, die in Zustandswechsel 302 dargestellt sind). Zum Beispiel speichert der erste Eingangsregisterblock 214 Eingabedaten 1 mit der Taktflanke 0 (siehe Zustandswechsel 304). Mit der Taktflanke 1 speichert der zweite Eingangsregisterblock 216 Eingabedaten 2 (siehe Zustandswechsel 306) und der erste Eingangsregisterblock hält immer noch die Eingabedaten 1 (siehe Zustandswechsel 304). Mit der Taktflanke 2 speichert der erste Eingangsregisterblock Eingabedaten 3 (siehe Zustandswechsel 304), während der zweite Eingangsregisterblock immer noch Eingabedaten 2 hält (wie in Zustandswechsel 306 dargestellt). Mit der Taktflanke 3 speichert der zweite Eingangsregisterblock 216 Eingabedaten 4 (siehe Zustandswechsel 306) und der erste Eingangsregisterblock hält immer noch Eingabedaten 3 (wie in Zustandswechsel 304 dargestellt), und so weiter. Eingangsregisterblock 214 hält daher Eingabedaten 1 für Taktzyklen 0 und 1 (wie in Zustandswechsel 304 dargestellt), Eingangsregisterblock 216 hält Eingabedaten 2 für Taktzyklen 1 und 2 (wie in Zustandswechsel 306 dargestellt), etc. Dies wird in 2 durch die Freigabe (EN) Logik mit EN dargestellt: (T/N) + 0 für den ersten Eingangsregisterblock 214 und EN: (T/N) + N – 1 für den zweiten Eingangsregisterblock 216, wobei T die aktuelle Zyklusanzahl ist (d. h. die Zeit) und N die Anzahl an Stufen in der Pipeline ist (N = 2 in dem dargestellten Beispiel).
  • Die Taktgeber, die für die Eingabe-(und Ausgabe-)Registerblöcke verwendet werden, können von dem Haupttaktgeber (d. h. dem normalen Taktgeber der Pipeline) getrennt sein; allerdings kann in vielen Beispielen derselbe Taktgeber (dargestellt durch Zustandswechsel 301 in 3) verwendet werden, um alle Registerstufen mit dem Takt zu takten, der eine taktbildende Zelle derart durchläuft, dass die Register nicht bei jedem Zyklus des Haupttaktgebers freigegeben werden (wie durch Zustandswechsel 303 und 305 dargestellt).
  • Die replizierten Logikblöcke 206, 208 haben daher zwei Taktzyklen zum Abschluss, während dieser Zeit die Eingabedaten (in den Eingangsregisterstufen) gehalten werden (wie durch Zustandswechsel 304, 306 dargestellt). Zurückverweisend auf das vorherige Beispiel, der erste replizierte Logikblock 206 verarbeitet die Eingabedaten 1 in den Taktzyklen zwischen den Taktflanken 0 und 2, der zweite replizierte Logikblock 208 verarbeitet die Eingabedaten 2 in den Taktzyklen zwischen den Taktflanken 1 und 3, der erste replizierte Logikblock 206 verarbeitet die Eingabedaten 3 in den Taktzyklen zwischen den Taktflanken 2 und 4, etc. Folglich kann die ”effektive Taktrate” eines jeden Pfads 210, 212 als die Hälfte der aktuellen Taktrate (d. h. die Taktrate der Pipeline 21) angesehen werden.
  • Auf ähnliche Weise wie bei den Eingangsregisterblöcken 214, 216 wird jeder der Ausgangsregisterblöcke 218, 220 bei wechselnden Taktzyklen so freigegeben (wie durch die Zustandswechsel 303, 305 dargestellt), dass sie neue Daten bei wechselnden Taktzyklen empfangen. An der Taktflanke 2 empfängt der erste Ausgangsregisterblock 218 die Ergebnisse des ersten replizierten Logikblocks 206, der die Eingabedaten 1 verarbeitet (die in den beiden vorhergehenden Taktzyklen auftreten). Diese Daten werden dann am Ausgangsregisterblock 218 für zwei Taktzyklen gehalten (wie in Zustandswechsel 307 dargestellt). An der Taktflanke 3 empfängt der zweite Ausgangsregisterblock 220 die Ergebnisse des zweiten replizierten Logikblocks 208, der die Eingabedaten 2 verarbeitet (die in den beiden vorhergehenden Taktzyklen auftreten) und diese Daten werden dann am Ausgangsregisterblock 220 für zwei Taktzyklen gehalten (wie in Zustandswechsel 308 dargestellt), etc.
  • Der Ausgangsmultiplexer 222, der die Ausgänge der beiden unabhängigen Logikpfade 210, 220 in der Pipeline 22 kombiniert, wählt wechselnde Eingaben an angrenzenden Taktzyklen aus. 2 zeigt die Auswahllogik (Sel: T%N, wobei das Symbol ”%” ”Modulo”) bedeutet und dies wird in Zustandswechsel 309 in 3 mit einer ”0” angezeigt, die die Auswahl des Pfades 1 210 anzeigt, und einer ”1”, die die Auswahl des Pfades 2 212 anzeigt. Wie der 3 zu entnehmen ist, wählt der Multiplexer 222 die Registerbank (oder den Ausgangsregisterblock 218, 220), die gerade aktualisiert worden ist, zum Beispiel wählt sie den ersten Pfad 210 an der Taktflanke 2 aus, den zweiten Pfad 212 an der Taktflanke 3, den ersten Pfad 210 an der Taktflanke 4, etc. Es kann ferner der 3 entnommen werden, dass die Registerblöcke 218, 220 nur erforderlich sind, um die Daten für den ersten Zyklus zu halten, aber ebenso müssen keine neuen Daten eingetaktet werden, so dass das Takten eines jeden Zyklus Leistungsverlust bedeuten würde.
  • Obwohl die zweite Darstellung von 2 nur die beiden replizierten Blöcke 206, 208 zeigt, die zwei Logikpfade 210, 212 bilden, kann das Verfahren auf N replizierte Blöcke, die N Logikpfade bilden, erweitert werden. In solch einem Beispiel wird jede Eingangs- und jede Ausgangsregisterstufe jeden Nten Taktzyklus freigegeben mit einer Eingangsstufe und einer Ausgangsstufe, die in jedem Taktzyklus freigegeben wird. Dies bedeutet, dass jede der N replizierten Blöcke N Taktzyklen aufweist, in denen die Eingabedaten verarbeitet werden und der Multiplexer eines der N Pfade in jedem Taktzyklus auswählt und taktet jedes der N Pfade der Reihe nach durch.
  • Das erste Beispiel einer verbesserten Pipeline 22, die in 2 gezeigt ist, umfasst einen größeren Umfang an Logik, der in einer größeren Abmessung (zum Beispiel Fläche) der Logik im Vergleich zur ersten Pipeline 21 resultiert; allerdings wird durch Reduzierung der Anzahl von Registerstufen in jedem Pfad (und dadurch Entfernen der zugehörigen Setup- und Haltezeiten) ermöglicht, die Taktfrequenz zu erhöhen, wodurch der Durchsatz der Pipeline erhöht wird. Obwohl nun mehr Registerblöcke vorhanden sind (4 anstatt 3), wird jeder Registerblock in der Pipeline 22 im Vergleich zum Registerblock in 21 die gleiche oder kleinere Breite aufweisen, da die Register nur am Eingang und am Ausgang und nicht in der Mitte des Pfads liegen, wo die Datenbreiten wahrscheinlich größer als am Eingang sind. Darüber hinaus, da die Register weniger getaktet werden (zum Beispiel jeden Nten Zyklus für die Eingangsregister), wird der aktive (oder dynamische) Energieverbrauch der Registerblöcke reduziert und der aktive Energieverbrauch der Logik bleibt ungefähr der gleiche (da neue Daten in die Logik nur alle N Zyklen getaktet werden). Es gibt einen Einfluss auf die gesamte Verlustleistung, aber die Erhöhung auf Grund der zusätzlichen Logik wird durch die Reduzierung auf Grund der geringeren Registeranzahl ausgeglichen. Abhängig von dem speziellen Design kann die Verlustleistung zwischen zwei Pipelines, die in 2. gezeigt sind, variieren.
  • Die Technik der replizierenden Logik zum Erzeugen von mehreren unabhängigen Logikpfaden, wie in dem ersten Beispiel einer verbesserten Pipeline 22 in 1 gezeigt, kann als ”Sidelining” bezeichnet werden. Weitere Optimierungen dieser Technik werden unten beschrieben und wie oben beschrieben wurde, kann diese Technik auch mit Register-Retiming oder anderen Formen des Pipelining kombiniert werden.
  • 4 zeigt eine weitere Optimierung, die an der verbesserten Pipeline 22, dargestellt in 2 und oben beschrieben, erfolgen kann. Die gezeigten Verbesserungen beziehen sich auf die Positionierung der Multiplexer und der Ausgangsregisterstufe(n).
  • 4 zeigt das erste Beispiel der verbesserten Pipeline 22 aus 2 und ein zweites Beispiel einer verbesserten Pipeline 42, die eine reduzierte Anzahl an Registerblöcken aufweist, obwohl die Anzahl der Registerstufen die gleiche geblieben ist (zum Beispiel Pipeline 22 zeigt vier Registerblöcke 214, 216, 218, 220 in zwei Registerstufen, wohingegen Pipeline 42 drei Registerblöcke 214, 216, 420 in zwei Registerstufen zeigt. Wie oben beschrieben wurde, werden die Ausgangsregisterblöcke 218, 220 in Pipeline 22 mit wechselnden Zyklen freigegeben und in einem beliebigen Taktzyklus werden Daten nur aus einem der zwei Ausgangsregisterblöcke gelesen (zum Beispiel wird der Ausgangsregisterblock 218 im Taktzyklus 0, 2, etc. und der Ausgangsregisterblock 220 im Taktzyklus 1, 3, etc. gelesen). Folglich kann die Pipeline durch Verschieben der Ausgangsregisterblöcke hinter den Multiplexer 222 und durch Ersetzen dieser mittels eines einzelnen Ausgangsregisterblocks 420 optimiert werden, der für alle Taktzyklen freigegeben wird, abwechselnd Daten aus den zwei Logikpfaden empfangend und von dem Daten bei jedem Zyklus gelesen werden.
  • Es versteht sich, dass, obwohl 4 nur zwei Logikpfade zeigt, das Verfahren auf N replizierte Blöcke, die N Logikpfade bilden, erweitert werden kann. In einem solchen Beispiel wird jede Eingangsregisterstufe jeden Nten Taktzyklus freigegeben mit einer Eingangsregisterstufe, die mit jedem Taktzyklus freigegeben wird. Das bedeutet, dass jeder der N replizierten Blöcke N Taktzyklen aufweist, in denen die Eingabedaten verarbeitet werden und der Multiplexer wählt einen der N Pfade in jedem Taktzyklus aus und wechselt die Auswahl jedes der N Pfade der Reihe nach durch. Der einzelne Ausgangsregisterblock 420 in der Pipeline 42 wird zu allen Taktzyklen freigegeben.
  • Das zweite Beispiel der verbesserten Pipeline 42 reduziert die Fläche, die für die Register benötigt wird, im Vergleich zur ersten verbesserten Pipeline 22 und reduziert dadurch den statischen (oder entweichenden) Energieverbrauch, während der dynamische Energieverbrauch im Wesentlichen gleich bleibt.
  • Im Vergleich zu einer herkömmlichen gepipelineten Lösung (zum Beispiel wie in Pipeline 21 gezeigt), gibt es die gleiche gesamte Anzahl von Registerblöcken in dem zweiten Beispiel der verbesserten Pipeline 42; allerdings umfasst jeder Pfad weniger Registerstufen, wodurch die gesamte Setup- und Haltezeit reduziert wird. Ferner, da die Registerstufen nur am Eingang und am Ausgang vorgesehen sind, sind sie weniger breit (d. h. sie müssen eine kleinere Anzahl an Bits speichern) und als ein Ergebnis der parallelen Pfade, werden die Registerstufen weniger getaktet (die Registerstufen in Pipeline 21 werden alle jeden Taktzyklus getaktet, wohingegen die Eingangsregisterstufen in Pipeline 42 nur bei abwechselnden Zyklen getaktet werden). Dies reduziert den dynamischen Energieverbrauch im Vergleich zur Pipeline 21.
  • 5 zeigt eine weitere Optimierung, die an einer Pipeline 51 erfolgen kann (die der verbesserten Pipeline 42, die in 4 gezeigt ist, entsprechen kann), wo es einen Block von identischer Logik 502, 504 am Ende eines jeden replizierten Logikblocks gibt (und dadurch am Ende eines jeden Logikpfads), aus dem Daten nur benötigt werden, um stabil für 1 Zyklus bei abwechselnden Taktzyklen zu sein. In verschiedenen Beispielen können bekannte Algorithmen verwendet werden, die für Register-Retiming benutzt werden, um die Position des Multiplexers zu optimieren, wenn Sidelining verwendet wird. Ein Beispiel-Algorithmus ist der von C. E. Leiserson und J. B. Saxe in "Retiming Synchronous Circuitry" vorgeschlagene, veröffentlicht in Algorithmica, 1991. Andere Beispiel-Algorithmen sind Netzflussalgorithmen und ein Algorithmus zur gemischt-ganzzahligen Programmierung.
  • Zurückverweisend auf die verbesserte Pipeline 42 kann der replizierte Block 206, 208 in zwei oder mehr kleinere Logikblöcke 502508, wie in 5 gezeigt, aufgeteilt werden (ohne Registerstufen zwischen den Logikblöcken, wie es der Fall wäre, wenn herkömmliches Pipelining verwendet würde). In den Beispielen, die in Pipeline 51 gezeigt sind, wird der erste der kleineren Logikblöcke 506, 508 in jedem Pfad benötigt, um für zwei Taktzyklen stabil zu sein (zum Beispiel wenn N = 2 ist, wird der Block 506 an den Zyklen 0 → 1 stabil gehalten und der Block 508 an den Zyklen 1 → 0 stabil gehalten), wohingegen der letzte der kleineren Logikblöcke 502, 504 in jedem Pfad nur benötigt wird, um für 1 Zyklus bei abwechselnden Zyklen stabil zu sein (zum Beispiel wenn N = 2 ist, wird der Block 502 an dem Zyklus 1 stabil gehalten und der Block 504 wird am Zyklus 0 stabil gehalten).
  • Wie in der verbesserten Pipeline 52 gezeigt, können die zwei Logikblöcke 502, 504 vor dem Multiplexer 222, die jeweils nur benötigt werden, um für 1 Zyklus bei abwechselnden Taktzyklen stabil zu sein, stattdessen durch einen einzelnen Logikblock 510 nach dem Multiplexer 222 ersetzt werden. Dies reduziert den Umfang an Logik, die repliziert wird und dadurch die Fläche (zum Beispiel von Silizium), die benötigt wird, um die Pipeline herzustellen, während noch ermöglicht wird, die Taktfrequenz (und dadurch den Durchsatz) zu erhöhen. Da der Multiplexer 222 nun in der Logikkette liegt (d. h. sie hat Logikblöcke sowohl an ihrem Eingang als auch an ihrem Ausgang), anstatt im Anschluss an all der Logik zu liegen, kann dies die Datenbreite erhöhen, die der Multiplexer aufnehmen können muss; allerdings, da die Logik, die erforderlich ist, um einen Multiplexer zu implementieren, relativ einfach ist, führt dies nicht zu einer starken Zunahme der benötigten Fläche.
  • Der Multiplexer 222 am Ausgang fügt nicht viele Logikebenen hinzu (zum Beispiel kann er als einzelne AND-OR–Ebene implementiert werden) und die zusätzliche Fläche, die der Multiplexer darstellt, steht der Reduzierung in der Fläche gegenüber, die durch die Register belegt werden (insgesamt sind weniger Bits vorhanden, die in Registern gespeichert werden, da sich die Register nur am Eingang und am Ausgang und nicht in der Mitte des Pfads befinden, wo Datenbreiten wahrscheinlich größer sind als am Eingang).
  • Wie in den 2 und 4 versteht es sich, dass, obwohl 5 nur zwei Logikpfade zeigt, das Verfahren auf N Logikpfade erweitert werden kann. In einem solchen Beispiel, wo Logik am Ende eines jeden Pfads vorhanden ist, die nur benötigt wird, um für jeden Nten Taktzyklus stabil zu sein, kann diese Logik durch eine einzelne Instanz der Logik nach dem Multiplexer ersetzt werden.
  • 6 zeigt einen Vergleich einer vollständig gepipelineten Funktionseinheit 61 (die manuell oder durch Verwendung von Register-Retiming-Methoden erzeugt werden kann) und eine Funktionseinheit 62, die eine Kombination von Pipelining und Sidelining verwendet. Der Begriff ”Funktionseinheit” wird anstatt Pipeline zum Zwecke der Klarheit verwendet, wenn die 6 beschrieben wird und es versteht sich, dass die Funktionseinheiten, die gezeigt sind, eine vollständige Funktionseinheit oder Teile davon sein können.
  • In der vollständig gepipelineten Funktionseinheit 61 werden Logikblöcke 602, wobei jeder in einem einzelnen Zyklus ausgeführt sein kann, durch Registerstufen 604 getrennt. In der Funktionseinheit 62, die sowohl Pipelining als auch Sidelining verwendet, ist ein Teil der Logik repliziert worden (zum Beispiel Blöcke 606 und 608 und Blöcke 610 und 612), um zwei unabhängige Pfade zu bilden und andere nicht (zum Beispiel Block 614). Gestrichelte Pfeile zwischen den zwei Pipelines 61, 62 zeigen die Korrespondenz zwischen den Logikblöcken und man erkennt, dass einer der replizierten Logikblöcke 606, 608 in der zweiten Pipeline 62 Logik umfasst, die zwei Zyklen zum Ausführen benötigt. Wie oben beschrieben werden Daten in jede der beiden Pfade bei abwechselnden Taktzyklen so getaktet, dass die effektive Taktrate in einer der beiden Pfade die Hälfte der aktuellen Taktrate ist. Auch die Struktur, die Logikblöcke 610, 612 und 614 enthält, zeigt eine Optimierung, die unter Bezugnahme auf die 5 beschrieben wurde.
  • Durch Kombinieren der Pipelining- und der Sidelining-Methoden, wie in der unteren Darstellung in 6 gezeigt, weist die sich daraus ergebende Funktionseinheit eine erhöhte Taktfrequenz auf (als ein Ergebnis des Sidelining), während die gesamte Logikfläche reduziert wird (als ein Ergebnis des Pipelining).
  • Obwohl die zweite Darstellung in 6 nur zwei Logikblöcke zeigt, die repliziert werden, um zwei parallele unabhängige Logikpfade zu bilden, kann das Verfahren erweitert werden, um weitere Replikationen zum Bilden von N Logikpfaden einzuschließen. Ferner können, wie in 6 auch gezeigt ist, die hier beschriebenen Verfahren verwendet werden, um Logikblöcke nur in einem Teil der Funktionseinheit zu replizieren.
  • 7 zeigt zwei weitere verbesserte Pipelines 71, 72, in denen N = 4 ist. Obwohl die zweite Pipeline 72 als eine Optimierung der ersten Pipeline 71 angesehen werden kann, kann jede eine geeignete Lösung sein, abhängig von den besonderen Anforderungen und der Anwendung für die Pipeline. Insbesondere, obwohl die zweite Pipeline 72 weniger duplizierte Logik aufweist, hat sie zwei zusätzliche Multiplexer und die Größe dieser Multiplexer (d. h. die Anzahl der Bits, die in dem Multiplexer untergebracht sind) werden von den jeweiligen Berechnungen abhängen, die von der Pipeline durchgeführt werden, und in einigen Beispielen kann diese sehr groß sein (zum Beispiel wenn die Pipeline 32 Bit-Zahlen zusammen multipliziert, können sich 64 oder 128 Bits in der Mitte des Logikpfads befinden). Folglich kann, abhängig von der besonderen Anwendung, die Pipeline 71 mehr oder weniger Fläche als die Pipeline 72 einnehmen (zum Beispiel auf einem Siliziumchip).
  • Die erste Pipeline 71, die in 7 gezeigt ist, ist ein wenig ähnlich zu den Pipelines 42 und 51, die in den 4 und 5 gezeigt und oben beschrieben werden, mit der Ausnahme, dass N = 4 ist (N = 2 für die Pipelines 42 und 51). Die Pipeline 71 umfasst vier unabhängige Logikpfade, wobei jeder einen Eingangsregisterblock 702 und etwas Logik umfasst, die in jedem Pfad identisch ist. Jeder Eingangsregisterblock 702 gibt jeden Nten Taktzyklus frei und halt die Daten für N (d. h. 4) Zyklen. Die Werte, die im Eingangsregisterblock 702 gehalten werden (und die Eingangsregisterblöcke in allen verbesserten Pipelines, die hier beschrieben sind), ändern sich nicht, mit der Ausnahme, wenn die Eingangsregisterstufe freigegeben wird. Selbst wenn der Logikpfad N Zyklen zur Ausführung benötigt, müssen die Eingangsregister die Daten für N Zyklen halten (und zum Beispiel nicht in neue Daten zur Verarbeitung lesen), ansonsten kann dies die Ausgabe des Logikpfads beeinträchtigen. Es gibt einen einzelnen Ausgangsregisterblock 714, der nach dem Multiplexer 712 positioniert ist (zum Beispiel auf ähnliche Weise, wie die Pipeline 42, die in 4 gezeigt ist).
  • Obwohl die Logik in jedem Pfad als ein einzelner Block hätte dargestellt werden können (wie in den Blöcken 206, 208 in der Pipeline 42), wird in 7 die Logik in einem Logikpfad als vier getrennte Blöcke dargestellt (die nicht durch Registerstufen getrennt sind) und jeder Block ist gekennzeichnet, um zu identifizieren, zu welchen Zyklen stabile Daten erforderlich sind, wobei die Zyklen von 0 bis 3 nummeriert sind und sich dann wiederholen (zum Beispiel Zyklus 4 = Zyklus 0, Zyklus 5 = Zyklus 1, etc.). In jedem Pfad ist erforderlich, dass der erste Logikblock 704 für alle vier Zyklen stabil ist, der zweite Logikblock 706 muss für 3 der 4 Zyklen stabil sein (zum Beispiel Zyklen 1–3 für den ersten Pfad), der dritte Logikpfad 708 muss für 2 der 4 Zyklen stabil sein (zum Beispiel Zyklen 2–3 für den ersten Pfad) und der vierte Logikpfad 710 muss für 1 der 4 Zyklen stabil sein (zum Beispiel Zyklus 3 für den ersten Pfad).
  • Die zweite Pipeline 72, die in 7 gezeigt ist, wendet die Optimierung, die oben unter Bezugnahme auf die 5 zur ersten Pipeline 71 beschrieben wurde, an. Betrachtet man zuerst die vier Logikblöcke 710 in jedem der Logikpfade in Pipeline 71, so erkennt man, dass es keine Überschneidung gibt, wenn stabile Daten zwischen den Pfaden benötigt werden und so können die vier Logikblöcke 710 durch einen einzelnen Logikblock 716 nach dem Multiplexer 712 ersetzt werden. Betrachtet man die dritten Logikblöcke 708 in jedem der Logikpfade in Pipeline 71, so erkennt man, dass es keine Überschneidung gibt, wenn stabile Daten zwischen dem ersten und dritten Pfad benötigt werden und in ähnlicher Weise gibt es keine Überschneidung, wenn stabile Daten zwischen dem zweiten und vierten Pfad benötigt werden. Folglich können die vier dritten Logikblöcke 708 durch zwei Logikblöcke 718 ersetzt werden, die jeweils von zwei Logikpfaden geteilt werden, welche unter Verwendung eines Multiplexers 720 kombiniert werden, der abwechselnd einen der beiden Pfade auswählt. Es sollte beachtet werden, dass die Pfade in der Pipeline 72 in anderer Reihenfolge zur Pipeline 71 eingezeichnet worden sind, mit dem zweiten Logikpfad in Pipeline 72, der dem dritten Pfad in der Pipeline 71 entspricht, und dem dritten Logikpfad in Pipeline 72, der dem zweiten Pfad in Pipeline 71 entspricht, wie durch Pfeil 722 angezeigt.
  • Wie in den 2, 4 und 5 versteht es sich, dass, obwohl die 7 vier Logikpfade zeigt, das Verfahren auf N Logikpfade erweitert werden kann. In einem solchen Beispiel können Paare von Logikpfaden unter Verwendung von Multiplexern zusammen kombiniert werden, und einem der N/2 Logikblöcke zugeführt werden, wobei die Ausgänge der N/2 Logikblöcke, unter Verwendung eines weiteren Multiplexers kombiniert werden und einem Ausgangslogikblock vor der Ausgangsregisterstufe zugeführt werden.
  • Es versteht sich, dass die verbesserten Pipelines 22, 42, 51, 52, 62, 71, 72 nur einige Beispiele von verbesserten Pipelines bereitstellen und beschrieben worden sind, um die Methode des Sidelinings zu zeigen, die verwendet werden kann, um die Taktfrequenz und dadurch den Durchsatz einer Pipeline zu erhöhen. Wie oben beschrieben wurde und in 6 gezeigt ist, kann Sidelining in Kombination mit herkömmlichem Pipelining verwendet werden oder Sidelining kann unabhängig von herkömmlichem Pipelining verwendet werden. In verschiedenen Beispielen kann der Algorithmus, der bei Register-Retiming verwendet wird, um die optimale Position einer Registerstufe zu bestimmen, in Sidelining verwendet werden, um die optimale Position eines Multiplexers zu bestimmen.
  • 8 zeigt ein Flussdiagramm, das ein beispielhaftes Verfahren zum Betrieb einer Pipeline zeigt, die Sidelining verwendet. Wie in 8 gezeigt und oben unter Bezugnahme auf das Beispiel der verbesserten Pipelines beschrieben wurde, wird jeder von einem Satz von Eingangsregisterblöcken (der eine Eingangsregisterstufe bildet) der Reihe nach an aufeinanderfolgenden Taktzyklen freigegeben, um Daten in eine Vielzahl von Logikpfaden (Block 802) weiterzugeben, wobei jeder Logikpfad dieselbe Anordnung von Logik umfasst. Die Daten, die in jeden Logikpfad weitergegeben wurden, werden dann in jedem Logikpfad über 2 oder mehr Taktzyklen (Block 804) verarbeitet und dann wird ein Ausgang von jedem der Vielzahl von Logikpfaden der Reihe nach bei sukzessiven Taktzyklen (Block 806) ausgewählt, indem zum Beispiel ein Multiplexer verwendet wird. Wie oben beschrieben, kann der Ausgang aus einem Pfad, der ausgewählt wurde (in Block 806) ein Ausgang aus der Logik in dem Pfad selbst oder ein Ausgang aus einer Ausgangsregisterstufe sein.
  • 9 zeigt ein Flussdiagramm eines beispielhaften Verfahrens zum Entwerfen einer verbesserten Pipeline. Wie in 9 dargestellt und weiter oben unter Bezugnahme auf das Beispiel mit den verbesserten Pipelines beschrieben wurde, werden Logikblöcke (die in vielen Beispielen kein kombinatorisches Feedback umfassen) innerhalb einer Pipeline repliziert, um mehrere parallele Logikpfade (Block 902) zu bilden. Ein Eingangsregisterblock wird am Beginn eines jeden Logikpfades hinzugefügt (Block 904) und ein Ausgangsregisterblock wird am Ende eines jeden Logikblocks (Block 906) hinzugefügt und die Pipeline derart konfiguriert, dass die Eingangsregisterblöcke sequenziell freigegeben werden, mit einem Eingangsregisterblock, der bei jedem Taktzyklus (Block 908) freigegeben wird. Auf die gleiche Weise wird die Pipeline weiter konfiguriert, so dass die Ausgangsregisterblöcke sequenziell freigegeben werden, mit einem Ausgangsregisterblock, der bei jedem Taktzyklus (Block 910) freigegeben wird. Ein Multiplexer wird dann hinzugefügt, um die Ausgänge der Logikpfade (Block 912) zu kombinieren.
  • Wie oben beschrieben wurde, kann das Verfahren ferner eine oder mehrere Optimierungen umfassen, wie zum Beispiel eine oder mehrere der Folgenden:
    • • Verwenden von herkömmlichem Pipelining/Register-Retiming innerhalb eines jeden Logikpfades (Block 914 und wie in 6 gezeigt);
    • • Ersetzen von zwei oder mehreren Ausgangsregisterblöcken vor dem Multiplexer durch einen Ausgangsregisterblock nach dem Multiplexer (Block 916 und wie in 4 gezeigt);
    • • Ersetzen eines Teils der Logik am Ende eines jeden Logikpfades durch eine einzelne Instanz des Teils der Logik, die nach dem Multiplexer folgt und vor der Ausgangsregisterstufe angeordnet ist (Block 918 und wie in 5 gezeigt), wenn es keine Überschneidung gibt, wenn Daten in jedem der Teile der Logik in den getrennten Logikpfaden stabil bleiben müssen;
    • • Ersetzen eines Teils der Logik am Ende einer (geeigneten) Teilmenge der Logikpfade durch eine einzelne Instanz des Teils der Logik, die nach einem neu hinzugefügten Multiplexer angeordnet ist, der die Ausgänge der Teilmengen der Logikpfade kombiniert (Block 920 und wie in 7 gezeigt), wenn es keine Überschneidung gibt, wenn Daten in den Teilen der Logik in den Teilmengen der Logikpfade stabil bleiben müssen; und
    • • Optimieren der Multiplexer-Platzierung innerhalb der Pipeline, die bekannte Algorithmen für Register-Retiming verwendet (Block 922).
  • Wie oben beschrieben wurde, wird durch Verwenden der hier beschriebenen Verfahren eine Teilmenge der Setup-Zeit und Haltezeit, die mit den Registerstufen in einer Pipeline verbunden sind, entfernt und so kann die Taktfrequenz erhöht werden, die den Durchsatz durch die Pipeline erhöht. Ferner kann, wie oben beschrieben wurde, im Vergleich zu herkömmlichen Lösungen, der dynamische Energieverbrauch reduziert werden. Es gibt eine gewisse Vergrößerung in der Fläche der Logik, die benötigt wird, aber dies wird zum Teil durch eine Reduzierung in der Fläche der Register, die benötigt wird, ausgeglichen. Durch die Verwendung von verschiedenen Optimierungen, die hier beschrieben sind, ist es möglich, eine Pipeline zu entwerfen und die Größenzunahme mit der Erhöhung in der Taktfrequenz, die erreicht werden kann, auszugleichen.
  • Es versteht sich, dass, obwohl die 27 oben beschrieben worden sind, wie sie eine Pipeline zeigen, diese alternativ einen Teil einer Pipeline zeigen können und die hier beschriebenen Verfahren auf eine gesamte Pipeline oder einen Teil davon angewendet werden können.
  • In den oben beschriebenen Beispielen werden die replizierten Logikblöcke (zum Beispiel Blöcke 214 und 216 in 2) als identisch beschrieben. Es versteht sich jedoch, dass es Beispiele geben kann, wo es Unterschiede in der replizierten Logik geben kann (zum Beispiel in einer Pipeline, die verschiede Arten von Operationen aufweist, die gerade und ungerade Zyklen durchlaufen).
  • Der Begriff ”Prozessor” wird hier verwendet, um auf jede Vorrichtung oder Teile davon mit Verarbeitungsfähigkeit zu verweisen, so dass sie Instruktionen ausführen kann. Der Begriff ”Prozessor” kann zum Beispiel zentrale Recheneinheiten (Central Processing Units, CPUs), graphische Prozesseinheiten (Graphics Processing Units, GPUs oder VPUs), Physikbeschleuniger (Physics Processing Units, PPUs), digitale Signalprozessoren (Digital Signal Processors, DSPs), allgemeine Zweckprozessoren (zum Beispiel eine Allzweck-GPU), Mikroprozessoren, jede Prozessoreinheit, die entworfen wurde, um die Aufgaben außerhalb einer CPU, etc. zu beschleunigen, beinhalten. Der Fachmann erkennt, dass solche Verarbeitungsressourcen in vielen unterschiedlichen Vorrichtungen angeordnet werden und dadurch umfasst der Begriff ”Computer” Digitalempfänger, Mediaplayer, Digitalradios, PCs, Server, Mobiltelefone, persönliche digitale Assistenten und viele andere Vorrichtungen.
  • Die hier beschriebenen Verfahren sind nicht auf CPUs, Out-of-Order-Prozessoren oder Single-Threaded-Prozessoren beschränkt, sondern können in jedem Typ von Prozessor (zum Beispiel einer GPU) implementiert werden, wenn der Prozessor Out-of-Order-Instruktionen ausführen kann oder nicht, und wenn der Prozessor single-threaded oder multi-threaded sein kann. Ferner können, wie oben beschrieben wurde, die hier beschriebenen Verfahren außerhalb eines Prozessors verwendet werden.
  • Ein besonderer Verweis auf ”Logik” bezieht sich auf eine Struktur, welche eine Funktion oder Funktionen durchführt. Ein Beispiel einer Logik umfasst Schaltungen, die ausgelegt sind, diese Funktion(en) durchzuführen. So kann eine solche Schaltung Transistoren und/oder andere Hardware-Elemente umfassen, die in einem Herstellungsprozess zur Verfügung stehen. Solche Transistoren und/oder andere Elemente können zur Bildung von Schaltungen oder Strukturen verwendet werden, die beispielsweise Speicher wie Register, Flip-Flop-Schaltungen oder Latches, logische Operatoren wie Boolean-Operationen, mathematische Operatoren wie Addierer, Multiplikatoren, oder Shifter implementieren und/oder enthalten und untereinander verbinden. Solche Elemente können als kundenspezifische Schaltungen oder standardisierte Zellbibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt sein. Solche Elemente können in einer speziellen Anordnung miteinander verbunden sein. Die Logik kann Schaltungen umfassen, die eine feststehende Funktion haben, und die Schaltungen können programmiert sein, um eine Funktion oder Funktionen durchführen; eine solche Programmierung kann von einem Aktualisierungs- oder Steuermechanismus für Firmware oder Software bereitgestellt werden. Logik, die für die Durchführung einer Funktion identifiziert wird, kann auch eine Logik umfassen, die eine Teilfunktion oder einen Unterprozess implementiert. In einem Beispiel weist diese Hardware-Logik Schaltungen auf, die eine feststehende Funktionsoperation oder Operationen, ein Zustandsgerät oder einen Zustandsprozess implementieren.
  • Jeder hier gegebene Bereich und jeder Vorrichtungswert können erweitert oder verändert werden, ohne dabei die angestrebte Wirkung zu verlieren, wie dies für eine Fachperson offensichtlich ist.
  • Es versteht sich, dass die oben beschriebenen Nutzen und Vorteile sich auf eine Ausführungsform beziehen können, oder sie können sich auf mehrere Ausführungsformen beziehen. Die Ausführungsformen sind nicht auf jene beschränkt, die einige oder alle der dargelegten Probleme lösen, oder die, die einen oder alle der angeführten Nutzen und Vorteile aufweisen.
  • Jeder Verweis auf ”ein” Element bezieht sich auf eines oder mehrere dieser Elemente. Der Begriff ”umfassend” wird hier verwendet, um die identifizierten Verfahrensblöcke oder -elemente zu beinhalten, jedoch umfassen solche Blöcke oder Elemente keine ausschließende Liste, und eine Vorrichtung kann zusätzliche Blöcke oder Elemente enthalten, und ein Verfahren kann zusätzliche Operationen oder Elemente enthalten. Ferner sind die Blöcke, Elemente und Operationen selbst nicht implizit abgeschlossen.
  • Jede Bezugnahme auf eine ”Teilmenge” bezieht sich auf eine geeignete Teilmenge, so dass die Teilmenge nicht eine oder mehrere Elemente der gesamten Menge umfasst.
  • Die Schritte der hier beschriebenen Verfahren können in jeder beliebigen geeigneten Reihenfolge ausgeführt werden, oder simultan, sollte dies angemessen sein. Die Pfeile zwischen den Kästchen in den Figuren zeigen eine beispielhafte Abfolge von Verfahrensschritten, aber sie sollen nicht dazu dienen, andere Abfolgen oder die Ausführung mehrerer Schritte in paralleler Weise auszuschließen. Zusätzlich dazu können einzelne Blöcke aus jedem der Verfahren gelöscht werden, ohne dabei vom Wesen und Schutzbereich des hier beschriebenen Gegenstands abzuweichen. Aspekte beliebiger der oben beschriebenen Beispiele können mit Aspekten beliebiger anderer beschriebener Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne die gesuchte Wirkung zu verlieren. Sind die Elemente der Figuren durch Pfeile verbunden dargestellt, so ist zu verstehen, dass diese Pfeile nur einen beispielhaften Kommunikationsfluss (einschließend Daten und Steuernachrichten) zwischen den Elementen zeigen. Der Fluss zwischen den Elementen kann in eine der beiden Richtungen oder in beide Richtungen erfolgen.
  • Man versteht, dass die obige Beschreibung einer bevorzugten Ausführungsform nur beispielhaft ist und dass verschiedene Modifikationen von Fachleuten auf dem Gebiet der Technik ausgeführt werden können. Obwohl verschiedene Ausführungsformen oben mit einem gewissen Grad an Genauigkeit beschrieben wurden, oder mit Bezug auf eine oder mehrere einzelne Ausführungsformen, könnten Fachleute auf dem Gebiet der Technik zahlreiche Änderungen an den offenbarten Ausführungsformen vornehmen, ohne dabei vom Wesen oder Schutzbereich dieser Erfindung abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • C. E. Leiserson und J. B. Saxe in ”Retiming Synchronous Circuitry” vorgeschlagene, veröffentlicht in Algorithmica, 1991 [0051]

Claims (19)

  1. Datenpfad-Pipeline (42, 51, 52, 62, 71, 72) umfassend: einen oder mehrere replizierte Logikblöcke (206, 208, 502508, 606612, 704710), die parallele Logikpfade (210, 212) in der Pipeline bilden; einen Eingangsregisterblock (214, 216, 702) am Anfang eines jeden Logikpfades, wobei in einem beliebigen Taktzyklus nur eine Teilmenge der Eingangsregisterblöcke freigegeben wird; einen Multiplexer (222, 712), der ausgelegt ist, die parallelen Logikpfade in einen einzelnen Ausgang zu rekombinieren; und einen einzelnen Ausgangsregisterblock (420, 714), der mit dem Ausgang des Multiplexers verbunden ist.
  2. Pipeline gemäß einem der vorstehenden Ansprüche, wobei ein replizierter Logikblock Hardwarelogik umfasst, die mehr als einen Taktzyklus zum Abschließen benötigt.
  3. Pipeline (52, 72) gemäß einem der vorstehenden Ansprüche, ferner umfassend: einen Logikblock (510, 614, 716) zwischen dem Multiplexer und einem Ausgangsregisterblock.
  4. Pipeline (72) gemäß einem der vorstehenden Ansprüche, ferner umfassend: einen Zwischen-Multiplexer (720), der mit einer Teilmenge der Logikpfade verbunden ist und ausgelegt ist, die Teilmenge der Logikpfade in einen einzelnen Ausgang zu kombinieren.
  5. Pipeline (72) gemäß Anspruch 4, ferner umfassend: einen Logikblock (718) zwischen dem Zwischen-Multiplexer und dem Multiplexer.
  6. Pipeline (62) gemäß einem der vorstehenden Ansprüche, wobei jeder Logikpfad einen ersten Logikblock (606, 608) und einen zweiten Logikblock (610, 612) und eine Zwischenregisterstufe zwischen dem ersten Logikblock und dem zweiten Logikblock umfasst.
  7. Pipeline gemäß einem der Ansprüche 1–5, umfassend Registerstufen nur am Eingang und am Ausgang der Pipeline.
  8. Pipeline gemäß einem der vorstehenden Ansprüche, wobei die Pipeline in einer Funktionseinheit (110) eines Prozessors (100, 101) ist.
  9. Verfahren zum Betreiben einer Datenpfad-Pipeline, wobei das Verfahren umfasst: Nacheinander Freigeben (802) eines jeden Satzes von Eingangsregisterblöcken an aufeinanderfolgenden Taktzyklen, um Daten in eine Mehrzahl von parallelen Logikpfaden weiterzuleiten; Verarbeiten (804) der Daten in jedem Logikpfad über eine Mehrzahl von Taktzyklen; und Verwenden eines Multiplexers, um einen Ausgang nach dem anderen aus jedem Logikpfad an aufeinanderfolgenden Taktzyklen auszuwählen (806); Nacheinander Freigeben eines einzelnen Ausgangsregisterblocks, der mit einem Ausgang des Multiplexers verbunden ist, an allen Taktzyklen.
  10. Verfahren gemäß Anspruch 9, wobei die Datenpfad-Pipeline in einer Funktionseinheit eines Prozessors ist.
  11. Verfahren zum Ausbilden einer Datenpfad-Pipeline, wobei die Pipeline Logik umfasst und das Verfahren umfasst: Replizieren (902) wenigstens eines Teils der Logik, um mehrere Logikpfade zu bilden; Hinzufügen (904) eines Eingangsregisterblocks zu einem Eingang eines jeden Logikpfads; Hinzufügen (906) eines Ausgangsregisterblocks zu einem Ausgang eines jeden Logikpfads; Konfigurieren (908) der Pipeline, um die Eingangsregisterblöcke nacheinander an aufeinanderfolgenden Taktzyklen freizugeben; Konfigurieren (910) der Pipeline, um die Ausgangsregisterblöcke nacheinander an aufeinanderfolgenden Taktzyklen freizugeben; Hinzufügen (912) eines Multiplexers, um Ausgänge der Logikpfade zu kombinieren; und Ersetzen (916) des Ausgangsregisterblocks am Ende von zwei oder mehreren Logikpfaden durch einen einzelnen Ausgangsregisterblock, der nach einem Multiplexer positioniert ist, der Ausgänge von zwei oder mehr Logikpfaden kombiniert.
  12. Verfahren nach Anspruch 11, ferner umfassend: Verwenden von Pipelining, um jeden Logikpfad (914) zu optimieren.
  13. Verfahren nach einem der Ansprüche 11–12, ferner umfassend: Ersetzen (918) eines Teils der replizierten Logik am Ende von zwei oder mehr Logikpfaden durch eine einzelne Instanz des Teils der replizierten Logik, die nach einem Multiplexer positioniert ist, der Ausgänge von zwei oder mehr Logikpfaden kombiniert.
  14. Verfahren nach einem der Ansprüche 11–13, ferner umfassend: Ersetzen (920) eines Teils der replizierten Logik in zwei oder mehr Logikpfaden durch eine einzelne Instanz des Teils der replizierten Logik und einen Multiplexer, der Ausgänge aus den zwei oder mehr Logikpfaden kombiniert.
  15. Verfahren nach einem der Ansprüche 11–14, ferner umfassend: Optimieren einer Position von dem einen oder mehreren Multiplexern in der Pipeline, die einen Register-Retiming-Algorithmus (922) verwendet.
  16. Verfahren nach Anspruch 15, wobei der Register-Retiming-Algorithmus ein Netzflussalgorithmus oder ein Algorithmus zur gemischt-ganzzahligen linearen Programmierung ist.
  17. Verfahren nach einem der Ansprüche 11–16, wobei die Datenpfad-Pipeline innerhalb einer Funktionseinheit eines Prozessors ist.
  18. Computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors umfassend die Pipeline eines der Ansprüche 1–8.
  19. Computerlesbares Speichermedium mit darauf codiertem computerlesbarem Programmcode zum Erzeugen eines Prozessors, der ausgelegt ist, das Verfahren eines der Ansprüche 9 oder 10 auszuführen.
DE102015109969.1A 2014-06-20 2015-06-22 Replizieren von Logikblöcken zum Ermöglichen eines erhöhten Durchsatzes Pending DE102015109969A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1411052.2A GB2527367B (en) 2014-06-20 2014-06-20 Replicating logic blocks to enable increased throughput
GB1411052.2 2014-06-20

Publications (1)

Publication Number Publication Date
DE102015109969A1 true DE102015109969A1 (de) 2015-12-24

Family

ID=51409921

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015109969.1A Pending DE102015109969A1 (de) 2014-06-20 2015-06-22 Replizieren von Logikblöcken zum Ermöglichen eines erhöhten Durchsatzes

Country Status (4)

Country Link
US (2) US11709682B2 (de)
CN (3) CN105302523A (de)
DE (1) DE102015109969A1 (de)
GB (1) GB2527367B (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9652418B2 (en) 2014-06-30 2017-05-16 Intel Corporation High throughput register file memory with pipeline of combinational logic
CN105468335B (zh) * 2015-11-24 2017-04-12 中国科学院计算技术研究所 流水级运算装置、数据处理方法及片上网络芯片
CN106484564B (zh) * 2016-09-18 2020-03-31 上海尚毅测控技术有限公司 一种采集数据存储方法
GB2577619B (en) * 2018-04-05 2021-01-06 Imagination Tech Ltd Texture filtering with dynamic scheduling
CN110764823B (zh) * 2019-09-02 2021-11-16 芯创智(北京)微电子有限公司 一种指令流水线的回路控制系统及方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5774080A (en) * 1994-12-15 1998-06-30 Analog Devices, Incorporated Reduced transistor-count data storage and multiplexing system
US6614371B2 (en) * 2001-07-19 2003-09-02 Broadcom Corporation Synchronous data serialization circuit
US20050097620A1 (en) * 2003-10-30 2005-05-05 Honeywell International Inc. Architecture for multi-channel video processing
CA2544063C (en) * 2003-11-13 2013-09-10 Commvault Systems, Inc. System and method for combining data streams in pilelined storage operations in a storage network
JP4546775B2 (ja) * 2004-06-30 2010-09-15 富士通株式会社 時分割多重処理可能なリコンフィギュラブル回路
US7526583B2 (en) * 2005-06-23 2009-04-28 International Business Machines Corporation Method and apparatus to launch write queue read data in a microprocessor recovery unit
US7840001B2 (en) * 2005-11-04 2010-11-23 Arm Limited Data processing apparatus

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C. E. Leiserson und J. B. Saxe in "Retiming Synchronous Circuitry" vorgeschlagene, veröffentlicht in Algorithmica, 1991

Also Published As

Publication number Publication date
CN204790975U (zh) 2015-11-18
US11709682B2 (en) 2023-07-25
US20150370574A1 (en) 2015-12-24
GB2527367B (en) 2017-01-18
GB2527367A (en) 2015-12-23
US20230325195A1 (en) 2023-10-12
CN105302523A (zh) 2016-02-03
GB201411052D0 (en) 2014-08-06
CN114924796A (zh) 2022-08-19

Similar Documents

Publication Publication Date Title
DE102011081585B4 (de) Prozessorarchitektur mit erhöhter Effizienz
DE102015109969A1 (de) Replizieren von Logikblöcken zum Ermöglichen eines erhöhten Durchsatzes
DE19914210B4 (de) Verfahren und Prozessor für eine gestaffelte Ausführung einer Anweisung
DE69827589T2 (de) Konfigurierbare Verarbeitungsanordnung und Verfahren zur Benutzung dieser Anordnung, um eine Zentraleinheit aufzubauen
DE102015111333A1 (de) Betreiben eines 32-bit betriebssystems auf einer 64-bit maschine
DE69933088T2 (de) Vliw-verarbeiter verarbeitet befehle von verschiedenen breiten
DE102015112202A1 (de) Kombinieren von Pfaden
DE102013111605A1 (de) Reduzierung des Leistungsverbrauchs in einer fusionierten Multiplizier-Addier-(FMA)-Einheit in Reaktion auf Eingangsdatenwerte
DE102018130441A1 (de) Einrichtung, Verfahren und Systeme mit konfigurierbarem räumlichem Beschleuniger
DE102013014169B4 (de) Dynamisch grössenveränderbare Zirkularpuffer
DE19914617C2 (de) Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten
DE112011103211T5 (de) Auf einem Halbleiterchip implementierte vektorlogische Reduktionsoperation
DE112016001836T5 (de) Energieeffiziente Prozessorkernarchitektur für Bildprozessoren
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102014003434A1 (de) Vorhersage indirekter Verzweigungen
DE112013005236T5 (de) Verfahren und Vorrichtung für Integralbild-Berechnungsbefehle
DE112013006309T5 (de) Funktionseinheit mit Baumstruktur zur Unterstützung eines Vektorsortieralgorithmus und anderer Algorithmen
DE102015101414A1 (de) Verbesserter Rücksprungstapelpuffer
DE112012003864T5 (de) Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112019000676T5 (de) Zentraler scheduler und anweisungszuteiler für einen neuronalen inferenzprozessor
DE112005003130B4 (de) Verfahren und Vorrichtung zum Bewerten von Flag-Registern in einer Einzelbefehl-Mehrdaten-Ausführungsmaschine
DE112020005987T5 (de) Setzen von prüfpunkten in akkumulatorregister-ergebnissen in einem mikroprozessor
DE112016005552T5 (de) Schieberegister mit verringerter Verdrahtungskomplexität

Legal Events

Date Code Title Description
R082 Change of representative

Representative=s name: GLOBAL IP EUROPE PATENTANWALTSKANZLEI, DE

R012 Request for examination validly filed