DE60133784T2 - Prozessor mit verbesserter Verzweigungswirkung - Google Patents

Prozessor mit verbesserter Verzweigungswirkung Download PDF

Info

Publication number
DE60133784T2
DE60133784T2 DE60133784T DE60133784T DE60133784T2 DE 60133784 T2 DE60133784 T2 DE 60133784T2 DE 60133784 T DE60133784 T DE 60133784T DE 60133784 T DE60133784 T DE 60133784T DE 60133784 T2 DE60133784 T2 DE 60133784T2
Authority
DE
Germany
Prior art keywords
cancellation
instructions
word
instruction
bits
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60133784T
Other languages
English (en)
Other versions
DE60133784D1 (de
Inventor
Patrick W. Plano Bosshart
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Application granted granted Critical
Publication of DE60133784D1 publication Critical patent/DE60133784D1/de
Publication of DE60133784T2 publication Critical patent/DE60133784T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Acyclic And Carbocyclic Compounds In Medicinal Compositions (AREA)
  • Farming Of Fish And Shellfish (AREA)
  • Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)
  • Devices For Executing Special Programs (AREA)

Description

  • 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:
  • Figure 00030001
  • 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:
  • Figure 00090001
  • 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.

Claims (5)

  1. Datenprozessor, der einen veränderbaren Architekturzustand besitzt und umfasst: einen Befehlsspeicher (52) zum Speichern von Befehlen; eine Befehls-Pipeline (58), die mehrere Ausführungseinheiten (L1, S1, M1, D1, D2, M2, S2, L2) 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 (AW1, AW2, AW3), 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 (40), 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 in 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.
  2. Prozessor nach Anspruch 1, wobei: die Gruppe von Befehlen, die dem Annullierungswort entsprechen, Befehle enthält, die einer Software-Schleife entsprechen, die für eine ganze Zahl M von Iterationen zur Ausführung eingeplant ist; und während einer gegebenen Iteration die Verhinderungsschaltungsanordnung in Reaktion auf die Annullierungsbits des Annullierungsworts verhindert, dass ein oder mehrere Befehle der Gruppe von Befehlen, die den Annullierungsbits des Annullierungswortes entsprechen, den Architekturzustand verändern, und das Annullierungswort auf der Grundlage einer Beziehung zwischen der gegebenen Iteration und der ganzen Zahl M von Iterationen verhindert, dass verschiedene Befehle den Architekturzustand während verschiedener Iterationen verändern.
  3. Prozessor nach Anspruch 1, wobei: das Annullierungswort in Reaktion auf einen Befehl geladen wird, der ein Bedingungsprädikat besitzt; das Annullierungswort ein erstes Annullierungswort in Reaktion darauf, dass das Bedingungsprädikat erfüllt ist, enthält; und das Annullierungswort ein zweites Annullierungswort in Reaktion darauf, dass das Bedingungsprädikat nicht erfüllt ist, enthält.
  4. Prozessor nach Anspruch 3, der ferner umfasst: ein erstes Register und ein zweites Register; wobei das erste Annullierungswort in dem ersten Register gespeichert ist; und wobei das zweite Annullierungswort in dem zweiten Register gespeichert ist.
  5. Prozessor nach Anspruch 3, der ferner umfasst: ein Register; wobei das erste Annullierungswort in einer ersten Hälfte des Registers gespeichert ist; und wobei das zweite Annullierungswort in einer zweiten Hälfte des Registers gespeichert ist.
DE60133784T 2000-01-13 2001-01-15 Prozessor mit verbesserter Verzweigungswirkung Expired - Lifetime DE60133784T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17588400P 2000-01-13 2000-01-13
US175884P 2000-01-13

Publications (2)

Publication Number Publication Date
DE60133784D1 DE60133784D1 (de) 2008-06-12
DE60133784T2 true DE60133784T2 (de) 2009-06-25

Family

ID=22642053

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60133784T Expired - Lifetime DE60133784T2 (de) 2000-01-13 2001-01-15 Prozessor mit verbesserter Verzweigungswirkung

Country Status (4)

Country Link
EP (1) EP1117032B1 (de)
JP (1) JP2001195252A (de)
AT (1) ATE393930T1 (de)
DE (1) DE60133784T2 (de)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5471593A (en) * 1989-12-11 1995-11-28 Branigin; Michael H. Computer processor with an efficient means of executing many instructions simultaneously
US5748936A (en) * 1996-05-30 1998-05-05 Hewlett-Packard Company Method and system for supporting speculative execution using a speculative look-aside table

Also Published As

Publication number Publication date
JP2001195252A (ja) 2001-07-19
EP1117032A2 (de) 2001-07-18
DE60133784D1 (de) 2008-06-12
EP1117032B1 (de) 2008-04-30
ATE393930T1 (de) 2008-05-15
EP1117032A3 (de) 2005-08-17

Similar Documents

Publication Publication Date Title
DE69722138T2 (de) Code-Optimierer für Pipeline-Rechner
DE4217012C2 (de) Mit einer Vielzahl von Befehlsströmen und statischer Verschachtelung arbeitender Mikroprozessor
DE19815865B4 (de) Kompiliersystem und Verfahren zum rekonfigurierbaren Rechnen
DE102018005216A1 (de) Prozessoren, Verfahren und Systeme für einen konfigurierbaren, räumlichen Beschleuniger mit Transaktions- und Wiederholungsmerkmalen
DE69933088T2 (de) Vliw-verarbeiter verarbeitet befehle von verschiedenen breiten
DE60132585T2 (de) Vorrichtung und verfahren zum ausgeben der gruppierung von befehlen in einem vliw-prozessor
DE19903633A1 (de) Implementierung von Boolescher Erfüllbarkeit mit nichtchronologischer Rückwärtsverarbeitung in rekonfigurierbarer Hardware
DE202017103725U1 (de) Blockoperationen für einen Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE112015003587T5 (de) Spezifizieren von komponenten in graphbasierten programmen
CH633643A5 (de) Verfahren zur blockierungsfreien verzahnten simultanverarbeitung mehrerer aufgaben mittels mehrerer programme in einer datenverarbeitungsanlage.
EP1116128A2 (de) Verfahren zum konfigurieren eines konfigurierbaren hardware-blocks
DE102008005515A1 (de) Virtuelle Architektur und virtueller Befehlssatz für die Berechnung paralleler Befehlsfolgen
DE112010003308T5 (de) Einfügen von Operation- und Angeben-Befehlen für einen optimierten SIMD-Code
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE19735348A1 (de) Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern
DE102009012766A1 (de) Ein Zugriffssperrenvorgang, um atomare Aktualisierungen zu einem geteilten Speicher zu ermöglichen
DE4206062A1 (de) Pipelineverarbeitung von instruktionen
US4075689A (en) Computer employing reduction language
DE19860062A1 (de) Verfahren der erzwungenen Registerteilung für die Konstruktion von leistungsarmen VLSI
Verdoolaege et al. Scheduling for PPCG
DE19524402C2 (de) Programmausführungssteuereinrichtung mit einer Adressierbarkeit entsprechend einer M-reihigen Pseudo-Zufallszahlenfolge
DE19506435A1 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
EP0825540A1 (de) Prozessor mit Pipelining-Aufbau
DE4403917A1 (de) Vorrichtung zum Berechnen einer Besetzungszählung
DE19842254A1 (de) Datenverarbeitungsgerät

Legal Events

Date Code Title Description
8364 No opposition during term of opposition