-
GEBIET DER
ERFINDUNG
-
Die
vorliegende Erfindung betrifft im Allgemeinen den Betrieb von Mikroprozessoren
mit mehreren Ausführungseinheiten,
wobei sie insbesondere Verfahren betrifft, die in derartigen Mikroprozessoren
verwendbar sind, um in Reaktion auf Laufzeitbedingungen Software-Pipelineschleifen
zu verlassen und wieder in sie einzutreten.
-
HINTERGRUND
DER ERFINDUNG
-
Ein
Mikroprozessor ist eine Schaltung, die die Befehlsabwicklung, arithmetische
Operationen und logische Operationen eines Computers auf einem einzigen
Chip kombiniert. Ein digitaler Signalprozessor (DSP) ist ein Mikroprozessor,
der optimiert ist, um große
Datenvolumina effizient zu handhaben. Derartige Prozessoren sind
für den
Betrieb von vielen heutigen elektronischen Produkten zentral, die
z. B. Hochgeschwindigkeitsmodems, Plattenlaufwerke mit hoher Dichte,
digitale Zellulartelephone und komplexe Kraftfahrzeugsysteme, wobei
sie eine umfassende Vielfalt anderer digitaler Systeme in der Zukunft
ermöglichen
werden. Die an die DSPs gerichteten Ansprüche in diesen Umgebungen wachsen
fortgesetzt, wie die Verbraucher eine vergrößerte Leistung von ihren digitalen
Produkten verlangen.
-
Die
Entwickler sind bei der Vergrößerung der
Leistung von DSPs erfolgreich gewesen, indem sie im Allgemeinen
die Taktfrequenzen vergrößert, Architektur-Engpässe in der
DSP-Schaltungskonstruktion beseitigt, mehrere Ausführungseinheiten
in eine einzige Prozessorschaltung aufgenommen und Optimierungs-Kompilierer, die
die durch den Prozessor auszuführenden
Operationen in einer effizienten Weise planen, entwickelt haben.
Da weitere Zunahmen der Taktfrequenz schwieriger zu erreichen sind,
haben die Entwickler den Prozessor mit mehreren Ausführungseinheiten
als ein Mittel erfasst, um eine verbesserte DSP-Leistung zu erreichen. 1 zeigt
z. B. einen Blockschaltplan eines DSP, der acht Ausführungseinheiten
L1, S1, M1, D1, L2, S2, M2 und D2 besitzt. Diese Ausführungseinheiten
arbeiten parallel, um mehrere Operationen, wie z. B. Addition, Multiplikation,
Adressierung, Logikfunktionen und die Datenspeicherung und -wiedergewinnung, gleichzeitig
auszuführen.
-
Theoretisch
ist die Leistung eines Prozessors mit mehreren Ausführungseinheiten
proportional zur Anzahl der verfügbaren
Ausführungseinheiten.
Die Verwendung dieses Leistungsvorteils hängt jedoch von der effizienten
Planung der Operationen ab, so dass die meisten der Ausführungseinheiten
während
jedes Taktzyklus eine auszuführende
Aufgabe besitzen. Die effiziente Planung ist für Schleifenbefehle besonders
wichtig, weil in einer typischen Laufzeitanwendung der Prozessor
die Mehrheit seiner Zeit in der Schleifenausführung verwendet.
-
Eine
effektive Art, in der Schleifenbefehle angeordnet werden können, um
die mehreren Ausführungseinheiten
auszunutzen, ist eine Software-Pipelineschleife. 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-Pipelineschleife wird die Reihenfolge
der Operationen neu geplant, so dass eine oder mehrere Iterationen
der ursprünglichen
Schleife die Ausführung
beginnen, bevor die vorhergehende Iteration vollendet worden ist.
-
In 2a ist
eine einfache Schleife, die die 7 Iterationen der Operationen A,
B und C enthält,
gezeigt. 2b stellt einen alternativen
Ausführungsplan
für die
Schleife nach 2a dar, bei dem eine neue Iteration der
ursprünglichen
Schleife in jedem Taktzyklus begonnen wird. Für die Taktzyklen I3-I7 wird der gleiche Befehl (An,
Bn-1, Cn-2) in jedem
Taktzyklus in diesem Plan 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 A, B, C (zusammen mit den Schleifensteueroperationen)
bildet folglich den Schleifen-Kern
einer neuen Software-Pipelineschleife, 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
trotzdem zuerst ausgeführt
werden, um die Software-Pipelineschleife richtig zu "füllen"; diese Befehle werden als der Schleifen-Prolog
bezeichnet. Ebenso müssen
die in den Taktzyklen I8 und I9 nach 2b ausgeführten Befehle
trotzdem 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, die als spekulative Ausführung bekannt ist, gelöscht werden
kann).
-
Das
einfache Beispiel nach den 2a-2c veranschaulicht
die Grundprinzipien der Software-Pipeline, wobei jedoch andere Überlegungen,
wie z. B. Abhängigkeiten
und Konflikte, eine spezielle Planungslösung einschränken können. Für eine ausführlichere
Erklärung
der Software-Pipeline siehe Vicki N. Allan, Software Pipelining,
27 ACM Computing Surveys 367 (1995).
-
Eine
weitere im Allgemeinen bei Prozessoren mit mehreren Ausführungseinheiten
und Software-Pipelineschleifen verwendete Technik ist die Mehrfachzuweisung
von Registern. Abermals in 1 sind die
Register A0-A15 und B0-B15 mit den Ausführungseinheiten L1, S1, M1,
D1, L2, S2, M2 und D2 verbunden. Diese Register werden verwendet,
um z. B. Operanden, Ergebnisse von Operationen, Zählerwerte
und bedingte Werte während
der Ausführung
zu speichern. Typischerweise ist die Einzelzuweisung derartiger
Register bevorzugt; bei der Einzelzuweisung kann, sobald eine Ausführungseinheit
ein Register in einer Operation verwendet, dieses Register nicht
erneut verwendet werden, bis die ursprüngliche Operation abgeschlossen
ist. Bei der Mehrfachzuweisung von Registern können die Register jedoch entsprechend
den bekannten Hardware-Verzögerungen
erneut verwendet werden. Eine erste Operation kann z. B. die Ausführung in
der Einheit D1 beginnen, um einen Wert aus dem Speicher in das Register
A4 zu laden, eine Operation, die fünf Taktzyklen erfordert, um
abgeschlossen zu werden (falls eine Operation mehr als einen Taktzyklus
erfordert, um abgeschlossen zu werden, werden die zusätzlichen
Taktzyklen typischerweise als Verzögerungsschlitze bezeichnet).
Bei der Einzelzuweisung könnte
A4 während
dieser fünf
Taktzyklen für
keinen anderen Zweck verwendet werden, obwohl der vom Speicher geladene
Wert bis zum Ende des fünften
Zyklus tatsächlich
nicht im Register A4 erscheint. Bei der Mehrfachzuweisung könnte A4
während
der Verzögerungsschlitze
der Operation des Ladens vom Speicher für andere Zwecke verwendet werden,
solange wie das Register vor dem Abschluss der Ladeoperation freigegeben
wird.
-
Die
Mehrfachzuweisung von Registern ist oft in Pipelineschleifen erwünscht, wo
die Überlappung
von vielen Befehlen mit mehreren Taktzyklen, wie z. B. Ladeoperationen,
Multiplikationen und Verzweigungen, erforderlich ist. Die Einzel zuweisung
von Registern unter diesen Bedingungen kann erfordern, dass die
Parallelität
verringert wird, da einige Pläne
infolge der großen
Anzahl von Registern, die für
die Einzelzuweisung erforderlich ist, unmöglich zu implementieren sind.
Die Mehrfachzuweisung führt
unter diesen Bedingungen oft zu einem verringerten Registerdruck
und einer vergrößerten Parallelität. Der Hauptnachteil
der Mehrfachzuweisung ist, dass sie erfordert, dass die Befehle
in einer erwarteten Reihenfolge ausgeführt werden – falls einer unerwarteten
Reihenfolge der Ausführung
begegnet wird, gibt es eine hohe Möglichkeit, dass die Registerdaten
verfälscht
werden.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Besondere
und bevorzugte Aspekte der Erfindung sind in den beigefügten unabhängigen und
abhängigen
Ansprüchen
dargelegt. Der Merkmale der abhängigen
Ansprüche
können
mit denjenigen der unabhängigen
Ansprüche,
wie es geeignet ist, und in Kombinationen, die von denjenigen verschieden
sind, die explizit in den Ansprüchen
dargelegt sind, kombiniert werden.
-
Beim
Mikroprozessor-Betrieb ist es oft erwünscht, eine schnelle Reaktion
auf das Auftreten von Laufzeitbedingungen (z. B. Unterbrechungen,
Datenbedingungen oder Verarbeitungsunregelmäßigkeiten) zu erlauben. Infolge
des Zustands der Datenverfälschung,
der sich aus einer unerwarteten Ausführungsreihenfolge ergeben kann,
müssen
leider die Reaktionen auf Laufzeitbedingungen, wie z. B. Unterbrechungen,
im Allgemeinen um Codeblöcke
gesperrt sein, die die Mehrfachzuweisung von Registern verwenden.
Es ist nun erkannt worden, dass, falls ein derartiger Codeblock
eine Software-Pipelineschleife ist, die eine große Anzahl von Iterationen erfordert,
um abgeschlossen zu werden, die Zeitverzögerung beim Reagieren auf Laufzeitbedingungen,
die auf das Sperren um einen derartigen Codeblock zurückzuführen ist,
unannehmbar sein kann.
-
Im
Stand der Technik ist versucht wurden, dieses Problem unter Verwendung
von Software-Pipelineschleifen mit der Einzelzuweisung von Registern
zu lösen.
Obwohl dieser Zugang einem Mikroprozessor erlaubt, relativ schnell
auf Laufzeitbedingungen, wie z. B. Unterbrechungen, zu reagieren,
wird hierin erkannt, dass dieser Zugang oft zu einer suboptimalen
Planung für
eine Software-Pipelineschleife selbst führt. Weil die Leistung einer
Software-Pipelineschleife so ent scheidend wie die Unterbrechbarkeit
sein kann, kann der Zugang der Einzelregisterzuweisung außerdem unannehmbar
sein.
-
Im
Stand der Technik ist außerdem
versucht worden, dieses Problem durch das Hinzufügen von zustandssichernder
Hardware zu einer Prozessorarchitektur zu lösen. Diese spezialisierte Hardware
sichert den ganzen Betriebszustand des Prozessors, bevor sie auf
eine Unterbrechung reagiert, wobei sie diesen Zustand bei der Rückkehr von
der Unterbrechung wiederherstellt. Dieser Zugang kann beträchtliche
hinzugefügte Hardware-Komplexität und -Kosten
für einen
großen
Pipelineprozessor erfordern. Es ist deshalb eine Aufgabe der vorliegenden
Erfindung, den Bedarf an einer derartigen zustandssichernden Hardware
zu beseitigen.
-
Ein
Beispiel eines Verfahrens zum Betreiben eines Mikroprozessors gemäß der vorliegenden
Erfindung erlaubt sowohl die Unterbrechbarkeit als auch die effiziente
Zuweisung von Registern. Dieses Verfahren erlaubt die Mehrfachzuweisung
von Registern innerhalb von Software-Pipelineschleifen. Dieses Verfahren
erlaubt jedoch außerdem,
dass beim Auftreten einer Laufzeitbedingung derartige Schleifen
verlassen und wieder in diese Schleifen eingetreten wird. Es wird
geglaubt, dass die vorliegende Erfindung die Erste ist, die das
Verlassen und das Wiedereintreten in eine Software-Pipelineschleife
bei mehrfach zugewiesenen Registern erlaubt, ohne spezielle zustandssichernde
Hardware zu verwenden.
-
Eine
Ausführungsform
der Erfindung schafft ein Verfahren zum Betreiben eines Prozessors,
der mehrere Ausführungseinheiten
besitzt, die mit mehreren Registern in einer Datenaustauschbeziehung
stehen. Das Verfahren umfasst den Schritt des Ausführens eines
Pipelineschleifenkerns, der eine Menge von Kernbefehlen für eine erste
Vielzahl von Iterationen umfasst, wobei dieser Schleifenkern mehrere
Ausführungseinheiten
mit Mehrfachregisterzuweisungen verwendet, um ein Ausgangsergebnis
zu erzeugen. Das Verfahren umfasst ferner den Schritt des vorzeitigen
Verlassens des Pipelineschleifenkerns in Reaktion auf eine Laufzeitbedingung, so
dass wenigstens einige der Iterationen der Pipelineschleife unvollendet
verbleiben. Das Verfahren umfasst ferner (z. B. nachdem der Prozessor
irgendeine Funktion in Reaktion auf die Laufzeitbedingung ausgeführt hat)
das Ausführen
von Füllbefehlen,
um den Prozessor in einem Betriebszustand zu versetzen, der mit
jenem äquivalent
ist, der existieren würde,
wenn das Auftreten des vorzeitigen Verlassens aus der Pipelineschleife nicht
gewesen wäre.
Schließlich
umfasst das Verfahren das Wiedereintreten in den Pipelineschleifenkern
und das Fortsetzen des Ausführens
der unvollendeten Iterationen (vorzugsweise von einer weiteren Unterbrechung
abhängig).
Obwohl die Laufzeitbedingung selbst Unterschiede in der Prozessorausführung beim
Rücksprung
in die Schleife verursachen kann, ist es eine Aufgabe der Erfindung,
dass die Schritte des Verlassens des Pipelineschleifenkerns und
das Wiedereintretens in den Pipelineschleifenkern keine Unterschiede
im Ausgangsergebnis der Pipelineschleife verursachen.
-
KURZBESCHREIBUNG
DER ZEICHNUNG
-
Beispielhafte
Ausführungsformen
der Erfindung werden im Folgenden lediglich beispielhaft unter Bezugnahme
auf die beigefügte
Zeichnung beschrieben, worin:
-
1 ein
Blockschaltplan ist, der die Ausführungseinheiten und Register
eines Prozessors mit mehreren Ausführungseinheiten darstellt;
-
2a eine
einfache skalare Schleife von Computer-Befehlen darstellt; und
-
2b und 2c einen
alternativen Ausführungsplan
für die
skalare Schleife nach 2a bzw. eine neue Software-Pipelineschleife,
die auf diesem Ausführungsplan
basiert, darstellen.
-
AUSFÜHRLICHE
BESCHREIBUNG DER SPEZIELLEN AUSFÜHRUNGSFORMEN
-
Mehrere
veranschaulichende Ausführungsformen
sind hierin für
die vorliegende Erfindung beschrieben. Obwohl geglaubt wird, dass
die vorliegende Erfindung im Zusammenhang mit praktisch jedem Prozessor, der
mehrere Ausführungseinheiten
besitzt und zur Mehrfachregisterzuweisung fähig ist, verwendet werden kann,
werden für
veranschaulichende Zwecke diese Ausführungsformen unter Bezugnahme
auf eine spezifische Prozessorfamilie, die Texas Instruments TMS320C62xx,
beschrieben. Die Durchschnittsfachleute auf dem einschlägigen Gebiet
werden die folgende Beschreibung in ausreichenden Einzelheiten verstehen,
um es ihnen zu ermöglichen,
die Erfindung zu reproduzieren. Für spezifi sche Daten, die mit
der Prozessorarchitektur, dem Befehlsvorrat und dem Betrieb in Beziehung
stehen, wird der interessierte Leser auf Texas Instruments TMS320C62xx
CPU and Instruction Set Reference Guide (1997) verwiesen.
-
Für den Leser
sollten außerdem
mehrere Definitionen nützlich
sein. Eine Operation ist, wie sie hierin verwendet wird, eine durch
eine Ausführungseinheit
in einem Prozessor in einem oder mehreren Taktzyklen ausführbare Funktion.
Eine Operation während
des Ausführens
ist eine, deren Ausführung
begonnen, aber nicht vollendet worden ist. Ein Befehl ist eine Menge
von einer oder mehreren Operationen, die während desselben Taktzyklus
zu den Ausführungseinheiten
abgesendet werden. Eine Laufzeitbedingung ist, wie sie hierin verwendet
wird, ein Zustand, entweder intern oder extern zum Prozessor, der
auftreten kann, während
ein Prozessor Befehle ausführt,
wobei aber der genaue Zeitpunkt oder die genaue Häufigkeit
seines Auftretens durch den Ausführungscode
im Wesentlichen nicht vorhersagbar ist. Beispiele derartiger Bedingungen
sind Unterbrechungen, Datenbedingungen oder Nichtzähler-Registerbedingungen
(z. B. Überlauf
oder Unterlauf).
-
In
Fortsetzung der Definitionen ist ein Betriebszustand durch die Befehle,
die in allen Prozessoren zu einem gegebenen Taktzyklus ausgeführt werden,
definiert – weil
einige Befehle mehrere Taktzyklen erfordern, um abgeschlossen zu
werden, sind die Operation während
des Ausführens
außerdem
im Betriebszustand eingeschlossen. Ein äquivalenter Betriebszustand
reproduziert die Zeitsteuerung der Operationen während des Ausführens eines
ursprünglichen
Betriebszustands, obwohl sich die tatsächlichen Datenwerte infolge
der dazwischenliegenden Verarbeitung unterscheiden können. Eine
Schleife kann z. B. unterbrochen werden, wenn sie dabei ist, das
k-te Element eines Feldes zu verwenden, wobei die Unterbrechungsroutine
einen neuen Wert in das k-te Element setzen kann. Wenn der Betriebszustand
wiederhergestellt wird, ist das k-te Element immer noch das nächste zu
verwendende Element, so dass ein äquivalenter Betriebszustand
vorhanden ist, selbst wenn sich der Wert des Elements k geändert haben
kann.
-
Die
folgenden Beispiele implementieren alle die gleiche skalare Schleife,
die ein Skalarprodukt aus zwei Feldern a[i] und b[i] für i = 600
in einem Prozessor mit acht Ausführungseinheiten,
wie z. B. demjenigen, der in 1 dargestellt
ist, implementiert. Obwohl die Komplexität einer Software-Pipelineschleife,
die von der vorliegenden Erfindung profitiert, viel größer als
die eines Skalarprodukts sein kann, ist diese Funktion wegen ihrer
Einfachheit gewählt
worden, so dass die Erfindung leicht in den Beispielen erkannt werden
kann.
-
Das
Vergleichs-Codebeispiel 1 im Folgenden veranschaulicht die Implementierung
einer einfachen Software-Pipelineschleife des Skalarprodukts. Diese
Implementierung umfasst einen Prolog und einen Einzelbefehl-Schleifenkern,
der die Operationen in allen acht Prozessoren ausführt (das
Symbol || zeigt die 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 MPHY-), Verzweigungs-(B-) und Ladeoperationen
(LDW-Operationen)
in dieser Schleife alle mit Verzögerungsschlitzen
arbeiten, werden die Register mehrfach zugewiesen. Damit die Schleife
richtig arbeitet, kann sie nicht unterbrochen werden, wobei die
Unterbrechungen vor der Ausführung des
Schleifenprologs gesperrt werden. Der Hauptnachteil dieser Schleife
besteht darin, dass das Skalarprodukt nicht unterbrochen werden
kann, bevor alle Iterationen abgeschlossen sind. Die Vorteile dieser
Schleife sind, dass der Kern nur neun Register verwendet und dass
die Codegröße relativ
klein ist. Das
Vergleichs-Codebeispiel 1:
-
Das
Vergleichs-Codebeispiel 2 im Folgenden veranschaulicht eine Software-Pipelineschleifen-Implementierung
des Skalarprodukts, die eingeschränkt ist, um die Einzelzuweisung
die Register zu verwenden. Weil die Schleife die Einzelzuweisung
verwendet, ist sie unterbrechbar. Die Kernbefehle in dieser Schleife
sind jedoch "entrollt" oder kopiert, so
dass der Kern wenigstens einen Befehl enthält, der nicht in den Verzögerungsschlitzen
eines Verzweigungsbefehls ausgeführt
wird – andernfalls
würde infolge
der Hardware-Beschränkungen
eine Unterbre chung im Schleifenkern nicht bedient werden. Die Unterbrechungs-Latenzzeit
dieser Schleife beträgt
etwa 12 Zyklen. Es wird angegeben, dass zusätzlich zur größeren Codegröße diese
Implementierung 18 Register verwendet – das Doppelte der Anzahl,
die für
die oben erklärte
Mehrfachzuweisungs-Implementierung notwendig ist. Das
Vergleichs-Codebeispiel 2:
-
Das
im Beispiel 1 im Folgenden gezeigte Codebeispiel arbeitet gemäß der vorliegenden
Erfindung; folglich verwendet dieses Beispiel das Konzept der Mehrfachzuweisung
des Vergleichsbeispiels 1, es ist aber wie das Vergleichsbeispiel
2 UNTERBRECHBAR. Dieses Codebeispiel erfordert wie das Vergleichsbeispiel
1 die explizite Sperrung der Unterbrechungen während seiner Ausführung; andernfalls
könnte
die Unterbrechungsbehandlung die bekannte Ausführungsreihenfolge stören, die
für die
Mehrfachzuweisung der Register erforderlich ist. Der Schleifenkern
des Beispiels 1 prüft
jedoch das Vorhandensein von Unterbrechungen und reagiert explizit
auf Unterbrechungen. Folglich arbeitet das Beispiel 1 mit etwa der
gleichen Unterbrechungs-Latenzzeit wie das Vergleichsbeispiel 2,
12 Zyklen, wobei es anstelle der durch das Vergleichsbeispiel 2
benötigten
neun zusätzlichen
Register dennoch nur drei zusätzliche
Register benötigt,
um die Unterbrechungen zu behandeln. Beispiel
1
-
Bei
der Konstruktion einer Schleife werden verschiedene Konzepte verwendet,
wie z. B. das obige Beispiel, das gemäß der vorliegenden Erfindung
arbeitet. Ein Konzept besteht darin, dass, obwohl die bekannte Ausführungsreihenfolge
durch die asynchrone Unterbrechung nicht gestört werden kann, während die
Register mehrfach zugewiesen werden, der Kern frei ist, eine alternative
bekannte Ausführungsreihenfolge
in Reaktion auf eine Bedingung zu verfolgen, die er selbst erfasst.
Das zweite Konzept besteht darin, dass die Operationen während des
Ausführens
durch eine alternative Ausführungsreihenfolge
verbraucht werden müssen,
d. h., es sollte irgendeine Art von Unterbrechungsepilog verwendet
werden, um die Pipeline vor der Verzweigung zur Unterbrechung effizient
zu "leeren". Das letzte Konzept
besteht darin, dass die Wiederaufnahme der Schleifenausführung nach
der Unterbrechungsverarbeitung unter diesen Bedingungen die Erzeugung
eines äquivalenten
Betriebszustands erfordert, d. h., es sollte irgendeine Art von
Unterbrechungsprolog ausgeführt werden,
um die Pipe-line
zu "füllen", bevor die Kernoperation
wiederaufgenommen wird.
-
Die
alternative Ausführungsreihenfolge,
die für
die Unterbrechungsbehandlung gemäß der vorliegenden
Erfindung erforderlich ist, kann in einer Vielzahl von Arten eingeleitet
werden. Der Schleifenkern des obigen Beispiels 1 liest das Unterbrechungsmerker-Register,
wobei, falls die Unterbrechungsbits gesetzt sind, die Schleifenadresse
modifiziert wird, um anstelle zurück zur Spitze der Schleife
zu einem Unterbrechungsepilog zu verzweigen. Die Unterbrechungsbehandlung
kann außerdem
eingeleitet werden, indem der Schleifenverzweigungsbefehl am Zustand
der Unterbrechungsbits konditioniert wird, so dass die Ausführung von
Natur aus in einen Schleifenepilog fällt, falls eine Unterbrechung
angefordert wird. Dieser Epilog könnte ein herkömmlicher
Schleifenepilog (mit einigen bedingten Operationen, die das Unterbrechungs-Dienstprogramm
konfigurieren und zum Unterbrechungs-Dienstprogramm verzweigen)
oder ein spezialisierter Unterbrechungsepilog, der während der
normalen Ausführung
einer Schleife umgangen wird, die keinen herkömmlichen Epilog besitzt (z. B.
eine Schleife, die die spekulative Ausführung verwendet), sein. Andere
Verfahren des Einleitens einer alternativen Ausführungsreihenfolge, um eine
Software-Pipelineschleife zu verlassen, sind für die Durchschnittsfachleute
auf dem Gebiet beim Lesen dieser Beschreibung offensichtlich.
-
Der
Unterbrechungsepilog dient wenigstens zwei Zwecken. Zuerst sichert
er, dass die Operationen während
des Ausführens,
wie z. B. die Multiplikationen und die Ladeoperationen, in einer
deterministischen Weise abgeschlossen werden. Zweitens konfiguriert
der Epilog eine Rücksprungadresse,
die beim Rücksprung
von einer Unterbrechung das richtige erneute Füllen der Pipeline verursacht.
Vorzugsweise "leert" der Unterbrechungsepilog
außerdem
die Pipeline vollständig
unter Verwendung der Werte von den Ladeoperationen während des
Ausführens,
so dass sie nach der Unterbrechungsbehandlung nicht erneut geladen
werden müssen.
Die Vorliebe für
letzte Aufgabe beruht jedoch in erster Linie auf der Effizienz – in den
meisten Schleifen könnten
diese Werte weggeworfen und nach der Unterbrechungsbehandlung mit
der richtigen Einstellung des Schleifenzählers neu geladen werden. Ein
Grund für
das Wählen
des "Wegwerf"-Zugangs kann sein, die Unterbrechungs-Latenzzeit
noch weiter zu verringern.
-
Die
Unterbrechungs-Rücksprungsadresse
sollte auf einen Punkt zum Unterbrechungsprolog gesetzt sein, um
die richtige Wiederherstellung des Betriebszustands des Prozessors
sicherzustellen. Ein möglicher bevorzugter
Zugang besteht darin, den Unterbrechungs-Rücksprungzeiger auf die Adresse
eines separaten Unterbrechungsprologs zu setzen, der zurück zur Schleife
verzweigt. In einem besonders bevorzugten Zugang, wie er im obigen
Beispiel 1 gezeigt ist, ist der Unterbrechungsprolog tatsächlich eine
Untermenge des Schleifenprologs, so dass kein zusätzlicher
Code erforderlich ist, um den Wiedereintritt in die Schleife zu
erlauben.
-
Der
Unterbrechungsprolog sollte so konstruiert sein, dass er einen äquivalenten
Betriebszustand im Prozessor wiederherstellt, d. h. der zur einem äquivalent
ist, der in der Pipelineschleife vorhanden gewesen wäre, wäre die Unterbrechung
nicht genommen worden. Obwohl der Unterbrechungsprolog fast wie
der Schleifenprolog arbeitet, füllt
er notwendigerweise die Pipeline anstatt unter Verwendung des anfänglichen Schleifenzählerwertes
unter Verwendung des Schleifenzählerwertes,
der zum Zeitpunkt der Unterbrechung vorhanden ist. Falls der Schleifenprolog
mit allen Initialisierungsbefehlen konstruiert ist, die den Pipelinefüllbefehlen
vorangehen, wie im Beispiel 1, kann der Unterbrechungsprolog normalerweise
die völlig
gleichen Pipelinefüllbefehle
für den
Wiedereintritt ausführen.
Diese Codekonstruktion erlaubt vorteilhaft eine verringerte Codegröße.
-
Gemäß einem
Aspekt der Erfindung ist ein Verfahren, um in einer Pipelineschleife
einen Prozessor zu betreiben, der mehrere Ausführungseinheiten besitzt, die
mit mehreren Registern in einer Datenaustauschbeziehung stehen,
beschrieben worden, wobei das Verfahren die folgenden Schritte umfasst:
Ausführen
eines Pipelineschleifenkerns, der eine Menge von Kernbefehlen für eine erste
Anzahl von Iterationen umfasst, wobei der Kern mehrere Ausführungseinheiten
mit Mehrfachregisterzuweisungen verwendet, um ein Ausgangsergebnis
zu erzeugen; vorzeitiges Verlassen des Pipelineschleifenkerns in
Reaktion auf eine Laufzeitbedingung, wodurch wenigstens eine der
ersten Anzahl von Iterationen unvollendet bleibt; Ausführen einer
Menge von Füllbefehlen,
um den Prozessor in einen Betriebszustand zu versetzen, der mit
jenem äquivalent
ist, der existieren würde,
wenn das Verlassen in Reaktion auf einen Laufzeitbedingungsschritt
nicht aufgetreten wäre;
und Wiedereintreten in den Pipelineschleifenkern und Fortsetzen
des Ausführens
eines Pipelineschleifenkern-Schrittes, um dadurch das Ausgangsergebnis
ohne Veränderung
auf Grund des Schrittes des Verlassens und des Schrittes des Wiedereintretens
zu erzeugen.
-
Gemäß einem
weiteren Aspekt der Erfindung ist ein Verfahren, um in einer Pipelineschleife
einen Prozessor zu betreiben, der mehrere Ausführungseinheiten besitzt, die
mit mehreren Registern in einer Datenaustauschbeziehung stehen,
beschrieben worden, wobei das Verfahren die folgenden Schritte umfasst:
Ausführen eines
Schleifenprologs; Ausführen
eines Pipelineschleifenkerns für
eine vorgegebene Anzahl von Iterationen, wobei der Kern mehrere
Ausführungseinheiten
mit Mehrfachregisterzuweisungen verwendet, um ein Ausgangsergebnis
zu erzeugen; während
des Schleifenkerns Prüfen
des Auftretens einer Laufzeitbedingung; bei Auftreten der Laufzeitbedingung
vorzeitiges Verlassen des Pipelineschleifenkerns und Ausführen einer
Funktion in Reaktion auf das Auftreten der Laufzeitbedingung; und
Ausführen
eines Unterbrechungsprologs, dadurch Wiedereintreten in den Pipelineschleifenkern
und Fortsetzen des Ausführens
eines Kernschrittes, um dadurch das Ausgangsergebnis ohne Veränderung
auf Grund des Schrittes des Verlassens und des Schrittes des Wiedereintretens
zu erzeugen.
-
Gemäß einem
weiteren Aspekt der Erfindung ist ein Verfahren, um in einer Pipelineschleife
einen Prozessor zu betreiben, der mehrere Ausführungseinheiten, die mit mehreren
Registern in einer Datenaustauschbeziehung stehen, und maskierbare
Unterbrechungen besitzt, beschrieben worden, wobei das Verfahren
die folgenden Schritte umfasst: Maskieren der maskierbaren Unterbrechungen;
Ausführen
eines Schleifenprologs; Ausführen
eines Pipelineschleifenkerns für
eine vorgegebene Anzahl von Iterationen, wobei der Kern mehrere Ausführungseinheiten
mit Mehrfachregisterzuweisungen verwendet, um ein Ausgangsergebnis
zu erzeugen; während
des Schleifenkerns Prüfen
des Auftretens einer Unterbrechungsanforderung; bei Auftreten der
Unterbrechungsanforderung vorzeitiges Verlassen des Pipelineschleifenkerns
und Verbrauchen aller Registerwerte während des Ausführens; Behandeln
der Unterbrechungsanforderung; und Ausführen eines Unterbrechungsprologs,
dadurch Wiedereintreten in den Pipelineschleifenkern und Fortsetzen
des Ausführens
eines Kernschrittes, um dadurch das Ausgangsergebnis ohne Veränderung
auf Grund des Schrittes des Verlassens und des Schrittes des Wiedereintretens
zu erzeugen.
-
Obwohl
die Erfindung hierin unter Bezugnahme auf einen spezifischen Prozessor
beschrieben worden ist, wird erkannt, dass ein Durchschnittsfachmann
die beschriebenen Ausführungsformen
leicht anpassen kann, damit sie in anderen Prozessoren mit mehreren
Ausführungseinheiten
arbeiten können,
um die Mehrfachzuweisung der Register zu erlauben. Ebenso ist die
Verwendung des Skalarprodukts veranschaulichend und nicht einschränkend – es wird
erkannt, dass die Erfindung leicht mit Software-Pipelineschleifen
im Allgemeinen praktiziert werden kann. Obwohl die bevorzugten Ausführungsformen
als auf den Wert der Unterbrechungsbits in einem Register reagierend
beschrieben worden sind, kann der Durchschnittsfachmann auf dem Gebiet
in einer Ausführungsform
der Erfindung leicht andere Laufzeitbedingungen ersetzen, die durch
den Mikroprozessor erfassbar 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.