DE69936952T2 - Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen - Google Patents

Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen Download PDF

Info

Publication number
DE69936952T2
DE69936952T2 DE69936952T DE69936952T DE69936952T2 DE 69936952 T2 DE69936952 T2 DE 69936952T2 DE 69936952 T DE69936952 T DE 69936952T DE 69936952 T DE69936952 T DE 69936952T DE 69936952 T2 DE69936952 T2 DE 69936952T2
Authority
DE
Germany
Prior art keywords
loop
processor
prologue
pipeline
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69936952T
Other languages
English (en)
Other versions
DE69936952D1 (de
Inventor
Richard H. Stafford Scales
Natarajan Houston Seshan
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.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
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 Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of DE69936952D1 publication Critical patent/DE69936952D1/de
Application granted granted Critical
Publication of DE69936952T2 publication Critical patent/DE69936952T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

  • GEBIET DER ERFINDUNG
  • Die vorliegende Erfindung betrifft im Allgemeinen den Betrieb von Prozessoren und betrifft insbesondere Pipeline-Mikroprozessoren und Verfahren, die für derartige Mikroprozessoren verwendbar sind, um Software-Pipeline-Schleifen auszuführen.
  • HINTERGRUND DER ERFINDUNG
  • Ein Mikroprozessor ist eine Schaltung, die die Befehlsbearbeitung sowie arithmetische und logische Operationen eines Computers in einem einzigen Chip kombiniert. Ein digitaler Signalprozessor (DSP) ist ein Mikroprozessor, der optimiert ist, um große Datenvolumina effizient zu bearbeiten. Derartige Prozessoren sind für den Betrieb vieler heutiger elektronischer Produkte, wie z. B. Hochgeschwindigkeits-Modems, Plattenlaufwerke mit hoher Dichte, digitale Zellulartelephone und komplexe Kraftfahrzeugsysteme, zentral, wobei sie eine breite Vielfalt anderer digitaler Systeme in der Zukunft ermöglichen werden. Die den DSPs in diesen Umgebungen auferlegten Anforderungen wachsen fortgesetzt, da die Verbraucher eine vergrößerte Leistung von ihren digitalen Produkten verlangen.
  • Die Entwickler waren bei der Erhöhung der Leistung von DSPs im Allgemeinen durch Erhöhung der Taktfrequenzen, durch das Entfernen von architektonischen Engpässen bei der DSP-Schaltungskonstruktion, durch das Aufnehmen mehrerer Ausführungseinheiten in eine einzige Prozessorschaltung und durch das Entwickeln von Optimierungskompilierern, die die durch den Prozessor auszuführenden Operationen in einer effizienten Weise planen, erfolgreich. Da weitere Vergrößerungen der Taktfrequenz schwieriger zu erreichen sind, haben die Entwickler den Prozessor, der mehrere Ausführungseinheiten enthält, als ein Mittel erfasst, um eine verbesserte DSP-Leistung zu erreichen. 1 zeigt z. B. einen Blockschaltplan einer DSP-Ausführungseinheits- und Registerstruktur mit acht Ausführungseinheiten L1, S1, M1, D1, L2, S2, M2 und D2. Diese Ausführungseinheiten arbeiten parallel, um mehrere Operationen, wie z. B. Addition, Multiplikation, Adressierung, Logikfunktionen und Datenspeicherung und -wiedergewinnung, gleichzeitig auszuführen.
  • Theoretisch ist die Leistung eines Prozessors, der mehrere Ausführungseinheiten enthält, proportional zur Anzahl der verfügbaren Ausführungseinheiten. Die Verwendung dieser Leistungsvorteile hängt jedoch von der effektiven Planung der Operationen ab, so dass die meisten der Ausführungseinheiten eine Aufgabe besitzen, die während jedes Taktzyklus auszuführen ist. Die effiziente Planung ist für Schleifenbefehle besonders wichtig, weil in einer typischen Laufzeitanwendung der Prozessor die Mehrzahl seiner Zeit bei der Schleifenausführung verbringt. Eine effiziente Art, in der Schleifenbefehle angeordnet werden können, um mehrere Ausführungseinheiten auszunutzen, besteht in einer Software-Pipeline-Schleife. In einer herkömmlichen skalaren Schleife werden alle Befehle für eine einzige Iteration ausgeführt, bevor irgendwelche Befehle für die folgenden Iterationen ausgeführt werden. In einer Software-Pipeline-Schleife wird die Reihenfolge der Operationen neu geplant, so dass eine oder mehrere Iterationen in der ursprünglichen Schleife die Ausführung beginnen, bevor die vorhergehende Iteration abgeschlossen worden ist. In 2a ist eine einfache Schleife gezeigt, die 7 Iterationen der Operationen A, B und C enthält. 2b stellt einen alternativen Ausführungsplan für die Schleife nach 2a dar, wobei in jedem Taktzyklus eine neue Iteration der ursprünglichen Schleife begonnen wird. Für die Taktzyklen I3–I7 wird in diesem Plan in jedem Taktzyklus der gleiche Befehl (An, Bn-1, Cn-2) ausgeführt; falls mehrere Ausführungseinheiten verfügbar sind, um diese Operationen parallel auszuführen, kann der Code umstrukturiert werden, um diesen wiederholten Befehl in einer Schleife auszuführen. Das sich wiederholende Muster von A, B, C (zusammen mit den Schleifensteuerungsoperationen) bildet folglich den Schleifen-Kern einer neuen Software-Pipeline-Schleife, die die Befehle in den Taktzyklen I3–I7 in 5 Schleifen ausführt. 2c stellt eine derartige Schleife dar. Die in den Taktzyklen I1 und I2 nach 2b ausgeführten Befehle müssen immer noch zuerst ausgeführt werden, um die Software-Pipeline-Schleife richtig zu "füllen"; diese Befehle werden als der Schleifen-Prolog bezeichnet. Desgleichen müssen die bei den Taktzyklen I8 und I9 nach 2b ausgeführten Befehle immer noch ausgeführt werden, um die Software-Pipeline richtig zu "leeren"; diese Befehle werden als der Schleifen-Epilog bezeichnet (es wird angegeben, dass in vielen Situationen der Schleifenepilog durch eine Technik gelöscht werden kann, die als spekulative Ausführung bekannt ist).
  • Das einfache Beispiel nach den 2a2c veranschaulicht die Grundprinzipien der Software-Pipeline, andere Überlegungen, wie z. B. Abhängigkeiten und Konflikte, können aber eine spezielle Planungslösung erzwingen. Für eine ausführlichere Erklärung der Software-Pipeline siehe Vicki H, Allen, Software Pipelining, 27 ACM Computing Surveys, 367, (1995).
  • Der Aufsatz 'Code Generation Schema for Moduln Scheduled Loops' von Rau Schlansker und Tirumalai vom 25th Annual International Symposium an Microarchitecture, veröffentlicht in MICRO 25, SIGMICRO Newsletter, Dezember 1992, offenbart die Software-Pipeline als eine wichtige Befehlsplanungstechnik, um aufeinanderfolgende Iterationen von Schleifen effektiv zu überlappen und sie parallel auszuführen. Die Moduln-Planung ist ein Zugang zum Erzeugen derartiger Pläne. Der Aufsatz spricht ein Problem an, das vorher wenig Beachtung erfahren hat, das aber in seiner Komplexität nichttrivial ist: die Aufgabe, richtigen Hochleistungscode zu erzeugen, sobald der Moduln-Plan erzeugt worden ist, wobei die Natur der Schleife und die Registerzuweisungsstrategie, die verwendet wird, zu berücksichtigen sind. Der Aufsatz untersucht dieses Problem sowohl innerhalb als auch außerhalb der Hardware-Merkmale, die spezifisch auf die Unterstützung der Modulo-Planung gerichtet sind.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Ein Nachteil der Software-Pipeline ist der Bedarf an einem spezialisierten Schleifenprolog für jede Schleife. Der Schleifenprolog bringt explizit den Beginn der ersten mehreren Iterationen einer Pipeline in eine Reihenfolge, wobei er bei jedem Taktzyklus Befehle hinzufügt, bis in den stationären Zustand des Schleifenkerns eingetreten werden kann (dies wird im Allgemeinen als das "Füllen" der Pipeline bezeichnet). Der stationäre Zustand der Operation wird erreicht, sobald jeder Befehl im Schleifenkern gültige Operanden besitzt, falls der Kern ausgeführt wird. Als Faustregel kann der Schleifenkern in einem stationären Zustand nach k = l – m Taktzyklen ausgeführt werden, wobei l die Anzahl der Taktzyklen repräsentiert, die erforderlich ist, um eine Iteration der Pipeline-Schleife abzuschließen, während m die Anzahl der in einer Iteration des Schleifenkerns ent haltenen Taktzyklen repräsentiert (diese Formel muss im Allgemeinen modifiziert werden, falls der Kern entrollt ist).
  • Anhand dieser Beziehung kann erkannt werden, dass, wenn die kumulative Pipeline-Verzögerung, die durch eine einzige Iteration einer Pipeline-Schleife erforderlich ist, zunimmt, gewöhnlich entsprechende Zunahmen der Schleifenprologlänge beobachtet werden. In einigen Fällen kann der zum Füllen der Pipeline erforderliche Schleifenprologcode das Mehrfache der Größe des Schleifenkerncodes betragen. Da die Codegröße ein bestimmender Faktor bei der Ausführungsgeschwindigkeit sein kann (kürzere Programme können im Allgemeinen in größerem Umfang als längere Programme einen Programmspeicher innerhalb des Chips verwenden), können lange Schleifenprologe für die Programmausführungsgeschwindigkeit nachteilig sein.
  • Die vorliegende Offenbarung versucht, die Verringerung der Codegröße durch Verringerung oder Eliminierung wenigstens eines Teils des Schleifenprologs, der durch die Software-Pipelines des Standes der Technik erforderlich ist, zu lehren. Diese Offenbarung lehrt, dass dies durch die "Selbst-Vorbereitung" erreicht werden kann, d. h., der Prozessor führt den Schleifenkern für zusätzliche Iterationen aus, statt einen separaten Prologcode auszuführen. Selbstverständlich entfernt die Verringerung oder Eliminierung der zum Füllen der Pipeline notwendigen Befehle aus dem Prolog nicht die Notwendigkeit der Befehle selbst – es wird jedoch hierin erkannt, dass diese Befehle im Schleifenkörper wiederholt werden und dort ausgeführt werden können.
  • Ein Problem bei der Verwendung der Schleifenkörperbefehle, um die Schleife vorzubereiten, besteht darin, dass viele Schleifenbefehle ungültige Operanden besitzen, falls die Schleife ohne einen Prolog ausgeführt wird – folglich beinhaltet die Erfindung, dass eine oder mehrere Schleifenoperationen im stationären Zustand vorzeitig ausgeführt werden können, d. h., bevor die Pipeline den stationären Zustand erreicht, während die Schleife "sich selbst vorbereitet". Für den Zweck dieser Offenbarung wird eine Operation vorzeitig ausgeführt, falls gültige Daten, die notwendig sind, um die Operation im stationären Zustand der Operation auszuführen, durch die Pipeline noch nicht verfügbar sind. Weil vorzeitige Operationen typischerweise sinnlose Ergebnisse erzeugen und potentiell Ergebnisse erzeugen, die für das endgültige Schleifenergebnis schädlich sind, lehrt die vorliegende Offenbarung mehrere Verfahren, um zu verhindern, dass vorzeitige Schleifenoperationen das gewünschte Schleifenergebnis ändern. Besondere Aspekte der Erfindung sind in den unabhängigen Ansprüchen dargelegt.
  • In einem Aspekt schafft eine Ausführungsform der vorliegenden Erfindung ein Verfahren zum Betreiben eines Prozessors in einer Software-Pipeline-Schleife, das die Notwendigkeit für wenigstens einen Teil eines Schleifenprologs verringert oder eliminiert. Im Allgemeinen umfasst dieses Verfahren die Ablaufplanung des Prozessors durch eine gewünschte Anzahl von Iterationen des Software-Pipeline-Schleifenkerns. Dieses Verfahren umfasst jedoch ferner die Ablaufplanung von wenigstens einer zusätzlichen Iteration des Software-Pipeline-Schleifenkerns durch den Prozessor, bevor die Pipeline den stationären Zustand der Operation erreicht, während die Schleifenergebnisse von den schädlichen Wirkungen der zusätzlichen Iteration isoliert werden. Die zusätzliche Iteration kann folglich vorteilhaft verwendet werden, um einen Teil des Schleifenprologs zu ersetzen, was typischerweise zu einer kürzeren Codegröße führt.
  • Es werden mehrere allgemeine Verfahren zum Isolieren der Schleifenergebnisse von den schädlichen Wirkungen der zusätzlichen Iterationen offenbart. Ein erstes Verfahren ist die Ausgangsfeld-Überzuweisung – ein Ausgangsfeld wird mit zusätzlichen benachbarten Speicherstellen aufgefüllt, so dass vorzeitige Speicheroperationen eine (potentiell sinnlose) Ausgabe in gültige Speicherstellen schreiben. Ein zweites Verfahren ist die Registervoreinstellung – ein durch einen vorzeitig ausgeführten Befehl verwendetes Register wird so voreingestellt, dass die vorzeitige Ausführung des Befehls ein für die Schleifenergebnisse unschädliches Ergebnis erzeugt. Ein drittes Verfahren ist die Befehlskonditionierung – ein Kernbefehl, der andernfalls vorzeitig ausgeführt werden würde, wird in einem Zähler konditioniert, der die Kerniterationen verfolgt, so dass die Ausführung des Befehls während der Schleifenvorbereitungs-Kerniterationen verhindert wird. Es können außerdem Kombinationen dieser Verfahren verwendet werden.
  • In einem verwandten Aspekt der Erfindung wird ein Verfahren zur Neuplanung der Ausführung einer Software-Pipeline-Schleife geschaffen. Dieses Verfahren umfasst das Konstruieren eines Schleifenkerns, der einen Schleifenzähler besitzt; das Einstellen des Anfangswertes des Schleifenzählers, so dass wenigstens eine zusätzliche Iteration der Schleife ausgeführt wird; das Setzen des Schleifenkerns in eine Ausführungsreihenfolge, so dass er die Ausführung beginnt, bevor die Pipeline vollständig initialisiert ist; das Bestimmen, welche Ausführungseinheiten im Ergebnis Pipeline-Befehle empfangen, bevor sie gültige Pipeline-Daten empfangen; und das Isolieren der Schleifenergebnisse von den schädlichen Wirkungen derartiger Befehle.
  • KURZBESCHREIBUNG DER ZEICHNUNG
  • Die Ausführungsformen gemäß der Erfindung werden nun lediglich beispielhaft und unter Bezugnahme auf die beigefügte Zeichnung beschrieben, worin:
  • 1 ein Blockschaltplan ist, der die Ausführungseinheiten und Register eines Prozessors, der mehrere Ausführungseinheiten enthält, darstellt;
  • 2a eine einfache skalare Schleife von Computerbefehlen darstellt;
  • 2b und 2c einen alternativen Ausführungsplan für die skalare Schleife nach 2a bzw. eine neue Software-Pipeline-Schleife basierend auf diesem Ausführungsplan darstellen; und
  • 3a, 3b, 3c, 3d, 3e und 3f verschiedene neugeplante Schleifen gemäß den Ausführungsformen der vorliegenden Erfindung veranschaulichen.
  • AUSFÜHRLICHE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORMEN
  • Hierin sind mehrere veranschaulichende Ausführungsformen gemäß der vorliegenden Erfindung beschrieben. Obwohl geglaubt wird, dass die vorliegenden Lehren im Zusammenhang mit praktisch jedem Prozessor, der mehrere Ausführungseinheiten besitzt, verwendet werden können, sind zum Zweck der Veranschaulichung die ausführlichen Ausführungsformen unter Bezugnahme auf eine spezifische Prozessorfamilie, die Texas Instruments TMS320C62xx, beschrieben. Die Durchschnittsfachleute auf dem relevanten Gebiet sollten die folgende Beschreibung ausreichend im Einzelnen verstehen, um ihnen zu ermöglichen, die Erfindung zu reproduzieren; für spezifische Daten, die mit der Prozessorarchitektur, dem Befehlssatz und dem Betrieb in Beziehung stehen, wird der interessierte Leser auf Texas Instruments TMS320C62xx CPU and Instruction Set Reference Guide (1997) und Texas Instruments TMS320C62xx Programmer's Guide (1997) verwiesen, die durch Literaturhinweis hierin eingefügt sind.
  • Unter abermaliger Bezugnahme auf die Beispiele nach den 2a2c werden zuerst die Ausführungsformen der Erfindung konzeptionell erklärt. In einer ersten Ausführungsform, die in 3a gezeigt ist, wird der Prolog nach 2c vollständig eliminiert, indem der Schleifenkern zweimal zusätzlich ausgeführt wird und die Befehlsindizes entsprechend eingestellt werden. Es kann leicht beobachtet werden, dass ein Prozessor, der die Schleife nach 3a ausführt, alle Operationen der ursprünglichen skalaren Schleife nach 2a ausführt. Es wird jedoch angegeben, dass, wenn ein Prozessor die Schleife nach 3a ausführt, mehrere indexierte Operationen ausgeführt werden, die in der ursprünglichen skalaren Schleife nach 2a nicht vorhanden sind, nämlich B0, C-1 und C0. Diese Ausführungsform nimmt an, dass die Ausführung derartiger Befehle unschädlich ist. Falls z. B. der Befehl B eine mathematische Operation ausführt und der Befehl C das Ergebnis von B in einem Feld a[1:7] speichert, könnte das Feld a statt dessen als a[–1:7] zugeordnet sein (oder es könnte ein äquivalentes Indexierungsschema mit anderen Endpunkten verwendet werden). Obwohl die durch die neue Schleife an den Stellen a[-1] und a[0] gespeicherten Werte sinnlos sein würden, weil für diese Stellen niemals gültige Operanden verwendet werden, würden diese Werte für das in a[1:7] gespeicherte gewünschte Ergebnis unschädlich sein.
  • Eine zweite Ausführungsform gemäß der Erfindung ist in 3b gezeigt. Diese Ausführungsform nimmt an, dass die vorzeitige Ausführung der Befehle B und C unerwünscht ist, dass aber der Prozessor die Befehle B und C ohne Geschwindigkeitsverlust bedingt ausführen kann. Folglich wird beim erstmaligen Durchgang durch die Schleife nach 3b (i = 1) weder B noch C ausgeführt, während beim zweiten Durchgang durch die Schleife (i = 2) C nicht ausgeführt wird.
  • Es wird angegeben, dass die erste und die zweite Ausführungsform außerdem kombiniert werden können, um eine noch weitere Ausführungsform zu bilden. Wie in 3c gezeigt ist, ist die vorzeitige Ausführung von B erlaubt und wird C bedingt ausgeführt. Dies kann z. B. nützlich sein, falls B ein unschädliches Zwischenergebnis erzeugt und C in den Speicher schreibt.
  • In 3d ist eine weitere Ausführungsform gezeigt. In dieser Ausführungsform ist die vorzeitige Ausführung von B und C erlaubt, aber der Anfangswert ihrer Operanden ist so eingestellt, um ein unschädliches Ergebnis zu erzeugen. Ein Register R1 wird z. B. vor der Schleifenausführung auf einen konstanten Wert c gesetzt. Falls B R1 verwendet, z. B. als einen Operanden in einer Multiplikationsoperation, und C das Ergebnis von B akkumuliert, stellt das Setzen von R1 auf einen konstanten Wert von 0 sicher, dass die vorzeitigen Operationen das akkumulierte Ergebnis nicht beeinflussen. Obwohl dieses Verfahren einen oder mehrere Initialisierungsbefehle erfordert, die durch den Zugang des Standes der Technik nicht benötigt werden, führt es in vielen Fällen dennoch zu einer Codegröße, die kleiner als der Prologzugang des Standes der Technik ist.
  • Zusätzlich zu den Kombinationen der Verfahren der früheren Ausführungsformen erfordert eine Ausführungsform nicht notwendigerweise, dass ein herkömmlicher Prolog völlig eliminiert wird. Es ist hierin erkannt worden, dass Prologe im Allgemeinen bodenlastig sind, d. h., wie die Pipeline gefüllt wird, werden bei jedem Taktzyklus mehr Prologbefehle ausgeführt. Folglich kann in einigen Fällen der maximale Vorteil erreicht werden, indem nur der letztere Teil eines Prologs eliminiert wird. 3e stellt eine Ausführungsform dar, in der A1 in einem Prolog ausgeführt wird, aber die Prologbefehle A1, B1 nach 2c eliminiert sind. In dieser Schleife ist die einzige vorzeitige Operation, die während der Ausführung auftritt, C0, wobei immer noch zwei Drittel der Prologbefehle eliminiert worden sind.
  • Die Ausführungsformen der vorliegenden Erfindung können außerdem in Kombination mit der spekulativen Ausführung verwendet werden, um die Codegröße weiter zu verringern. Wie vorher erwähnt worden ist, verringert die spekulative Ausführung die Codegröße durch Elimination des Software-Pipeline-Schleifenepilogs. Die in 3f dargestellte Software-Pipeline-Schleifenausführungsform veranschaulicht diese Idee: die Schleife wird neunmal ausgeführt, so dass der Befehl A bei den Iterationen 8 und 9 über den Iterationsbereich nach 2a hinaus ausgeführt wird, während B bei der Iteration 9 über diesen Bereich hinaus ausgeführt wird. Ungeachtet der zusätzlichen Iterationen besitzt diese Schleife die kleinste Codegröße und sollte nicht mehr Taktzyklen als die Schleife nach 2c erfordern.
  • Nun werden Ausführungsformen gemäß der Erfindung beschrieben, die in einem Prozessor mit acht Ausführungseinheiten arbeiten, wie z. B. jenem, der in 1 dargestellt ist, z. B. dem TMS320C6xx-Prozessor. Die Beispiele im Folgenden implementieren ein Software-Pipeline-Skalarprodukt von zwei Feldern a[i] und b[i] für i = 600 (die Ausführungsformen im Folgenden schließen jedoch mehr als eine Iteration pro Schleife ab). Obwohl die Komplexität einer Software-Pipeline-Schleife, die von den Ausführungsformen der vorliegenden Erfindung profitiert, viel größer als die Komplexität eines Skalarprodukts sein kann, ist diese Funktion wegen ihrer Einfachheit gewählt worden, so dass die Aspekte der Erfindung in den Beispielen leicht erkannt werden können.
  • Das Vergleichscodebeispiel 1 im Folgenden veranschaulicht eine einfache Software-Pipeline-Schleifenimplementierung des Skalarprodukts. Diese Implementierung umfasst einen Prolog und einen Einbefehl-Schleifenkern, der Operationen in allen acht Prozessoren ausführt (das ||-Symbol gibt Operationen an, die mit einer unmittelbar vorhergehenden Operation parallel ausgeführt werden). Es wird angegeben, dass diese Implementierung die spekulative Ausführung verwendet und folglich keinen Schleifenepilog enthält. Weil die Multiplikations(MPY- und MPYH-), die Verzweigungs-(B-) und die Ladeoperationen (LDW-Operationen) in dieser Schleife alle mit Verzögerungsschlitzen arbeiten, werden die Register mehrfach zugewiesen. Diese Implementierung (und die folgenden Implementierungen) nehmen an, dass die zu multiplizierenden Felder groß genug sind, damit der Schleifenzähler im Prolog selbst nicht überprüft werden muss. Vergleichscodebeispiel 1
    Figure 00100001
    Figure 00110001
  • Das obige Codebeispiel erfordert im Gegensatz zum folgenden Beispiel 1 gemäß den vorliegenden Lehren, das nur 12 Prologbefehle und 8 Kernbefehle erfordert, 26 Prologbefehle und 8 Kernbefehle. Obwohl mehr als die Hälfte der Prologbefehle im Beispiel 1 eliminiert worden ist, ist in dieser Ausführungsform immer noch ein 5-Zyklen-Prolog erforderlich, in erster Linie infolge der 5-Zyklen- Verzweigungslatenz und des Einzyklus-Schleifenkörpers – um zu verhindern, dass die Ausführungsreihenfolge aufgrund der Verzweigungslatenz durch die Schleife fällt, kann in den Einzyklus-Schleifenkörper nicht eingetreten werden, bis die erste Verzweigung nahe bevorsteht. Wie im Beispiel 2 gezeigt wird, können längere Schleifenkörper erlauben, dass einige oder alle dieser Verzweigungen in die Schleife selbst aufgenommen werden. Es sollte ferner angegeben werden, dass der Schleifenzähler um sechs nach oben eingestellt worden ist, da alle Landevorgänge nun innerhalb des Schleifenkörpers auftreten. Beispiel 1
    Figure 00120001
    Figure 00130001
  • Das Beispiel 1 veranschaulicht außerdem ein Verfahren, um die schädlichen Wirkungen der Elimination des Prologs zu vermeiden. Die Ausführungsform enthält Einstellungsbefehle, um die durch die Multiplikationsoperation (die Register A2 und B2) und die Akkumulationsoperation (die Register A6 und B6) der Skalarproduktschleife verwendeten Register auf null zu setzen. Obwohl während der ersten fünf Schleifeniterationen keine gültigen Daten aus dem Speicher geladen werden, ist die Ausführung der Multiplikations- und Akkumulationsoperationen unschädlich, weil ihre Operandenregister auf null gesetzt sind.
  • Das Beispiel 2 zeigt eine alternative Ausführungsform für eine sich selbst vorbereitende Skalarproduktschleife. Diese Schleife erfordert im Gegensatz zu 12 Prologbefehlen für das Beispiel 1 nur 6 Prologbefehle, aber der Schleifenkörper ist von 8 auf 15 Befehle größer geworden (die Gesamtzahl der Befehle beträgt 21, nur einer mehr als die Gesamtsumme für das Beispiel 1). Der Grund für die Zunahme der Codegröße des Schleifenkörpers wird in Kürze offensichtlich. Beispiel 2
    Figure 00130002
    Figure 00140001
  • Das Beispiel 2 unterscheidet sich vom Beispiel 1 insofern, als keine Anstrengungen unternommen werden, um die Inhalte der Register voreinzustellen, die vorzeitig verwendet werden. Stattdessen wird ein bedingtes Register (A0) auf einen von null verschiedenen Countdown-Wert initialisiert, wobei die Akkumulationsoperationen beim Register A0, das einen Wert von null besitzt, konditioniert werden. Zum Schleifenkern wird ein Befehl hinzugefügt, um dieses Register zu dekrementieren, bis es einen Wert von null erreicht. Folglich ist dieses Register ein "Pipeline-Aufwärts"-Zähler; er zählt die Iterationen durch die Schleife, bis sich die Schleife selbst vorbereitet hat. In dieser speziellen Ausführungsform wird der Zähler bei null eingefroren, sobald die Schleife vorbereitet ist, was die Akkumulationsoperation für alle weiteren Kerniterationen ermöglicht.
  • Das Beispiel 2 besitzt mehrere Anforderungen, die bestimmen können, ob es in einem gegebenen Fall eine effektive Alternative ist. Zuerst erfordert dieser Zugang im Allgemeinen, dass ein Register für den "Pipeline-Aufwärts"-Zähler während der Dauer der Schleifenausführung reserviert ist. Falls der Registerdruck hoch ist, kann dies nicht ausführbar sein. Zweitens erfordert dieser Zugang im Allgemeinen, dass ein Ausführungsschlitz im Schleifenkörper verfügbar ist, um den Pipeline-Aufwärts-Zähler zu dekrementieren. Falls sich alle Arithmetikeinheiten in Gebrauch befinden, kann dieses Verfahren eine Erweiterung des Schleifenkörpers erfordern. Dies ist im Beispiel 2 der Fall. Die Schleife ist entrollt worden, um zweimal so viele Iterationen pro Schleife auszuführen, so dass ein Ausführungsschlitz verfügbar geworden ist, um den Zähler zu dekrementieren. Falls die Befehle in einem gegebenen Prozessor auf einen von null verschiedenen Wert konditioniert werden können, könnte selbstverständlich der Schleifenzähler selbst verwendet werden, um bei Operationen "den Schalter umzudrehen", wie ihre Operanden gültig werden.
  • Wie aus den obigen Beispielen erkannt werden kann, können durch die Verwendung der vorliegenden Lehren signifikante Codegrößeneinsparungen verwirklicht werden. Ausschließlich jener Befehle, die für die Initialisierung in jeder Skalarproduktimplementierung erforderlich sind (d. h. die Schleifenzähler- und Akkumulatorinitialisierung), erfordert das Vergleichscodebeispiel 1 31 Befehle, erfordert das Beispiel 1 17 Befehle und erfordert das Beispiel 2 18 Befehle. Für die Skalarproduktimplementierung des Vergleichscodebeispiels 1 verringern die veranschaulichten Ausführungsformen die für die neu planbaren Operationen erforderliche Codegröße um 42 % bis 45 %. Der hauptsächliche Preis für diese Verringerung ist im Allgemeinen eine leichte Zunahme der Anzahl der Taktzyklen, die für die Schleifenausführung erforderlich ist, obwohl dieser Preis minimal sein kann, falls die Schleife eine signifikante Parameterinitialisierung erfordert, so dass die Verzweigungen parallel mit der Parameterinitialisierung früher begonnen werden können. Die Codegrößenverringerung erlaubt, dass mehr Code in einem Speicher innerhalb des Chips gehalten wird, so dass sogar die Eliminierung von einem Holvorgang für einen Befehl von außerhalb des Chips durch die vorliegende Erfindung die wenigen zusätzlichen Taktzyklen kompensieren kann, die das Verfahren während der Ausführung erfordern kann.
  • In Anbetracht der obigen Beschreibung sollten die Fachleute auf dem Gebiet der Kompilierer leicht die vorliegenden Lehren in einen automatisierten Kompilierer aufnehmen können. Ein derartiger Kompilierer sollte vorzugsweise permanente und vorübergehende Ergebnisse einer gewünschten Schleife trennen und Schritte wie z. B. jene unternehmen können, die hierin offenbart sind, um die permanenten Ergebnisse vor den Wirkungen der vorzeitigen Ausführung einiger Schleifenkörperbefehle zu schützen. Die Identifikation jener Befehle, die vorzeitig ausgeführt werden, kann im Allgemeinen unter Verwendung der Logik des Standes der Technik ausgeführt werden, die die Abhängigkeiten identifiziert (z. B. zum Erzeugen eines herkömmlichen Prologcodes). Der Kompilierer sollte vorzugsweise außerdem erkennen, dass ein Schleifenzähler eingestellt werden muss, um die Selbstvorbereitungszyklen des Schleifenkerns zu berücksichtigen, und dann den Zähler geeignet einstellen. Schließlich sollte ein derartiger Kompilierer vorzugsweise den Schleifenkern in eine Ausführungsreihenfolge setzen, so dass er die Ausführung an einem geeigneten Punkt beginnt, bevor die Pipeline vollständig initialisiert ist.
  • Obwohl die Ausführungsformen der Erfindung hierin unter Bezugnahme auf einen spezifischen Prozessor beschrieben worden sind, wird erkannt, dass ein Durchschnittsfachmann die beschriebenen Ausführungsformen leicht anpassen kann, damit sie in anderen Prozessoren, die mehrere Ausführungseinheiten enthalten, arbeiten. Ebenso ist die Verwendung des Skalarprodukts veranschaulichend und nicht einschränkend – es wird erkannt, dass die Lehren leicht mit Software-Pipeline-Schleifen im Allgemeinen praktiziert werden können. Und obwohl die bevorzugten Ausführungsformen unter Bezugnahme auf mehrere spezifische Verfahren zum Schützen der Schleifenergebnisse vor vorzeitigen Operationen beschrieben worden sind, kann ein Durchschnittsfachmann auf dem Gebiet andere ähnliche Verfahren leicht ersetzen, die auf einen spezifischen Mikroprozessor in einer Ausführungsform der Erfindung anwendbar sind. Andere offensichtliche Modifikationen werden für die Durchschnittsfachleute auf dem Gebiet beim Lesen dieser Offenbarung offensichtlich sein; es ist vorgesehen, dass dieselben in den Umfang der vorliegenden Erfindung fallen.
  • Der Umfang der vorliegenden Offenbarung enthält jedes neuartige Merkmal oder jede Kombination von Merkmalen, die hierin offenbart sind, entweder explizit oder implizit, oder jede Verallgemeinerung von ihnen, ungeachtet dessen, ob sie sich auf die beanspruchte Erfindung beziehen oder irgendeines oder alle der durch die vorliegende Erfindung angesprochenen Probleme lindern. Der Anmelder bringt hierdurch zur Kenntnis, das während der Verfolgung dieser Anmeldung oder von irgendeiner weiteren aus ihr abgeleiteten Anmeldung für derartige Merkmale neue Ansprüche formuliert werden können. Insbesondere können unter Bezugnahme auf die beigefügten Ansprüche die Merkmale der abhängigen Ansprüche mit denjenigen der unabhängigen Ansprüche kombiniert werden und können die Merkmale der entsprechenden unabhängigen Ansprüche in jeder geeigneten Weise und nicht lediglich in den spezifischen Kombinationen, die in den Ansprüchen aufgezählt sind, kombiniert werden.

Claims (2)

  1. Verfahren zum Betreiben eines Prozessors, der mehrere Ausführungseinheiten enthält, in einer Pipeline-Schleife, um ein erstes Ergebnis zu erzielen, wobei das Verfahren die folgenden Schritte umfasst: Ausführen wenigstens eines Start-Prologbefehls in dem Prozessor; unmittelbar nach dem Ausführen des wenigstens einen Prologbefehls Ausführen wenigstens einer Iteration eines Schleifenkerns in dem Prozessor, bevor der Prozessor den stationären Zustand der Pipeline-Operation erreicht; unmittelbar nach dem Ausführen wenigstens einer Iteration eines Schleifenkerns Ausführen einer ersten Anzahl von Iterationen eines Pipeline-Schleifenkerns im stationären Zustand der Pipeline-Operation in dem Prozessor; und Isolieren des ersten Ergebnisses gegenüber schädlichen Wirkungen des Ausführens wenigstens einer Iteration des Schleifenkerns, bevor der Prozessor den stationären Zustand der Pipeline-Operation erreicht; wobei die Ausführung wenigstens einer Iteration eines Schleifenkerns in dem Prozessor, bevor der Prozessor den stationären Zustand der Pipeline-Operation erreicht, wenigstens einen letzten Prologbefehl, der alle Prologbefehle enthält, die dem wenigstens einen Start-Prologbefehl folgen, ersetzt.
  2. Verfahren nach Anspruch 1, wobei das Verfahren das Inkrementieren oder Dekrementieren eines Zählers bei jeder Iteration des Schleifenkerns und das Beenden des Schleifenkerns, wenn der Zähler einen vollen Zählstand erreicht, umfasst, wobei das Verfahren ferner umfasst: Initialisieren des Zählers für den Schleifenkern mit einem Wert, der eine Anzahl von Schleifenkern-Iterationen repräsentiert, die zum Erreichen des stabilen Zustandes der Operation erforderlich sind; wobei der Isolationsschritt des bedingte Ausführen wenigstens einer Befehlsausführung in dem Schleifenkern, wenn ein Zähler einen ersten Wert erreicht, umfasst, wobei der erste Wert angibt, dass der wenigstens eine Befehl Operanden hat, die für eine gültige Pipeline-Operation verfügbar sind, wodurch eine vorzeitige Ausführung des wenigstens einen Prologbefehls verhindert wird.
DE69936952T 1998-01-28 1999-01-27 Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen Expired - Lifetime DE69936952T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US7290598P 1998-01-28 1998-01-28
US72905P 1998-01-28

Publications (2)

Publication Number Publication Date
DE69936952D1 DE69936952D1 (de) 2007-10-11
DE69936952T2 true DE69936952T2 (de) 2008-05-21

Family

ID=22110466

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69936952T Expired - Lifetime DE69936952T2 (de) 1998-01-28 1999-01-27 Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen

Country Status (3)

Country Link
US (1) US6289443B1 (de)
EP (1) EP0933703B1 (de)
DE (1) DE69936952T2 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6539541B1 (en) * 1999-08-20 2003-03-25 Intel Corporation Method of constructing and unrolling speculatively counted loops
US6754893B2 (en) * 1999-12-29 2004-06-22 Texas Instruments Incorporated Method for collapsing the prolog and epilog of software pipelined loops
US6567895B2 (en) * 2000-05-31 2003-05-20 Texas Instruments Incorporated Loop cache memory and cache controller for pipelined microprocessors
US8176108B2 (en) * 2000-06-20 2012-05-08 International Business Machines Corporation Method, apparatus and computer program product for network design and analysis
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
US7475393B2 (en) * 2003-08-29 2009-01-06 Motorola, Inc. Method and apparatus for parallel computations with incomplete input operands
US7171544B2 (en) * 2003-12-15 2007-01-30 International Business Machines Corporation Run-time parallelization of loops in computer programs by access patterns
US20090327674A1 (en) * 2008-06-27 2009-12-31 Qualcomm Incorporated Loop Control System and Method
KR101962248B1 (ko) * 2012-03-16 2019-03-27 삼성전자주식회사 재구성 가능 프로세서의 검증 지원 장치 및 방법
US9038042B2 (en) 2012-06-29 2015-05-19 Analog Devices, Inc. Staged loop instructions

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5083267A (en) * 1987-05-01 1992-01-21 Hewlett-Packard Company Horizontal computer having register multiconnect for execution of an instruction loop with recurrance
US5386562A (en) * 1992-05-13 1995-01-31 Mips Computer Systems, Inc. Circular scheduling method and apparatus for executing computer programs by moving independent instructions out of a loop
US5983253A (en) * 1995-09-05 1999-11-09 Intel Corporation Computer system for performing complex digital filters
US5835776A (en) * 1995-11-17 1998-11-10 Sun Microsystems, Inc. Method and apparatus for instruction scheduling in an optimizing compiler for minimizing overhead instructions

Also Published As

Publication number Publication date
DE69936952D1 (de) 2007-10-11
EP0933703A2 (de) 1999-08-04
US6289443B1 (en) 2001-09-11
EP0933703A3 (de) 2001-08-29
EP0933703B1 (de) 2007-08-29

Similar Documents

Publication Publication Date Title
DE69627807T2 (de) Datenprozessor zum gleichzeitigen Dataladen und Durchführung einer multiplizier-addier Operation
DE4206062C2 (de) Pipelineverarbeitung von Instruktionen
DE4217012C2 (de) Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE69722138T2 (de) Code-Optimierer für Pipeline-Rechner
EP0689694B1 (de) Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren
DE69729974T2 (de) Datenverarbeitungsschaltung, Mikrocomputer und elektronische Einrichtung
DE69635881T2 (de) VLIW-Befehlsprozessor mit variabler Wortlänge
DE3210816C2 (de)
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE3424962C2 (de)
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE19534752A1 (de) Verfahren und System zum Liefern einer Unterstützung für eine spekulative Ausführung
DE69837138T2 (de) Unterbrechbare mehrfache Ausfuehrungseinheitverarbeitung waehrend mehrfacher Zuweisung von Register verwendenden Operationen
DE69936952T2 (de) Verfahren und Vorrichtung zur Verarbeitung von Programmschleifen
DE4211245B4 (de) Prozessorsystem in Parallelverarbeitungsbauart und Verfahren zu dessen Steuerung
DE19527031A1 (de) Verbesserte Vorrichtung zum Reduzieren von Verzögerungen aufgrund von Verzweigungen
DE2424931A1 (de) Datenverarbeitungsanlage, insbesondere mikroprogramm-datenverarbeitungseinheit mit parallelen befehlsstroemen fuer mehrere ebenen von subbefehlsvorraeten
DE102019112352A1 (de) Registerdateien in einem multithread-prozessor
DE4409586C2 (de) Verfahren und Verarbeitungssystem zum Vereinfachen von Verknüpfungshardware
DE19524402C2 (de) Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge
DE19842254A1 (de) Datenverarbeitungsgerät
DE19824289C2 (de) Pipelineverarbeitungsmaschine
DE69233282T2 (de) Datenverarbeitungsvorrichtung
DE4430195B4 (de) Verfahren zur Auswertung von Booleschen Ausdrücken

Legal Events

Date Code Title Description
8381 Inventor (new situation)

Inventor name: SCALES, RICHARD H., STAFFORD, TEXAS 77477, US

Inventor name: SESHAN, NATARAJAN, HOUSTON, TEXAS 77063, US

8364 No opposition during term of opposition