-
GEBIET DER ERFINDUNG
-
Die
vorliegenden Ausführungsformen
beziehen sich auf Prozessoren und sind insbesondere auf die Verbesserung
der Verzweigungseffizienz in derartigen Prozessoren gerichtet.
-
HINTERGRUND DER ERFINDUNG
-
Die
vorliegenden Ausführungsformen
betreffen die sich ständig
entwickelnden Gebiete der Computer-Technologie, der Mikroprozessoren
und anderen Typen von Prozessoren. Prozessorvorrichtungen werden in
zahlreichen Anwendungen verwendet, wobei ihr Vorherrschen zu einem
komplexen und anspruchsvollen Markt geführt hat, in dem die Effizienz
des Betriebs oft eine Schüsselüberlegung
ist, wobei eine derartige Effizienz sowohl durch den Preis als auch
durch die Leistung des Prozessors widergespiegelt wird. Demgemäß sind die
folgende Erörterung
und die Ausführungsformen
auf einen Schlüsselbereich
der Prozessoreffizienz gerichtet, nämlich das große Vorherrschen
von Verzweigungsbefehlen im Computercode.
-
Der
Verzweigungsbefehl ergibt sich in vielen Zusammenhängen, wie
z. B. aus bedingten Anweisungen in einer höheren Computer-Sprache, wie
z. B. eine WENN-DANN- oder WENN-DANN-SONST-Anweisung, oder andere
Anweisungen, die die gleiche oder eine vergleichbare Funktionalität auf der
Grundlage einer gegebenen höheren
Sprache bereitstellen. Die höhere
bedingte Anweisung wird abwärts
in einen einfacheren Verzweigungsbefehl auf der Maschinenebene,
wie z. B. einen Sprungbefehl, kompiliert oder übersetzt. In jedem Fall stellt
ein Verzweigungsbefehl, wenn ihm im Computercode begegnet wird,
jedesmal eine potentielle Änderung
des Flusses im Betrieb des Prozessors dar. Wenn spezifisch die Verzweigungsbedingung
erfüllt
ist (d. h. wenn die Verzweigung "genommen" wird), dann kann
die resultierende Änderung
des Flusses zahlreiche Prozessortaktzyklen verbrauchen. Der momentane
Architekturzustand des Prozessors kann z. B. für die spätere Wiederherstellung zu sichern
sein, wobei der neue Fluss initialisiert werden muss, wie z. B.
durch das Holen von Befehlen am Ort des neuen Programmflusses. Die
obigen Konsequenzen werden durch die Vorstellung weiter verkompliziert,
dass im Allgemeinen akzeptiert ist, dass ein Verzweigungsbefehl
in einem statistischen Sinn relativ oft auftritt. In einem modernen
Code kann ein Verzweigungsbefehl im Durchschnitt alle sechs Befehle
auftreten. Außerdem
werden etwa zwei Drittel derartiger Verzweigungen genommen. Noch
weiter kann unter den gegenwärtigen
Standards geschätzt
werden, dass vier Taktzyklen erforderlich sind, um die genommene
Verzweigung auszuführen.
In Anbetracht dieser Zahlen wird leicht eingesehen, dass die Verzweigungsaktivität die Leistung
eines Computers beherrschen kann. In der Tat haben diese Typen der
Zahlen verschiedene Zugänge
in der Technik begründet,
die Auswirkungen der Verzweigungsineffizienzen zu verringern, einschließlich sowohl
der Zugänge
der Verzweigungsvorhersage als auch der Verzweigungsaussage (die
typischerweise einfach als "Aussage" bezeichnet wird).
Ein Verständnis
des Letzteren führt
in die bevorzugten Ausführungsformen
ein, wobei folglich die Aussage im Folgenden ausführlicher
erörtert
wird.
-
In
vielen Computern und insbesondere in superskalaren Computern und
Computern mit sehr großen Befehlswörtern ("VLIW"-Computern) versuchen
die Kompilierer, die bedingten Verzweigungen durch die Verwendung
ausgesagter Befehle zu eliminieren. Die Aussage ist durch die Einbeziehung
zusätzlicher
Hardware in einem Prozessor implementiert, die oft als ein Aussageregister
bezeichnet wird, in dem der Zustand des Registers einem gegebenen
Befehl zugeordnet ist. Ferner schafft das Aussageregister eine Bedingung
oder eine "Aussage", die erfüllt sein
muss, falls der zugeordnete Befehl auszuführen ist. Mit anderen Worten,
vor der Ausführung
jedes ausgesagten Befehls wird seine zugeordnete Bedingung geprüft, wobei,
falls die Bedingung erfüllt
ist, der Befehl ausgeführt
wird; wenn im Gegenteil die zugeordnete Bedingung nicht erfüllt ist,
dann wird der Befehl nicht ausgeführt. In Anbetracht dieses Zugangs
kann die Anzahl der Verzweigungsbefehle verringert werden, indem
statt dessen bestimmte Befehle auf der Grundlage einer Bedingung,
die andernfalls unter Verwendung eines Verzweigungsbefehls (oder
mehr als einem Verzweigungsbefehl) ausgewertet worden wäre, ausgesagt
werden.
-
Um
die Aussage weiter zu veranschaulichen und außerdem als eine Einführung in
eine Konvention, die später
zu verwenden ist, um die bevorzugten Ausführungsformen weiter zu demonstrieren,
ist im Folgenden eine Liste von Pseudocode bereitgestellt, die eine
typische WENN-DANN-SONST-Folge repräsentiert:
-
-
Wie
für einen
Fachmann auf dem Gebiet offensichtlich ist, prüft der oben aufgelistete Code
die Bedingung A1, wobei dann, wenn sie erfüllt ist (d. h. sie wahr ist),
die Befehle im Anschluss an den "DANN"-Weg (d. h. die Befehle
1 und 3) ausgeführt
werden, um den Code abzuschließen,
wohingegen dann, wenn die Bedingung A1 nicht erfüllt ist (d. h. sie falsch ist),
die Befehle im Anschluss an den "SONST"-Weg (d. h. die Befehle 2
und 4) ausgeführt
werden, um den Code abzuschließen.
-
Als
weitere Einführung
ist der oben aufgelistete Pseudocode unter Verwendung eines Baumdiagramms
in 1a veranschaulicht. 1a veranschaulicht
eine Befehlsgruppe G1, die einen einzigen Bedingungsbaum bildet,
wo diese Bedingung das Ergebnis der A1-Bedingung ist, wobei folglich
die Bedingung A1 an der Spitze des Baumes gezeigt ist. Ferner sind
die Befehle, die auf der Grundlage des Ergebnisses der Bedingung
auszuführen
sind, als die Zweige des Baumes gezeigt. Wenn insbesondere A1 wahr
ist, dann werden die Befehle längs
des Zweiges oder Weges unterhalb und auf der linken Seite des Baumes
ausgeführt
(wie mit der Marke "DANN" gezeigt ist), wohingegen,
wenn A1 falsch ist, dann die Befehle längs des Zweiges oder Weges
unterhalb und auf der rechten Seite des Baumes ausgeführt werden
(wie mit der Marke "SONST" gezeigt ist). Sobald
der Fuß des
Baumes erreicht ist, ist der Code abgeschlossen.
-
Unter
der Voraussetzung des obigen Pseudocodes und seiner Baumveranschaulichung
in 1a veranschaulicht 1b in
Form einer graphischen Darstellung die Art, in der die Aussage auf
diesen Code angewendet wird. Spezifisch veranschaulicht 1b jeden
Befehl im Baum als einen Zeileneintrag, der im Allgemeinen in einem
Kasten gezeigt ist, um irgendeinen Typ der Speicherung oder des
Zugriffs auf jeden Befehl zu suggerieren. Ferner ist jeder zugängliche
Befehl der Bedingung A1 zugeordnet, wo die spezifische Bedingung
in 1b gezeigt ist, indem die Bedingung im gleichen
Zeileneintrag wie der entsprechende Befehl angeordnet ist. Die erste
Zeile in 1b veranschaulicht z. B. den Fall,
in dem die Bedingung A1 wahr ist, da sie dem Befehl 1 zugeordnet
ist. Als ein weiteres Beispiel veranschaulicht die zweite Zeile
in 1b, dass die Bedingung falsch ist (was als A1
gezeigt ist). Unter der Voraussetzung der Zuordnung des Befehls
und der entsprechenden Bedingung nach 1b wird,
bevor jeder Befehl ausgeführt
wird, seine zugeordnete Bedingung geprüft, wobei der Befehl nur ausgeführt wird,
falls die Bedingung erfüllt
ist. Schließlich
wird angegeben, dass die Veranschaulichung nach 1b als
Hintergrund dient und nicht als eine tatsächliche Darstellung der Weise
vorgesehen ist, in der die Aussage in Hardware erreicht werden kann.
In der Tat ist es in vielen modernen Prozessorarchitekturen der
Fall, dass ein vollständiges
Steuerwort, das als ein Aussagefeld bezeichnet wird, jedem Befehl
zugeordnet ist; das Aussagefeld kann z. B. drei Bits enthalten,
wobei sieben der möglichen
Bitkombinationen aus diesen drei Bits die entsprechenden Register
identifizieren (z. B. Mehrzweckregister), die verschiedene Aussagen
speichern, während
die achte binäre
Kombination einfach angibt, dass der momentane Befehl nicht ausgesagt
wird.
-
Während die
Aussage die Ineffizienzen der Verzweigungsbefehle verringert hat,
schafft sie außerdem verschiedene
Nachteile. Als ein erstes Beispiel eines Aussagenachteils ist die
Aussage im Allgemeinen keine annehmbare Lösung für lange Blöcke des Codes. Ein Block des
Codes ist für
diesen Zweck als eine Gruppe von Befehlen definiert, die sequentiell
ausgeführt
werden, wobei es keine Verzweigungsbefehle in der Gruppe gibt (obwohl
die Gruppe mit einem Verzweigungsbefehl enden kann). Insbesondere
wenn im Fall eines großen Blocks
jeder Befehl im Block mit derselben Bedingung ausgesagt wird, dann
können
die zusätzlichen
Betriebsmittel, die erforderlich sind, um die Aussage für jeden
Befehl in dem Block zu prüfen,
leicht den Nachteil überwiegen,
der auftreten würde,
wenn der ganze Block an seinem Anfang durch einen einzigen Verzweigungsbefehl
bedingt wäre.
Im Ergebnis gibt es einen Kompromiss zwischen der Verwendung der
Aussage und den Verzweigungsbefehlen auf der Grundlage der Anzahl
der Befehle in einem gegebenen Block. Typischerweise kann die Grenze
der Anzahl der Befehle in einer Gruppe empirisch bestimmt werden.
In einem Prozessor, in dem ein Verzweigungsbefehl fünf Verzögerungsschlitze
verwendet, wobei der Verzweigungsbefehl selbst sechs Zyklen der
Ausführung
erfordert, und falls ferner der Prozessor superskalar ist und bis
zu acht Befehlen pro Zyklus ausführen
kann, kann es z. B. nützlich
sein, die Befehle für
Blöcke
mit nur bis zu 48 Befehlen zu behaupten. Allgemein gesagt ist die
Aussage für
das effizienter, was als relativ kurze Befehlsblöcke bezeichnet werden kann.
Selbst bei dieser Beschränkung
implementieren praktisch alle modernen Mikroprozessoren irgendeinen
Typ der Aussage. Als ein zweites Beispiel eines Aussagenachteils
schaffen viele moderne Prozessoren nur bis zu einem einzigen Aussagebit
pro Befehl. Demgemäß ist ein
derartiger Zugang auf nur eine Bedingung auf einer einzigen Ebene
wie im Fall nach 1a eingeschränkt. Wenn jedoch einem Befehl
mehr als eine Bedingung zugeordnet ist, wie später ausführlich untersucht wird, dann
können
die zusätzlichen
Bedingungen unter Verwendung der Aussage nicht dem Befehl auferlegt
werden, wobei statt dessen der Befehl dann oft unter Verwendung
der Verzweigungsbefehle behandelt werden muss, was die früher beschriebenen
Ineffizienzen verursacht.
-
Im
Hinblick auf das Obige hat der Erfinder der vorliegenden Erfindung
die obigen Überlegungen
und Nachteile erkannt, wobei er im Folgenden verbesserte Ausführungsformen
vorlegt, in denen der Nachteil des hohen Zusatzaufwands der Verzweigungsbefehle
beträchtlich
verringert ist.
-
Die
internationale Patentanmeldung, VeröffentlichungsNr.
WO99/34282 , beschreibt eine VLIW-Architektur,
die einen Prozessor mit mehreren funktionalen Einheiten, die parallel
arbeiten, umfasst. Ein sehr langes Befehlswort enthält mehrere
Felder oder Ausgabeschlitze, um zu spezifizieren, welche Operationen
durch die Funktionseinheiten auszuführen sind. Die Ausführung einer
Operation kann durch einen in dem Ausgabeschlitz spezifizierten
Schutzwert verhindert werden. Die Befehle werden in einer derartigen
geschützten VLIW-Architektur
abgefertigt, indem eines der mehreren Felder weitergeleitet wird,
das auf der Grundlage des Schutzwertes für eine gemeinsame Funktionseinheit
ausgegeben wird. Pnevmatikatos und Sohi, "Guarded execution and branch prediction
in dynamic ILP processors",
Proceedings of the Annual International Symposium an Computer Architecture,
Chicago, 18.–21.
April 1994, Los Alamitos, IEEE Corp. Soc. Press., beschreibt ein
Verfahren der Verwendung spezieller Schutzbefehle, die verwendet
werden können,
um die geschützte Ausführung in
die vorhandenen Mengen aufzunehmen.
-
KURZE ZUSAMMENFASSUNG DER ERFINDUNG
-
Gemäß der vorliegenden
Erfindung wird ein Datenprozessor geschaffen, der einen veränderbaren
Architekturzustand besitzt und umfasst: einen Befehlsspeicher zum
Speichern von Befehlen; eine Befehls-Pipeline, die mehrere Ausführungseinheiten
aufweist, wobei die mehreren Ausführungseinheiten in der Weise
betreibbar sind, dass in einem gegebenen Taktzyklus eine ganze Zahl
N der mehreren Ausführungseinheiten
zur Ausführung
eingeplant sind, wobei ein Befehl, der sich vollständig durch
die Pipeline bewegt, den Architekturzustand verändert und wobei die Pipeline
eine Schaltungsanordnung zum Holen von Befehlen von dem Befehlsspeicher
in die Pipeline umfasst; und gekennzeichnet durch einen Annullierungswortspeicher,
der von dem Befehlsspeicher getrennt ist, um ein Annullierungswort
zu speichern, das mehrere Annullierungsbits besitzt, wobei jedes
Annullierungsbit eine Eins-zu-Eins-Entsprechung mit einem Befehl
einer Gruppe von Befehlen, die einen einzigen Bedingungsbaum in
der Pipeline bilden, besitzt; und eine Schaltungsanordnung, um einen
oder mehrere ausgewählte
Befehle in der Gruppe daran zu hindern, in Reaktion auf das entsprechende Annullierungsbit
des Annullierungswortes den Architekturzustand zu ändern, indem
nur die ganze Zahl N der Annullierungsbits an die mehreren Ausführungseinheiten
gekoppelt wird, die in dem gegebenen Taktzyklus zur Ausführung eingeplant
sind, wodurch einem unmittelbar folgenden Taktzyklus Annullierungsbits,
die bei einem (N + 1)-ten Annullierungsbit beginnen, an Ausführungseinheiten
gekoppelt werden, die in dem folgenden Zyklus zur Ausführung eingeplant
sind.
-
KURZBESCHREIBUNG DER MEHREREN
ANSICHTEN DER ZEICHNUNG
-
Die
vorliegende Erfindung wird nun beispielhaft unter Bezugnahme auf
die beigefügte
Zeichnung weiter beschrieben, worin:
-
1a ein
Baumdiagramm einer Befehlsgruppe mit einer einzigen Bedingung auf
einer einzigen Ebene veranschaulicht;
-
1b die
unbedingten Befehle nach 1a veranschaulicht,
die durch den bedingten Befehl nach 1a ausgesagt
werden;
-
2a ein
Baumdiagramm einer Befehlsgruppe mit Bedingungen auf zwei Ebenen
veranschaulicht;
-
2b die
Befehlsgruppe nach 2a und ein entsprechendes Annullierungswort
gemäß einer
bevorzugten Ausführungsform
veranschaulicht;
-
2c das
Annullierungswort nach 2b veranschaulicht, wobei seine
Werte in dem Fall gesetzt sind, in dem die Bedingung A2 wahr ist;
-
2d das
Annullierungswort nach 2b veranschaulicht, wobei seine
Werte in dem Fall gesetzt sind, in dem die Bedingung A2 falsch ist;
-
3a ein
bevorzugtes Verfahren zum Setzen der Zustände der Elemente im Annullierungswort
nach 2b veranschaulicht, wobei die Zustände so gezeigt
sind, wie sie in den 2c und 2d gesetzt
sind;
-
3b ein
Verfahren gemäß der bevorzugten
Ausführungsform
zum Verarbeiten einer Befehlsgruppe mit zwei oder mehr Bedingungsebenen
und zum Setzen der Zustände
der Elemente in einem entsprechenden Annullierungswort veranschaulicht;
-
4a den
Aussageschritt der bevorzugten Ausführungsform veranschaulicht,
der in Bezug auf den Befehlsbaum in 2a genommen
wird, wenn die Bedingung A2 wahr ist;
-
4b den
Aussageschritt der bevorzugten Ausführungsform veranschaulicht,
der in Bezug auf den Befehlsbaum in 2a genommen
wird, wenn die Bedingung A2 falsch ist;
-
5a ein
Baumdiagramm einer Befehlsgruppe mit Bedingungen auf drei Ebenen
veranschaulicht;
-
5b die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 wahr ist;
-
5c die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 falsch ist;
-
5d die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 wahr ist und die Bedingung B3 wahr ist;
-
5e die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 wahr ist und die Bedingung B3 falsch ist;
-
5f die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 falsch ist und die Bedingung C3 wahr ist;
-
5g die
Befehlsgruppe nach 5a und ein entsprechendes Annullierungswort
veranschaulicht, wobei seine Werte in dem Fall gesetzt sind, in
dem die Bedingung A3 falsch ist und die Bedingung C3 falsch ist;
-
6a einen
funktionalen Stromlaufplan der bevorzugten Ausführungsform für die Verwendung
der Bits vom Annullierungswort veranschaulicht, um eine Annullierungsmaske
zu erzeugen, die verwendet wird, um die Ausführung der für die Annullierung identifizierten
Befehle zu verhindern;
-
6b den
funktionalen Stromlaufplan nach 6a veranschaulicht,
wobei die Annullierungsmaske und die Benutzungskarte entsprechend
einem ersten Paket von Befehlen gesetzt sind, das zur Ausführung eingeplant
ist;
-
6c den
funktionalen Stromlaufplan nach 6a veranschaulicht,
wobei die Annullierungsmaske und die Benutzungskarte entsprechend
einem zweiten Paket von Befehlen gesetzt sind, das zur Ausführung eingeplant
ist;
-
6d den
funktionalen Stromlaufplan nach 6a veranschaulicht,
wobei die Annullierungsmaske und die Benutzungskarte entsprechend
einem dritten Paket von Befehlen gesetzt sind, das zur Ausführung eingeplant
ist;
-
7 einen
Befehlstrom mit drei Paketen von Befehlen veranschaulicht, wobei
jeder Befehl sowohl eine entsprechende Funktionseinheit, auf die
er abgebildet wird, als auch ein Bit von einem Annullierungswort, um
anzugeben, ob der Befehl zu annullieren ist, besitzt;
-
8 ein
Beispiel der Software-Pipeline-Verarbeitung des Standes der Technik
veranschaulicht;
-
9 die
Anwendung von Annullierungswörtern
veranschaulicht, um die Anzahl der Befehle im hohen Maße zu verringern,
die erforderlich ist, um das Beispiel der Software-Pipeline-Verarbeitung
nach 8 zu implementieren; und
-
10 eine
bevorzugte Ausführungsform
eines Prozessors veranschaulicht, der die Schaltung, die Systeme
und die Verfahren implementiert, die durch die vorhergehenden Figuren
veranschaulicht sind.
-
AUSFÜHRLICHE BESCHREIBUNG DER ERFINDUNG
-
Die 1a und 1b sind
oben im Abschnitt über
den Hintergrund der Erfindung dieses Dokuments beschrieben worden.
-
Um
die bevorzugten Ausführungsformen
durch ein erstes Beispiel zu demonstrieren, veranschaulicht 2a ein
Baumdiagramm, das die logische Reihenfolge einer Gruppe von Befehlen
G2 veranschaulicht, wobei die Gruppe G2 mehrere Ebenen bedingter
Befehle enthält;
insbesondere gibt es in dem Beispiel nach 2a zwei
Ebenen von Befehlen, wobei die erste Ebene die Bedingung A2 umfasst,
während
die zweite Ebene die Bedingungen B2 und C2 umfasst. Die verbleibende
Struktur des Baumdiagramms nach 2a kann
in Anbetracht der oben durch die 1a bereitgestellten
Einführung
leicht erkannt werden, wobei sie ferner durch den folgenden Pseudocode
veranschaulicht ist, der das Baumdiagramm nach 2a verursacht:
-
-
Der
obige Code prüft
die Bedingung A2 der ersten Ebene, um zu bestimmen, ob sie wahr
ist. Wenn die Bedingung A1 erfüllt
ist, dann wird der Fluss zum Befehl 1 gelenkt, wobei er dann zu
einer Bedingung B2 auf der zweiten Ebene weitergeht. Wenn die Bedingung
A2 nicht erfüllt
ist, dann wird der Fluss zum Befehl 2 gelenkt, wobei er dann zu
einer Bedingung C2 auf der zweiten Ebene weitergeht. Außerdem fährt nach
jeder der Bedingungen B2 und C2 auf der zweiten Ebene der Fluss
mit den Befehlen fort, die im Baumdiagramm unterhalb und auf der
linken Seite einer gegebenen Bedingung gezeigt sind, falls sie erfüllt ist,
oder er fährt
mit den Befehlen unterhalb und auf der rechten Seite einer gegebenen
Bedingung fort, falls sie nicht erfüllt ist. In Bezug auf die Bedingung
B2 fährt
z. B. der Fluss, falls sie erfüllt
ist, mit den Befehlen 3 und 7 fort, während der Fluss, falls die
Bedingung B2 nicht erfüllt
ist, mit den Befehlen 4 und 8 fortfährt. Die verbleibenden Möglichkeiten
sind durch einen Fachmann auf dem Gebiet feststellbar. Schließlich wird
angegeben, dass die zwei verschiedenen Ebenen der Gruppe G2 verhindern,
dass sie vollständig
durch ein Ein-Bit-Aussagesystem verarbeitet werden, wie es früher im Zusammenhang
mit dem Stand der Technik beschrieben worden ist. Mit anderen Worten,
wenn in einem Ein-Bit-Aussagesystem die Bedingung A1 geprüft und verwendet
wird, um ein Aussagebit festzusetzen, dann müssen die Bedingungen B2 und
C2 immer noch geprüft
werden.
-
2b veranschaulicht
eine logische Darstellung eines ersten Aspekts der bevorzugten Ausführungsform.
Insbesondere veranschaulicht 2b zuerst
die Befehle der Gruppe G2, die außerdem im Baumdiagramm nach 2a gezeigt
sind, wobei es selbstverständlich
sein sollte, dass diese Befehle in verschiedenen Arten in einem
Prozessor gemäß den verschiedenen
unterschiedlichen Implementierungen der vorliegenden Ausführungsformen
dargestellt sein können.
Derartige Befehle können
z. B. in einer Pipeline warten oder in einer Registerdatei oder
dergleichen gespeichert sein. In jedem Fall nimmt das bevorzugte
Verfahren, wie es im Folgenden beschrieben wird, den Zugriff auf
irgendeinen Typ der gespeicherten Darstellung der Befehle an, die
wenigstens einen Bedingungsbaum mit zwei Ebenen bilden, die z. B.
jenen, der in 2a gezeigt ist.
-
In 2b ist
außerdem
eine zusätzliche
Speichervorrichtung veranschaulicht, die aus Gründen, die im Folgenden deutlicher
werden, in diesem Dokument als ein Annullierungswort bezeichnet
wird. In der bevorzugten Ausführungsform
enthält
ein Annullierungswort binäre
Elemente, die den Befehlen in einer gegebenen Befehlsgruppe entsprechen.
In der Veranschaulichung nach 2b ist
z. B. ein Annullierungswort AW1 mit N Elementen gezeigt, die durch
E11 bis E1N identifiziert
sind, wobei die "1" im E1-Indikator
verwendet wird, um das Element dem Annullierungswort AW1 zuzuordnen,
während
die Tiefstellung einfach von einem Ende des Wortes zum anderen inkrementiert
wird. Jedes der Elemente E11 bis E1N entspricht einem Befehl in der Gruppe G2
entlang derselben Zeile in 2b. Es
wird außerdem
in dieser Hinsicht angegeben, dass eine Bedingung als ein Befehlstyp
betrachtet wird und deshalb jede Bedingung außerdem ein zugeordnetes Element
im Annullierungswort AW1 besitzt. Als Beispiele dieser Ausrichtung
entspricht in allen Fällen
das Element E10 dem Befehl 1, entspricht
das Element E11 dem Befehl 2, entspricht
das Element E12 dem Befehl (und der Bedingung) B2
und entspricht das Element E111 dem Befehl
10. Ferner und wie später
erklärt
wird, wird angegeben, dass kein Element dem Befehl an der Spitze
der Gruppe G2 (d. h. dem Befehl A1) entspricht. In Anbetracht der
bis jetzt gegebenen Erörterung
und der zusätzlichen
Einzelheiten im Rest dieses Dokuments erkennt schließlich ein
Fachmann auf dem Gebiet, dass ein Annullierungswort unter Verwendung
verschiedener Speicher- und Zustandsvorrichtungen ausgeführt werden
kann, wobei ein Register beispielhaft verwendet werden kann.
-
3a veranschaulicht
einen vereinfachten Ablaufplan eines Verfahrens 10 gemäß der bevorzugten Ausführungsform,
wobei das Verfahren 10 vorzugsweise durch einen Kompilierer
ausgeführt
wird und die Zustände
des Annullierungswortes AW1 nach 2b setzt;
in der Tat und wie später
ausführlich
beschrieben wird, wird in der bevorzugten Ausführungsform das Verfahren 10 wiederholt,
um zwei verschiedene Annullierungswörter zu bilden, die gegenseitige
Komplemente sind. Um das Verfahren 10 zu erkennen, werden
zuerst seine Schritte untersucht, gefolgt von einigen Beispielen
seiner Anwendung im Kontext der Befehlsgruppe G2. Das Verfahren 10 beginnt
mit einem Schritt 12, der ein Bedingungsergebnis in einer
Befehlsgruppe annimmt, wobei die erste analysierte Bedingung die
ist, die sich an der Spitze der Gruppe befindet. In Bezug auf die Gruppe
G2 beginnt das Verfahren 10 z. B. mit der Bedingung A2.
Im ersten Fall des Schrittes 12 wird angenommen, dass die
Bedingung A2 wahr ist, wobei das Verfahren 10 mit dem Schritt 14 fortfährt, der
für ein
erstes Annullierungswort die Annullierungswortbits für jeden
Befehl längs
des "SONST"-Weges der Befehlsgruppe
setzt. Nach dem Schritt 14 kehrt der Fluss zum Schritt 12 zurück, wobei
an diesem Punkt angenommen wird, dass die Bedingung (z. B. A2) falsch
ist. In Reaktion auf die Falsch-Annahme fährt das Verfahren 10 mit dem
Schritt 16 fort, der für
ein zweites Annullierungswort die Annullierungswortbits für jeden
Befehl längs
des "DANN"-Weges der Befehlsgruppe
setzt. Jede der durch die Schritte 14 und 16 geschaffenen
Alternativen wird im Folgenden untersucht. Bevor diese Alternativen
erreicht werden, wird als Einführung
für einen
weiteren Aspekt der vorliegenden Ausführungsform angegeben, dass,
sobald ein Bit im Annullierungswort gesetzt ist, dann der dem gesetzten
Bit entsprechende Befehl später
annulliert wird, d. h., er wird unterdrückt, so dass der Befehl den
Architekturzustand des Prozessors nicht ändert. Die Annullierung kann
in verschiedenen Arten ausgeführt
werden, wie außerdem
später
angesprochen wird. Schließlich
wird angegeben, dass in dem Umfang, in dem die spezifische Schaltungsanordnung
in diesem Dokument nicht beschrieben ist, das Verfahren 10 durch
verschiedene Schaltungen und Operationen implementiert sein kann,
wie durch einen Fachmann auf dem Gebiet ermittelt werden kann, und
Teil verschiedener unterschiedlicher Prozessortypen sein kann.
-
2c veranschaulicht
abermals die Befehlsgruppe G2 und das Annullierungswort AW1 nach 2b,
wobei sie aber nun ferner die Zustände der binären Elemente veranschaulicht,
wie sie entsprechend dem Verfahren 10 gesetzt werden, wenn
angenommen wird, dass die Bedingung A2 wahr ist. Wenn spezifisch angenommen
wird, dass die Bedingung A2 wahr ist, dann setzt im Schritt 14 der
Kompilierer die Bits im Annullierungswort AW1, die jedem Befehl
längs des "SONST"-Weges der Befehlsgruppe
G2 entsprechen; aus dem Baumdiagramm nach 2a kann
bestätigt
werden, dass die Befehle längs
des SONST-Weges die Befehle 2, C2, 5, 6, 9 und 10 sind. Demgemäß ist in 2c angegeben,
dass die Elemente E12, E14,
E17, E18, E111 und E112 gesetzt
werden, weil sie den Befehlen 2, C2, 5, 6, 9 und 10 entsprechen.
Unter der Voraussetzung der Zustände
der Bits im Annullierungswortes AW1 nach 2c wird
dann in der bevorzugten Ausführungsform
den Befehlen 2, C2, 5, 6, 9 und 10 nicht erlaubt, den Architekturzustand
des Prozessors zu ändern. Wie
in der bevorzugten Ausführungsform
später
gezeigt wird, wird in der Tat die Ausführung dieser Befehle nicht
erlaubt. Wie außerdem
später
klar wird, vermeidet die durch die bevorzugte Ausführungsform
als eine Alternative zu den Verzweigungsbefehlen geschaffene Operation
außerdem
die Verzögerungen
und die Unvorhersagbarkeit, die der Verzweigungsoperation zugeordnet
sind, wobei sie die Planung der Befehle, die einem Verzweigungsbefehl
folgen, nicht verkompliziert oder verhindert, wie es oft der Fall
ist, wenn die Verzweigung verwendet wird. Noch weiter wird deshalb
angegeben, dass die Bedingung C2 einer der unterdrückten Befehle
ist, wobei sie als eine Bedingung nicht geprüft wird. Folglich gibt es eine
verringerte Prozessorlast im Vergleich zu einem Ein-Bit-Aussagesystem,
wie es früher
beschrieben worden ist.
-
2d veranschaulicht
abermals die Befehlsgruppe G2 und das Annullierungswort AW1 nach 2b, 2d veranschaulicht
aber die Zustände
der binären
Elemente, wie sie durch den Kompilierer gemäß dem Verfahren 10 gesetzt
werden, wenn angenommen wird, dass die Bedingung A2 falsch ist.
Falls angenommen wird, dass die Bedingung A2 falsch ist, dann setzt
der Schritt 16 spezifisch die Bits im Annullierungswort
AW1, die jedem Befehl längs
des "DANN"-Weges der Befehlsgruppe G2 entsprechen;
es kann aus dem Baumdiagramm nach 2a bestätigt werden,
dass die Befehle längs
des DANN-Weges die Befehle 1, B2, 3, 4, 7 und 8 sind. Demgemäß wird angegeben,
dass in 2d die Elemente E11,
E13, E15, E16, E19 und E110 gesetzt werden, weil sie den Befehlen
1, B2, 3, 4, 7 und 8 entsprechen. Unter der Voraussetzung der Zustände der
Bits im Annullierungswort AW1 nach 2d wird
dann in der bevorzugten Ausführungsform
den Befehlen 1, B2, 3, 4, 7 und 8 nicht erlaubt, den Architekturzustand
des Prozessors ändern.
Weil diese Befehle vorzugsweise durch den Prozessor nicht ausgeführt werden
und weil diese nicht ausgeführten
Befehle die Komplexitäten
enthalten, die sich aus dem Prüfen
der und dem Reagieren auf die Bedingung B2 ergeben, die nicht geprüft wird,
werden dann ferner die Verzögerungen
und Komplexitäten
des Prüfens
eines Verzweigungsbefehls und des Reagierens auf einen Verzweigungsbefehl
nicht erlitten.
-
3b veranschaulicht
einen Ablaufplan eines Verfahrens 20 gemäß der bevorzugten
Ausführungsform,
wobei das Verfahren 20 vorzugsweise durch einen Kompilierer
ausgeführt
wird, wobei es, wie im Folgenden demonstriert wird, die Schritte
des Verfahrens 10 nach 3a umfasst
und abermals arbeitet, um die Bitzustände für verschiedene Annullierungswörter zu
bestimmen. Das Verfahren 20 beginnt mit einem Anfangsschritt 22,
der einfach die Untersuchung eines Ab laufs von Befehlen darstellt,
wobei die Befehle beispielhaft als die Befehlsgruppe G2 verstanden
werden können.
Der Schritt 24 wird erreicht, wenn erfasst wird, dass ein Befehl
in der Folge eine Bedingung ist. In Reaktion fährt das Verfahren 20 mit
dem Schritt 26 fort, der bestimmt, ob die im Schritt 24 erfasste
Bedingung bereits in dem gegebenen Annullierungswort, das festgesetzt
wird, annulliert ist, d. h., ob die Bedingung einem gesetzten Bit
in diesem Annullierungswort entspricht; wenn die erfasste Bedingung
annulliert worden ist, dann kehrt das Verfahren 20 zum
Schritt 22 zurück,
nach dem eine weitere Bedingung erfasst werden kann, wohingegen,
wenn die erfasste Bedingung nicht annulliert worden ist, dann das
Verfahren 20 mit dem Schritt 28 fortfährt.
-
Der
Schritt 28 bestimmt, ob sich die im Schritt 24 erfasste
Bedingung auf der untersten Ebene für den gegebenen Befehlsbaum
befindet. Falls sich der erfasste Befehl am Fuß des Baumes befindet, fährt das
Verfahren 20 mit dem Schritt 30 fort, wohingegen,
falls sich der erfasste Befehl nicht am Fuß des Baumes befindet, das
Verfahren 20 mit dem Schritt 12 fortfährt. In 2a kann
die Operation des Schrittes 28 beispielhaft gezeigt werden.
Spezifisch bestimmt der Schritt 28 für einen Befehl, der erreicht
und nicht annulliert worden ist (was durch den Schritt 26 ausgeschlossen
wird), dass sich entweder der Befehl B2 oder C2 am Fuß des Befehlsbaumes
befindet. Im Ergebnis fährt
für einen
derartigen Befehl das Verfahren 20 mit dem Schritt 30 fort, wobei
der Schritt 30 den Befehl aussagt, wobei die Aussage in
der gleichen Weise wie im Stand der Technik erfolgt. Um diese Operation
weiter zu veranschaulichen, veranschaulichen die 4a und 4b in
der Form einer graphischen Darstellung die Art, in der die Aussage
auf diese Befehle angewendet werden kann, wobei eine derartige Form
unter Verwendung eines Aussageregisters oder dergleichen verkörpert sein
kann. Bei kurzer Betrachtung dieser Figuren veranschaulicht 4a die
Aussagebildung für
den Befehl B2, während 4b die
Aussagebildung für
den Befehl C2 veranschaulicht. Deshalb ist in 4a demonstriert,
dass, wenn der Befehl B2 als eine Bedingung als wahr geprüft wird,
dann die Befehle 3 und 7 auszuführen
sind, wohingegen, wenn der Befehl B2 als falsch geprüft wird,
dann die Befehle 4 und 8 auszuführen
sind. Ähnlich
ist in 4b demonstriert, dass, wenn
der Befehl C2 als eine Bedingung als wahr geprüft wird, dann die Befehle 5 und
9 auszuführen
sind, wohingegen, wenn der Befehl C2 als falsch geprüft wird,
dann die Befehle 6 und 10 auszuführen
sind. Jede der Angaben nach den 4a und 4b kann
leicht aus der Baumstruktur nach 2a bestätigt werden.
-
Um
das Vorhergehende weiter zu demonstrieren, wird nun ein Beispiel
durch die Schritte des Verfahrens 20 verfolgt. Das Verfahren 20 beginnt
durch die Verarbeitung der Befehle in der Gruppe G2 mit dem Schritt 22,
wobei es im Schritt 24 die Bedingung A2 erfasst. Der Schritt 26 wertet
aus, ob die Bedingung A2 annulliert worden ist; an diesem Punkt
hat jedoch in Bezug auf die Gruppe G2 keine Annullierung stattgefunden,
wobei folglich der Fluss mit dem Schritt 28 fortfährt. Als
Nächstes
bestimmt der Schritt 28, ob sich die Bedingung A2 am Fuß des Baumes
befindet, wobei, weil sie sich nicht dort befindet, der Fluss mit
dem Schritt 12 fortfährt.
Zuerst nimmt der Schritt 12 an, dass das Ergebnis der Bedingung
A2 wahr ist, wobei demgemäß der Fluss
mit dem Schritt 14 fortfährt, um die Bitzustände in einem
ersten Annullierungswort zu setzen, so dass die Bits entlang des "SONST"-Weges auf Eins gesetzt
werden; mit anderen Worten, deshalb setzt der Schritt 14 die
Elemente, damit sie so erscheinen, wie sie in 2c gezeigt
sind. Als Nächstes
kehrt der Fluss abermals zum Schritt 12 zurück, der
als Nächstes
annimmt, dass die Bedingung A2 falsch ist. In Reaktion fährt das
Verfahren 20 mit dem Schritt 16 fort, der für ein zweites
Annullierungswort die Annullierungswortbits für jeden Befehl längs des "DANN"-Weges der Befehlsgruppe
setzt; mit anderen Worten, deshalb setzt der Schritt 16 die Elemente,
damit sie so erscheinen, wie sie in 2d gezeigt
sind. Jede der durch die Schritte 14 und 16 geschaffenen
Alternativen wird im Folgenden weiter untersucht, wobei in jedem
Fall der Fluss, sobald der Schritt 16 abgeschlossen ist,
zum Schritt 22 zurückkehrt,
wie außerdem
im Folgenden weiter untersucht wird.
-
Nach
der Verarbeitung der Bedingung A2 und der Rückkehr zum Schritt 22 erfasst
der Schritt 24 die Bedingung B2 und fährt mit dem Schritt 26 fort,
der auswertet, ob die erfasste Bedingung (d. h. B2) für ein gegebenes
Annullierungswort, das gebildet wird, annulliert ist. Es wird z.
B. angenommen, dass das Annullierungswort AW1 in 2d das
momentane Wort, das gebildet wird, veranschaulicht. Demgemäß kann in 2d gesehen
werden, dass die Bedingung B2 in der Tat annulliert ist, wie durch
den gesetzten Zustand des Elements E13 angegeben
wird. Im Ergebnis fährt
der Fluss vom Schritt 26 rückwärts mit dem Schritt 22 fort, wobei
er immer noch weitergeht, wie im Folgenden untersucht wird.
-
Der
Schritt 22 fährt
mit dem Prozess fort, nachdem die Bedingungen A2 und B2 bereits
erfasst worden sind, wobei als Nächstes
der Schritt 24 erreicht wird, wenn die Bedingung C2 erfasst
wird. Als Nächstes
untersucht der Schritt 26, ob die Bedingung C2 annulliert
ist, wobei abermals unter der Voraussetzung, dass das vorliegende
Beispiel durch das Annullierungswort AW1 in 2d widergespiegelt
wird, der gelöschte
Zustand des Elements E14 angibt, dass die
Bedingung C2 nicht annulliert ist. Im Ergebnis fährt das Verfahren 20 mit dem
Schritt 28 fort. Der Schritt 28 bestimmt, dass
die Bedingung C2 eine Bedingung auf der untersten Ebene ist, und
leitet den Ablauf zum Schritt 30 weiter, der die Befehle
aussagt, die der Bedingung C2 in dem Baum folgen. Demgemäß erzeugt
der Schritt 30 die Aussageinformationen, die in 4b veranschaulicht
sind, wobei das Verfahren 20 mit dem Stoppschritt 32 endet.
Schließlich
sollte ein Fachmann auf dem Gebiet erkennen, dass in der bevorzugten
Ausführungsform
das Verfahren 20 wiederholt wird, um jedes verschiedene
mögliche Annullierungswort
auf der Grundlage der möglichen
Ergebnisse (d. h. entweder wahr oder falsch) für alle Bedingungen zu bilden,
die sich nicht auf der untersten Ebene des Baumes befinden, während dies
in 3b nicht ausdrücklich
gezeigt ist.
-
Während die
bevorzugte Ausführungsform
nun veranschaulicht worden ist, wie sie auf die Befehlsgruppe G2
mit zwei Ebenen nach 2a angewendet wird, sollte klar
sein, dass sie außerdem
für Befehlsgruppen
mit mehr als zwei Ebenen gilt. Um diesen Aspekt weiter zu veranschaulichen,
veranschaulicht 5a ein Baumdiagramm, das die
logische Ordnung einer Gruppe von Befehlen G3 veranschaulicht, wobei
die Gruppe G3 drei Ebenen von bedingten Befehlen umfasst. In Anbetracht
der früher
bereitgestellten Erörterung ist
eine ausführliche
Erklärung
hinsichtlich jedes Befehls in der Gruppe G3 nicht notwendig, da
ein Fachmann auf dem Gebiet die Folge erkennen sollte, wie sie in 5a demonstriert
ist. Deshalb beginnt die Gruppe G3 mit einer Bedingung A3 auf der
ersten Ebene, wobei sich unter ihr eine Menge auf der zweiten Ebene
aus den Bedingungen B3 und C3 befindet, unter der sich eine Menge
auf der dritten Ebene aus den Bedingungen D3, E3, F3 und G3 befindet.
Wie bei der früheren
Baumkonvention dieses Dokuments fährt der Fluss, wenn angenommen
wird, dass eine Bedingung erfüllt
ist, dann zum untersten Teil auf der linken Seite der Bedingung
fort, wohingegen, wenn die Bedingung nicht erfüllt ist, dann der Fluss zum
untersten Teil auf der rechten Seite der Bedingung fortfährt.
-
Um
die Verwendung eines Annullierungswortes gemäß der bevorzugten Ausführungsform
weiter zu veranschaulichen, veranschaulichen die 5b bis 5g die
Werte in einem Annullierungswort AW2, die durch das Verfahren 20 in
Reaktion auf die verschiedenen Befunde in Bezug auf die geprüften Bedingungen nach 5a gesetzt
werden. Einige dieser Figuren werden nun ausführlich untersucht, woraus ein
Fachmann auf dem Gebiet die vergleichbaren Ergebnisse in den verbleibenden
Figuren leicht erkennen sollte.
-
5b veranschaulicht
die Befehlsgruppe G2 zusammen mit ihrem entsprechenden Annullierungswort,
wie es durch das Verfahren 20 gesetzt wird, wenn angenommen
wird, dass die Bedingung A3 wahr ist. Wenn das Verfahren 20 in
Bezug auf die Gruppe G2 arbeitet, erfasst insbesondere der Schritt 24 die
Bedingung A3, und weil sie nicht annulliert ist, leitet dann der
Schritt 26 den Fluss zum Schritt 28 weiter, der
den Fluss zum Schritt 12 vorrücken lässt, weil der Befehl A3 kein
Befehl auf der untersten Ebene ist. Der Schritt 12 nimmt
(in dem Beispiel nach 5b) an, dass die Bedingung A3
wahr ist, wobei deshalb der Schritt 14 als Nächstes jedes
Element im Annullierungswort AW2 setzt, das dem "SONST"-Weg
der Gruppe G2 entspricht. Folglich setzt in Bezug auf 5a der
Schritt 14 jedes Element im Annullierungswort AW2, das
einem Befehl längs
des Weges unterhalb und auf der rechten Seite der Bedingung A3 entspricht,
wobei aus 5b sichtbar wird, dass diese
gesetzten Elemente den Befehlen 2, C3, 5, 6, F3, G3, 11, 12, 13,
14, 19, 20, 21 und 22 entsprechen. Diese gesetzten Bits verursachen
schließlich,
dass diese Befehle annulliert werden, wobei angegeben wird, dass
die annullierten Befehle drei Bedingungen (d. h. C3, F3 und G3)
enthalten. Weil diese Bedingungen annulliert sind, gibt es dann
keine zusätzliche
Prozessorlast, die für
das Prüfen
dieser Bedingungen und das Handeln in Reaktion auf die Prüfung erforderlich
ist. Schließlich
veranschaulicht 5c die Befehlsgruppe G2 zusammen
mit ihrem entsprechenden Annullierungswort, wie es durch das Verfahren 20 gesetzt wird,
wenn angenommen wird, dass die Bedingung A3 falsch ist, wobei aus
dem Vorhergehenden ein Fachmann auf dem Gebiet erkennen sollte,
dass die Zustände
des Annullierungswortes zu jenen kom plementär sind, die in 5b gezeigt
sind, wobei dadurch die Befehle längs des Weges unterhalb und
auf der linken Seite der Bedingung A3 annulliert werden.
-
5d veranschaulicht
die Befehlsgruppe G2 zusammen mit ihrem entsprechenden Annullierungswort,
wie es durch das Verfahren 20 gesetzt wird, wenn angenommen
wird, dass die Bedingung A3 wahr ist, und außerdem angenommen wird, dass
die Bedingung B3 wahr ist. Es wird spezifisch daran erinnert, dass
das Verfahren 20 nach einer ersten Instanz entweder des
Schrittes 14 oder des Schrittes 16 zurückspringt,
um die nächste
Bedingung zu verarbeiten. Für
das Beispiel nach 5d, wenn zuerst angenommen wird,
dass die Bedingung A3 wahr ist, erfasst dann folglich die nächste Instanz
des Schrittes 24 die Bedingung B3. Als Nächstes bestimmt
der Schritt 26, ob die Bedingung B3 annulliert ist, wobei
diese Bestimmung unter Bezugnahme auf das Annullierungswort AW2
nach 5b ausgeführt
wird, das dem vorliegenden Beispiel entspricht, in dem angenommen
wird, dass die Bedingung A3 wahr ist; aus dieser Analyse wird bestimmt,
dass die Bedingung B3 nicht annulliert ist, wobei folglich der Schritt 26 den
Fluss zum Schritt 28 weiterleitet. Weil die Bedingung B3
keine Bedingung auf der untersten Ebene ist, leitet dann der Schritt 28 den
Fluss zum Schritt 12. In dem Beispiel nach 5b wird
außerdem
angenommen, dass die Bedingung B3 wahr ist, daher leitet die Operation
des Schrittes 12 den Fluss abermals zum Schritt 14,
der nun die Bits im Annullierungswort AW2 in Bezug auf die Befehle
unterhalb der Bedingung B3 setzt. Folglich setzt dann der Schritt 14 zusätzlich zu
jenen Bits, die früher
gesetzt worden sind, als die Bedingung A3 verarbeitet worden ist,
und unter der Voraussetzung, dass der Schritt 14 nun in
Bezug auf die Bedingung B3 arbeitet, die als wahr angenommen wird,
die Bits im Annullierungswort AW2, die den Befehlen längs des
Weges unterhalb und auf der rechten Seite der Bedingung B3 entsprechen.
Demgemäß veranschaulicht 5d,
dass zusätzlich
zu denselben gesetzten Bits, wie in 5b für die Bedingung
A3, die wahr ist, gezeigt ist, die den Befehlen 4, E3, 9, 10, 17
und 18 entsprechenden Bits außerdem
gesetzt sind.
-
Nachdem
die obigen Beispiele vorgelegt worden sind, kann ein Fachmann auf
dem Gebiet die verbleibenden Bitveranschaulichungen für die 5e bis 5g leicht
verfolgen und bestätigen,
wobei jede derartige Figur eine andere Anwendung des Verfahrens 20 unter
der Voraussetzung der durch den Schritt 12 gemachten Annahmen
veranschaulicht. In dieser Hinsicht veranschaulichen diese verbleibenden
Figuren das Folgende: (1) 5e veranschaulicht
die Werte des Annullierungswortes AW2, wenn angenommen wird, dass die
Bedingung A3 wahr ist, und angenommen wird, dass die Bedingung B3
falsch ist; (3) 5f veranschaulicht die Werte
des Annullierungswortes AW2, wenn angenommen wird, dass die Bedingung
A3 falsch ist, und angenommen wird, dass die Bedingung C3 wahr ist;
und (4) 5g veranschaulicht die Werte
des Annullierungswortes AW2, wenn angenommen wird, dass die Bedingung
A3 falsch ist, und angenommen wird, dass die Bedingung C3 falsch
ist. Es wird sowohl in jedem dieser Beispiele als auch in 5b angegeben,
dass während
der Zeit, in der die Bedingung der zweiten Ebene durch das Verfahren 20 verarbeitet
wird, deshalb eine Gesamtmenge von 20 der gesamten Befehle in der
Gruppe G3 annulliert wird. Folglich können diese Befehle durch einen
Abschnitt der Prozessorpipeline hindurchgehen, ihnen sind jedoch
nicht die Ineffizienzen zugeordnet, wie es der Fall sein würde, falls
statt dessen die Verzweigungsbefehle verwendet werden würden, um
den Baum zu implementieren. Schließlich sollte ein Fachmann auf
dem Gebiet außerdem
erkennen, dass auf der Grundlage der Wahr- oder Falsch-Werte der Bedingungen
auf der oberen Ebene (d. h. A3, B3 und C3) das Verfahren 20 schließlich gegen
eine ausgewählte
Bedingung der vier Bedingungen auf der untersten Ebene konvergiert
und die verbleibenden Befehle unter dieser ausgewählten Bedingung
aussagt. Im Ergebnis gibt es eine zusätzliche Verarbeitungseffizienz,
die in Bezug auf den Befehl (die Befehle) erhalten wird, die der
Bedingung auf der untersten Ebene folgen.
-
Nachdem
die bevorzugte Ausführungsform
für das
Festsetzen eines Annullierungswortes ausführlich beschrieben worden ist,
wird nun die Aufmerksamkeit auf die Verwendung der Annullierungswortbits
gerichtet, um den (die) durch dieses Wort bezeichneten Befehl (Befehle)
zu unterdrücken,
so dass die unterdrückten oder "annullierten" Befehle den Architekturzustand
des Prozessors nicht ändern,
wie nun zuerst im Zusammenhang mit 6a untersucht
wird. Als Einführung
veranschaulicht 6a eine graphische Darstellung
eines Befehlsunterdrückungssystems 40.
Das System 40 kann unter Verwendung verschiedener unterschiedlicher
Schaltungen implementiert sein, während 6a deshalb
die logische Funktionalität
demonstriert, die in der bevorzugten Ausführungsform erwünscht ist.
Wie außerdem
früher
in Bezug auf die bevorzugte Methodologie zum Erfassen der Bedingungen
und zum Setzen der Zustände
in einem Annullie rungswort angegeben worden ist, kann das System 40 in
verschiedenen unterschiedlichen Prozessortypen implementiert sein.
-
Im
Einzelnen enthält
das System 40 ein Annullierungswort, das als AW3 bezeichnet
ist, um es von früheren
Beispielen zu unterscheiden. In der bevorzugten Ausführungsform
enthält
das Annullierungswort AW3 eine ausreichende Anzahl von Bitelementen,
um eine gewünschte
Anzahl von Befehlen in der Befehlsfolge aufzunehmen. Gemäß den aktuellen
Architekturen kann z. B. eine gewünschte Größe 32 Befehle umfassen, wobei
folglich, wie in 6a gezeigt ist, das Annullierungswort
AW3 32 Bitelemente E31 bis E332 enthält.
Die Zustände
des Annullierungswortes AW3 sind mit einem ersten Dateneingang eines
Puffers 42 verbunden, dessen zweiter Eingang mit dem Ausgang
eines Schieberegisters 44 verbunden ist. Das Schieberegister 44 besitzt
eine Schiebefähigkeit,
deren Größe gleich
der Anzahl der durch das Annullierungswort AW3 gespeicherten Bits
ist, wobei folglich im aktuellen Beispiel das Schieberegister 44 ein
32-Bit-Schieberegister
ist. Der Schiebesteuereingang des Schieberegisters 44 empfängt ein
als NIP bezeichnetes Steuersignal, was eine Abkürzung für die Anzahl der Befehle im
Paket ist, wie später
ausführlich
beschrieben wird. Der Ausgang des Puffers 42 stellt eine
Bitgruppe 46 bereit. In dieser Hinsicht wird angegeben,
dass in der Weise auf die Bitgruppe 46 Bezug genommenen
wird, um anzugeben, dass bestimmte Bits, wie im Folgenden ausführlich beschrieben
wird, vom Ausgang des Puffers 42 verwendet werden, wobei
aber diese Bits nicht in einer noch weiteren separaten Vorrichtung
gespeichert sein müssen,
die andernfalls die Konstruktion verkomplizieren und eine Verzögerung hinzufügen könnte. Die
Anzahl der Bits in der Gruppe 46 ist die gleiche Anzahl
von Bits, die sich im Annullierungswort AW3 befindet (d. h. 32 im
vorliegenden Fall). Die 32 Bits der Bitgruppe 46 sind in
einer derartigen Weise gekoppelt, dass sie zu einem zweiten Eingang
des Schieberegisters 44 rückgekoppelt werden und dass
außerdem
eine ganze Zahl M der niedrigstwertigen dieser 32 Bits als eine
Annullierungsmaske AM verwendet wird. Die Annullierungsmaske AM
repräsentiert
außerdem
statt einer separaten Hardware-Vorrichtung eine Gruppe von Bits,
aber für
die Veranschaulichung sind diese M Bits in 6a als
AM1 bis AMM gezeigt.
Schließlich
sind die Bits der Annullierungsmaske AM an eine Funktionseinheits-Benutzungskarte 48 gekoppelt,
die, wie im Folgenden ausführlich
beschrieben wird, durch den Kompilierer geschrieben wird, um ein
oder mehrere Bits aus der Annullie rungsmaske AM auf die geeignete
der acht Funktionseinheiten FU1 bis FU8 abzubilden.
-
Bevor
der Betrieb des Systems 40 erörtert wird, wird angegeben,
dass es außerdem
selbstverständlich
ist, dass der Prozessor, in dem es implementiert ist, eine ganzzahlige
Anzahl M von Funktionseinheiten besitzt. Eine Funktionseinheit kann
einer von verschiedenen unterschiedlichen Vorrichtungstypen sein,
wobei es in der Technik typisch ist, dass gesagt wird, dass diese
Einheiten einen entsprechenden Befehl "ausführen". Außerdem wird
in dieser Hinsicht oft dargelegt, dass diese Einheiten eine "Ausführungsstufe" des Prozessors bilden.
Beispielhaft wird angenommen, dass M gleich acht ist, wie in 6a gezeigt
ist, d. h., ein Prozessor, der das System 40 gemäß der bevorzugten
Ausführungsform
implementiert, enthält
acht Funktionseinheiten. Diese acht Einheiten enthalten z. B. zwei
Lade-/Speichereinheiten, zwei Multiplikationseinheiten, zwei ALU-Operationseinheiten
(z. B. Additions-, Subtraktions- und Logikeinheiten) und zwei Schiebeeinheiten.
Dieses Beispiel wird im Folgenden fortgesetzt, um eine bevorzugte
Art zu erklären,
in der die Elemente in der Annullierungsmaske AM verwendet werden,
um die Ausführung
der Operation jeder von diesen acht Funktionseinheiten entweder
freizugeben oder zu sperren.
-
Als
weitere Einführung
in den Betrieb des Systems 40 nach 6a veranschaulicht 7 die
Befehle in der Gruppe G3 (aus 5a), wie
sie durch einen Kompilierer und entsprechend einer Reihenfolge,
wie später
ausführlich
beschrieben wird, eingeplant worden sind. Auf jeden Befehl in der
Spalte ganz rechts ist ein Beispiel eines Zustands eines entsprechenden
Bits im Annullierungswort AW1 (aus 2c) ausgerichtet;
folglich bewegt sich in der vorliegenden Ausführungsform das Annullierungswortbit
effektiv mit dem entsprechenden Befehl. Ferner ist in 7 in
der Spalte ganz links eine Angabe der Funktionseinheit veranschaulicht,
die den entsprechenden Befehl ausführen soll. Der Befehl 1 ist
z. B. der Ausführung
durch die Funktionseinheit FU1 zugeordnet,
der Befehl 2 ist der Ausführung
durch die Funktionseinheit FU2 zugeordnet
usw. Es wird angegeben, dass die Zuordnung eines Befehls zu einer
Funktionseinheit durch einen Kompilierer in dieser Hinsicht in der
Technik bekannt ist, aber die Ergänzung der Verwendung und der
Implementierung des Annullierungswortes und der in Beziehung stehenden
Funktionalität,
die hierin beschrieben ist, ver bessert diese bekannte Implementierung.
Ein durch 7 veranschaulichtes zusätzliches
Konzept ist der Begriff der Befehlspakete, bei dem ein Paket als
eine Gruppe von Befehlen definiert ist, die zur Ausführung durch
die entsprechenden Funktionseinheiten in einem einzigen Taktzyklus
eingeplant ist. Ein erstes Paket P1 umfasst
z. B. die Befehle 1 und 2, wobei folglich diese zwei Befehle für die Ausführung in
einem einzigen Taktzyklus eingeplant sind. Als ein weiteres Beispiel
umfasst ein zweites Paket P2 die Befehle
3, B2, 4 und C2, wobei folglich diese vier Befehle für die Ausführung in
einem einzigen Taktzyklus eingeplant sind. Weil der beispielhaft
erörterte
Prozessor acht Funktionseinheiten enthält, sollte dann ein Fachmann
auf dem Gebiet erkennen, dass ein Paket für diesen Prozessor bis zu acht
entsprechende Befehle enthalten kann.
-
Nun
wird der Betrieb des Systems 40 nach 6a in
Anbetracht des durch 7 bereitgestellten zusätzlichen
Kontexts beschrieben. Anfangs wird angenommen, dass die Annullierungsmaske
AM auf Nullen zurückgesetzt
ist. Ferner wird beispielhaft angenommen, dass zu einem gegebenen
Zeitpunkt nach dem Rücksetzen
das Annullierungswort AW3 in 6a die
Bitzustände
des Annullierungswortes AW1 nach 7 enthält, wobei
angenommen wird, dass derartige Bits durch den Kompilierer im Annullierungswort
AW3 in der gleichen Reihenfolge ausgerichtet worden sind, wie sie
in 7 veranschaulicht ist, so dass sich der Annullierungsbitzustand
für den
Befehl 1 im Element E31 befindet, sich für den Befehl
2 im Element E32 befindet und so durch die
Folge fortgefahren wird, dass sich der Bitzustand für den letzten
Befehl, den Befehl 10, im Element E312 befindet.
Demgemäß werden
zu diesem Zeitpunkt alle Bits des Annullierungswortes AW1 aus 7,
wie es als das Annullierungswort AW3 nach 6a gespeichert
ist, an den Puffer 42 ausgegeben und durch den Puffer 42 als
die Bitgruppe 46 bereitgestellt. Außerdem bilden die acht (d.
h. M = 8) niedrigstwertigen Bits (LSBs) aus der Bitgruppe 46 die
Bits der Annullierungsmaske AM, d. h., die Bits von den Elementen
E31 bis E38, wie
sie ursprünglich
im Annullierungswort AW3 gespeichert sind, werden übertragen,
damit sie die Bits in der Bitgruppe 46 werden, und folglich
entsprechend als die Bits AM1 bis AM8 ausgegeben. Schließlich wird angegeben, dass
das vorliegende Beispiel vereinfacht ist, weil das Annullierungswort
AW3 als nur teilweise gefüllt veranschaulicht
ist, weil die Befehlsgruppe G3 nur 12 Befehle besitzt, wohingegen
das Annullierungswort AW3 bis zu 32 Bits aufnehmen kann, die einem
größeren Block
entsprechen, der bis zu 32 Befehle aufweist. In dieser Hinsicht
wird außerdem
aus Gründen,
die später
einleuchtend werden, angenommen, dass alle höherwertigen Bits des Annullierungswortes
AW3, die ursprünglich
kein Bit enthielten, das einem Befehl entspricht, auf Null zurückgesetzt
sind.
-
6b veranschaulicht
den Aufbau, wie er oben beschrieben worden ist, weiter und demonstriert
den Betrieb für
den nächsten
Taktzyklus des Prozessors, der das System 40 enthält. Zuerst
ist in 6b gezeigt, dass die Annullierungsmaske
AM die Werte der acht niedrigstwertigen Bits vom Annullierungswort
AW1 in 7 speichert, wobei folglich diese Werte den zwei
Befehlen des Pakets P1, den vier Befehlen
des Pakets P2 und zwei Befehlen vom Paket
P3 entsprechen. 6b veranschaulicht
außerdem
die durch den Kompilierer in die Funktionseinheits-Benutzungskarte 48 geschriebenen
Werte, um ein oder mehrere Bits von der Annullierungsmaske AM richtig
auf die geeignete entsprechende Funktionseinheit abzubilden. Insbesondere
sind in der bevorzugten Ausführungsform
die Funktionseinheiten in einer definierten Reihenfolge gegeben.
Diese Reihenfolge ist hier beispielhaft durch die Tiefstellungen
für die
Funktionseinheit demonstriert, d. h., sie sind in aufsteigender
Weise von FU1 bis FU8 geordnet,
wobei jede geordnete Einheit einer Stelle 481 bis 488 in der Benutzungskarte 48 entspricht.
Wie im Folgenden gezeigt ist, wird diese Reihenfolge beim Setzen
der Bits in der Benutzungskarte 48 verwendet.
-
Bevor
die Erörterung
der 6b abgeschlossen wird und nachdem nun der Begriff
der geordneten Funktionseinheiten eingeführt worden ist, wird angegeben,
dass in der bevorzugten Ausführungsform
der Kompilierer außerdem
für die
Reihenfolge der Annullierungsmaskenbits entsprechend der Reihenfolge
der Funktionseinheiten verantwortlich ist, wobei diese Reihenfolgenanforderung
in der in 7 dargelegten Reihenfolge veranschaulicht
ist. Es wird insbesondere angegeben, dass die Annullierungswortbits
des Annullierungswortes AW1 (und die entsprechenden Befehle) in 7 nicht
der gleichen Reihenfolge folgen, wie sie früher beschrieben worden ist,
wobei nun angegeben wird, dass sie gemäß der bevorzugten Ausführungsform umgeordnet
worden sind. Unter der Voraussetzung der Annullierungswortbits AW1,
wie sie früher
eingeführt worden
sind, ordnet spezifisch der Kompilierer vorzugsweise diese Bits
im Annullierungswort AW3 nach 6b in
einer aufeinanderfolgenden Reihenfolge an, wodurch das erste (d.
h. niedrigstwertige) geordnete Annullierungswortbit dem Befehl entspricht,
der zur Ausführung
durch die Funktionseinheit mit der niedrigsten Nummer eingeplant
ist, usw. für
die Einheiten mit höheren
Nummern. Im Paket P1 ist z. B. der zur Ausführung durch
die Funktionseinheit mit der niedrigsten Nummer eingeplante Befehl
der Befehl 1, der durch die Funktionseinheit FU1 auszuführen ist,
wobei folglich sein Annullierungsbit in der obersten Zeile in 7 gezeigt
ist. Als ein weiteres Beispiel ist im Paket P2 der
zur Ausführung
durch die Funktionseinheit mit der niedrigsten Nummer eingeplante
Befehl der Befehl 3, der zur Ausführung durch die Funktionseinheit
FU1 eingeplant ist, wobei folglich sein
Annullierungsbit als das erste Annullierungsbit für das Paket
P2 in 7 gezeigt
ist. Wird mit dem Beispiel des Pakets P2 fortgefahren,
ist der zur Ausführung
durch die Funktionseinheit mit der nächsthöchsten Nummer nach der Funktionseinheit
FU1 eingeplante Befehl der Befehl B2, der
zur Ausführung
durch die Funktionseinheit FU2 eingeplant
ist, wobei folglich sein Annullierungsbit als das zweite Annullierungsbit
für das
Paket P2 in 7 gezeigt
ist. Ein Fachmann auf dem Gebiet erkennt diesen Aspekt für die verbleibende Reihenfolge
in 7.
-
Zurück in 6b schreibt
in der bevorzugten Ausführungsform
und für
einen gegebenen Taktzyklus der Kompilierer eine Eins in jede Stelle
der Benutzungskarte 48, die einer Funktionseinheit entspricht,
der ein Befehl zur Ausführung
für den
momentanen Zyklus zugeordnet ist. Beispielhaft veranschaulicht 6b die
Zustände
der Benutzungskarte 48 für den Zyklus zur Ausführung des
Pakets P1, das zwei Befehle enthält,
woran erinnert wird. Folglich schreibt der Kompilierer zwei logische
Einsen in die Benutzungskarte 48, wobei jede einem der
zwei Befehle im Paket P1 entspricht. Ferner
entsprechen die Stellen der Einsen in der Benutzungskarte 48 den
Funktionseinheiten, die den entsprechenden Befehlen zugeordnet sind.
Die Stelle 481 der Benutzungskarte
ist z. B. auf Eins gesetzt, so dass das niedrigstwertige Bit von
der Annullierungsmaske AM (d. h. AM1) auf
die Funktionseinheit FU1 abgebildet wird;
folglich veranschaulicht 6b einen
Pfeil, der den Wert 0 des Annullierungsmaskenbits vom AM1 auf die Funktionseinheit FU1 abbildet.
Als ein weiteres Beispiel ist die Stelle 485 der
Benutzungskarte auf Eins gesetzt, so dass das Bit AM2 von
der Annullierungsmaske AM auf die Funk tionseinheit FU5 abgebildet
wird; folglich veranschaulicht 6b einen
Pfeil, der den Wert 1 des Annullierungsmaskenbits von der AM2 auf die Funktionseinheit FU5 abbildet.
Im Ergebnis des Vorhergehenden sind zu diesem Zeitpunkt die entsprechenden
Bitzustände
des Annullierungswortes der Annullierungsmaske AM bereitgestellt
worden, wobei diese Zustände
von der Annullierungsmaske AM auf die entsprechenden Funktionseinheiten
abgebildet werden, die in 7 identifiziert
sind. Es wird ferner angegeben, dass diese bevorzugte Abbildungsfunktionalität in der
Tat teilweise durch die vorher beschriebene bevorzugte Operation
unterstützt
worden ist, durch die die Annullierungsbits in eine Reihenfolge
gebracht worden sind, die der Reihenfolge der Funktionseinheiten
entspricht. Schließlich
wird angegeben, dass die soeben beschriebene Operation der Ausführungsform
veranlasst, dass nur eine Anzahl von Bits aus der Annullierungsmaske,
die gleich der Anzahl der zur Ausführung eingeplanten Befehle
ist, auf die geeigneten Funktionseinheiten abgebildet wird, wobei
in dem so eben beschriebenen Beispiel nur zwei Annullierungsmaskenbits
auf die Funktionseinheiten abgebildet worden sind; im Ergebnis besitzen
im aktuellen Taktzyklus die verbleibenden Bits in der Annullierungsmaske
AM keine Wirkung auf die Ausführung
des Prozessors.
-
Sobald
die Befehle und die Annullierungsmaskenbits durch die entsprechenden
Funktionseinheiten empfangen worden sind, arbeitet dann jede Einheit
in Reaktion auf den Zustand ihres empfangenen Annullierungsmaskenbits.
Falls spezifisch das Annullierungsmaskenbit gelöscht ist (d. h. "0" ist), führt die Funktionseinheit ihren
entsprechenden Befehl aus. Wenn jedoch das Annullierungsmaskenbit
gesetzt ist (d. h. "1" ist), dann führt die
Funktionseinheit ihren entsprechenden Befehl nicht aus – dies kann
lediglich durch die Sperrung der Funktionseinheit während des
momentanen Taktzyklus erreicht werden. Indem die Ausführung des
Befehls verhindert wird, annulliert die bevorzugte Ausführungsform
den Befehl, d. h., der Befehl wird unterdrückt und verursacht keine Änderung
im Architekturzustand des Prozessors. Um diese zwei Alternativen
weiter zu veranschaulichen, wird abermals das Beispiel des Pakets
P1 betrachtet, wie es in 6b veranschaulicht
ist. In diesem Fall hat die Funktionseinheit FU1 den
Befehl 1 und seinen Annullierungsmaskenbit-Zustand von 0 empfangen.
Demgemäß führt die
Funktionseinheit FU1 den Befehl 1 aus. Im
Gegenteil hat die Funk tionseinheit FU2 den
Befehl 2 empfangen, sein Annullierungsmaskenbit-Zustand ist aber
1; folglich führt
die Funktionseinheit FU2 den Befehl 2 nicht
aus.
-
Das
System 40 versieht außerdem
während
des Taktzyklus, in dem die Befehle des Pakets P1 potentiell
ausgeführt
werden (d. h. auf der Grundlage des Zustands ihrer entsprechenden
Annullierungswortbits), das Schieberegister 44 mit dem
Wert der Anzahl der Befehle im Paket (NIP-Wert), wobei nun erklärt werden kann,
dass diese Zahl die Anzahl der Befehle in dem Paket identifiziert,
die während
des momentanen Taktzyklus zu einer oder mehreren Funktionseinheiten
weitergeleitet worden sind. Abermals ist beispielhaft für das Paket
P1 der NIP gleich zwei (d. h. für die Befehle
1 und 2). Außerdem
wird daran erinnert, dass das Schieberegister 44 einen
Rückkopplungseingang
von der Bitgruppe 46 besitzt. Demgemäß hatte vorher das Schieberegister 44 die
durch die Bitgruppe 46 bereitgestellten Annullierungsmaskenbits
eingegeben, die im aktuellen Beispiel alle früher durch das Annullierungswort
AW3 bereitgestellten Annullierungsbits sind und in ihrer Gesamtheit
der Befehlsgruppe G3 entsprechen. Als Nächstes schiebt das Schieberegister 44 die
NIP-Bits an seinem niedrigstwertigen Ende heraus, die deshalb den ältesten
wartenden Befehlen entsprechen. Außerdem und aus Gründen, die
im Folgenden erklärt
werden, schiebt das Schieberegister 44 die NIP-Bits, die
einen Wert von null besitzen, in seine höchstwertige(n) Stelle(n) ein.
Folglich schiebt in dem Beispiel des Pakets P1 das
Schieberegister 44 die zwei niedrigstwertige Bits heraus
und schiebt zwei Nullen zu seinen höchstwertigen Bits. Folglich
speichert an diesem Punkt das Schieberegister 44 in seinen
niedrigstwertigen Bitstellen die Annullierungswortbits, die den
Paketen P2 und P3 der
Befehlsgruppe G3 entsprechen, in der Reihenfolge, wie sie in 7 gezeigt
ist, wobei es in den verbleibenden höherwertigen Bitpositionen Nullen
speichert. Jedes dieser Bits wird an den Puffer 42 ausgegeben
und bildet folglich einen Teil der Bitgruppe 46.
-
6c veranschaulicht
die Annullierungsmaskenbits, die sich im zweiten Taktzyklus ergeben,
der dem Taktzyklus folgt, in dem die Befehle des Pakets P1 zu den Ausführungseinheiten weitergeleitet
und potentiell ausgeführt
werden (d. h. falls es kein gesetztes Annullierungsbit für den Befehl
gibt). Es wird insbesondere daran erinnert, dass das Schieberegister 44 seine
zwei niedrigstwertigen Bits im Zusammenhang mit der Ausführung des
Pakets P1 herausgeschoben hat; im Ergebnis
repräsentieren
im folgenden Taktzyklus, wie in 6c gezeigt
ist, die Bits in der Annullierungsmaske AM die Bits des Annullierungswortes
AW1 in der Reihenfolge nach 7, wobei
die zwei niedrigstwertigen Bits von diesen Bits durch die Operation
des Herausschiebens entfernt worden sind. Folglich kann leicht bestätigt werden,
dass die Bits AM1 bis AM8 in
der Annullierungsmaske AM nach 6c in
der Reihenfolge den Bits des Annullierungswortes AW1 nach 7,
wie sie das Paket P2 betreffen, und den
vier niedrigstwertigen Annullierungswortbits, die das Paket P3 betreffen, entsprechen.
-
6c veranschaulicht
außerdem
die durch den Kompilierer in die Benutzungskarte 48 geschriebenen
Abbildungsbits, wie sie die mögliche
Ausführung
der Befehle des Pakets P2 betreffen. Spezifisch
wird nach 7 angegeben, dass die Befehle
3, B2, 4 und C2 zur Ausführung
durch die Funktionseinheiten FU1, FU2, FU5 bzw. FU7 eingeplant sind. Im Ergebnis setzt der
Kompilierer die Bitstellen in der Benutzungskarte 48, die diesen
Funktionseinheiten entsprechen (d. h. FU1,
FU2, FU5 und FU7). Weil der Kompilierer, wie früher beschrieben
worden ist, die Befehle 3, B2, 4 und C2 in eine aufeinanderfolgende
Reihenfolge gebracht hat, die der Reihenfolge der Funktionseinheiten
entspricht, wird dann noch weiter die Anzahl der niedrigstwertigen
Bits der Annullierungsmaske AM, die gleich der Anzahl der Befehle
im Paket P2 ist (d. h. vier Befehle und
folglich vier Annullierungsmaskenbits), auf die Funktionseinheiten
FU1, FU2, FU5 und FU7 abgebildet.
Spezifischer empfängt
jede der Funktionseinheiten FU1, FU2 und FU5 ein Annullierungsmaskenbit,
das gleich 0 ist, während die
Funktionseinheit FU7 ein Annullierungsmaskenbit
empfängt,
das gleich 1 ist. Schließlich
und in Reaktion auf die Werte der Annullierungsmaskenbits führt jede
der Funktionseinheiten FU1, FU2 und
FU5 ihre entsprechenden Befehle 3, B2 und
4 aus, während
die Funktionseinheit FU7 in Reaktion auf
das hohe Annullierungsmaskenbit gesperrt ist und folglich der Befehl
C2 nicht ausgeführt
wird.
-
Um
das Beispiel abzuschließen,
das nun teilweise in den 6b, 6c und 7 demonstriert
worden ist, veranschaulicht 6d die
Annullierungsmaskenbits und die Benutzungskartenbits, die sich im
dritten Taktzyklus ergeben, d. h., der den Taktzyklen für die potentielle
Ausführung
der Pakete P1 und P2 folgt.
In Bezug auf die Bits in der Annullierungsmaske AM wird angegeben,
dass das vorhergehende Paket P2 vier Befehle besaß und folglich
die NIP gleich vier ist und das Schieberegister 44 veranlasst,
die vier niedrigstwertigen Bits herauszuschieben und einen Wert
von null in seine vier höchstwertigen
Bits zu schieben; diese Werte gehen durch den Puffer 42 und
bilden die Bitgruppe 46, wobei die acht niedrigstwertigen
Bits zur Annullierungsmaske AM weitergehen. Folglich speichert in 6d die
Annullierungsmaske AM die sechs Bits des Annullierungswortes AW1
aus 7, die dem Paket P3 entsprechen,
in der darin gezeigten Reihenfolge, wobei die zwei höchstwertigen
Bits aufgrund des früheren
Einschiebens eines Nullwertes durch das Schieberegister 44 in
seine höhenwertigen
Bits Null sind. In Bezug auf die Benutzungskarte 48 sind
ihre Werte durch den Kompilierer gesetzt worden, um die den Befehlen
des Pakets P3 entsprechenden Annullierungsbits
auf die geeigneten Funktionseinheiten abzubilden. Folglich kann
ein Fachmann auf dem Gebiet leicht bestätigen, dass 6c eine
richtige Abbildung jedes Annullierungsmaskenbits, wie es einem Befehl
des Pakets P3 entspricht, auf die geeignete
Funktionseinheit veranschaulicht. In Reaktion und in Anbetracht
des Vorhergehenden sollte leicht erkannt werden, dass die Funktionseinheiten
FU2 und FU6 ihre
entsprechenden Befehle 7 und 8 ausführen, während die Funktionseinheiten
FU1, FU4, FU5 und FU8 ihre entsprechenden
Befehle 5, 9, 6 und 10 nicht ausführen, d. h., die Befehle 5,
9, 6 und 10 beeinflussen den Architekturzustand des Prozessors nicht
(d. h. sie sind annulliert).
-
Nachdem
nun die bevorzugte Ausführungsform
des Verschiebens eines Annullierungswortes durch das Schieberegister 44 veranschaulicht
worden ist, kann unter Bezugnahme auf 3b ein
weiteres Argument angebracht werden. Spezifisch wird daran erinnert,
dass das Verfahren 20 eine Befehlsgruppe verarbeitet, bis
durch den Schritt 28 eine Bedingung auf der untersten Ebene
erfasst wird. Es wird ferner daran erinnert, dass diese Methodologie
der Bildung einer Schleife verursacht, dass Bedingungen auf verschiedenen
Ebenen eines Codebaums ausgewertet werden, wobei schließlich daran
erinnert wird, dass angegeben worden ist, dass das Verfahren für Bedingungen,
die sich nicht auf der untersten Ebene des Baums befinden, die Annullierungsbits
entweder längs
des "DANN"- oder des "SONST"-Weges bezüglich der Bedingung setzt.
Ferner wird in dieser Hinsicht nun angegeben, dass für irgendeinen
Befehl (irgendwelche Befehle) in irgendeinem Paket (irgendwelchen
Paketen) über
dieser Ebene die Annullierungsbits, die diesen Befehlen früherer Pakete entsprechen,
bereits durch das Schieberegister 44 herausgeschoben worden
sind. Demgemäß sind die
Annullierungsbits, die irgendwelchen Paketen entsprechen, die dem
Befehl vorangehen, der ausgewertet wird, nicht länger ein Problem, wobei sie
deshalb durch das Verfahren nicht weiter geändert werden.
-
Außerdem im
Hinblick auf den bevorzugten Betrieb des Systems 40 wird
angegeben, dass von weiteren alternativen Ausführungsformen für das Unterdrücken von
Befehlen in Reaktion auf ein Annullierungswort ausgegangen wird.
Ein Zugang besteht darin, die Benutzungskarte 48 zu eliminieren
und die Annullierungsmaske für
jeden Zyklus vollständig
zu füllen,
d. h. eine Anzahl von Bits von dem Annullierungswort an die Annullierungsmaske
zu koppeln, wobei die Anzahl der Bits gleich der Gesamtzahl der
Funktionseinheiten ist, und eine gegebene Stelle in der Annullierungsmaske
immer auf eine gleiche entsprechende Funktionseinheit abzubilden.
In diesem Fall besitzt für
einen gegebenen Taktzyklus, wenn eine Ausführungseinheit nicht zur Ausführung eingeplant
ist, dann das zu ihr geleitete Annullierungsmaskenbit keine Wirkung
(d. h., weil bereits eingeplant worden ist, dass die Ausführungseinheit
während
des momentanen Taktzyklus nicht arbeitet). Ein weiterer Zugang besteht
darin, die Reihenfolge der Befehle im Befehlsstrom zu verfolgen,
so dass der N-te Befehl eines Pakets durch das Bit N – 1 der
Annullierungsmaske annulliert wird. In Anbetracht dessen, dass es
jedoch andernfalls keinen Bedarf gibt, einen Datensatz der Befehlsreihenfolge
in einem Paket aufrechtzuerhalten, könnte dieser Zugang zu zusätzlicher
Hardware führen,
die in einer gegebenen Implementierung nicht erwünscht sein kann. Ein noch weiterer
Zugang besteht darin, auf Kosten zusätzlicher Annullierungs-Hardware ein ankommendes
N-Bit-Annullierungswort zu verwenden, dessen gesetzte Bits nur auf
jene Befehle abgebildet werden, die durch ein vorhergehendes Annullierungswort
nicht annulliert worden sind, und dieses neuere Annullierungswort
in einem älteren
Annullierungswort aufgehen zu lassen. Während diese Alternative eine
vergrößerte Komplexität erfordert,
erlaubt sie einen vergrößerten Bereich,
wenn über
Hierarchien von Wenn-dann-sonst-Bäumen annulliert wird. Es wird
angegeben, dass für
8-Wege-VLIW im ersten Taktzyklus das neue Annullierungswort in nur
die untersten 8 Bits des vorhergehenden Annullie rungswortes logisch ODER-verknüpft werden
würde.
Die höheren
Bits könnten
einen zusätzlichen
Taktzyklus aufweisen, um das Verschmelzen der Annullierungsbits
auszuführen.
-
Jeder
der oben dargelegten verschiedenen Zugänge schafft schließlich ein
Annullierungswort, das übersetzt
wird, um den Betrieb einer Funktionseinheit in Bezug auf einen zugewiesenen
Befehl potentiell zu unterdrücken.
Es wird in dieser Hinsicht ferner angegeben, dass das Annullierungswort
deshalb Informationen über
die potentielle Nichtausführung
eines Befehls darstellt, wobei diese Informationen zu einem Zeitpunkt
bekannt sind, der früher
als der Zeitpunkt ist, zu dem eine Aussagebestimmung in Bezug auf
den gleichen Befehl ausgeführt
werden würde,
falls die Aussage verwendet werden würde. Im Ergebnis kann eine
Erweiterung der bevorzugten Ausführungsform
zusätzlich
zum Sperren einer Funktionseinheit während eines gegebenen Taktzyklus
in Reaktion auf ein gesetztes Annullierungswortbit die Vorabinformationen
eines gesetzten Annullierungsbits verwenden, um weitere Hardware
auszuschalten, für
die bekannt ist, dass sie nicht notwendig ist, weil ein Befehl annulliert
wird. Im Fall der Aussage können
z. B. die Aussageinformationen zu spät kommen, um die Aktualisierung
der zwei Register zu verhindern, die die Eingaben in einen Addierer
bilden, der verwendet werden würde,
um eine Addition (oder Subtraktion) auszuführen, falls festgestellt wird,
dass eine Aussage wahr ist, selbst wenn schließlich festgestellt wird, dass
die Aussage falsch ist; die Annullierungswortbits können jedoch
früh genug
bekannt sein, um die Taktung dieser Register zu vermeiden und dadurch
die Abführung zusätzlicher
Leistung zu vermeiden, die der Addierer andernfalls verbrauchen
würde.
-
Wie
früher
im Zusammenhang mit den 3a und 3b beschrieben
worden ist, wird in der bevorzugten Ausführungsform die Analyse einer
Befehlsgruppe auf der Ebene des Kompilierers ausgeführt, indem der
Kompilierer veranlasst wird, verschiedene Annullierungswörter auf
der Grundlage verschiedener möglicher Ergebnisse
der Bedingung(en) im Programmbaum zu bilden. Unter der Voraussetzung
des Vorhandenseins dieser Annullierungswörter implementiert ein bevorzugtes
Beispiel ferner die vorhandenen Lehren durch das Einfügen eines
Befehls (oder mehr als eines Befehls) in den Befehlsstrom, der (die)
entweder gleichzeitig oder nach der Bedingung ausgeführt wird
(werden), für
die er gilt (sie gelten), und der (die) in Reaktion das geeignete
Annullierungswort bereitstellt (bereitstellen), das dem tatsächlichen
Ergebnis der Bedingung entspricht, und die Architektur vorbereitet
(vorbereiten), um auf das relevante Annullierungswort zu reagieren.
Für die
Bezugnahme wird für
den Rest dieses Dokuments dieser Befehl (d. h., der veranlasst,
dass die Annullierung entsprechend einem Annullierungswort ausgeführt wird)
als ein Annullierungsbefehl bezeichnet. Der Annullierungsbefehl
und sein in Beziehung stehendes Annullierungswort können in
verschiedenen Arten erzeugt und einander zugeordnet werden, die
zahlreiche verschiedene Beispiele verursachen, wie im Folgenden
ausführlich
beschrieben wird. Bevor diese Beispiele erörtert werden, wird angegeben,
dass sich ungeachtet der Implementierung ein zusätzlicher bevorzugter Aspekt
in Bezug auf die Paketstelle des Annullierungsbefehls (der Annullierungsbefehle)
ergibt. Spezifisch ist es bevorzugt, dass der (die) vom Computer
eingefügte(n)
Annullierungsbefehl(e) seine (ihre) Annullierungsoperationen (d.
h. die Unterdrückung
von Befehlen) mit Befehlen beginnt (beginnen), die in dem Zyklus
nach dem Paket ausgeführt
werden, das den Annullierungsbefehl enthält; mit anderen Worten, ist
es bevorzugt, dass der Annullierungsbefehl keinen der Befehle im
selben Paket wie der Annullierungsbefehl beeinflusst, ungeachtet
dessen, ob sie dem Annullierungsbefehl im Befehlsstrom vorangehen
oder folgen.
-
In
den verschiedenen Beispielen des Annullierungsbefehls und seines
in Beziehung stehenden Annullierungswortes werden in einem ersten
Beispiel zwei Konstanten erzeugende Befehle ausgeführt, um
zwei entsprechende 16-Bit-Konstanten zu erzeugen, wobei die zwei
Konstanten dann verkettet werden, um ein 32-Bit-Annullierungswort
zu bilden, wobei dann das Annullierungswort in Reaktion auf einen
weiteren Annullierungsbefehl verwendet wird. Alternativ kann ein
Ladebefehl ein Laden eines 32-Bit-Annullierungswortes, wie z. B.
aus dem Speicher, gefolgt von einem Annullierungsbefehl, der veranlasst,
dass das geladene Wort verwendet wird, um die Ausführung weiterer
Befehle selektiv zu unterdrücken,
veranlassen. In einem zweiten Beispiel ist das Annullierungswort
ein unmittelbarer Operand, der in einem Befehl enthalten ist; in
dieser Hinsicht wird angegeben, dass viele moderne Befehle zahlreiche
Bits enthalten, wie z. B. Quellidentifizierer, einen Zielidentifizierer,
ein Sofortbit und andere. Um die Annullierungsfunktionalität zu erreichen,
würden
jedoch viele von diesen Bits nicht erforderlich sein, wobei folglich
diese zusätzlichen
Bitstellen verwendet werden könnten, um
ein Annullierungswort direkt in den Befehl einzubetten. In diesem Fall
ist es jedoch wahrscheinlich, dass es eine eingeschränkte Anzahl
verfügbarer
Bits gibt, wobei folglich das eingebettete Annullierungswort auf
weniger als 32 Bits eingeschränkt
sein kann (z. B. eine Grenze von 16 Bits). In einem dritten Beispiel
schafft der Annullierungsbefehl ein Annullierungswort von mehr als
32 Bits, wie z. B. durch das Spezifizieren von zwei 32-Bit-Registerquellen,
die, wenn sie kombiniert werden, eine Gesamtmenge von 64 Annullierungsbits
für bis zu
64 ankommende Befehle schaffen. Dieser Zugang kann wahrscheinlich
einen Laden-Doppel-Befehl (d. h. ein 64-Bit-Laden) erfordern, um
die 64 Annullierungsbits vor der tatsächlichen Annullierungsoperation
zu erzeugen. In einem vierten Beispiel wird der Annullierungsbefehl
ausgesagt, wobei er zwei verschiedene Quellregister enthält, von
den jedes ein anderes Annullierungswort auf der Grundlage der Reaktion
auf die Aussage besitzt. Zurück
in der Befehlsgruppe G3 könnte
z. B. die Bedingung A3 an der Spitze des Baumes als eine Aussage
verwendet werden, wobei ein erstes Quellregister ein Annullierungswort
speichert, das zu verwenden ist, falls die Bedingung A3 wahr ist,
während
ein zweites Quellregister ein Annullierungswort speichert, das zu verwenden
ist, falls die Bedingung A3 falsch ist. In einem fünften Beispiel
wird der Annullierungsbefehl abermals ausgesagt, wie es im vierten
Beispiel der Fall ist, aber im fünften
Beispiel wird nur eine einzige Registerquelle verwendet, wobei eine
Hälfte
der Registerquelle das Annullierungswort bereitstellt, falls die
Bedingung wahr ist, während
die andere Hälfte
der Registerquelle das Annullierungswort bereitstellt, falls die
Bedingung falsch ist. In einem sechsten Beispiel enthält der Annullierungsbefehl
ein Argument N, das lediglich veranlasst, dass die nächsten N
Befehle annulliert werden, aber ungleich zu den vorhergehenden Beispielen
erfordert dieses Beispiel notwendigerweise, dass die Folge des Codes
bekannt ist, wobei es keine Einmischung von Code von außerhalb
des Blocks im Inneren des Blocks gibt (d. h., so dass derartige
eingemischte Befehle nicht unrechtmäßig annulliert werden). Als
ein letztes und siebentes Beispiel enthält der Befehl eine Aussage
und ein einziges Quellregister. Falls in diesem Fall die Aussage
wahr ist, werden die Befehle, die den 1en im Quellregister entsprechen,
annulliert, während,
falls die Aussage falsch ist, die Befehle, die den 0en im Quellregister entsprechen,
annulliert werden. Ferner enthält
in bezug auf dieses letzte Befehlsbeispiel er ein zusätzliches Argument
X, das die Anzahl der Bits im Quellregister, die zu verwenden sind,
spezifiziert und dadurch möglicherweise
ein schränkt.
Spezifisch wird angegeben, dass, wenn die Bitkapazität des Quellregisters
(d. h. des Annullierungswortes) größer als die Anzahl der Befehle
in einer speziellen Gruppe ist, dann das Register 0en in seinen
höchstwertigen
Bits speichert, die einem Fehlen von Befehlen für diese Bits entsprechen – in Anbetracht
dieser Möglichkeit
ist das Argument X in diesem siebenten Beispiel gesetzt, um nur
jene Bits innerhalb des Quellregisters zu spezifizieren, die tatsächlichen
Befehlen entsprechen, so dass diese höherwertigen Bits nicht unrechtmäßig als
für Befehle
geltend interpretiert werden und verwendet werden, um derartige
Befehle zu annullieren (oder nicht zu annullieren).
-
Noch
weitere Beispiele ergeben sich aus dem Vorhergehenden in Anbetracht
der Trends in Parallelität und
Latenzzeit. Im Allgemeinen ist spezifisch die Anzahl der Befehle,
die zu annullieren nützlich
ist, eine Funktion der Verzweigungslatenzzeit und der Anzahl der
Befehle, die parallel ausgeführt
werden können.
Das Produkt aus diesen zwei Aspekten ist die bevorzugte Grenze für die Anzahl
der Befehle, deren Annullierung lohnend ist, anstatt eine Verzweigung
zu nehmen. Die Trends in der Computer-Architektur führen zu
einer allmählichen
Zunahme dieser beiden Größen. Im
Ergebnis ist es in der Zukunft wahrscheinlich, dass es erwünscht ist,
unter einer Maske zu annullieren, die sogar größer als 64 Bits ist. Da die
vorliegenden Lehren verwendet werden, wird es noch weiter nützlich,
größere Codeblöcke unter
Verwendung der Annullierung statt der Verzweigung zu implementieren,
wobei die Verwendung der Hierarchien der Annullierungsbefehle, um
Hierarchien von Wenn-dann-sonst-Konstrukten zu implementieren, zunehmen
wird. Es kann in der Tat vorhergesagt werden, dass ein 16-Wege-VLIW dies im viel
größeren Maße als ein
8-Wege-VLIW ausführen
müsste,
weil die Verzweigungen hinsichtlich der potentiellen Befehle zweimal
so teuer sind.
-
Eine
letzte Überlegung
ergibt sich aus den bevorzugten Annullierungsmethodologien des vorliegenden
Dokuments, wenn sie im Kontext der Unterbrechungsbehandlung betrachtet
werden. In der bevorzugten Ausführungsform
gibt es spezifisch zwei Arten, um Unterbrechungen bei dem Vorhandensein
von wartenden Befehlen zu behandeln, die als zu annullieren identifiziert
sind (d. h. deren entsprechende Bits in einem Annullierungswort
gesetzt sind). Als ein erster Zugang wird das momentane Annullierungswort
in einem Register gesichert, wenn eine Unterbrechung empfangen wird,
wobei dann das Annullierungswort gelöscht wird, so dass es die Unterbrechung
nicht beeinflusst; danach wird bei dem Rück sprung von der Unterbrechung
durch das Ausführen
eines weiteren Annullierungsbefehls mit den gesicherten Informationen
als die Daten für
den neuen Annullierungsbefehl das gespeicherte Annullierungswort
wiederhergestellt. Als ein zweiter Zugang können die Unterbrechungen gesperrt
werden, wann immer das Annullierungswort irgendwelche von Null verschiedenen Bits
besitzt (d. h., wenn wenigstens ein Befehl bereits als zu annullieren
identifiziert worden ist).
-
Nun
wird die Erörterung
auf eine andere Anwendung der bevorzugten Ausführungsform gerichtet, wo die
Verzweigungsbefehle sich nicht im unmittelbaren Brennpunkt befinden,
wobei aber statt dessen das Folgende demonstriert, wie die bevorzugte
Ausführungsform
außerdem
eine vorteilhafte Verwendung in dem Gebiet besitzt, das in der Technik
als Software-Pipeline-Verarbeitung bezeichnet wird. Um die Software-Pipeline-Verarbeitung
zu veranschaulichen, werden die folgenden zwei Zeilen des Codes
betrachtet, der in der C-Sprache geschrieben und in der Tabelle
1 gezeigt ist:
Code | Zeilenidentifizierer |
FOR
j = 0, j < L, j++ | a1 |
D[j]
= A[j] + B[j]; | a2 |
Tabelle
1
-
Der
Code der Tabelle 1 repräsentiert
eine Schleife in einer höheren
Sprache, um einen Vektor A zu einem Vektor B, beide mit der Länge L, zu
addieren, wobei die Ergebnisse in einem Vektor D gespeichert werden.
-
Als
Nächstes
wird die folgende Mnemonik einer maschinenorientierten Sprache in
der Tabelle 2 betrachtet, die eine typische Menge von maschinenorientiertem
Code repräsentiert,
um die Befehle a1 und a2 der Tabelle 1 implementieren:
Mnemonik | Zeilenidentifizierer |
LADE
R1 (mit dem Summanden) | b1 |
LADE
R1 (mit dem Summanden) | b2 |
ADDIERE
R1, R2 | b3 |
SPEICHERE
R3 | b4 |
Tabelle
2
-
Die
Befehle b1 bis b4 repräsentieren
eine einzige Schleife, um ein Element eines Vektors zu einem Element
eines weiteren Vektors zu addieren und das Ergebnis zu speichern;
insbesondere laden die Befehle b1 und b2 die Summanden in die Register
R1 und R2, addiert der Befehl b3 diese Summanden und speichert der
Befehl b4 das Ergebnis in einem Register R3.
-
Als
weiterer Hintergrund wird angenommen, dass die Befehle b1 bis b4
durch einen Prozessor ausgeführt
werden, der die folgenden gemeinsamen modernen Attribute besitzt.
Zuerst wird angenommen, dass der Prozessor fünf Taktzyklen benötigt, um
einen Ladebefehl auszuführen.
Zweitens wird angenommen, dass der Prozessor zwei verschiedene Ladeeinheiten
enthält.
Unter der Voraussetzung dieser Annahmen wird angegeben, dass die
Befehle b1 und b2 gleichzeitig auftreten können, dass aber der Befehl
b3 warten muss, bis die Befehle b1 und b2 abgeschlossen sind, d.
h., b3 muss die fünf
Taktzyklen warten, die den Befehlen b1 und b2 zugeordnet sind. Wenn
außerdem
die Befehle b1 bis b4 viele Male auftreten, wie es der Fall ist,
falls L gleich einer großen
Anzahl des Befehls a1 ist, dann tritt die gleiche Verzögerung für jede Schleife
auf und wird hinsichtlich der Prozessoreffizienz zunehmend teurer.
Um diese potentielle Ineffizienz zu verringern, ist in der Technik
die Software-Pipeline-Verarbeitung implementiert worden, wie im
Folgenden weiter ausführlich
beschrieben wird.
-
8 veranschaulicht
die Befehle b1 bis b4, wie sie auf eine Schleife angewendet werden,
wobei L gleich 128 ist, und unter Verwendung der Software-Pipeline-Verarbeitung
implementiert sind. Als Einführung wird
angegeben, dass die Software-Pipeline-Verarbeitung oft für die Bildung
einer Software-Schleife verwendet wird, wobei sie versucht, die
Anzahl der pro Taktzyklus ausgeführten
Befehle zu optimieren, wobei verschiedene Befehle in einem gegebenen
Taktzyklus zu verschiedenen Iterationen der Schleife gehören können. Beispielhaft
veranschaulicht 8 in jeder Zeile, welche der
Befehle b1 bis b4 während
eines gegebenen Taktzyklus ausgeführt werden, wobei die Tiefstellung
jedes dieser Befehle die entsprechende Schleifennummer angibt, die
zu dem gegebenen Befehl gehört.
Wird z. B. der Taktzyklus 0 betrachtet, werden die Befehle b1 und
b2 beide für
den Fall ausgeführt,
in dem der Schleifenwert gleich 0 ist (d. h. j = 0 im obigen Befehl
a1). Demgemäß beginnen
während
des Taktzyklus 0 zwei Ladebefehle für den Schleifenwert gleich
0, wobei diese Ladebefehle (d. h. b1 und b2) in 8 mit
einem Tiefstellungswert von 0 gezeigt sind. Ähnlich beginnen im Taktzyklus
1 zwei Ladebefehle für
den Schleifenwert gleich 1, wobei sich dasselbe Muster bis zum Taktzyklus 4
(und darüber
hinaus, wie später
ausführlich
beschrieben wird) fortsetzt.
-
Es
wird angegeben, dass im Taktzyklus 5 nach 8 fünf Taktzyklen
verstrichen sind, seit die der Schleife 0 zugeordneten zwei Ladebefehle
begonnen haben. Es wird ferner daran erinnert, dass das Beispiel annimmt,
dass für
den Abschluss eines Ladebefehls fünf Taktzyklen erforderlich
sind. Deshalb sind mit Wirkung des Taktzyklus 5 die geladenen Summanden
von der Schleife 0 in den Registern verfügbar, um zueinander addiert
zu werden. Im Ergebnis und wie es durch die Veranschaulichung des
Befehls b3 (d. h. ADDIERE R1, R2) als während des Taktzyklus 5 auftretend
gezeigt ist, werden diese Summanden summiert. Weil ferner der Addierbefehl
im Taktzyklus 5 deshalb dem Schleifenwert 0 zugeordnet ist, ist
dann der Befehl b3 mit einem Tiefstellungswert von 0 gezeigt. Schließlich wird
angenommen, dass der Addierbefehl im Taktzyklus 5 nur einen einzigen
Taktzyklus erfordert, um seine Summe zu erzeugen.
-
Es
wird angegeben, dass im nächsten
Taktzyklus 6 in 8 die ersten drei Befehle, die
darin gezeigt sind, den früher
veranschaulichten Mustern folgen, d. h., zwei Ladebefehle beginnen
und ein Addierbefehl wird unter Verwendung der Summanden ausgeführt, die
durch die Befehle geladen worden sind, die fünf Taktzyklen früher begonnen
haben. Außerdem
und wie durch den letzten Eintrag in der dem Taktzyklus 6 entsprechenden Zeile
gezeigt ist, wird außerdem
der Befehl b4 (d. h. SPEICHERE R3) ausgeführt, wobei der Befehl b4 die durch
die Schleife 0 begonnene und im vorhergehenden Taktzyklus 5 summierte
Summe speichert. Folglich ist mit dem Ende des Taktzyklus 6 die
erste Schleife (d. h. j = 0) der Befehle a1 und a2 abgeschlossen;
durch das nun eingeführte
Muster haben jedoch mit Wirkung des gleichen Zeitpunkts die Ladebefehle
durch die Schleife 6 begonnen, wobei die Speicherbefehle durch die
Schleife 1 abgeschlossen sind.
-
In
Anbetracht der Veranschaulichung durch den Taktzyklus 6 wird angegeben,
dass es vom Taktzyklus 6 bis zum Taktzyklus 127 in jedem derartigen
Taktzyklus ein gleiches Muster gibt; mit anderen Worten, in jedem derartigen
Taktzyklus beginnen zwei Ladebefehle, wird ein Addierbefehl unter
Verwendung der Summanden ausgeführt,
die den fünf
Taktzyklen früher
begonnenen Ladebefehlen entsprechen, und wird unter Verwendung der
Summanden, die den sechs Taktzyklen früher begonnenen Ladebefehlen
entsprechen, ein Speicherbefehl ausgeführt. Mit anderen Worten, vom
Taktzyklus 6 bis zum Taktzyklus 127 können die Befehle als:
b1N; b2N; b3N-5; b4N-6
dargestellt
werden.
-
Aus
diesem Muster kann gesehen werden, wie die Befehle in einer gestaffelten
Weise entsprechend den verschiedenen Schleifenwerten hindurchgehen,
wobei aus diesem Grund dieser Prozess einer Pipeline sehr ähnlich ist
und seinen Namen Software-Pipeline-Verarbeitung erhält. Außerdem wird
in Bezug auf die Terminologie in der Technik angegeben, dass die
Zeitdauer, die die Taktzyklen enthält, während denen jeder Befehl (b1
bis b4) ausgeführt
wird, als die Codeschleife bezeichnet wird. Ferner wird die Zeitdauer,
die aus den Taktzyklen, die dieser Zeitdauer vorangehen, (z. B.
den Taktzyklen 0 bis 5) besteht und während der nur einige der Schleifenbefehle
ausgeführt
werden, in der Technik als der Prolog bezeichnet. Schließlich und
wie im Folgenden ausführlich
beschrieben wird, wird, wenn nach der Codeschleife schließlich alle
Ladebefehle für
die ganze Schleife abgeschlossen sind, aber verbleibende Taktzyklen
erforderlich sind, um für
jede Schleife die Befehle abzuschließen (z. B. Addieren und Speichern);
diese verbleibende Zeitdauer in der Technik als Epilog bezeichnet.
-
8 veranschaulicht
außerdem
den Epilog, der im Taktzyklus 128 beginnt. Insbesondere hat mit
Wirkung des Taktzyklus 128 jeder Ladebefehl für die Schleife bereits begonnen,
wobei folglich kein neuer Ladebefehl (d. h. b1 oder b2) gezeigt
ist. Außerdem
mit Wirkung des Taktzyklus 128 arbeiten jedoch die bereits begonnenen
Ladebefehle zum Abschluss der Ladevorgänge in Bezug auf die Summanden
oder haben jedoch die bereits begonnenen Ladebefehle die Ladevorgänge in Bezug
auf die Summanden abgeschlossen, die, sobald sie ge laden sind, summiert
werden und dann gespeichert werden. Im Taktzyklus 128 sind z. B.
nun die für
die Schleife 122 geladenen Summanden für die Summierung verfügbar, wobei
folglich während
des Taktzyklus 128 der Befehl b3 diese Summanden addiert (was durch
b3122 gezeigt ist). Als ein weiteres Beispiel
sind im Taktzyklus 128 die für
die Schleife 121 geladenen Summanden geladen und summiert worden,
wobei sie folglich nun für
die Speicherung verfügbar
sind; demgemäß speichert
während
des Taktzyklus 127 der Befehl b4 diese Summe aus diesen Summanden
(was durch b4121 gezeigt ist). Dieser Prozess
wird deshalb bis zum Taktzyklus 132 wiederholt. Schließlich sind
im Taktzyklus 133 die Summen für
die Schleifenwerte 0 bis 126 berechnet und gespeichert worden, wobei
aber mit Wirkung dieses Zeitpunkts außerdem die für die Schleife 127
geladenen Summanden geladen und summiert worden sind und folglich
nun für
die Speicherung verfügbar sind;
demgemäß speichert
während
des Taktzyklus 133 der Befehl b4 diese Summe aus diesen Summanden (was
durch b4127 gezeigt ist).
-
Das
Vorhergehende demonstriert die Vorteile der Software-Pipeline-Verarbeitung,
weil gezeigt ist, wie während
jedes Taktzyklus im Schleifencode alle Befehle in der Schleife ausgeführt werden,
während
die Verzögerungen
früherer
Befehle berücksichtigt
werden. Aufgrund dieses Vorteils wird in der Tat die Software-Pipeline-Verarbeitung
sehr häufig
verwendet, insbesondere z. B. für
die Fälle
großer
Vektor- oder Feldoperationen (z. B. Bildpunkte auf Schirmen, Filterkoeffizienten
usw.). Der Erfinder der vorliegenden Erfindung hat jedoch erkannt,
dass es ungeachtet dieses Vorteils außerdem Nachteile der Software-Pipeline-Verarbeitung geben kann,
wobei diese Nachteile durch das Anwenden der bevorzugten Ausführungsform,
wie sie früher
ausführlich
beschrieben worden ist, auf den Kontext der Software-Pipeline-Verarbeitung
beträchtlich
verringert werden. Um diese Aspekte weiter zu demonstrieren, werden
im Folgenden zuerst die sich aus der Software-Pipeline-Verarbeitung
ergebenden Nachteile erörtert,
gefolgt von einer Anwendung der bevorzugten Ausführungsform auf die Software-Pipeline-Verarbeitung,
um die Wirkungen derartiger Nachteile zu verringern.
-
Der
Nachteil der Software-Pipeline-Verarbeitung ergibt sich aus ihrer
Verwendung des Programmspeicherraums (oder Befehlsraums) in einem
Prozessor. Insbesondere ist es wohlbekannt, dass der Prozessorspeicher
ein Hauptbeitra gender zu den Prozessorkosten und der Prozessorkomplexität ist, wobei
folglich Konstruktionsüberlegungen
oft die Menge derartigen Speichers begrenzen; wenn ferner ein großes Programm durch
einen Prozessor aufgenommen werden muss, dann muss deshalb sein
Befehlsspeicher komplexer und teurer sein. Durch das Anwenden dieser
Prinzipien auf die Befehle in 8 wird angegeben,
dass der Prolog aus dreizehn Befehlen besteht. Folglich kann davon
ausgegangen werden, dass jeder dieser Befehle seinen eigenen Raum
im Befehlsspeicher erfordert (d. h. einen adressierbaren Raum, so
dass der Befehl geholt und ausgeführt werden kann). Im Ergebnis
müssen
dreizehn Speicherstellen für
den Prolog im Beispiel nach 8 verfügbar sein. Ähnlich besteht
der Epilog aus elf Befehlen, wobei folglich elf Speicherstellen
für den
Epilog im Beispiel nach 8 verfügbar sein müssen. Schließlich wird
jedoch angegeben, dass der Schleifencode bei seiner Verwendung des
Speicherraums viel effizienter ist. Weil insbesondere jede Zeile
des Schleifencodes aus einer völlig
gleichen Menge von Befehlen besteht, erfordert dann typischerweise
diese Menge von Befehlen Raum im Speicher, wobei einige zusätzliche
Befehle eine Schleife implementieren, um lediglich diese Menge von
Befehlen während
der geeigneten Anzahl von Iterationen wiederholt auszuführen; folglich
sind in dem Beispiel nach 8 nur vier
Speicherstellen für
die vier Befehle pro Taktzyklus erforderlich. Für jede Iteration dieser Schleife
und unter der Voraussetzung der für das vorliegende Beispiel
früher
beschriebenen Taktzyklusverzögerung
beginnen dann zwei Ladevorgänge,
wird eine Addition unter Verwendung der Summanden, die verfügbar sind
und die unter der Voraussetzung der Verzögerung von fünf Taktzyklen
diejenigen sind, die sich auf die Ladebefehle beziehen, die fünf Zyklen
früher
begonnen haben, ausgeführt
und wird eine Speicherung unter Verwendung der Summe, die verfügbar ist
und die unter der Voraussetzung der Verzögerung von fünf Taktzyklen
diejenige ist, die sich auf die Ladebefehle bezieht, die sechs Zyklen
früher
begonnen haben, ausgeführt.
Um diese Schleife zu implementieren, sind außerdem eine Initialisierung,
wie z. B. ein Setzen eines Zählers,
ein Dekrementieren dieses Zählers
für jede
Schleife im Schleifencode und eine ausgesagte Verzweigung am Ende
der Schleife, um zum Anfang der Schleife zurückzuspringen, bis der Zähler einen
geeigneten Zählerstand
erreicht, erforderlich. Im Ergebnis erfordert die Implementierung
des Schleifencodes nach 8 im Speicherraum sowohl eine
Gesamtmenge von vier Befehlen für
die Befehle, die in jeder Zeile gezeigt sind, als auch einen Initialisierungsbefehl,
einen Dekrementierbefehl und einen Verzweigungsbefehl, was dadurch
zu einer Gesamtmenge von nur sieben Befehlen und sieben Speicherplätzen führt. In
Anbetracht des Vorhergehenden wird angegeben, dass die relative
Menge des für
den Schleifencode erforderlichen Speicherraums kleiner als die für entweder
den Prolog oder den Epilog ist, wobei sie in Anbetracht dessen,
dass der Schleifencode, sobald er für alle seine Iterationen abgeschlossen
ist, für
viel mehr Befehlsausführungen
verantwortlich ist, als es entweder der Prolog oder der Epilog ist,
besonders niedrig ist.
-
9 veranschaulicht
die Befehle b1 bis b4 nach 8, wie sie
abermals auf eine Schleife angewendet werden, wobei L gleich 128
ist, und unter Verwendung der Software-Pipeline-Verarbeitung implementiert sind,
wobei in 9 die Software-Pipeline-Verarbeitung
verbessert ist, weil die bevorzugte Ausführungsform außerdem angewendet
wird, so dass bestimmte Befehle annulliert werden können. Insbesondere
wird angegeben, dass in jedem Taktzyklus nach 9 alle
vier im Schleifencode nach 8 verwendeten
Befehle zur Ausführung
eingeplant sind. Als ein wichtiger Unterschied zum Stand der Technik
werden jedoch einige der Befehle in 9 unter
Verwendung der früher
beschriebenen bevorzugten Ausführungsform
annulliert, wobei die annullierten Befehle in 9 unter
Verwendung eines "A" für die Tiefstellung
des Befehls veranschaulicht sind. In der Tat können die annullierten Befehle
in Taktzyklen verwendet werden, die dem Prolog und/oder dem Epilog
nach 8 entsprechen, wie im Folgenden weiter ausführlich beschrieben
wird.
-
Es
wird ein Vergleich des Prologs nach 8 mit den
gleichen Taktzyklen dieses Prologs, wie er in 9 gezeigt
ist, betrachtet, wobei beispielhaft der Taktzyklus 0 betrachtet
wird, wobei die vier Befehle b1, b2, b3 und b4 zur Ausführung eingeplant
sind. Es wird jedoch angegeben, dass die Befehle b3 und b4, wie
durch ihre "A"-Tiefstellungen (d.
h. b3A und b4A) gezeigt ist, durch die Befehlspipeline hindurchgehen,
aber annulliert werden, so dass sie den Architekturzustand des Prozessors
nicht beeinflussen. Folglich erkennt ein Fachmann auf dem Gebiet
durch das Vergleichen des Taktzyklus 0 in den 8 und 9,
dass in beiden Fällen
die Befehle b10 und b20 ausgeführt werden,
wobei die Wirkung auf den Architekturzustand des Prozessors für beide
Figuren aufgrund der in Bezug auf die Befehle b3 und b4 in 9 unternommenen
Annullierungsschritte nicht verschieden ist. Es wird noch weiter
daran erinnert, dass in 8 der Prolog aus den Befehlen
in den Taktzyklen 0 bis 5 besteht. Unter Verwendung der bevorzugten
Ausführungsform
können
die gleichen Befehle des Prologs nach 8 in den
Taktzyklen 0 bis 5 nach 9 ausgeführt werden, während gleichzeitig
ein oder mehrere weitere Befehle während jedes dieser Taktzyklen
annulliert werden.
-
Es
wird ein Vergleich des Epilogs nach 8 mit den
gleichen Taktzyklen dieses Epilogs, wie er in 9 gezeigt
ist, betrachtet, wobei beispielhaft der Taktzyklus 128 betrachtet
wird, wobei die vier Befehle b1, b2, b3 und b4 abermals zur Ausführung eingeplant
sind. Die Befehle b1 und b2, wie durch ihre "A"-Tiefstellungen (d.
h. b1A und b2A)
gezeigt ist, gehen jedoch durch die Befehlspipeline, wobei sie aber
annulliert werden, so dass sie den Architekturzustand des Prozessors
nicht beeinflussen. Folglich erkennt ein Fachmann auf dem Gebiet
durch das Vergleichen des Taktzyklus 128 in den 8 und 9,
dass für
beide Figuren die Befehle b3123 und b4122 ausgeführt werden, wobei die Wirkung
auf den Architekturzustand des Prozessors für beide Figuren aufgrund der
in Bezug auf die Befehle b1 und b2 in 9 unternommenen
Annullierungsschritte nicht verschieden ist. Es wird ferner daran
erinnert, dass in 8 der Epilog aus den Befehlen
in den Taktzyklen 128 bis 133 besteht. Unter Verwendung der bevorzugten
Ausführungsform
können
die gleichen Befehle des Epilogs nach 8 in den
Taktzyklen 128 bis 133 nach 9 ausgeführt werden,
während
gleichzeitig ein oder mehrere weitere Befehle während jedes dieser Taktzyklen
annulliert werden.
-
Aus
dem Vorhergehenden sollte ein Fachmann auf dem Gebiet nun erkennen,
dass 9 veranschaulicht, dass die Software-Pipeline-Verarbeitung
durch Implementierung der bevorzugten Ausführungsform modifiziert werden
kann. Insbesondere ist für
eine Software-Schleife, die vorher die Software-Pipeline-Verarbeitung des
Standes der Technik verursacht hat, die bevorzugte Ausführungsform
so implementiert, dass für alle
Taktzyklen der Schleife alle Befehle in der Schleife zur Ausführung eingeplant
sind. Außerdem
werden während
bestimmter Taktzyklen dieser Taktzyklen ein oder mehrere von diesen
Befehlen annulliert (d. h. durch das Setzen der geeigneten Bits
im Annullierungswort). Der spezielle Befehl, der annulliert wird,
bzw. die speziellen Befehle, die annulliert werden, kann bzw. können auf
der Grundlage der Beziehung der gegebenen Iteration zur Gesamtzahl
der Iterationen, die erforderlich sind, um die Schleife abzuschließen, bestimmt
werden. Für
das Beispiel nach 9 werden z. B. zwei Befehle
während
der Taktzyklen 0 bis 4 der 134 Taktzyklen annulliert, wird ein Befehl
während
des Taktzyklus 5 der 134 Taktzyklen annulliert, werden zwei Befehle
während der
Taktzyklen 128 bis 132 der 134 Taktzyklen annulliert und werden
drei Befehle während
des Taktzyklus 133 der 134 Taktzyklen annulliert.
-
Um
den Umfang dessen zu veranschaulichen, was in
9 veranschaulicht
ist, wird angegeben, dass die darin gezeigten Befehle unter Verwendung
der folgenden Befehle, die in der Tabelle 3 gezeigt sind, ausgeführt werden
können:
Mnemonik | Zeilenidentifizierer |
Lade
R1 (mit dem 1. Annullierungswort) | c1 |
Annulliere | c2 |
Setze
den Zähler
A0 (den Verzweigungszähler) | c3 |
Setze
den Zähler
A1 (den Annullierungszähler) | c4 |
Lade
R1 (mit dem Summanden) | c5 |
Lade
R1 (mit dem Summanden) | c6 |
Addiere
R1, R2 | c7 |
Speichere
R3 | c8 |
Dekrementiere
A0 | c9 |
Dekrementiere
A1 | c10 |
[A0 ≠ 0], Verzweige
c5 | c11 |
[A1
= 0], Lade R1 (mit dem 2. Annullierungswort) | c12 |
[A1
= 0], Annulliere | c13 |
Tabelle
3
-
Die
Befehle der Tabelle 3 werden nun ausführlicher untersucht, wobei
außerdem
in dieser Erörterung auf 9 Bezug
genommen wird. Für
den Vergleich werden die Befehle in Gruppen erörtert, die die Operationen
approximieren, die sowohl in den Prolog, in den Schleifencode als
auch in den Epilog des Standes der Technik fallen.
-
Es
wird der Anfang der Tabelle 3 betrachtet, wobei der Befehl c1 ein
erstes Annullierungswort in ein geeignetes Register lädt. Die
Bits des geladenen Annullierungswortes sind geeignet gesetzt, um
die Befehle zu annullieren, die in den Taktzyklen 0 bis 5 nach 9 als
annulliert gezeigt sind. Mit anderen Worten, diese annullierten
Befehle sind jene, die sich nicht in der Pipeline im Prolog nach 8 befinden
würden.
Weil ferner eine Gesamtzahl von elf Befehlen zu annullieren ist,
besitzt dann deshalb das Annullierungswort elf entsprechende gesetzte
Bits. Der Befehl c2 ist der Annullierungsbefehl, der dadurch das
im Register gespeicherte Annullierungswort in die geeignete Hardware
bewegt, d. h., das Annullierungswort kann dann als das Annullierungswort
AW3 in 6a behandelt werden. Der Befehl
c3 setzt einen als A0 bezeichneten ersten Zähler, wobei dieser Zähler verwendet
wird, wie im Folgenden weiter ersichtlich wird, um die Gesamtzahl
der Taktzyklen zu definieren, die erforderlich sind, um alle Taktzyklen
in 9 abzuschließen,
wobei folglich im vorliegenden Beispiel der Zähler A0 auf 134 gesetzt ist.
Der Befehl c4 setzt einen als A1 bezeichneten zweiten Zähler, wobei dieser
Zähler
verwendet wird, wie im Folgenden weiter ersichtlich wird, um die
Gesamtzahl der Taktzyklen zu definieren, die erforderlich sind,
um alle Befehle in 9 abzuschließen, die dem vorangehen, was
der Epilog in 8 sein würde, wobei folglich im vorliegenden
Beispiel der Zähler
A1 auf 128 gesetzt ist. Deshalb sind an diesem Punkt die Lade-,
Addier- und Speicheroperationen bereit, um zu beginnen, wie im Folgenden
weiter untersucht wird.
-
Die
erste Iteration der Befehle c5, c6, c7 und c8 repräsentiert
das, was als der Taktzyklus 0 in 9 gezeigt
ist. Insbesondere veranlassen die Befehle c5 und c6 die Ausführung von
b10 und b20. Aufgrund
des Ladens des Annullierungswortes und der Implementierung der Befehle
c1 und c2 werden dann jedoch die Befehle c6 und c7 annulliert, da
sie den annullierten Befehlen b3A und b4A des Taktzyklus 0 in 9 entsprechen.
Die Befehle c9 und c10 dekrementieren die Zähler A0 bzw. A1. An diesem
Punkt ist folglich der Taktzyklus 0 nach 9 abgeschlossen,
wobei der Prozess zum Taktzyklus 1 nach 9 gelenkt
wird. In dieser Hinsicht wird der Befehl c11 ferner ausgesagt, um
ihn nur auszuführen,
falls der Zähler
A0 0 nicht erreicht hat. An diesem Punkt in dem Beispiel ist der
Zähler
A0 nur einmal dekrementiert worden, wobei er einen Wert von 133 speichert;
demgemäß ist die
Aussage nicht erfüllt
und wird der Befehlsfluss zum Befehl c5 zurückgeführt. Ein Fachmann auf dem Gebiet
erkennt aus dieser Zurückverzweigungsoperation,
dass für
jeden Taktzyklus dann die Befehle c5, c6, c7 und c8 während dieses
Taktzyklus zur Ausführung
eingeplant sind, bis der Zähler
A0 einen Wert von 0 erreicht. Infolge des früher geladenen 11-Bit-Annullierungswortes
wird dann außerdem
eine Gesamtzahl von 11 Befehlen während dieser wiederholten Taktzyklen
annulliert, wobei die annullierten Wörter jene sind, die in den
Taktzyklen 0 bis 5 nach 9 mit einer "A"-Tiefstellung
gezeigt sind.
-
Sobald
der Zähler
A0 auf einen Wert von 128 dekrementiert ist, sind dann die Befehle
c3, c4, c5 und c6 insgesamt sechsmal zur Ausführung eingeplant gewesen und
ausgeführt
worden, falls sie nicht annulliert worden sind, wobei dadurch die
Taktzyklen 0 bis 5 in 9 abgeschlossen werden. Außerdem ist
der Zähler A1
zu diesem Zeitpunkt sechsmal dekrementiert worden, wobei er gleich
einem Wert von 122 ist. Ferner gibt es bei dem Taktzyklus 6 keine
verbleibenden gesetzten Annullierungswortbits, wobei folglich der
Code der Tabelle 3 jeden der Befehle c5, c6, c7 und c8 plant und
ausführt,
ohne diese Befehle zu annullieren, bis der Zähler A0 6 erreicht.
-
Wenn
der Zähler
A0 einen Wert von 6 erreicht, ist der Zähler A1 zu diesem Zeitpunkt
auf einen Wert von 0 dekrementiert worden. Im Ergebnis ist die Aussage
der Befehle c12 und c13 erfüllt;
in Reaktion lädt
der Befehl c12 ein zweites Annullierungswort in ein geeignetes Register,
wobei die Bits des zweiten Annullierungswortes geeignet gesetzt
sind, um diese Befehle zu annullieren, die in den Taktzyklen 128
bis 133 nach 9 als annulliert gezeigt sind.
Weil es eine Gesamtmenge von 13 zu annullierenden Befehlen gibt,
besitzt dann das Annullierungswort 13 entsprechende gesetzte Bits.
Der Befehl c13 ist ein Annullierungsbefehl, der das zweite im Register
gespeicherte Annullierungswort in die geeignete Hardware bewegt,
was abermals durch das Annullierungswort AW3 in 6a dargestellt
ist.
-
Zum
Abschluss des vorliegenden Beispiels ist an diesem Punkt der Zähler A0
gleich 6 und ist der Zähler
A1 gleich 0. Demgemäß führt der
Befehl c11 den Fluss zu den Befehlen c5, c6, c7 und c8 zurück. Folglich repräsentiert
die nächste
Iteration der Befehle c5, c6, c7 und c8 das, was als Taktzyklus
128 in 9 gezeigt ist. Insbesondere veranlassen die Befehle
c7 und c8 die Ausführung
von b3123 und b4122.
Aufgrund des Ladens des zweiten Annullierungswortes und der Implementierung
der Befehle c12 und c13 werden jedoch dann die Befehle c5 und c6
annulliert, da sie den annullierten Befehlen b1A und
b2A des Taktzyklus 128 in 9 entsprechen.
Die Befehle c9 und c10 dekrementieren die Zähler A0 und A1 und hinterlassen
sie mit Werten von –1
bzw. 5. Folglich ist die Aussage des Befehls c11 immer noch nicht
erfüllt,
wobei deshalb der Prozess während
weiterer fünf
Taktzyklen, d. h. bis zum Taktzyklus 133 nach 9,
wiederholt wird. Nach diesen fünf
Taktzyklen ist schließlich
der Zähler
A0 dekrementiert worden, so dass er nun einen Wert von 0 speichert;
demgemäß ist die
Aussage des Befehls c11 erfüllt,
wobei deshalb keine Verzweigung genommen wird und dadurch die Schleife
und die Befehle der Tabelle 3 abgeschlossen werden.
-
Nachdem
die Methodologie nach der Tabelle 3 demonstriert worden ist, wird
nun angegeben, wie sie einen effizienteren Betrieb als die Software-Pipeline-Verarbeitung im Stand
der Technik leistet und insbesondere wie die bevorzugte Ausführungsform,
wenn sie mit der Software-Pipeline-Verarbeitung implementiert ist, die
Verwendung des Befehlsspeicherraums verbessert. Es wird daran erinnert,
dass die Anzahl der Befehle, die für das Beispiel der Software-Pipeline-Ver arbeitung
in 8 erforderlich ist, dreizehn Prologbefehle, sieben
Schleifenbefehle und elf Epilogbefehle für eine Gesamtmenge von einunddreißig Befehlen
umfasst. Im Gegensatz demonstriert die Tabelle 3, wie geeignet angeordnete
und ausgeführte
Annullierungsbefehle zusammen mit zusätzlichen Befehlen alle Operationen
nach 9 unter Verwendung einer Gesamtzahl von dreizehn
Befehlen implementieren können.
Folglich gibt es durch die Implementierung der bevorzugten Ausführungsform
bei der Software-Pipeline-Verarbeitung für das vorliegende Beispiel,
das 9 und 8 gegenüberstellt, eine Verringerung
von achtzehn Gesamtbefehlen von den einunddreißig durch den Stand der Technik erforderlichen
zu den dreizehn in der bevorzugten Ausführungsform erforderlichen;
mit anderen Worten, für dieses
Beispiel werden 58 Prozent weniger Befehle verwendet. Folglich gibt
es ebenfalls eine 58prozentige Verringerung der Menge des erforderlichen
Befehlsspeicherraums. Wie früher
erwähnt
worden ist, verbessert jede derartige Verringerung die Komplexität und die
Kosten, wobei folglich nun gezeigt worden ist, wie die bevorzugte
Ausführungsform
eine dramatische Wirkung in dieser Hinsicht besitzen kann.
-
Als
eine letzte Betrachtung des Vorhergehenden wird ferner angegeben,
dass der Code der Tabelle 3 lediglich beispielhaft ist, wobei seine
Reihenfolge außerdem
dazu dient, um das Beispiel logisch zu demonstrieren, wobei es selbstverständlich ist,
dass ein derartiger Code und/oder eine derartige Reihenfolge entsprechend
verschiedener Überlegungen
modifiziert werden können.
Es können
z. B. verschiedene Optimierungstechniken angewendet werden, um etwas
des Codes umzuordnen. Als ein weiteres Beispiel gibt es in vielen Prozessoren
eine Verzögerung,
die den Verzweigungen zugeordnet ist; folglich kann in einem derartigen
Fall die Verzweigung des Befehls c11 beispielhaft durch den Kompilierer
früher
im Code angeordnet werden, so dass seine Verzögerung verursacht, dass die
tatsächliche
Verzweigung zum geeigneten Zeitpunkt genommen (oder nicht genommen)
wird.
-
10 veranschaulicht
einen Blockschaltplan eines Prozessors 50, in dem sowohl
das System 40 als auch die vorher beschriebenen Methodologien
der Erfindung implementiert sein können, wobei dadurch ein effizienterer
Betrieb in Bezug auf das Vermeiden von Verzweigungsbefehl-Komplexitäten und/oder
die Verbesserung der Software-Pipeline-Verarbeitung erlaubt wird.
Der Prozessor 50 ist vorzugsweise eine einzige integrierte
Schaltung, wobei er in Blockform gezeigt ist, um die Veranschaulichung
und die Erörterung
im Kontext der oben beschriebenen Befehle zu vereinfachen, während ein
Fachmann auf dem Gebiet leicht erkennt, dass sich zusätzliche
Einzelheiten aus den Blöcken
ergeben, die als den Prozessorbetrieb und die Prozessorfunktionalität betreffend
gezeigt sind. Ferner ist der Prozessor 50 ein typisches
Beispiel eines Prozessors der TMS320-C6000-Serie von Prozessoren, die von Texas
Instruments Incorporated kommerziell verfügbar sind, einschließlich der
digitalen Signalprozessoren TMS320C62x/C67x.
-
Der
Prozessor
50 enthält
einen Programmspeicher
52, der in einigen Vorrichtungen
als ein Programm-Cache verwendet werden kann. Der Prozessor
50 enthält außerdem einen
Datenspeicher
54. Die Speicher
52 und
54 sind
gekoppelt, um mit einer Zentraleinheit ("CPU")
56 zu
kommunizieren, die eine Pipeline
58 enthält, die
verschiedene Stufen besitzt, die als eine Programmholeinheit
58a,
eine Befehlsabfertigungseinheit
58b und eine Befehlsdecodiereinheit
58c gezeigt
sind. Die Pipeline der CPU
56 enthält ferner zwei Datenwege, die
als der Weg A und der Weg B gezeigt sind, wobei jeder Datenweg eine
entsprechende Menge von vier Funktionseinheiten (L1, S1, M1 und
D1 für
den Weg A und L2, S2, M2 und D2 für den Weg B) aufweist. Die
Betriebsfunktionalität
der Funktionseinheiten ist in der folgenden Tabelle 4 kurz dargelegt,
wobei entsprechend einer gegebenen Implementierung zusätzliche
Funktionalität
zu jeder Einheit hinzugefügt
oder von jeder Einheit entfernt werden kann:
Funktionseinheit | Festkommaoperationen | Gleitkommaoperationen |
L | 32/40-Bit-Arithmetik-
und Vergleichsoperationen,
Zählen der 1- oder 0-Bits ganz
links für
32 Bits,
Normierungszählung
für 32
und 40 Bits,
32-Bit-Logikoperationen | Arithmetikoperationen,
DP → SP-, INT → DR-, INT → SP-Umsetzungsoperationen |
S | 32-Bit-Arithmetikoperationen,
32/40-Bit-Verschiebungen
und
32-Bit-Feldoperationen,
32-Bit-Logikoperationen,
Verzweigungen,
Konstantenerzeugung,
Registerübertragungen
von/zu der Steuerregisterdatei (nur S2) | Vergleichen,
Reziprokwert-
und Reziprokwert-Quadratwurzel-Operationen,
Absolutwertoperationen,
SD → DP-Umsetzungsoperationen |
M | 16-mal-16-Multiplikationsoperationen | 32-mal-32-Festkomma-Multiplikationsoperationen,
Gleitkomma-Multiplikationsoperationen |
D | 32-Bit-Addition,
-Subtraktion,
lineare und kreisförmige Adressenberechnung,
Lade-
und Speicheroperationen mit einem konstanten 5-Bit-Versatz,
Lade-
und Speicheroperationen mit einem konstanten 15-Bit-Versatz (nur
D2) | Doppelwort-Laden
mit konstantem 5-Bit-Versatz |
Tabelle
4
-
Jede
Menge der Funktionseinheiten kann mit einer entsprechenden Datenweg-Registerdatei
(die als die Registerdatei A und die Registerdatei B gezeigt sind)
kommunizieren, wobei jede Registerdatei 32 32-Bit-Register
enthält.
Während
dies nicht gezeigt ist, enthalten einige von diesen Kommunikationen
außerdem
kreuzgekoppelte Wege, wodurch einige funktionale Einheiten vom Weg
A die Registerdatei B lesen können,
während
einige funktionale Einheiten vom Weg B die Registerdatei A lesen
können.
Die CPU 56 enthält außerdem zusätzliche
Unterstützungs-Hardware,
einschließlich
eines Steuerregisters 60, einer Steuerlogik 62,
einer Testlogik 64, einer Emulationslogik 66 und
einer Unterbrechungslogik 68. Der Prozessor 50 kann
außerdem
zusätzliche
Blöcke
enthalten, wie z. B. den Block 70 für den direkten Speicherzugriff
("DMA")/die Schnittstelle
zum externen Speicher ("EMIF"), um die Funktionen
auszuführen,
die diesen Identifizierern entsprechen. Der Prozessor 50 enthält außerdem einen
Peripherieblock 72, der die Verbindung zu verschiedenen Peripherievorrichtungen
unterstützen
kann, einschließlich
z. B. Zeitgebern, einem seriellen Port(s) und einer Host-Port-Schnittstelle. Schließlich enthält der Prozessor 50 einen
Ausschalt-Logikblock 74, der die CPU-Aktivität, die Peripherievorrichtungs-Aktivität und die
Phasenregelkreis-Aktivität
(PLL-Aktivität)
anhalten kann, um die Leistungsaufnahme zu verringern.
-
Nun
wird der Betrieb des Prozessors 50 im Zusammenhang mit
dem Aspekt der Befehlsbehandlung in der Pipeline abermals beispielhaft
beschrieben, so dass weiter erkannt werden kann, wie die oben ausführlich beschriebenen
Annullierungsschaltungen, -systeme und -verfahren der Erfindung
ihre Funktionalität
im Prozessor 50 bereitstellen. Die Programmholeinheit 58a,
die Befehlsabfertigungseinheit 58b und die Befehlsdecodiereinheit 58 können zusammen
in jedem CPU-Taktzyklus bis zu acht 32-Bit-Befehle an die Funktionseinheiten
liefern. Die Verarbeitung der Befehle tritt in jedem der zwei Datenwege
(A und B) auf, wobei daran erinnert wird, dass diese Wege vier Funktionseinheiten
(L, S, M und D) und 32 32-Bit-Mehrzweckregister enthalten. Um den
Pipelinebetrieb des Prozessors 50 weiter zu veranschaulichen,
ist im Folgenden eine derartige Operation bezüglich des 'C62x beispielhaft beschrieben.
-
Es
wird die Holeinheit 58a betrachtet, wobei sie ein Holpaket
aus acht Befehlen verwendet. Alle acht der Befehle gehen zusammen
durch die Holverarbeitung hindurch, die aus vier Phasen besteht
(die Programmadressen-Erzeugungsphase, die Programmadressen-Sendephase,
die Programmzugriffs-bereit-Wartephase
und die Programmholpaket-Empfangsphase). Während der Programmadressen-Erzeugungsphase wird
die Programmadresse in der CPU erzeugt. In der Programmadressen-Sendephase
wird die Programmadresse an den Speicher gesendet. In der Programmadressen-Sendephase
tritt ein Speicher-Leservorgang auf. Schließlich wird in der Programmadressen-Sendephase
das Holpaket an der CPU empfangen.
-
Es
werden die Befehlsabfertigungseinheit 58b und die Befehlsdecodiereinheit 58c betrachtet,
wobei in der Abfertigungseinheit 58b die Holpakete in die
Ausführungspakete
aufgespalten werden. Die Ausführungspakete
umfassen einen Be fehl oder zwei bis acht parallele Befehle. Die
Abfertigungseinheit 58b ordnet außerdem die Befehle in einem
Ausführungspaket
den geeigneten Funktionseinheiten zu. Beim Betrieb der Befehlsdecodiereinheit 58c werden
die Quellregister, die Zielregister und die zugeordneten Wege für die Ausführung der
Befehle in den Funktionseinheiten decodiert. Danach kann während eines
gegebenen Taktzyklus jede Funktionseinheit, der ein Befehl zugeordnet
worden ist, ihren entsprechenden Befehl ausführen, wobei es nun offensichtlich
sein sollte, dass eine derartige Ausführung in der bevorzugten Ausführungsform
nur auftritt, falls das Annullierungsbit, das dem zugeordneten Befehl
entspricht, wenn überhaupt,
nicht gesetzt ist; Unter der Voraussetzung, dass ein Ausführungspaket
bis zu acht Befehle enthalten kann, können dann in einem einzigen
Taktzyklus (und Ausführungszyklus)
diese bis zu acht Befehle ausgeführt
werden (unter der Voraussetzung gelöschter Annullierungsbits).
Falls ein Ausführungspaket
weniger als acht Befehle aufweist, werden die verbleibenden Schlitze
des Pakets, die keinen entsprechenden Befehl besitzen, als Leerbefehle
("NOPs") behandelt, wobei
der (die) NOP(s) nicht zu einer Funktionseinheit abgefertigt werden,
weil ihnen keine Ausführung
zugeordnet ist.
-
Die
Ausführung
im Prozessor 50 ist in fünf Phasen aufgegliedert, um
bestimmte Befehle aufzunehmen. Für
die meisten Befehle erfordert sie jedoch nur eine dieser Phasen
für die
Ausführung.
Ein sogenannter Einzyklusbefehl wird z. B. in einer Phase ausgeführt, in
der er ein Ergebnis berechnet und das Ergebnis in ein Register schreibt.
Ein Multiplikationsbefehl als ein weiteres Beispiel liest in einer
ersten Ausführungsphase
die Operanden und beginnt seine Berechnung, während er in einer zweiten Ausführungsphase
ein Ergebnis berechnet und das Ergebnis in ein Register schreibt.
Ein Ladebefehl als ein noch weiteres Beispiel wird in fünf Phasen
ausgeführt,
die der Reihe nach die folgenden Schritte ausführen: (1) Berechnen der Adresse;
(2) Senden der Adresse an den Speicher; (3) Zugriff auf den Speicher;
(4) Senden der Daten zurück
zur CPU; und (5) Schreiben der Daten in das Register.
-
Es
ist gezeigt worden, dass die oben erörterten bevorzugten Ausführungsformen
ein System enthalten, durch das ein annullierter Befehl den Architekturzustand
eines Prozessors nicht beeinflusst, wobei dieser Aspekt beispielhaft
in Anbetracht des Prozessors 50 nach 10 weiter
gezeigt werden kann. Spezifisch ist ein Architekturzustand eines
Prozessors im Allgemeinen in der Technik bekannt, wobei er beispielhaft
der Zustand der Bits der Elemente in 10 ist,
einschließlich
sowohl der Speicher 52 und 54, der Registerdatei
A und der Registerdatei B als auch eines (nicht explizit gezeigten)
Programmzählers
und irgendwelcher spezieller Steuerregister (die in den Steuerregistern 60 enthalten
sein können).
Wenn demgemäß in der
bevorzugten Ausführungsform
ein Befehl annulliert wird, ist ihm nicht erlaubt, den Bitzustand
oder die Bitzustände
in irgendeinem dieser Elemente zu ändern. Noch weitere Beispiele
auf der Grundlage der Vorrichtungstypen und Konfigurationen sind
durch einen Fachmann auf dem Gebiet zu ermitteln.
-
Aus
dem Obigen kann erkannt werden, dass die vorliegenden Ausführungsformen
vorsehen, den Prozessorbefehlen zu erlauben, in die Prozessorpipeline
einzutreten, dann aber in Reaktion auf ein Annullierungswort wirken,
um zu verhindern, dass ausgewählte
Befehle von diesen Befehlen den Architekturzustand des Prozessors
beeinflussen. Während
die vorliegenden Ausführungsformen
ausführlich
beschrieben worden sind, könnten
ferner verschiedene Ersetzungen, Modifikationen oder Änderungen
an den oben dargelegten Beschreibungen vorgenommen werden, ohne
vom Umfang der Erfindung abzuweichen. In der Tat sind verschiedene
Beispiele für
alternative Methodologien oben bereitgestellt worden. Außerdem können als
ein weiteres Beispiel weitere Zugänge durch einen Fachmann auf
dem Gebiet abgeleitet werden, während
die bevorzugte Implementierung und die resultierende Funktionalität als im
System 40 implementiert gezeigt ist. Während die Unterdrückung der
Operation einer Ausführungseinheit
als der bevorzugte Zugang zum Verhindern, dass ein Befehl den Architekturzustand
des Prozessors ändert,
gezeigt worden ist, können
als ein weiteres Beispiel andere Zugänge das Unterdrücken der
Operation anderer Abschnitte der Prozessorpipeline enthalten, so
dass es einem Befehl, dessen Annullierung gewünscht ist, nicht erlaubt ist,
den Architekturzustand des Prozessors zu ändern. Als ein noch weiteres
Beispiel sind das Vermeiden der Verzweigungskomplexität und die Verbesserung
der Software-Pipeline-Verarbeitung als zwei Verfahren gezeigt worden,
in denen sich die bevorzugte Ausführungsform als nützlich erweist,
es können
aber noch weitere für
einen Fachmann auf dem Gebiet ersichtlich werden. Während der
Prozessor nach 10 ein Beispiel des Prozessortyps
schafft, in dem die vorliegenden Schaltungen, Systeme und die entsprechende
Funktionalität
implementiert sein können,
könnten schließlich zahlreiche
andere Prozessoren ebenfalls die hierin gelehrte Technologie implementieren.
In Anbetracht dieser zusätzlichen
Beispiele sollte ein Fachmann auf dem Gebiet den Umfang der Erfindung
dieser Offenbarung weiter erkennen.