DE112004001854T5 - System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung - Google Patents
System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung Download PDFInfo
- Publication number
- DE112004001854T5 DE112004001854T5 DE112004001854T DE112004001854T DE112004001854T5 DE 112004001854 T5 DE112004001854 T5 DE 112004001854T5 DE 112004001854 T DE112004001854 T DE 112004001854T DE 112004001854 T DE112004001854 T DE 112004001854T DE 112004001854 T5 DE112004001854 T5 DE 112004001854T5
- Authority
- DE
- Germany
- Prior art keywords
- trace
- instructions
- instruction
- cache memory
- memory
- 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.)
- Ceased
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
Abstract
einem Instruktionscache-Speicher (106);
einem Ablaufverfolgungscache-Speicher (160) mit mehreren Ablaufverfolgungscache-Einträgen (162);
einem Ablaufverfolgungsgenerator (170), der mit dem Instruktionscache-Speicher (106) und dem Ablaufverfolgungscache-Speicher (160) verbunden ist;
wobei der Ablaufverfolgungsgenerator (170) ausgebildet ist, eine Gruppe aus Instruktionen, die von dem Instruktionscache-Speicher (106) ausgegeben wird zur Speicherung in einer der mehreren Ablaufverfolgungscache-Einträgen (162) zu empfangen, wobei der Ablaufverfolgungsgenerator (170) ausgebildet ist, eine Sonderinstruktion innerhalb der Gruppe aus Instruktionen zu erkennen und ein Speichern der Sonderinstruktion in einem gleichen der mehreren Ablaufverfolgungscache-Einträge (162) als eine Nicht-Sonderinstruktion zu verhindern.
Description
- Technisches Gebiet
- Diese Erfindung betrifft das Gebiet der Prozessoren und betrifft insbesondere Prozessoren mit Cache-Speicher- bzw. Pufferspeicher mit Ablaufverfolgung.
- Hintergrund der Erfindung
- In einem Prozessor abgearbeitete Instruktionen werden als eine Sequenz von Einsen und Nullen codiert. Für gewisse Prozessorarchitekturen werden Instruktionen mit einer festgelegten Länge, etwa einer gewissen Anzahl an Bytes codiert. Bei anderen Architekturen, etwa der x86-Architektur, kann die Länge der Instruktionen variieren. Die x86-Prozessorarchitektur spezifiziert einen Instruktionssatz mit variabler Länge (d. h. einen Instruktionssatz, in welchem die diversen Instruktionen jeweils durch eine unterschiedliche Anzahl an Bytes spezifiziert sind). Beispielsweise verwenden der 80386 und spätere Versionen des x86-Prozessors zwischen 1 und 15 Bytes, um eine spezielle Instruktion zu kennzeichnen. Instruktionen besitzen einen Op-Code bzw. Operationscodierung, die 1 bis 2 Bytes sein kann, und zusätzliche Bytes können hinzugefügt werden, um Adressenmodi, Operanden und zusätzliche Details hinsichtlich der auszuführenden Instruktion zu spezifizieren.
- In einigen Prozessorarchitekturen wird jede Instruktion in eine oder mehrere einfachere Operationen vor der Ausführung decodiert. Das Decodieren einer Instruktion kann auch das Zugreifen auf eine Registerumbenennungszuordnung beinhalten, um das physikalische Register zu bestimmen, die jedem logischen Register in der Instruktion zugeordnet ist und/oder um ein physikalisches Register zu reservieren, um das Ergebnis der Instruktion zu speichern.
- Instruktionen werden in dem Decodierungsbereich eines Prozessors teilweise auf der Grundlage einer Verzweigungsvorhersage eingeladen, die innerhalb des Prozessors gemacht wird. Im Allgemeinen bestimmen die Bandbreite der Instruktionsabholungs- und Decodierungsbereiche eines Prozessors, ob die Ausführungskerne während jedes Ausführungszyklus vollständig ausgenutzt werden. Folglich ist es wünschenswert in der Lage zu sein, ausreichend Bandbreite in den Instruktionsabhol- und Decodierungsbereichen des Prozessors bereitzustellen, um den Ausführungskern möglichst stark auszulasten.
- Überblick über die Erfindung
- Diverse Ausführungsformen und Verfahren und Systeme zum Handhaben von Ausnahme- bzw. Sonderinstruktionen innerhalb eines Prozessors auf Grundlage eines Cache-Speichers mit Ablaufverfolgung werden hiermit offenbart. In einigen Ausführungsformen umfasst ein System einen Instruktionscache-Speicher bzw. Pufferspeicher, einen Ablaufverfolgungscache-Speicher mit mehreren Ablauflaufverfolgungscache-Einträgen und einen Ablaufsverfolgungsgenerator, der mit dem Instruktionscache-Speicher und dem Ablaufverfolgungscache-Speicher verbunden ist. Der Ablaufverfolgungsgenerator ist ausgebildet, eine Gruppe aus Instruktionen zu empfangen, die von dem Instruktionscache-Speicher zur Speicherung in einem der mehreren Ablaufverfolgungscache-Einträge ausgegeben werden. Der Ablaufverfolgungsgenerator ist ausgebildet, eine Sonderinstruktion innerhalb der Gruppe aus Instruktionen zu erkennen und zu verhindern, dass die Sonderinstruktion in dem gleichen Eintrag der mehreren Ablaufverfolgungscache-Einträge wie eine Nichtsonderinstruktion gespeichert wird. In einer Ausführungsform ist der Ablaufverfolgungsgenerator ausgebildet, die Sonderinstruktion nicht in dem Ablaufverfolgungscache-Speicher abzulegen. In einer weiteren Ausführungsform ist der Ablaufverfolgungsgenerator ausgebildet, die Sonderinstruktion in einem anderen Ablaufverfolgungscache-Eintrag zu speichern im Vergleich zu einer oder mehreren anderen Instruktionen, und um nicht andere Instruktionen mit der Sonderinstruktion in dem anderen Ablaufverfolgungscache-Eintrag zu speichern. Der Ablaufverfolgungsgenerator ist ausgebildet, Instruktionen in dem Ablaufverfolgungscache-Speicher in einer zumindest teilweisen decodierten Form zu speichern.
- Das System kann ferner eine Abschlusswartereihe bzw. Fertigstellungswartereihe aufweisen, die angeschlossen ist, um ausgeführte Instruktionen abzuschließen. Die Abschlusswartereihe ist ausgebildet, die Beendigung einer von dem Ablaufverfolgungscache-Speicher abgeholten Instruktion zu verhindern, bis alle Instruktionen, die in dem gleichen Ablaufverfolgungscache-Eintrag wie diese Instruktion enthalten sind, bereit sind für die Rücknahme bzw. deren Abschluss. Alternativ kann die Abschlusswartereihe ausgebildet sein, eine Beendigung einer beliebigen von dem Ablaufverfolgungscache-Speicher abgeholten Instruktion zu verhindern, bis alle in einer gleichen „Vitalitäts-"gruppe innerhalb eines gleichen Ablaufverfolgungscache-Eintrags wie diese Instruktion enthaltenen Instruktionen bereit sind für die Vervollständigung.
- Das System umfasst eine Neustartlogik, die ausgebildet ist, die Anzahl der Zyklen zu überwachen, die seit der jüngsten Beendigung einer Instruktion durch die Abschlusswartereihe verstrichen sind. Wenn die Anzahl der Zyklen einen Schwellwert übersteigt, ist die Neustartlogik ausgebildet, eine arbeitende Pipeline, die Instruktionen ausführt, die von dem Ablaufverfolgungscache-Speicher abgeholt wurden, zurückzusetzen und die Ausführung aus dem Instruktionscache-Speicher neu zu starten.
- Eine Ausgabeeinheit, die in dem System enthalten ist, ist ausgebildet, Instruktionen, die von dem Ablaufverfolgungscache-Speicher empfangen werden, auszugeben. Die Ausgabeeinheit ist ausgebildet, eine nicht erneut ausführbare Instruktion innerhalb einer Gruppe von Instruktionen, die von dem Ablaufverfolgungscache-Speicher empfangen wurden zu erkennen und eine Kennzeichnung der nicht erneut ausführbaren Instruktion an die Neustartlogik auszugeben. In Reaktion auf die Kennzeichnung ist die Neustartlogik ausgebildet, die bearbeitende Pipeline zurücksetzen und die Ausführung von dem Instruktionscache-Speicher vor der Ausführung der nicht erneut ausführbaren Instruktion erneut zu starten.
- Die Ausgabeeinheit ist ausgebildet, die Sonderinstruktion innerhalb einer Gruppe aus Instruktionen, die von dem Instruktionscache-Speicher empfangen wurden, zu erkennen und eine Kennzeichnung für die Sonderinstruktion an den Ablaufverfolgungsgenerator auszugeben, wodurch der Ablaufverfolgungsgenerator veranlasst wird, die Sonderinstruktion zu erkennen. Der Ablaufverfolgungsgenerator ist ausgebildet, die Sonderinstruktionen in Reaktion auf eine oder mehrere Eigenschaften (beispielsweise Operationscodierungen, Adressiermodi, etc.) der Sonderinstruktionen zu erkennen.
- In einigen Ausführungsformen umfasst ein Verfahren: Empfangen einer Gruppe aus Instruktionen für die Speicherung in einem Ablaufverfolgungscache-Eintrag innerhalb eines Ablaufverfolgungscache-Speichers. Speichern einer oder mehrer Instruktionen, die in der Gruppe aus Instruktionen enthalten sind, in dem Ablaufverfolgungscache-Eintrag; Erkennen einer Sonderinstruktion innerhalb der Gruppe aus Instruktionen; und in Reaktion auf das Erkennen, nicht speichern der Sonderinstruktion innerhalb des Ablaufverfolgungscache-Eintrags aus der einen oder mehreren Instruktionen.
- Kurze Beschreibung der Zeichnungen
- Ein besseres Verständnis der vorliegenden Erfindung kann erreicht werden, wenn die folgende detaillierte Beschreibung in Verbindung mit den folgenden Zeichnungen studiert wird, in denen:
-
1 eine Ausführungsform eines Prozessors zeigt; -
2 eine Blockansicht eines Ablaufverfolgungscache-Speichers gemäß einer Ausführungsform zeigt; -
3a einen beispielhaften Ablaufverfolgungscache-Eintrag gemäß einer Ausführungsform zeigt; -
3b eine Tabelle von „Vitalitäts"- Codierungen, die verwendet werden kann, um die Vitalitätsgruppe zu erkennen, die jede Operation in einer Ablaufverfolgung gehört gemäß einer Ausführungsform; -
4 ein Flussdiagramm einer Ausführungsform eines Verfahrens zum Erzeugen von ablaufverfolgenden zur Speicherung in einem Ablaufverfolgungscache-Speicher gemäß einer Ausführungsform ist; -
5 ein Flussdiagramm einer Ausführungsform eines Verfahrens zum Ausführen einer Ablaufverfolgung ist, die eine Sonderinstruktion gemäß einer Ausführungsform aufweist; -
6 eine Blockansicht eines Computersystems gemäß einer Ausführungsform zeigt; -
7 eine Blockansicht eines Computersystems gemäß einer weiteren Ausführungsform zeigt. - Obwohl die Erfindung diversen Modifizierungen und Alternativen unterliegen kann, sind dennoch spezielle Ausführungsformen beispielhaft in den Zeichnungen dargestellt und werden hierin detailliert beschrieben. Es sollte jedoch selbstverständlich sein, dass die Zeichnungen und die detaillierte Beschreibung nicht beabsichtigen, die Erfindung auf die spezielle offenbarte Form einzuschränken, sondern es ist vielmehr beabsichtigt alle Modifizierungen, Äquivalente und Alternativen abzudecken, die innerhalb des Grundgedankens und Schutzbereichs der vorliegenden Erfindung liegen, wie sie durch die angefügten Patentansprüche definiert ist. Zu beachten ist, dass die Überschriften nur der Gliederung dienen und nicht dazu gedacht sind, die Beschreibung oder die Ansprüche einzuschränken oder zu deuten. Des weiteren ist anzumerken, dass das Wort „kann" durchwegs in dieser Anmeldung in einem zulässigen Sinne (d. h. besitzt die Möglichkeit zu, ist in der Lage zu) verwendet ist, und nicht in einem definitiven Sinne (d. h. muss). Der Begriff „enthalten" und Ableitungen davon bedeuten „einschließlich aber nicht beschränkt darauf". Der Begriff „verbunden" bedeutet „direkt oder indirekt verbunden" und der Begriff „gekoppelt" bedeutet „direkt oder indirekt gekoppelt".
- Art bzw. Arten zum Ausführen der Erfindung
-
1 ist eine Blockansicht logischer Komponenten, die in einer Ausführungsform eines Prozessors100 enthalten sind. Der Prozessor100 ist ausgebildet, Instruktionen auszuführen, die in einem Systemspeicher200 abgelegt sind. Viele dieser Instruktionen operieren auf Daten, die in dem Systemspeicher200 gespeichert sind, der physikalisch über ein Computersystem verteilt sein kann und auf den von einem oder mehreren Prozessoren100 zugegriffen werden kann. In einigen Ausführungsformen ist der Prozessor100 so gestaltet, dass dieser mit der x86-Architektur kompatibel ist. - Der Prozessor
100 kann einen Instruktionscache-Speicher bzw. Pufferspeicher106 und einen Datencache-Speicher bzw. Datenpufferspeicher128 aufweisen. Der Prozessor100 kann ferner eine Vorabholeinheit108 aufweisen, die mit dem Systemspeicher200 verbunden ist. Die Vorabholeinheit108 holt vorläufig eine Instruktionscodierung von dem Systemspeicher200 zur Speicherung in dem Instruktionscache-Speichers106 ab. In einer Ausführungsform ist die Vorabholeinheit108 ausgebildet, um Codierungen aus dem Systemspeicher200 blockweise in den Instruktionscache-Speicher106 zu speichern. In der Vorabholeinheit108 können diverse spezifische Codierungs-Vorabholungs-Verfahren und Algorithmen eingesetzt werden. Die Vorabholeinheit108 kann ferner Instruktionen aus dem Instruktionscache-Speicher106 und Ablaufverfolgungsdaten aus dem Ablaufverfolgungscache-Speicher160 in eine Ausgabeeinheit104 holen. Instruktionen können aus dem Instruktionscache-Speicher106 geholt werden, in Reaktion darauf, dass eine vorgegebene Instruktionsadresse nicht den Ablaufverfolgungscache-Speicher160 betrifft. In ähnlicher Weise können Instruktionen von dem Systemspeicher200 abgeholt werden in Reaktion darauf, dass eine vorgegebene Adresse nicht den Instruktionscache-Speicher106 betrifft. - Eine Ausgabeeinheit
104 ist ausgebildet, Instruktionen von dem Instruktionscache-Speicher106 zu empfangen und decodierte und/oder teilweise decodierte Instruktionen aus dem Ablaufverfolgungscache-Speicher160 zu empfangen. Die Ausgabeeinheit104 kann eine Decodierungseinheit140 aufweisen, um von dem Instruktionscache-Speicher106 empfangene Instruktionen zu decodieren. Die Ausgabeeinheit104 kann ferner eine Mikrocodierungseinheit enthalten, die verwendet wird, wenn mikrocodierte Instruktionen zu handhaben sind. - Die Ausgabeeinheit
104 ist ausgebildet, decodierte Instruktionen an eine oder mehrere Ablauforganisationseinheiten118 auszugeben. Eine oder mehrere Ablauforganisationseinheiten118 können angeschlossen sein, um ausgegebene Instruktionen von der Ausgabeeinheit104 zu empfangen und Instruktionen zu einem oder mehreren Ausführungskernen124 auszugeben. Der bzw. die Ausführungskerne124 enthalten eine Lade/Speichereinheit126 , die ausgebildet ist, Zugriffe auf den Datencache-Speicher128 auszuführen. Ergebnisse, die von dem bzw. den Ausführungskernen124 erzeugt werden, können auf einem Ergebnisbus130 ausgegeben werden. Diese Ergebnisse können als Operandenwerte für nachfolgend ausgegebene Instruktionen verwendet werden und/oder in einer Registerdatei116 gespeichert werden. Eine Rücknahme- bzw. Vollendungswartereihe102 ist mit dem bzw. den Ablauforganisationseinheiten118 und der Ausgabeeinheit104 verbunden. Die Abschlusswartereihe ist ausgebildet, zu bestimmen, wann jede ausgegebene Instruktion vollendet bzw. abgeschlossen werden kann. - Der Instruktionscache-Speicher
106 kann zeitweilig Instruktionen speichern, bevor diese von der Ausgabeeinheit104 empfangen werden. Die Instruktionscodierung kann an den Instruktionscache-Speicher106 geliefert werden, indem die Codierung vorläufig aus dem Systemspeicher200 mittels der Vorabholeinheit108 ausgelesen wird. Der Instruktionscache-Speicher106 kann in diversen Konfigurationen eingerichtet sein (beispielsweise teilassoziativ, vollständig assoziativ oder direkt zugeordnet). - Im hierin verwendeten Sinne bezeichnet der Begriff Instruktion bzw. Anweisung allgemein eine nicht decodierte, eine teilweise decodierte oder eine vollständig decodierte Instruktion. Teilweise und vollständig decodierte Instruktionen können auch als Operationen bezeichnet werden. Beispielsweise kann eine nicht decodierte Instruktion als von der Decodierungseinheit
140 in eine oder mehrere Komponentenoperationen decodiert beschrieben werden, die direkt von dem bzw. den Ausführungskernen124 ausführbar sind. Die Ausgabeeinheit104 kann Signale ausgeben, die Bit-codierte Operationen enthalten, die von dem Ausführungskern124 ausführbar sind, sowie Operandenadressinformationen, unmittelbare Daten und/oder versetzte Daten. Beim Empfang einer Instruktion, die das Aktualisieren eines Register beinhaltet, kann die Ausgabeeinheit104 einen Registerplatz innerhalb der Registerdatei116 reservieren, um spekulative Registerzustände zu speichern (in einer alternativen Ausführungsform kann ein Umordnungspuffer verwendet werden, um einen oder mehrere spekulative Registerzustände für jedes Register zu speichern). Eine Registerzuordnung kann die logischen Registernamen von Quellen- und Zieloperanden den physikalischen Registernamen zuordnen, um die Registerumbenennung zu ermöglichen. Eine derartige Registerzuordnung kann verfolgen, welche Register innerhalb der Registerdatei116 aktuell reserviert und nicht reserviert sind. - Wenn Instruktionen von der Ausgabeeinheit
104 gehandhabt werden, wenn ein erforderlicher Operand eine Registerstelle ist, kann Registeradresseninformation zu einer Registerzuordnung oder einem Umordnungspuffer zugeleitet werden. Beispielsweise gibt es in der x86-Architektur acht 32-Bit-Logikregister (beispielsweise, EAX, EBX, ECX, EDX, EBP, ESI, EDI und ESP). Die physikalische Registerdatei116 (oder ein Umordnungspuffer) enthält Speicherplatz für Ergebnisse, die den Inhalt dieser logischen Register ändern, wodurch eine Ausführung in ungeordneter Reihenfolge möglich ist. Ein physikalisches Register in der Registerdatei116 kann reserviert werden, um das Ergebnis jeder Instruktion zu speichern, die den Inhalt eines der logischen Register modifiziert. Daher kann zu diversen Punkten während des Ausführens eines speziellen Programms die Registerdatei116 (oder in alternativen Ausführungsformen ein Umordnungspuffer) ein oder mehrere Register aufweisen, die den spekulativ ausgeführten Inhalt eines gegebenen lokalen Registers enthalten. - Eine Registerzuordnung kann ein physikalisches Register einem speziellen logischen Register zuordnen, das als ein Zieloperand für eine Instruktion spezifiziert ist. Die Registerdatei
116 kann ein oder mehrere zuvor zugeordnete physikalische Register aufweisen, die einem logischen Register zugeordnet sind, das als ein Quellenoperand einer gegebenen Instruktion spezifiziert ist. Die Registerzuordnung kann eine Markierung für das physikalische Register bereitstellen, das zuletzt diesem logischen Register zugeordnet war. Diese Markierung kann verwendet werden, um auf den Datenwert des Operanden in der Registerdatei116 zuzugreifen, oder um den Datenwert über eine Ergebnisweiterleitung auf dem Ergebnisbus130 zu empfangen. Wenn der Operand einer Speicherstelle entspricht, kann der Operandenwert auf dem Ergebnisbus (für eine Ergebnisweiterleitung und/oder Speicherung in der Registerdatei116 ) über die Lade/Speichereinheit126 bereitgestellt werden. Operandendatenwerte können dem bzw. den Ausführungskernen124 bereitgestellt werden, wenn die Instruktion von einer der Ablauforganisationseinheiten118 ausgegeben wird. Zu beachten ist, dass in alternativen Ausführungsformen Operandenwerte einer entsprechenden Ablauforganisationseinheit118 zugeführt werden können, wenn eine Instruktion ausgegeben wird (anstatt dass diese einem entsprechenden Ausführungskern124 zugeführt wird, wenn die Instruktion ausgegeben wird). - Der Prozessor
100 aus1 unterstützt eine Ausführung in ungeordneter Reihenfolge. Eine Abschlusswartereihe102 (oder alternativ ein Umordnungspuffer) können den Ablauf der ursprünglichen Programmsequenz für Registerlese- und Schreiboperation verfolgen, wodurch eine spekulative Instruktionsausführung und eine Verzweigungsfehlinterpretationswiederherstellung möglich ist und eine genaue Sonderbearbeitung ermöglicht werden. In vielen Ausführungsformen kann die Abschlusswartereihe102 in ähnlicher Weise wie ein Umordnungspuffer arbeiten. Anders als ein typischer Umordnungspuffer stellt die Abschlusswartereihe102 jedoch keinen Speicherplatz für Datenwerte bereit. In alternativen Ausführungsformen kann die Abschlusswartereihe102 mehr wie ein Umordnungspuffer fungieren und auch die Registerumbenennung unterstützen, indem Datenwertspeicherplatz für spekulative Registerzustände bereitgestellt wird. In einigen Ausführungsformen kann die Abschlusswartereihe102 in einer „zuerst hinein, zuerst heraus" Konfiguration eingerichtet sein, in der Operationen zur „Unterseite" des Puffers wandern, wenn sie validisiert werden, so dass Platz geschaffen wird für neue Einträge an der „Oberseite" der Wartereihe. Wenn Instruktionen abgeschlossen sind, kann die Abschlusswartereihe102 Register in der Registerdatei116 freigeben, die nicht mehr benötigt werden, um spekulative Registerzustände zu speichern und kann Signale an eine Registerzuordnung senden, die angeben, welche Register aktuell frei sind. Durch Bewahren spekulativer Registerzustände innerhalb der Registerdatei116 (oder in alternativen Ausführungsformen innerhalb eines Umordnungspuffers) bis die Instruktionen, die diese Zustände erzeugten, gültig sind, können die Ergebnisse spekulativ ausgeführter Instruktionen entsprechend einem falsch vorhergesagten Weg in der Registerdatei116 als unzulässig erklärt werden, wenn eine Verzweigungsvorhersage nicht korrekt ist. - Die Bit-codierten Operationen und die unmittelbaren Daten, die an den Ausgängen der Ausgabe
104 bereitgestellt werden, können zu einer oder mehreren Ablauforganisationseinheiten118 geleitet werden. Zu beachten ist, dass im hierin verwendeten Sinne eine Ablauforganisationseinheit eine Einrichtung ist, die erkennt, wann Instruktionen für die Ausführung bereit sind und bereite Instruktionen zu einem oder mehreren Ausführungseinheiten ausgibt. Beispielsweise ist eine Reservierungsstation eine Art einer Ablauforganisationseinheit. Jede Ablauforganisationseinheit118 ist in der Lage, Instruktionsinformationen (beispielsweise Bit-codierte Ausführungsbits sowie Operandenwerte, Operandenmarken, und/oder unmittelbare Daten) für einige anhängige Instruktionen, die auf eine Ausgabe an einen Ausführungskern124 warten, zu halten. In einigen Ausführungsformen muss jede Ablauforganisationseinheit118 nicht notwendigerweise Speicherplatz für einen Operandenwert bereitstellen. Stattdessen kann jede Ablauforganisationseinheit ausgegebene Instruktionen und in der Registerdatei116 verfügbare Ergebnisse überwachen, um zu bestimmen, wann Operandenwerte verfügbar sind, so dass sie von einem oder mehreren Ausführungskernen124 gelesen werden (von der Registerdatei116 oder dem Ergebnisbus130 ). In einigen Ausführungsformen kann jede Ablauforganisationseinheit118 mit einer zugeordneten Funktionseinheit (beispielsweise Ganzzahleinheit, Gleitkommaeinheit, Lade/Speichereinheit, etc.) und/oder einem Ausführungskern124 verknüpft sein. In anderen Ausführungsformen kann eine einzelne Ablauforganisationseinheit118 Instruktionen an mehr als einen Empfänger ausgeben. - Die Ablauforganisationseinheiten
118 können vorgesehen sein, um zwischenzeitlich Operationsinformationen zu speichern, die von dem bzw. den Ausführungskernen124 auszuführen sind. Instruktionen werden an den bzw. die Ausführungskerne124 zur Ausführung in Reaktion darauf ausgegeben, dass die Werte von erforderlichen Operanden zur Zeit der Ausführung verfügbar sind. Folglich kann die Reihenfolge, in der die Instruktionen ausgeführt werden, unter Umständen nicht die gleich Reihenfolge sein, die der ursprünglichen Programminstruktionssequenz entspricht. - In einer Ausführungsform kann jeder der Ausführungskerne
124 Funktionseinheiten enthalten, etwa eine Ganzzahleinheit, die ausgebildet ist, Ganzzahlarithmetikoperationen der Addition und Subtraktion, sowie Verschiebungen, Drehungen, logische Operationen und Verzweigungsoperationen auszuführen. Eine Gleitkommaeinheit kann ebenso enthalten sein, um Gleitkommaoperationen auszuführen. Ein oder mehrere der Ausführungskerne124 können ausgebildet sein, eine Adressenerzeugung für Lese- und Schreib-Speicheroperationen, die von der Lade/Speichereinheit126 auszuführen sind, durchzuführen. - Der bzw. die Ausführungskerne
124 können auch Informationen hinsichtlich der Ausführung konditionaler Verzweigungsinstruktionen für die Verzweigungsvorhersageeinheit132 bereitstellen. Wenn Information von dem Ausführungskern124 anzeigt, dass eine Verzweigungsvorhersage nicht korrekt ist, kann die Verzweigungsvorhersageeinheit132 Instruktionen, die auf die falsch vorhergesagte Verzweigung folgen und die in den Instruktionsbearbeitungspipeline eingespeist wurden, stornieren und die Vorabholeinheit108 neu anweisen. Die neu angewiesene Vorabholeinheit108 kann dann anfangen, den richtigen Satz an Instruktionen aus dem Instruktionscache-Speicher106 , dem Ablaufverfolgungscache-Speicher160 und/oder dem Systemspeicher200 auszulesen. In derartigen Situationen können Ergebnisse der Instruktionen in der ursprünglichen Programmsequenz, die nach der fehlgedeuteten Verzweigungsinstruktion auftraten, verworfen werden, einschließlich jener, die spekulativ ausgeführt wurden und zeitweilig in der Lade/Speichereinheit126 und/oder der Registerdatei116 gespeichert wurden. - Ergebnisse, die von Komponenten innerhalb der bzw. den Ausführungskernen
124 erzeugt wurden, können auf den Ergebnisbus130 zu der Registerdatei116 ausgegeben werden, wenn ein Registerwert aktualisiert wird. Wenn der Inhalt einer Speicherzelle geändert wird, können in dem bzw. den Ausführungskernen124 erzeugte Ergebnisse zu der Lade/Speichereinheit126 zugeführt werden. - Die Lade/Speichereinheit
126 stellt eine Schnittstelle zwischen den Ausführungskernen124 und dem Datencache-Speicher128 bereit. In einer Ausführungsform ist die Lade/Speichereinheit126 mit einem Lade/Speicherpuffer mit diversen Speicherplätzen für Daten und Adresseninformationen für anhängige Lade- bzw. Lesevorgänge oder Speicher- bzw. Schreibvorgänge versehen. Die Lade/Speichereinheit126 kann ferner eine Abhängigkeitsüberprüfung für Leseinstruktionen im Hinblick auf anhängige Schreibinstruktionen durchführen, um sicherzustellen, dass die Datenkohärenz bewahrt bleibt. - Der Datencache-Speicher
128 ist ein Cache- bzw. Pufferspeicher, der zum Zwischenspeichern von Daten vorgesehen ist, die zwischen der Lade/Speicher-Einheit 126 und dem Systemspeicher200 ausgetauscht werden. Ähnlich wie der Instruktionscache-Speicher106 , der zuvor beschrieben ist, kann der Datencache-Speicher128 in einer Vielzahl spezifischer Speicherkonfigurationen eingerichtet sein, zu denen eine teilassoziative Konfiguration gehört. Des weiteren können der Datencache-Speicher106 und der Instruktionscache-Speicher128 in einigen Ausführungsformen als ein vereinigter Cache- bzw. Pufferspeicher eingerichtet sein. - Die Abschlusswartereihe
102 stellt Signale, die Programmablaufverfolgung kennzeichnen, für den Ablaufverfolgungsgenerator170 bereit. Der Ablaufverfolgungsgenerator107 kann auch als eine Fülleinheit beschrieben werden. Der Ablaufverfolgungsgenerator170 kann von der Abschlusswartereihe102 erkannte Ablaufverfolgungsspuren in dem Ablaufverfolungscache-Speicher160 speichern. Jede Ablaufverfolgungsspur kann Instruktionen enthalten, die in einer anderen Reihenfolge als die Programmreihenfolge gespeichert sind und die Teil diverser unterschiedlicher Basisblöcke sind. Ein Basisblock ist ein Satz aus Instruktionen, die entweder alle ausgeführt werden, oder die gar nicht ausgeführt werden. Anders ausgedrückt, wenn eine Instruktion eines Basisblocks ausgeführt wird, werden alle anderen Instruktionen dieses Basisblocks ebenfalls ausgeführt. Ein Beispiel eines Basisblocks ist ein Satz aus Instruktionen, der unmittelbar nach einer Verzweigungsinstruktion beginnt und mit einer weiteren Verzweigungsinstruktion endet. Die Ablaufverfolgungsspur oder – kennzeichnung, die in dem Ablaufverfolgungscache-Speicher160 gespeichert sind, können in einigen Ausführungsformen decodierte oder teilweise decodierte Instruktionen enthalten. Im hierin verwendeten Sinne ist eine „Ablaufverfolgungsspur oder – kennzeichnung" eine Gruppe aus Instruktionen, die in einem einzelnen Ablaufverfolgungscache-Eintrag (beispielsweise einer einzelnen Reihe oder Zeile) in dem Ablaufverfolgungscache-Speicher160 gespeichert sind. Die gesamte Information in einem Eintrag kann gleichzeitig abgerufen werden (beispielsweise in Reaktion auf das Setzen eines Lesezyklusses des Ablaufverfolgungscache-Speichers). Zu beachten ist, dass in alternativen Ausführungsformen der Ablaufverfolgungsgenerator170 mit dem Frontende des Prozessors (beispielsweise vor oder nach der Ausgabeeinheit) verbunden und ausgebildet sein kann, Ablaufverfolgungskennzeichen in Reaktion darauf zu erzeugen, dass Instruktionen abgeholt und/oder ausgegeben werden. - Die Vorabholeinheit
108 kann Instruktionen aus dem Ablaufverfolgungscache-Speicher160 in die Ausgabeeinheit104 einladen. Das Abholen von Instruktionen aus dem Ablaufverfolgungscache-Speicher160 kann ein verbessertes Abholleistungsverhalten über Verzweigungsgrenzen hinweg im Vergleich zum Abholen von dem Instruktionscache-Speicher106 liefern. Wenn beispielsweise eine vorhergesagte Verzweigung genommen wird, können Instruktionen in dem vorhergesagten genommenen Weg bereits in dem gleichen Ablaufverfolgungskennzeichen, wie die Verzweigung innerhalb des Ablaufverfolgungscache-Speichers160 gespeichert sein. Ferner kann in Ausführungsformen, in denen Instruktionen in dem Ablaufverfolgungscache-Speicher160 zumindest in teilweise decodierter Form gespeichert sind, das Abholen von Instruktionen aus dem Ablaufverfolgungscache-Speicher ermöglichen, dass die Decodiereinheit140 zumindest teilweise umgangen wird, woraus sich eine reduzierte Anzahl an Ausgabezyklen für die zwischengespeicherten Instruktionen ergibt. Folglich ermöglicht es der Ablaufverfolgungscache-Speicher160 , dass die Zeit, die erforderlich ist, um die zwischengespeicherten Instruktionen teilweise (oder vollständig) zu decodieren, über einige Ausführungsiterationen „amortisiert" wird, wenn Ablaufverfolgungskennzeichnen mehr als ein mal ausgeführt werden. - Zu beachten ist, dass der Prozessor
100 viele weitere Komponenten zusätzlich zu den gezeigten enthalten und/oder mit diesen verbunden sein kann. Beispielsweise können zusätzliche Ebenen an Zwischenspeicherung (intern und/oder extern zu dem Prozessor100 ) zwischen dem Prozessor100 und dem Systemspeicher200 enthalten sein. In ähnlicher Weise kann der Prozessor100 in einigen Ausführungsformen eine integrierte Speichersteuerung enthalten, die ausgebildet ist, den Systemspeicher200 zu steuern. Ferner können in den diversen Ausführungsformen die Verbindungen zwischen logischen Komponenten unterschiedlich sein. - Ablaufverfolgungscache-Speicher
-
2 zeigt einen beispielhaften Ablaufverfolgungscache-Speicher160 gemäß einer Ausführungsform. Der Ablaufverfolgungscache-Speicher160 weist mehrere Einträge162 auf. Jeder Eintrag162 speichert eine Ablaufverfolgungsspur bzw. ein Ablaufverfolgungskennzeichen, das mehrere Instruktionen165 enthält. Die Instruktionen165 in einem Ablaufverfolgungskennzeichen müssen nicht notwendigerweise in der Programmreihenfolge gespeichert sein. Beispielsweise kann ein Eintrag162 eine Verzweigungsinstruktion und die Instruktion enthalten, die das Ziel der Verzweigung ist, wenn die Verzweigung genommen wird (im Gegensatz zu der Instruktion, die in der Programmreihenfolge auf die Verzweigung folgt). In einigen Ausführungsformen können die Instruktionen165 in jedem Ablaufverfolgungscache-Eintrag162 in zumindest teilweise decodierter Form gespeichert sein. Im hierin verwendeten Sinne bezeichnet der Begriff „Ablaufverfolgungskennzeichen" einen Gruppe aus einer oder mehreren Instruktionen, die in einem einzelnen Ablaufverfolgungscacheeintrag162 gespeichert sind. - Es sei nochmals auf
1 verwiesen. Zu beachten ist, dass die Abarbeitung eines Instruktionsstromes, der aus dem Ablaufverfolgungscache-Speicher160 abgeholt wird, sich von der Bearbeitung eines Instruktionsstromes unterscheiden kann, der von dem Instruktionscache-Speicher106 abgeholt wird. Der Instruktionsstrom aus dem Instruktionscache-Speicher106 kann Informationen enthalten, die Instruktionsgrenzen kennzeichnen, selbst nachdem Instruktionen in eine oder mehrere Komponentenoperationen decodiert sind. Diese Grenzinformationen können von der Abschlusswartereihe102 verwendet werden, um zu bestimmen, wann die Operation(en), die einer speziellen Instruktion entspricht, abgeschlossen werden kann. Typischerweise operiert die Abschlusswartereihe102 so, dass Operationen in der ursprünglichen Programmreihenfolge abgeschlossen werden. Eine oder mehrere Operationen, die der gleichen Instruktion entsprechen, können gleichzeitig abgeschlossen werden. - Im Gegensatz dazu muss der Instruktionsstrom aus dem Ablaufverfolgungscache-Speicher
160 nicht notwendigerweise Informationen enthalten, die Instruktionsgrenzen kennzeichnen, wenn die Instruktionen vor der Speicherung in dem Ablaufverfolgungscache-Speicher160 decodiert und/oder modifiziert wurden (beispielsweise durch Kombinieren von Instruktionen zur Erhöhung der Speichereffizienz innerhalb des Ablaufverfolgungscache-Speichers160 ). Folglich muss die Rücknahmereihenfolge102 unter Umständen Instruktionen, die in einem derartigen Instruktionsstrom enthalten sind, in einer gröberen „Auflösung" abschließen. Beispielsweise beendet in einigen Ausführungsformen die Abschlusswartereihe102 nicht notwendigerweise Instruktionen, die in einem Ablaufverfolgungskennzeichen enthalten sind, bis alle Instruktionen in diesem Ablaufverfolgungskennzeichen für die Beendigung bereit sind. - Ein Problem, das in einigen Prozessoren auf Basis eines Ablaufverfolgungs-Speichers auftreten kann, besteht darin, dass gewisse Instruktionen, die hierin als „Ausnahme"- oder Sonderinstruktionen bezeichnet werden, eine spezielle Handhabung erfordern können, die einen Einfluss hat, wenn jene Instruktionen abgeschlossen werden können. Da das Zurückziehen bzw. Beenden dieser anderen Instruktionen (einschließlich jener, die früher in der Programmreihenfolge auftreten) in dem gleichen Ablaufverfolgungskennzeichen wie eine Sonderinstruktion davon abhängen kann, dass die Sonderinstruktion bereit für die Beendigung ist, kann eine Sonderinstruktion das Beenden der anderen Instruktionen in dem Ablaufverfolgungskennzeichnen blockieren. In einigen Situationen, in denen das Nichtbeenden der Sonderinstruktion das Beenden älterer Instruktionen, die in dem gleichen Ablaufverfolgungskennzeichen enthalten sind, blockieren kann, kann der Prozessor lahmgelegt werden. Wenn ferner eine Sonderinstruktion das Abschließen anderer Instruktionen in dem gleichen Ablaufverfolgungskennzeichen auf Grund des Fehlens einer Instruktionsgrenzeninformation, die von dem Ablaufverfolgungscache-Speicher bereitgestellt wird, blockiert wird, müssen u. U. die nicht beendbaren Instruktionen (und jüngere Instruktionen in der Programmreihenfolge, die bereits ausgegeben wurden) in diesem Ablaufverfolgungskennzeichen erneut aus dem Instruktionskennzeichenspeicher abgerufen und erneut ausgeführt werden.
- Sonderinstruktionen schließen jene ein, die Ausnahmefälle und Interrupts erzeugen. Eine Sonderinstruktion kann unter Umständen auch deutlich länger für die Vervollständigung brauchen im Vergleich zu Instruktionen, die keine Sonderinstruktionen sind. Beispielsweise kann der Ausführungskern
124 eine typische Nicht-Sonderinstruktion in 1 bis 3 Ausführungszyklen abschließen. Im Gegensatz dazu kann eine Sonderinstruktion einen Interrupt erzeugen, der 10 mal so viele Ausführungszyklen (oder mehr) zum Ausführen benötigt. Bei zumindest einigen Sonderinstruktionen kann es vorteilhaft sein oder gar erforderlich sein, dass alle Instruktionen, die älter (in der Programmreihenfolge) sind als eine spezielle Sonderinstruktion, dass diese unabhängig von dieser Sonderinstruktion beendet werden können. Wie zuvor angemerkt ist, kann das Fehlen einer Instruktionsgrenzeninformation in einem Ablaufverfolgungskennzeichen die Möglichkeit kleiner machen oder ganz aufheben, dass unterschiedliche Instruktionen in dem gleichen Ablaufverfolgungskennzeichen unabhängig voneinander abgeschlossen werden können. Folglich kann das Mithineinnehmen einer Sonderinstruktion in ein Ablaufverfolgungskennzeichen zusammen mit anderen Instruktionen schließlich dazu führen, dass alle Instruktionen in diesem Ablaufverfolgungskennzeichen erneut aus dem Instruktionscache-Speicher ausgelesen werden müssen, um die Grenzinformation zu erhalten. - Um die Wahrscheinlichkeit zu reduzieren, dass eine Sonderinstruktion das Abschließen der anderen Instruktionen blockiert und/oder bewirkt, dass andere Instruktionen verworfen, erneut abgerufen und erneut ausgeführt werden, kann der Ablaufverfolgungsgenerator
170 ausgebildet sein, Sonderinstruktionen zu erkennen und diese Instruktionen nicht in einem Ablaufverfolgungskennzeichen zu speichern, das andere Instruktionen aufweist. In einigen Ausführungsformen kann der Ablaufverfolgungsgenerator170 eine erkannte Sonderinstruktion in einem Ablaufverfolgungskennzeichen ablegen, das lediglich diese Sonderinstruktion enthält. Obwohl eine derartige Ausbildung die Speichereffizienz des Ablaufverfolgungscache-Speichers reduzieren kann, ist es dennoch möglich, ein Abholen aus dem Ablaufverfolgungscache-Speicher fortzuführen anstatt zu bewirken, dass das Abholen zwischen dem Instruktionscache-Speicher106 und dem Ablaufverfolgungscache-Speicher160 abwechselt. In anderen Ausführungsformen speichert der Ablaufverfolgungsgenerator170 erkannte Sonderinstruktionen gar nicht in dem Ablaufverfolgungscache-Speicher160 , so dass Sonderinstruktionen stets von dem Instruktionscache-Speicher106 abgerufen werden. Der Ablaufverfolgungsgenerator170 ist ein Beispiel einer Einrichtung zum Speichern einer Gruppe aus Instruktionen in einem Ablaufverfolgungscache-Eintrag innerhalb eines Ablaufverfolgungscache-Speichers. - Der Ablaufverfolgungsgenerator
170 kann Sonderinstruktionen erkennen, indem jede mögliche Instruktion zur Speicherung in dem Ablaufverfolgungscache-Speicher auf gewisse Operationscodierungen, Operanden, Adressenmodi und andere Charakteristiken hin untersucht wird. In einer Ausführungsform kann das Erkennen einer oder mehrerer Eigenschaften möglicher Sonderinstruktionen in dem Ablaufverfolgungsgenerator170 einprogrammiert sein. Zu beachten ist, dass in derartigen Ausführungsformen der Ablaufverfolgungsgenerator170 ausgebildet sein kann, um stets gewisse Arten an Instruktionen als Sonderinstruktionen zu erkennen, selbst wenn diese Arten an Operationen ohne spezielle Handhabung unter gewissen Umständen ausführbar sind. In einigen Ausführungsformen kann die Decodiereinheit140 Markierungen, die Sonderinstruktionen kennzeichnen, während der Instruktionsdecodierung erzeugen. Jede Markierung kann zu dem Prozessor100 zusammen mit der decodierten Instruktion, die durch diese Markierung als Sonderinstruktion gekennzeichnet ist, weitergeleitet werden. Somit kann anstatt (oder zusätzlich) zu dem unabhängigen Bestimmen, ob decodierte Instruktionen Sonderinstruktionen sind, der Ablaufverfolgungsgenerator170 sich auf die Markierungen stützen, die von der Decodiereinheit140 erzeugt wurden, um Sonderinstruktionen zu erkennen. Somit sind sowohl der Ablaufverfolgungsgenerator170 als auch die Decodiereinheit140 Beispiele einer Einrichtung zum Erfassen einer Sonderinstruktion innerhalb der Gruppe aus Instruktionen. - In Reaktion auf das Erkennen einer Sonderinstruktion in einem Strom aus Instruktionen, die in dem Ablaufverfolgungscache-Speicher
160 gespeichert werden, kann der Ablaufverfolgungsgenerator170 das Speichern von Instruktionen in dem aktuellen Ablaufverfolgungskennzeichen beenden, selbst wenn noch Platz für die Speicherung weiterer Instruktionen in diesem Ablaufverfolgungskennzeichen vorhanden ist. Wenn der Ablaufverfolgungsgenerator ausgebildet ist, Sonderinstruktionen in einem alleinstehenden Ablaufverfolgungskennzeichnen in dem Ablaufverfolgungscache-Speicher160 zu speichern, kann der Ablaufverfolgungsgenerator einen neuen Ablaufverfolgungscache-Eintrag reservieren, um die Sonderinstruktion zu speichern. Der Ablaufverfolgungsgenerator170 kann die nächste Instruktion, die unmittelbar nach der Sonderinstruktion in der Programmreihenfolge auftritt, in einem weiteren Ablaufverfolgungscache-Eintrag speichern. Wenn der Ablaufverfolgungsgenerator170 stattdessen ausgebildet ist, Sonderinstruktionen aus dem Ablaufverfolgungscache-Speicher160 generell auszuschließen, kann der Ablaufverfolgungsgenerator einfach das aktuelle Ablaufverfolgungskennzeichen beim Erkennen der Sonderinstruktion beenden (solange keine älteren Instruktionen bereits in dem aktuellen Ablaufverfolgungskennzeichen gespeichert wurden) und damit beginnen, die nächste Nicht-Sonderinstruktion in der Programmreihenfolge, die ein Kandidat für die Speicherung in dem Ablaufverfolgungscache-Speicher ist, in dem nächsten Ablaufverfolgungskennzeichen zu speichern. Zu beachten ist, dass de Ablaufverfolgungsgenerator170 Ablaufinformation in dem aktuellen Ablaufverfolgungskennzeichen setzen kann, um anzuzeigen, dass die Sonderinstruktion die nächste abzuholende Instruktion ist. Folglich kann in Reaktion darauf, dass dieses Ablaufverfolgungskennzeichen abgerufen wird, die Vorabholeinheit170 ausgebildet sein, die in der Ablaufinformation gekennzeichnete Instruktion aus dem Instruktionscache-Speicher106 abzurufen. Somit geht der Ausführungsablauf von dem Ablaufverfolgungscache-Speicher160 zu dem Instruktionscache-Speicher106 auf Grund des Ausschließens der Sonderinstruktion aus dem Ablaufverfolgungscache-Speicher160 über. - Einige Sonderinstruktionen können unter Umständen von dem Ablaufverfolgungsgenerator
170 nicht erkannt werden. Beispielsweise können einige Instruktionen sich unterschiedlich verhalten, jedes mal wenn diese Instruktionen ausgeführt werden. Auf Grund der Natur dieser Instruktionen (beispielsweise sind derartige Instruktionen u.U. selten Sonderinstruktionen) kann der Ablaufverfolgungsgenerator170 ausgebildet sein, nicht automatisch diese Instruktionen als Sonderinstruktionen zu kennzeichnen. Als Folge davon können diese Sonderinstruktionen in einem Ablaufverfolgungskennzeichen zusammen mit anderen Instruktionen durch den Ablaufverfolgungsgenerator170 gespeichert werden. Um zu verhindern, dass das Mithereinnehmen der Sonderinstruktionen Probleme nach sich zieht auf Grund einer blockierten Beendigung anderer Instruktionen in dem gleichen Ablaufverfolgungskennzeichen, kann die Neustartlogik190 überwachen, wie viele Taktzyklen vergangen sind, seit die Abschlusswartereihe102 zuletzt Operationen abgeschlossen hat. Wenn keine Operationen in einer vorbestimmten Anzahl von Taktzyklen beendet wurden, kann die Neustartlogik190 den Arbeitsablauf des Prozessors190 aus dem Instruktionscache-Speicher106 heraus erneut starten. In einer Ausführungsform startet die Neustartlogik190 das Ausführen, indem die bearbeitende Pipeline zurückgesetzt wird und die Instruktionen neu abgerufen werden, wobei mit der ältesten noch anhängigen noch nicht abgeschlossenen Instruktion innerhalb des Prozessors100 begonnen wird. Wenn die Instruktionen aus dem Instruktionscache-Speicher106 abgerufen werden, sind für die Abschlusswartereihe102 Instruktionen über Instruktionsgrenzen verfügbar. Wenn daher das Nichtbeenden, das von der Neustartlogik190 erkannt wird, durch eine Sonderinstruktion hervorgerufen wird, die das Beenden eines Ablaufverfolgungskennzeichens blockiert hat, kann das Abrufen der Instruktionen aus dem Instruktionscache-Speicher106 die Abschlusswartereihe102 in die Lage versetzen, die problematische Sonderinstruktion unabhängig abzuschließen, ohne dass unnötigerweise das Beenden anderer Instruktionen blockiert wird. - Gewisse Instruktionen können nicht erneut ausführbar sein und somit können derartige Instruktionen unkorrekt sein, wenn diese von dem Ablaufverfolgungscache-Speicher
160 ausgeführt, für das Beenden durch eine Sonderinstruktion, die in dem gleichen Ablaufverfolgungskennzeichen enthalten ist, blockiert werden und dann auf Grund der Funktion der Neustartlogik190 erneut ausgeführt werden. Beispielsweise kann das Verhalten gewisser Ladevorgänge (beispielsweise einige I/O-Ladevorgänge) den ausgelesenen Wert modifizieren. Um Probleme zu vermeiden, die auftreten können, wenn derartige Instruktionen erneut ausgeführt werden, kann der Ablaufverfolgungsgenerator170 ausgebildet sein, die Instruktionen als eine weitere Klasse an Sonderinstruktionen zu kennzeichnen, die nicht mit anderen Instruktionen in Ablaufverfolgungskennzeichen zu speichern sind. Somit kann der Ablaufverfolgungsgenerator170 diese Sonderinstruktionen von dem Ablaufverfolgungscache-Speicher160 ausschließen oder diese Sonderinstruktionen in einzelnen Ablaufverfolgungskennzeichen speichern, die keine anderen Instruktionen enthalten (beispielsweise wie dies zuvor in Bezug auf die Sonderinstruktionen im Allgemeinen beschrieben ist). - Wie gewisse andere Sonderinstruktion können einige nicht ausführbare Instruktionen unter Umständen nicht von dem Ablauferzeugungsgenerator
170 erkannt werden. Beispielsweise kann ein Ladevorgang auf eine Adresse des Systemspeichers200 während einer Programmiteration und auf ein I/O-Register in dem nächsten Schritt zugreifen. Nach der ersten Iteration kann der Ladevorgang in einem Ablaufverfolgungskennzeichen gespeichert werden. Während des nächsten Schrittes kann der Ladevorgang nicht erneut ausführbar sein auf Grund der Natur des Auslesens aus dem I/O-Register. Wenn daher eine weitere Instruktion in dem gleichen Ablaufverfolgungskennzeichen wie der Ladevorgang eine Sonderinstruktion ist (beispielsweise wenn eine weitere Instruktionen einen Seitenfehler erzeugt), kann die Beendigung des Ablaufverfolgungskennzeichens lang genug verzögert werden, so dass die Neustartlogik190 aufgerufen wird. Jedoch könnte dies in nicht akzeptabler Weise ein erneutes Ausführen des Ladevorgangs hervorrufen. Um diese Situation zu vermeiden, kann die Ausgabeeinheit104 oder eine weitere Komponente in dem Prozessor ausgebildet sein, den Ladevorgang zu einem gewissen Punkt, bevor der Ladevorgang tatsächlich ausgeführt wird, diesen als nicht mehr erneut ausführbar zu erkennen. In Reaktion auf das Erkennen einer nicht erneut ausführbaren Instruktion innerhalb einer Gruppe aus Instruktionen, die aus dem Ablaufverfolgungscache-Speicher160 abgerufen werden, kann die Neustartlogik190 veranlassen, dass die Prozessorpipeline zurückgesetzt wird (vor dem Ausführen der nicht erneut ausführbaren Instruktion) und ein erneuter Start des Ausführens aus dem Instruktionscache-Speicher106 heraus durchgeführt wird. - Beispielhafte Ablaufverfolgung
-
3a zeigt eine Ausführungsform eines Ablaufverfolgungscache-Eintrags162 , der ausgebildet ist, zumindest teilweise decodierte Instruktionen zu speichern. In der Ausführungsform aus3a ist ein Ablaufverfolgungscache-Eintrag162 in der Lage bis zu 8 Komponentenoperationen, die in einer Gruppe aus decodierten und/oder teilweisen decodierten Instruktionen enthalten sind, in Operationsspeichereinheiten116a bis116h zu speichern. Zu beachten ist, dass in anderen Ausführungsformen weniger oder zusätzliche Operationsspeichereinheiten166 enthalten sein können, so dass die Speicherung einer anderen Anzahl an Operationen innerhalb jedes Ablaufverfolgungscache-Eintrags162 möglich ist. - Gewisse Operationsspeichereinheiten
166 innerhalb eines Ablaufverfolgungscache-Eintrags162 können für gewisse Arten an Operationen reserviert sein. Beispielsweise werden in einigen Ausführungsformen die Operationsspeichereinheiten166a bis166d verwendet, um Speicheroperationen zu speichern. In ähnlicher Weise können die Operationsspeichereinheiten116e bis166h für die Speicherung von Datenoperationen verwendet werden. Zu beachten ist, dass in anderen Ausführungsformen gewisse Arten an Operationen mit gewissen Arten an Speichereinheiten in unterschiedlicher Weise verknüpft werden können (oder überhaupt nicht verknüpft sind). - Zusätzlich dazu, dass mehrere Operationsspeichereinheiten
166 enthalten sind, beinhaltet jeder Ablaufverfolgungscache-Eintrag162 auch eine Identifizierungsmarkierung164 und eine Ablaufsteuerungsinformation168 . Die Markierung164 kann ähnlich zu einer Markierung in dem Instruktionscache-Speicher106 sein, die es der Vorabholeinheit108 ermöglicht, zu bestimmen, ob eine gegebene Operation auf den Ablaufverfolgungscache-Speicher160 abzielt oder nicht. Beispielsweise kann die Markierung164 alle oder einige der Adressenbits enthalten, die eine Instruktion in dem Ablaufverfolgungscache-Eintrag kennzeichnen (beispielsweise kann die Markierung die Adresse der frühesten Instruktion in der Programmreihenfolge enthalten, die in diesem Ablaufverfolgungskennzeichen gespeichert ist). In einigen Ausführungsformen weist die Markierung ausreichend Information auf, so dass die Adresse jeder Instruktion (oder zumindest der frühesten Instruktion innerhalb jeder Hierarchiegruppe, wie dies nachfolgend detaillierter beschrieben ist) unabhängig identifiziert werden kann, wobei in dem Ablaufverfolgungskennzeichen gespeicherte Informationen verwendet wird. In anderen Ausführungsformen ist lediglich die Adresse der frühesten Instruktion innerhalb eines Ablaufverfolgungskennzeichens verfügbar. - In der dargestellten Ausführungsform kann jedes Ablaufverfolgungskennzeichen bis zu zwei Verzweigungsinstruktionen enthalten. In anderen Ausführungsformen können weniger oder mehr Verzweigungsinstruktionen innerhalb jedes Ablaufverfolgungskennzeichens enthalten sein. Die Ablaufsteuerinformation
168 kann eine Marke für jede Verzweigungsinstruktion, die in dem Ablaufverfolgungskennzeichen enthalten ist, aufweisen. Die Marke kann eine Kennzeichnung sein, die die Adresse identifiziert, zu der die Steuerung verzweigen soll in Abhängigkeit von der Auflösung (genommen, nicht genommen) einer entsprechenden Abzweigung. Somit kann jedes Element der Ablaufsteuerungsinformation168 mit einer speziellen Verzweigungsinformation verknüpft sein. Beispielsweise kann in einer Ausführungsform eine einzelne Ablaufsteuerungsinformationsspeicherzelle in einem Ablaufverfolgungskennzeichen mit der ersten Verzweigungsoperation in dem Ablaufverfolgungskennzeichen verknüpft sein und die andere Ablaufsteuerinformationsspeicherzelle kann mit der zweiten Verzweigung in dem Ablaufverfolgungskennzeichen verknüpft sein. Alternativ kann die Ablaufsteuerinformation Markierungen oder andere Informationen enthalten, die die Verzweigungsoperation kennzeichnen, mit der diese Ablaufsteuerinformation verknüpft ist. In noch anderen Ausführungsformen kann eine Verzweigungsvorhersage und/oder Information, die angibt, welche Ablaufsteuerinformation einer Verzweigungsoperation entspricht, kann mit dieser Verzweigungsoperation innerhalb eines Operationsspeichers166 gespeichert sein. - Bereitstellung einer erhöhten Beendigungsauflösung innerhalb von Ablaufverfolgungskennzeichen.
- Wie es zuvor erwähnt ist, kann es eine begrenzte Information über Instruktionsgrenzen in einem Ablaufverfolgungskennzeichen geben. Wenn beispielsweise Instruktionen teilweise in ihre Komponentenoperationen vor der Speicherung in einem Ablaufverfolgungskennzeichen decodiert werden, kann unter Umständen keine Information in dem Ablaufverfolgungskennzeichen enthalten sein, die die unterschiedlichen Instruktionen in diesen Ablaufverfolgungskennzeichen abgrenzt. Wenn nach dem Decodieren Komponentenoperationen unterschiedlicher Instruktionen kombiniert, neu geordnet und/oder modifiziert werden, kann es ferner noch schwieriger sein, Instruktionsgrenzen zu erkennen.
- Um eine verbesserte Instruktionsgrenzeninformation in einem Ablaufverfolgungskennzeichen bereitzustellen, werden decodierte Instruktionen innerhalb eines Ablaufverfolgungskennzeichens in unterschiedliche „Vitalitäts"- bzw. „Lebendigkeits"-gruppen aufgeteilt. Der Ablaufverfolgungsgenerator
170 kann jede decodierte Instruktion, die in einem speziellen Ablaufverfolgungscache-Eintrag gespeichert wird, als zu einer speziellen Prioritätsgruppe innerhalb dieses Ablaufverfolgungskennzeichens gehörig markieren. Informationen über die Instruktionsgrenzen decodierter Instruktionen in jeder Vitalitätsgruppe sind unter Umständen nicht verfügbar. Jedoch können die Vitalitätsgruppen selbst so erzeugt werden, dass decodierte Instruktionen auf der Grundlage von Vitalitätsgruppengrenzen abgeschlossen werden. - Jede Operation
166 innerhalb eines Ablaufverfolgungskennzeichens kann eine zugehörige „Vitalitäts"-kennzeichnung aufweisen. Die Vitalitätskennzeichnung jeder Operation kann mit der zugehörigen Operation in einer der Operationsspeichereinheiten166 gespeichert werden. Die Vitalitätskennzeichnungen geben die Vitalitätsgruppe an, zu der jede Operation gehört. Jede Vitalitätsgruppe ist eine Gruppe aus Operationen innerhalb des Ablaufverfolgungskennzeichens, die Teil des gesamten Basisblocks sind. Beispielsweise können die Operationen bis zu und einschließlich der ersten Verzweigungsoperation in der Programmreihenfolge innerhalb des Ablaufverfolgungskennzeichens in einer einzelnen Vitalitätsgruppe enthalten sein. Operationen, deren Ausführung von der Auflösung der ersten Verzweigungsoperation abhängt, können in eine weitere Vitalitätsgruppe eingeordnet werden. Somit ist eine Vitalitätsgruppe ähnlich zu einem Basisblock dahingehend, dass Operationen in der gleichen Vitalitätsgruppe entweder alle ausgeführt werden oder dass keine Instruktion ausgeführt wird. Eine Vitalitätsgruppe unterscheidet sich von einem Basisblock dahingehend, dass Operation in dem selben Basisblock in unterschiedlichen Ablaufverfolgungskennzeichen enthalten sein können (beispielsweise können eine Operationen innerhalb des Basisblocks in der letzten Vitalitätsgruppe innerhalb eines Ablaufverfolgungskennzeichens enthalten sein und die verbleibenden Operationen in diesem Basisblock können in der ersten Vitalitätsgruppe eines weiteren Ablaufverfolgungskennzeichens enthalten sein). Somit sind Operationen innerhalb der gleichen Vitalitätsgruppe notwendigenneise Teil des gleichen Basisblocks, jedoch sind Operationen innerhalb des gleichen Basisblocks nicht notwendigerweise Teil der gleichen Vitalitätsgruppe (d. h., wenn dieser Basisblock mehr als einen Ablaufverfolgungscache-Eintrag überspannt). - Die Vitalitätskennzeichnungen geben die Programmreihenfolge jeder Operation im Verhältnis zu der bzw. den Verzweigungsoperationen, die in dem gleichen Ablaufverfolgungscache-Eintrag enthalten sind, an. Operationen in einer ersten Vitalitätsgruppe sind nicht abhängig von dem Ergebnis der ersten Verzweigungsoperation innerhalb des Ablaufverfolgungskennzeichens. Zu beachten ist, dass, da das Ausführen der ersten Verzweigungsoperation nicht konditional ist, die erste Verzweigungsoperation Teil der ersten Vitalitätsgruppe ist. Diese Operationen in der ersten Vitalitätsgruppe können mit einer anderen Vitalitätskennzeichnung belegt werden, als verwendet wird, um eine zweite Vitalitätsgruppe aus Operationen zu kennzeichnen, die nach der ersten Verzweigungsoperation auftreten. In ähnlicher Weise können Instruktionen in einer dritten Vitalitätsgruppe, die von den Ergebnissen sowohl der ersten Verzweigungsoperation als auch der zweiten Verzweigungsoperation abhängen (d. h. die letzte Operation, die in der zweiten Vitalitätsgruppe enthalten ist) als eine noch weitere Vitalitätskennzeichnung identifiziert werden. Vitalitätskennzeichnungen ermöglichen es, dass Operationen in einem Ablaufverfolgungscache-Eintrag
162 in einer Reihenfolge gespeichert werden, die sich von ihrer Programmreihenfolge unterscheidet, während dennoch die Programmreihenfolge (im Vergleich zu den Verzweigungsoperationen) der Operationen bestimmt werden kann., - Ferner ermöglichen es die Vitalitätskennzeichnungen, dass die Ausgabeeinheit
104 vorhersagt, welche Operationen innerhalb eines speziellen Ablaufverfolgungskennzeichens ausgeführt werden. Operationen in der ersten Vitalitätsgruppe (d. h. Operationen, die nicht von der ersten Verzweigung, die in einem Ablaufverfolgungskennzeichen enthalten ist, abhängen) werden stets ausgeführt (unter der Annahme, dass überhaupt Operationen innerhalb des Ablaufverfolgungskennzeichens ausgeführt werden). Jedoch hängt die Ausführung von Operationen in der zweiten Vitalitätsgruppe (d. h. Operationen, die von der ersten Verzweigung abhängen) von dem Ergebnis der ersten Verzweigung ab. Beispielsweise können in Ausführungsformen, in denen der Ablaufverfolgungsgenerator170 an der Rückseite der bearbeitenden Pipeline des Prozessors100 enthalten ist, Operationen in Ablaufverfolgungskennzeichen gemäß der Reihenfolge gespeichert werden, in der diese Operationen ausgeführt werden, so dass, wenn die Operationen nachfolgend erneut ausgeführt werden, auf diese von dem Ablaufverfolgungscache-Speicher aus, anstatt von dem Instruktionscache-Speicher aus, zugegriffen wird. Wenn somit die erste in dem Ablaufverfolgungskennzeichen gespeicherte Verzweigung das erste mal genommen wird, wenn die Verzweigung ausgeführt wurde, können die in der zweiten Vitalitätsgruppe gespeicherten Operationen die Operationen sein, die ausgeführt werden sollten, wenn die erste Verzweigung genommen wird. Wenn daher das Ablaufverfolgungskennzeichen später von der Ausgabeeinheit104 zugeführt wird und die aktuelle Verzweigungsvorhersage für die erste Verzweigung „nicht genommen" wird, kann die Ausgabeeinheit104 vorhersagen, dass die Operationen in der zweiten Vitalitätsgruppe nicht ausgeführt werden sollen. Die Ablaufsteuerinformation168 , die mit der ersten Verzweigungsoperation verknüpft ist, kann ebenso verwendet werden, um das vorläufige Abholen von Instruktionen oder Ablaufverfolgungskennzeichen zu beginnen, die ausgeführt werden sollten, wenn die erste Verzweigung nicht genommen wird. -
3b zeigt beispielhafte Vitalitätscodierungen, die in einer Ausführungsform verwendet werden können. Die erste Vitalitätscodierung „bedingungslos lebendig bzw. vital" kann verwendet werden, um die erste (in der Programmreihenfolge) Vitalitätsgruppe innerhalb des Ablaufverfolgungskennzeichens zu kennzeichnen. Operationen in dieser Vitalitätsgruppe sind bedingungslos „lebendig" bzw. vital in dem Sinne, dass, wenn das Ablaufverfolgungskennzeichen ausgeführt wird, diese Operationen stets ausgeführt werden. Die erste Vitalitätsgruppe kann eine Verzweigungsoperation als die letzte Operation (in der Programmreihenfolge) innerhalb dieser Vitalitätsgruppe aufweisen. Diese Operationen hängen nicht von Verzweigungsoperationen, die in dem gleichen Ablaufverfolgungskennzeichen sind, ab. In vielen Ausführungsformen können diese Operationen in einer beliebigen Reihenfolge im Vergleich zueinander innerhalb des Ablaufverfolgungskennzeichens gespeichert werden. - Die nächste Vitalitätscodierung „folgend auf erste Verzweigung" wird verwendet, um die zweite (in der Programmreihenfolge) Vitalitätsgruppe in dem Ablaufverfolgungskennzeichen zu kennzeichnen. Diese Operationen sind von dem Ergebnis der ersten Verzweigungsoperation abhängig, die in der vorhergehenden Vitalitätsgruppe enthalten ist. Zu beachten ist, dass, wenn Operationen innerhalb der Vitalitätsgruppe nicht spekulativ ausgeführt werden, alle Operationen innerhalb dieser Vitalitätsgruppe ausgeführt werden.
- Die dritte Vitalitätscodierung, „folgend auf zweite Verzweigung", wird verwendet, um den dritten (in Programmreihenfolge) Basisblock in dem Ablaufverfolgungskennzeichen zu kennzeichnen. Diese Operationen sind von dem Ergebnis sowohl der ersten als auch der zweiten Verzweigungsoperation in dem Ablaufverfolgungskennzeichen abhängig. Somit werden diese Operationen nicht ausgeführt, selbst wenn Operationen mit der zweiten Vitalitätscodierung ausgeführt werden. Wenn wie zuvor Operationen innerhalb dieser Vitalitätsgruppe nicht spekulativ ausgeführt werden, werden alle Operationen innerhalb dieser Vitalitätsgruppe ausgeführt.
- Die „bedingungslos tot"-Vitalitätscodierung kann verwendet werden, um eine unbenutzte Operationsspeichereinheit
166 zu kennzeichnen. Operationsspeichereinheiten166 können unbenutzt sein, wenn mehr als die maximale Anzahl an Verzweigungsoperationen innerhalb eines Satzes an Operationen auftritt. Wenn beispielsweise bis zu 8 Operationen in einem Ablaufverfolgungskennzeichen gespeichert werden können und lediglich zwei Verzweigungsoperationen in einem Ablaufverfolgungskennzeichen gespeichert werden können, dann werden weniger als 8 Operationen in einem Ablaufverfolgungskennzeichen gespeichert, wenn ein gegebener Satz aus 8 Operationen drei Verzweigungsoperationen enthält. Wenn daher eine maximale Grenze hinsichtlich der Anzahl N an Verzweigungsoperationen gegeben ist, die in einem Ablaufverfolgungskennzeichen gespeichert werden kann, kann eine Speicherung der N-ten Verzweigungsoperation in dem Ablaufverfolgungskennzeichen dieses sodann abschließen. Wenn ferner in einigen Ausführungsformen eine gewisse Operation in einem Ablaufverfolgungskennzeichen gespeichert wird, können nachfolgende Operationen (in der Programmreihenfolge) unter Umständen nicht in dem Ablaufverfolgungskennzeichen gespeichert werden, selbst wenn Operationsspeicherplatz verfügbar ist. Beispielsweise können Unterroutinenaufrufe ein Ablaufverfolgungskennzeichen beenden (beispielsweise so, dass die erste Operation innerhalb der Unterroutine als die erste Operation in einem weiteren Ablaufverfolgungskennzeichen gespeichert wird, so dass die Markierung dieser Operation als eine Markierung für das Ablaufverfolgungskennzeichen verwendet werden kann). In ähnlicher Weise können Rücksprungoperationen für Unterroutinen ein Ablaufverfolgungskennzeichen beenden. - Es sei wieder auf
1 verwiesen; der Ablaufverfolgungsgenerator170 kann ausgebildet sein, die geeignete Vitalitätscodierung für jede Operation zu erzeugen und diese Vitalitätscodierung in der gleichen Operationsspeichereinheit166 wie die Operation innerhalb eines Ablaufverfolgungscache-Eintrags162 in dem Ablaufverfolgungscache-Speicher160 zu speichern. Der Ablaufverfolgungsgenerator170 kann Vitalitätscodierungen für jede Operation auf der Grundlage von Informationen über das Ergebnis jeder Verzweigung erzeugen, wenn jede Verzweigungsoperation das erste mal ausgeführt wurde. Diese Information kann der Abschlusswartereihe102 zugeführt werden. Weitere Informationen können von der Verzweigungsvorhersageeinheit132 bereitgestellt werden, die das vorhergesagte Ergebnis und/oder den Erfolg jeder Vorhersage für jede Verzweigung in einer oder mehreren vorhergehenden Ausführungen kennzeichnen. - Wenn Instruktionen aus dem Ablaufverfolgungscache-Speicher
160 abgeholt werden, kann die Vitalitätscodierung, die mit jeder Operation verknüpft ist, zu dem Prozessor zusammen mit der Instruktion weitergeleitet werden. Die Abschlusswartereihe102 kann die Vitalitätscodierung für jede Operation verwenden, um die Grenzen zu bestimmen, mit denen Operationen beendet werden können. Wenn beispielsweise anstelle des Blockierens des Abschließens von Operationen in einem Ablaufverfolgungskennzeichen alle Operationen in diesem Ablaufverfolgungskennzeichen bereit sind für die Beendigung, kann die Abschlusswartereihe102 eine Teilmenge der Operationen in dem Ablaufverfolgungskennzeichen abschließen, sobald alle Operationen in der gleichen Vitalitätsgruppe in diesem Ablaufverfolgungskennzeichen für die Fertigstellung bereit sind. In einigen Ausführungsformen kann diese erhöhte Auflösung für die Operationsbeendigung die Wahrscheinlichkeit reduzieren, dass die Neustartlogik100 die Ausführung auf Grund einer blockierten Fertigstellung von Operationen neu starten muss. -
4 zeigt eine Ausführungsform eines Verfahrens zum Erzeugen von Ablaufverfolgungskennzeichen zur Speicherung in einem Ablaufverfolgungscache-Speicher. Bei10 werden eine oder mehrere Instruktionen zur Speicherung in dem Ablaufverfolgungscache-Speicher empfangen. Wenn eine der Instruktionen eine Sonderinstruktion ist (beispielsweise, wenn eine Instruktion eine hohe Wahrscheinlichkeit aufweist, eine Ausnahmehandhabung hervorzurufen, oder wenn eine Instruktion nicht erneut ausführbar ist), werden die Sonderinstruktionen nicht in dem gleichen Ablaufverfolgungskennzeichen wie andere Instruktionen gespeichert, wie dies bei12 und14 gezeigt ist. Wenn keine der Instruktionen, die bei10 empfangen werden, Sonderinstruktionen sind, werden diese Instruktionen zusammen in dem gleichen Ablaufverfolgungskennzeichen gespeichert und/oder in das gleiche Ablaufverfolgungskennzeichen wie zusätzliche Nicht-Sonderinstruktionen integriert, wie dies bei12 und16 gezeigt ist. -
5 ist ein Flussdiagramm einer Ausführungsform eines Verfahrens zum Handhaben nicht erkannter Sonderinstruktionen, die nachteiligerweise in einem Ablaufverfolgungskennzeichen innerhalb des Ablaufverfolgungscache-Speichers enthalten sind. Bei20 wird ein Instruktionsstrom aus dem Ablaufverfolgungscache-Speicher abgerufen. Wenn eine Sonderinstruktion in dem abgerufenen Instruktionsstrom erkannt wird, wie dies bei22 gezeigt ist, kann die Pipeline zurückgesetzt werden und die Abarbeitung durch den Prozessor kann aus dem Instruktionscache-Speicher heraus neu gestartet werden, wie dies bei24 gezeigt ist. - Einige Sonderinstruktionen können unter Umständen bei
22 nicht innerhalb des Instruktionsstromes erkannt worden sein. Wenn eine derartige Instruktion eine Ausnahme hervorruft, die wiederum das Beenden der anderen Instruktionen in dem gleichen Ablaufverfolgungskennzeichen wie die Sonderinstruktion blockiert, kann die Prozessorpipeline zurückgesetzt werden und die Ausführung kann aus dem Instruktionscache-Speicher heraus neu gestartet werden, wie dies bei26 und28 gezeigt ist. Das Bestimmen, ob die Beendigung von Instruktionen blockiert ist, kann das Überwachen des Abschließens der Instruktion beinhalten. Wenn keine Instruktionen für eine vordefinierte Zahl an Zyklen abgeschlossen werden, so kann die Operationsbeendigung als blockiert betrachtet werden. Wenn die Beendigung von Instruktionen nicht blockiert ist, kann es dem Instruktionsstrom, der aus dem Ablaufverfolgungscache-Speicher abgerufen wurde, gestattet werden, ausgeführt und beendet zu werden, wie dies bei26 und30 gezeigt ist. - Beispielhafte Computersysteme
-
6 zeigt eine Blockansicht einer Ausführungsform eines Computersystems400 , das einen Prozessor100 aufweist, der mit einer Vielzahl an Systemkomponenten über eine Busbrücke402 gekoppelt ist. Der Prozessor100 kann eine Ausgabeeinheit104 , einen Ablaufverfolgungscache-Speicher160 , eine Abschlusswartereihe102 , eine Neustartlogik190 und/oder einen Ablaufverfolgungscache-Generator170 aufweisen, wie dies zuvor beschrieben ist. Andere Ausführungsformen eines Computersystems sind möglich und hierin mit eingeschlossen. In dem gezeigten System ist ein Hauptspeicher200 mit der Busbrücke402 über einen Speicherbus406 verbunden, und eine Graphiksteuerung408 ist mit der Busbrücke402 über einen AGP-Bus410 verbunden. Diverse PCI-Geräte412a bis412b sind mit der Busbrücke402 über einen PCI-Bus414 verbunden. Eine sekundäre Busbrücke416 kann ebenso vorgesehen sein, um eine Schnittstelle zu einem oder mehreren EISA- oder ISA-Geräten418 über einen EISA/ISA-Bus420 bereitzustellen. In diesem Beispiel ist der Prozessor100 mit einer Busbrücke402 über einen CPU-Bus424 und mit einem optionalen L2-Cache-Speicher428 verbunden. In einigen Ausführungsformen kann der Prozessor100 einen integrierten L1-Cache-Speicher (nicht gezeigt) enthalten. - Die Busbrücke
402 stellt eine Schnittstelle zwischen dem Prozessor100 , dem Hauptspeicher404 , der Graphiksteuerung408 und den mit den PCI-Bus414 verbundenen Geräten bereit. Wenn eine Operation von einem der Geräte, die mit der Busbrücke402 verbunden sind, empfangen wird, erkennt die Busbrücke402 das Ziel der Operation (beispielsweise ein spezielles Gerät oder in diesem Falle der PCI-Bus414 , dass das Ziel auf dem PCI-Bus414 ist). Die Busbrücke402 leitet die Operation an das Zielgerät weiter. Die Busbrücke402 übersetzt im Allgemeinen eine Operation von einem von dem Quellengerät oder dem Bus benutzten Protokoll in das von dem Zielgerät oder Bus benutzten Protokoll. - Zusätzlich zur Bereitstellung einer Schnittstelle zu einem ISA/EISA-Bus für den PCI-Bus
414 kann die sekundäre Busbrücke416 weitere Funktionen enthalten. Eine Eingabe/Ausgabe-Steuerung (nicht gezeigt), sowohl extern als auch in der sekundären Busbrücke416 integriert, kann ebenso in dem Computersystem400 vorgesehen sein, um eine funktionelle Unterstützung für eine Tastatur und eine Maus422 und für diverse serielle und parallele Anschlüsse bereitzustellen. Eine externe Cache-Speichereinheit (nicht gezeigt) kann ebenso mit dem CPU-Bus424 zwischen dem Prozessor100 und der Busbrücke402 in weiteren Ausführungsformen vorgesehen sein. Alternativ kann der externe Cache-Speicher mit der Busbrücke402 verbunden sein, und eine Cache-Steuerlogik für den externen Cache-Speicher kann in der Busbrücke402 integriert sein. Der L2 Cache-Speicher428 ist in einer Rückseitenkonfiguration zu dem Prozessor100 dargestellt. Zu beachten ist, dass der L2 Cache-Speicher428 auch separat zu dem Prozessor100 vorgesehen sein kann, integriert in einem Gehäuse (beispielsweise Schlitz 1 oder Schlitz A) in dem Prozessor100 vorgesehen sein kann, oder dieser kann zusammen mit dem Prozessor100 auf einem Halbleitersubstrat vorgesehen sein. - Der Hauptspeicher
200 ist ein Speicher, in welchem Anwendungsprogramme gespeichert sind und von dem aus der Prozessor100 hauptsächlich arbeitet. Ein geeigneter Hauptspeicher200 kann einen DRAM (dynamischer Speicher mit wahlfreiem Zugriff) umfassen. Beispielsweise sind eine Reihe von Bänken aus SDRAM (synchrone DRAM) oder Rambus DRAM (RDRAM) geeignet. - Die PCI-Geräte
412a bis412b stellen anschaulich diverse periphere Geräte dar, etwa Netzwerkschnittstellenkarten, Videobeschleuniger, Audiokarten, Festplatten- oder Laufwerkstreiber oder Treibersteuerungen, SCSI- (Kleincomputersystemschnittstellen-) Adapter und Telefonkarten. In ähnlicher Weise ist das ISA-Gerät418 stellvertretend für diverse Arten peripherer Geräte, etwa ein Modem, eine Klangkarte und diverse Datennahmekarten, etwa GPIB oder Feldbusschnittstellenkarten. - Die Graphiksteuerung
408 ist vorgesehen, um das Erzeugen von Text und Bildern auf einer Anzeige426 zu steuern. Die Graphiksteuerung408 kann einen typischen Graphikbeschleuniger darstellen, der allgemein bekannt ist, um damit dreidimensionale Datenstrukturen zu erzeugen, die in effizienter Weise in den Hauptspeicher200 geschoben und daraus abgerufen werden können. Die Graphiksteuerung408 kann daher ein Master des AGP-Busses410 sein, in der Hinsicht, dass diese auf eine Zielschnittstelle innerhalb der Bussbrücke402 zugreifen und von dieser anfordern kann, um damit Zugriff auf den Hauptspeicher200 zu erhalten. Ein entsprechender Graphikbus erlaubt das rasche Zugreifen auf Daten aus dem Hauptspeicher404 . Für gewisse Operationen kann die Graphiksteuerung408 ferner ausgebildet sein, um PCI-Protokolltransaktionen auf dem AGP-Bus410 zu erzeugen. Die AGP-Schnittstelle der Busbrücke402 kann somit Funktionen aufweisen, um sowohl AGP-Protokolltransaktionen sowie auch PCI-Protokollziel- und Initiatortransaktionen zu unterstützen. Die Anzeige426 ist eine beliebige elektronische Anzeige, auf der Bilder oder Text dargestellt werden können. Eine geeignete Anzeige426 umfasst Kathodenstrahlröhre („CRT"), eine Flüssigkristallanzeige („LCD"), etc. - Es sollte beachtet werden, dass obwohl die AGP-, PCI- und ISA- oder EISA-Busse in der obigen Beschreibung als Beispiele aufgeführt sind, andere Busarchitekturen nach Bedarf eingesetzt werden können. Ferner ist zu beachten, dass das Computersystem
400 ein Multiverarbeitungscomputersystem mit zusätzlichen Prozessoren (beispielsweise dem Prozessor100a , wie er als optionale Komponente des Computersystems400 gezeigt ist) enthalten kann. Der Prozessor100a kann ähnlich im Aufbau sein wie der Prozessor100 . Genauer gesagt, der Prozessor100a kann in einer Ausführungsform eine identische Kopie des Prozessors100 sein. Der Prozessor100a kann mit der Busbrücke402 über einen unabhängigen Bus (wie in6 gezeigt) verbunden sein oder kann den CPU-Bus224 zusammen mit dem Prozessor100 benutzen. Ferner kann der Prozessor100a mit einem optionalen L2 Cache-Speicher428 ähnlich zu dem L2 Cache-Speicher428 verbunden sein. - In
7 ist eine weitere Ausführungsform eines Computersystems400 gezeigt. Andere Ausführungsformen sind möglich und hierin berücksichtigt. In der Ausführungsform aus7 umfasst das Computersystem400 diverse Verarbeitungsknoten612a ,612b ,612c und612d . Jeder Verarbeitungsknoten ist mit einem entsprechenden Speicher614a bis614d über eine Speichersteuerung616a bis616d , die jeweils in dem entsprechenden Verarbeitungsknoten612a bis612d enthalten sind, verbunden. Des weiteren können die Verarbeitungsknoten612a bis612d eine Schnittstellenlogik aufweisen, die verwendet wird, um eine Kommunikation zwischen dem Verarbeitungsknoten612a bis612d herzustellen. Beispielsweise umfasst der Verarbeitungsknoten612a eine Schnittstellenlogik618a zur Kommunikation mit dem Verarbeitungsknoten612b , eine Schnittstellenlogik618b zur Kommunikation mit dem Verarbeitungsknoten612c und eine dritte Schnittstellenlogik618c zur Kommunikation mit einem noch weiteren Verarbeitungsknoten (nicht gezeigt). In ähnlicher Weise umfasst der Verarbeitungsknoten612b Schnittstellenlogiken618d ,618e und618f ; der Verarbeitungsknoten612c umfasst Schnittstellenlogiken618g ,618h und618i ; und der Verarbeitungsknoten612d umfasst Schnittstellenlogiken618j ,618k und618l . Der Verarbeitungsknoten612d ist angeschlossen, um mit mehreren Eingabe/Ausgabe-Geräten (beispielsweise Geräte620a bis620b in einer prioritätsverketteten Konfiguration) über die Schnittstellenlogik618l zu kommunizieren. Andere Verarbeitungsknoten können mit anderen I/O-Geräten in ähnlicher Weise in Verbindung treten. - Die Verarbeitungsknoten
612a bis612d implementieren eine paketbasierte Verbindung für die Kommunikation unter den Verarbeitungsknoten. In der vorliegenden Ausführungsform ist die Verbindung als ein Satz aus unidirektionalen Leitungen eingerichtet (beispielsweise Leitungen624a zum Übersenden von Paketen von dem Verarbeitungsknoten612a zu dem Verarbeitungsknoten612b verwendet, und Leitungen624b werden zum Übermitteln von Paketen von dem Verarbeitungsknoten612b zu dem Verarbeitungsknoten612a verwendet). Andere Leitungssätze624c bis624h werden zur Übermittlung von Paketen zwischen anderen Verarbeitungsknoten verwendet, wie dies in7 gezeigt ist. Generell kann jeder Leitungssatz614 eine oder mehrere Datenleitungen, eine oder mehrere Taktleitungen entsprechend den Datenleitungen und eine oder mehrere Steuerleitungen, die die Art der übertragenen Pakete kennzeichnen, enthalten. Die Verbindung kann in einer mit dem Cache-Speicher kohärenten Weise zur Kommunikation zwischen Verarbeitungsknoten oder in einer nicht kohärenten Weise zur Kommunikation zwischen einem Verarbeitungsknoten und einem I/O-Gerät (oder einer Busbrücke mit einem I/O-Bus konventionellen Aufbaus, etwa dem PCI-Bus oder dem ISA-Bus) betrieben werden. Des weiteren kann die Verbindung in einer nicht kohärenten Weise unter Anwendung einer prioritätsverketteten Struktur zwischen I/O-Geräten betrieben werden, wie dies gezeigt ist. Zu beachten ist, dass ein von einem Verarbeitungsknoten zu einem weiteren Knoten zu übertragendes Paket durch einen oder mehrere zwischengeschaltete Knoten laufen kann. Beispielsweise kann ein von dem Verarbeitungsknoten612a zu dem Verarbeitungsknoten612d übertragenes Paket durch den Verarbeitungsknoten612b oder den Verarbeitungsknoten612c laufen, wie in7 gezeigt ist. Es kann ein beliebiger geeigneter Signalführungsalgorithmus verwendet werden. In anderen Ausführungsformen des Computersystem400 können weitere oder weniger Verarbeitungsknoten als in der in7 gezeigten Ausführungsform verwendet sein. - Im Allgemeinen können die Pakete als eine oder mehrere Bitzeiten auf den Leitungen
624 zwischen den Verarbeitungsknoten übertragen werden. Eine Bit-Zeit kann die ansteigende oder die abfallende Flanke des Taktsignals auf der entsprechenden Taktleitung sein. Die Pakete können Befehlspakete zur Initiierung von Transaktionen, Abfrage- bzw. Sondierungspakete zur Beibehaltung der Cache-Speicherkohärenz und Antwortpakete von Antworten auf Anfragen und Befehle enthalten. - Die Verarbeitungsknoten
612a bis612d können zusätzlich zu einer Speichersteuerung und einer Schnittstellenlogik einen oder mehrere Prozessoren aufweisen. Allgemein gesagt, ein Verarbeitungsknoten umfasst mindestens einen Prozessor und kann optional eine Speichersteuerung zur Kommunikation mit einem Speicher oder anderen Logikers nach Bedarf enthalten. Genauer gesagt, kann jeder Verarbeitungsknoten612a bis612d eine oder mehrere Kopien des Prozessors100 aufweisen. Die Verarbeitungsknoten612 können jeweils einen Prozessor100 enthalten, der eine Ausgabeeinheit104 , einen Ablaufverfolgungscache-Speicher160 , eine Abschlusswartereihe102 , eine Neustartlogik190 , und/oder einem Ablaufverfolgungsgenerator170 aufweist, wie dies zuvor beschrieben ist. Eine externe Schnittstelleneinheit18 kann die Schnittstellenlogik618 in den Verarbeitungsknoten sowie die Speichersteuerung616 aufweisen. - Die Speicher
614a bis614d können beliebige Speichereinrichtungen enthalten. Beispielsweise kann der Speicher614a bis614d ein oder mehrere RAMBUS DRAM's (RDRAM's) synchrone DRAMS (SDRAM's), statische RAM's, etc. aufweisen. Der Adressenraum des Computersystems400 ist unter den Speichern614a bis614d aufgeteilt. Jeder Verarbeitungsknoten612a bis612d kann eine Speicherzuordnung enthalten, die verwendet wird, um zu bestimmen, welche Adresse auf welche Speicher614a bis614d abgebildet wird, und somit zu welchem Verarbeitungsknoten612a bis612d eine Speicheranforderung für eine spezielle Adresse weitergeleitet werden soll. In einer Ausführungsform ist der Kohärenzpunkt für eine Adresse innerhalb des Computersystems400 die Speichersteuerung616a bis616d , die mit dem Speicher gekoppelt ist, der die der Adresse entsprechenden Bytes enthält. Anders ausgedrückt, die Speichersteuerung616a bis616d ist dafür zuständig, dass sichergestellt ist, dass jeder Speicherzugriff auf den entsprechenden Speicher614a bis614d in einer mit dem Cache-Speicher kohärenten Weise stattfindet. Die Speichersteuerungen616a bis616d können eine Steuerschaltung als Schnittstelle für die Speicher614a bis614d aufweisen. Des weiteren können die Speichersteuerungen616a bis616d Anforderungswartereihen zum Aneinanderreihen von Speicheranforderungen enthalten. - Die Schnittstellenlogiken
618a bis618l können diverse Puffer zur Aufnahme von Paketen aus der Verbindung und zur Pufferung von Paketen, die über die Verbindung zu übertragen sind, aufweisen. Das Computersystem400 kann einen beliebigen Ablaufsteuerungsmechanismus zum Übersenden von Paketen anwenden. Beispielsweise speichert in einer Ausführungsform jede Schnittstellenlogik618 eine Zahl einer Gruppe jeder Art von Puffern innerhalb des Empfängers auf der anderen Seite der Verbindung, mit der diese Schnittstellenlogik verbunden ist. Die Schnittstellenlogik überträgt ein Paket nicht, sofern nicht die empfangende Schnittstellenlogik einen freien Puffer aufweist, um das Paket zu speichern. Wenn ein Empfangspuffer freigegeben wird, indem ein Paket weitergeleitet wird, übersendet die empfangende Schnittstellenlogik eine Nachricht an die sendende Schnittstellenlogik, um anzuzeigen, dass der Puffer nunmehr freigegeben ist. Ein derartiger Mechanismus wird als ein „Coupon-basiertes" System bezeichnet. - Die I/O-Geräte
620a bis620b können beliebige geeignete I/O-Geräte sein. Beispielsweise können die I/O-Geräte620a bis620b Geräte zur Kommunikation mit einem anderen Computersystem sein, mit denen die Geräte verbunden sind (beispielsweise Netzwerkschnittstellenkarten oder Modems). Des weiteren können die I/o-Geräte620a bis620b Videobeschleuniger, Audiokarten, Festplatten oder Laufwerkstreiber oder Treibersteuerungen, SCSI- (Kleincomputersystemschnittstellen-) Adapter und Telefonkarten, Plankarten und diverse Datennahmekarten, etwa GPIB oder Feldbusschnittstellenkarten enthalten. Zu beachten ist, dass der Begriff „I/O-Gerät" und der Begriff „peripheres Gerät" hierin als Synonym bezeichnet sind. - Im hierin verwendeten Sinne bezeichnen die Begriffe „Taktzyklus" oder „Zyklus" ein Zeitintervall, in welchem diverse Phasen der Instruktionsverarbeitungspipelines ihre Aufgaben abschließen. Instruktionen und berechnete Werte werden durch Speicherelemente (etwa Register oder Arrays) auf der Grundlage eines Taktsignals, das den Taktzyklus definiert, empfangen. Beispielsweise kann eine Speicherelement einen Wert auf der Grundlage der ansteigenden oder abfallenden Flanke des Taktsignals erfassen.
- Es sind diverse Variationen und Modifizierungen für den Fachmann auf der Grundlage und Würdigung dieser Offenbarung ersichtlich. Es ist daher beabsichtigt, dass die folgenden Patentansprüche so interpretiert werden, dass alle derartigen Variationen und Modifizierungen mit eingeschlossen sind.
- Industrielle Anwendbarkeit
- Diese Erfindung ist im Allgemeinen auf das Gebiet von Prozessoren anwendbar.
- Zusammenfassung
- Ein System umfasst einen Instruktionscache-Speicher (
106 ), einen Ablaufverfolgungscache-Speicher (160 ) mit mehreren Ablaufverfolgungscache-Einträgen (162 ), und einen Ablaufverfolgungsgenerator (170 ), der mit dem Instruktionscache-Speicher (106 ) und dem Ablaufverfolgungscache-Speicher (160 ) verbunden ist. Der Ablaufverfolgungsgenerator (170 ) kann ausgebildet sein, eine Gruppe aus Instruktionen, die von dem Instruktionscache-Speicher (106 ) ausgegeben wird, zur Speicherung in einer der mehreren Ablaufverfolgungscache-Einträgen (162 ) zu empfangen. Der Ablaufverfolgungsgenerator (170 ) kann ausgebildet sein, eine Sonderinstruktion in der Gruppe aus Instruktionen zu erkennen und ein Speichern der Sonderinstruktion in einem gleichen der mehreren Ablaufverfolgungscache-Einträgen (162 ), der Nicht-Sonderninstruktionen enthält, zu verhindern. -
1 - 104
- Ausgabeeinheit
- 140
- Decodiereinheit
- 106
- Instruktionscache-Speicher
- 108
- Vorabholeinheit
- 132
- Verzweigungsvorhersageeinheit
- 118
- Ablauforganisationseinheit(en)
- 102
- Abschlusswartereihe
- 190
- Neustartlogik
- 170
- Ablaufverfolgungsgenerator
- 160
- Ablaufverfolgungscache-Speicher
von Vorabholeinheit
108 - 116
- Registerdatei
- 124
- Ausführungskern(e)
- 126
- Lade/Speichereinheit
- 130
- Ergebnisbus
- 128
- Datencache-Speicher
- 132
- Verzweigungsvorhersageeinheit
- 200
- Systemspeicher
- 100
- Prozessor
-
2 - 160
- auf Verfolgungscache-Speicher
- 164
- Markierung
- 165
- Instruktionen
- 168
- Ablaufsteuerung
-
3a - 164
- Markierung
- 168
- Ablaufsteuerung
-
3b - Spalte 1
- Vitalität
- bedingungslos
- vital
- folgend auf erste Verzweigung
- folgend auf zweite Verzweigung
- bedingungslos „tot"
- 266
- Codierung
-
4 - 10
- Empfangen von Instruktionen zur Speicherung in Ablaufverfolgungscache-Speicher
- 12
- Irgendwelche Sonderinstruktionen?
- 14
- Nicht speichern einer Sonderinstruktion in dem gleichen Ablaufverfolgungseintrag wie eine andere Instruktion
- 16
- Speichern von Instruktionen in dem gleichen Ablaufverfolgungseintrag
-
5 - 20
- Abholen eines Instruktionsstromes aus dem Ablaufverfolgungscache-Speicher
- 22
- Sonderinstruktion in dem Instruktionsstrom erkannt?
- 26
- Instruktionsvervollständigung blockiert?
- 28
- Zurücksetzen der Pipeline und Neustart der Prozessorausführung aus demInstruktionscache-Speicher
- 30
- Zulassen, dass der Instruktionsstrom ausgeführt und abgeschlossen wird
- 24
- vor der Ausführung der Sonderinstruktion, Zurücksetzen der Pipeline und Neustart
- 24
- vor der Ausführung der Sonderinstruktion, Zurücksetzen der Pipeline und Neustart der Prozessorabarbeitung aus dem Instruktionscache-Speicher
-
6 - 404
- Hauptspeicher
- 428
- L2 Cache-Speicher
- 10
- Prozessor
- 242
- CPU-Bus
- 406
- Speicherbus
- 402
- Busbrücke
- 410
- AGP-Bus
- 408
- Graphiksteuerung
- 426
- Anzeige
- 10a
- Prozessor
- 428a
- L2 Cache-Speicher
- 412a, 412b
- PCI-Gerät
- 416
- sekundäre Busbrücke
- 418
- ISA-Gerät
- 420
- ISA/EISA-Bus
- 422
- Tastatur/Maus
- 424
- PCI-Bus
-
7 - 614a, 614b
- Speicher
- 612a, 612b
- Verarbeitungsknoten
- 620a, 620b
- Ein/Ausgabe-Gerät
Claims (10)
- System mit: einem Instruktionscache-Speicher (
106 ); einem Ablaufverfolgungscache-Speicher (160 ) mit mehreren Ablaufverfolgungscache-Einträgen (162 ); einem Ablaufverfolgungsgenerator (170 ), der mit dem Instruktionscache-Speicher (106 ) und dem Ablaufverfolgungscache-Speicher (160 ) verbunden ist; wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, eine Gruppe aus Instruktionen, die von dem Instruktionscache-Speicher (106 ) ausgegeben wird zur Speicherung in einer der mehreren Ablaufverfolgungscache-Einträgen (162 ) zu empfangen, wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, eine Sonderinstruktion innerhalb der Gruppe aus Instruktionen zu erkennen und ein Speichern der Sonderinstruktion in einem gleichen der mehreren Ablaufverfolgungscache-Einträge (162 ) als eine Nicht-Sonderinstruktion zu verhindern. - System nach Anspruch 1, wobei der Ablaufverfolgungsgenerator (
170 ) ausgebildet ist, Instruktionen in dem Ablaufverfolgungsspeicher (160 ) zumindest in teilweise decodierter Form zu speichern. - System nach Anspruch 2, das ferner eine Abschlusswartereihe (
102 ) aufweist, die angeschlossen ist, um ausgeführte Instruktionen abzuschließen, wobei die Abschlusswartereihe (102 ) ausgebildet, das Abschließen einer aus dem Ablaufverfolgungscache-Speicher (160 ) abgeholten Instruktion zu verhindern, bis alle Instruktionen, die in dem gleichen Ablaufverfolgungscache-Eintrag (162 ) wie diese Instruktion enthalten sind, für das Abschließen bereit sind. - System nach Anspruch 2, das ferner eine Ausgabeeinheit (
104 ) aufweist, die ausgebildet ist, von dem Instruktionscache-Speicher (106 ) empfangene Instruktionen auszugeben, wobei die Ausgabeeinheit (104 ) ausgebildet, die Sonderinstruktion innerhalb einer Gruppe aus Instruktionen, die vom Instruktionscache-Speicher (106 ) empfangen werden, zu erkennen und eine Kennzeichnung der Sonderinstruktion an den Ablaufverfolgungsgenerator (170 ) auszugeben, wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, die Sonderinstruktion in Reaktion auf die Kennzeichnung von der Ausgabeeinheit (104 ) zu erkennen. - System nach Anspruch 2, wobei der Ablaufverfolgungsgenerator (
170 ) ausgebildet ist, die Sonderinstruktion in einem anderen Ablaufverfolgungscache-Eintrag (162 ) als die eine oder mehreren anderen Instruktionen zu speichern, wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, andere Instruktionen mit der Sonderinstruktion in dem anderen Ablaufverfolgungscache-Eintrag (162 ) nicht zu speichern. - Verfahren mit: Empfangen einer Gruppe aus Instruktionen für die Speicherung in einem Ablaufverfolgungscache-Eintrag (
162 ) in einem Ablaufverfolgungscache-Speicher (160 ); Speichern einer oder mehrerer Instruktionen, die in der Gruppe der Instruktionen enthalten sind, in dem Ablaufverfolgungscache-Eintrag (162 ); Erkennen einer Sonderinstruktion innerhalb der Gruppe aus Instruktionen; und in Reaktion auf das Erkennen, nicht Speichern der Sonderinstruktion in dem Ablaufverfolgungscache-Eintrag (162 ) mit einer der einen oder den mehreren Instruktionen. - Verfahren nach Anspruch 6, wobei das Speichern umfasst: Speichern der einen oder mehreren Instruktionen in dem Ablaufverfolgungscache-Eintrag (
162 ) in zumindest teilweise decodierter Form. - Verfahren nach Anspruch 7, das ferner umfasst: Verhindern des Abschließens einer Instruktion, die aus dem Ablaufverfolgungscache-Speicher (
160 ) abgerufen wurde, bis alle Instruktionen, die in dem gleichen Ablaufverfolgungscache-Eintrag (162 ) wie diese Instruktion enthalten sind, für das Abschließen bereit sind. - Verfahren nach Anspruch 8, das ferner umfasst: Überwachen einer Anzahl an Zyklen, die seit dem Abschließen einer Instruktion verstrichen sind; und wenn die Anzahl der Zyklen eine Schwellwertzahl übersteigt, Zurücksetzen einer Verarbeitungspipeline, die aus dem Ablaufverfolgungscache-Speicher (
160 ) abgeholte Instruktionen ausführt, und Neustarten der Ausführung aus dem Instruktionscache-Speicher (106 ) heraus. - Computersystem (
400 ) mit: einem Systemspeicher (404 ); und einem Prozessor (10 ), der mit dem Systemspeicher (404 ) verbunden ist; dadurch gekennzeichnet, dass der Prozessor (10 ) umfasst: einen Instruktionscache-Speicher (106 ); einen Ablaufverfolgungscache-Speicher (160 ) mit mehreren Ablaufverfolgungscache-Einträgen (162 ); einen Ablaufverfolgungsgenerator (170 ), der mit dem Instruktionscache-Speicher (106 ) und dem Ablaufverfolgungscache-Speicher (160 ) verbunden ist; wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, eine Gruppe aus Instruktionen, die von dem Instruktionscache-Speicher (106 ) ausgegeben werden, für die Speicherung in einem der mehreren Ablaufverfolgungscache-Einträgen (162 ) zu empfangen, wobei der Ablaufverfolgungsgenerator (170 ) ausgebildet ist, eine Sonderinstruktion innerhalb der Gruppe aus Instruktionen zu erkennen und ein Speichern der Sonderinstruktion in einem der mehreren Ablaufverfolgungscache-Einträgen (162 ), der eine Nicht-Sonderinstruktion enthält oder erhalten soll, zu verhindern.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/676,437 | 2003-10-01 | ||
US10/676,437 US7133969B2 (en) | 2003-10-01 | 2003-10-01 | System and method for handling exceptional instructions in a trace cache based processor |
PCT/US2004/020721 WO2005041024A2 (en) | 2003-10-01 | 2004-06-28 | System and method for handling exceptional instructions in a trace cache based processor |
Publications (1)
Publication Number | Publication Date |
---|---|
DE112004001854T5 true DE112004001854T5 (de) | 2006-08-03 |
Family
ID=34393582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE112004001854T Ceased DE112004001854T5 (de) | 2003-10-01 | 2004-06-28 | System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung |
Country Status (8)
Country | Link |
---|---|
US (1) | US7133969B2 (de) |
JP (1) | JP2007507791A (de) |
KR (1) | KR100993018B1 (de) |
CN (1) | CN100407134C (de) |
DE (1) | DE112004001854T5 (de) |
GB (1) | GB2422464B (de) |
TW (1) | TWI352927B (de) |
WO (1) | WO2005041024A2 (de) |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8069336B2 (en) * | 2003-12-03 | 2011-11-29 | Globalfoundries Inc. | Transitioning from instruction cache to trace cache on label boundaries |
US7437512B2 (en) * | 2004-02-26 | 2008-10-14 | Marvell International Ltd. | Low power semi-trace instruction/trace hybrid cache with logic for indexing the trace cache under certain conditions |
US7197630B1 (en) | 2004-04-12 | 2007-03-27 | Advanced Micro Devices, Inc. | Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation |
US7365007B2 (en) * | 2004-06-30 | 2008-04-29 | Intel Corporation | Interconnects with direct metalization and conductive polymer |
US7568070B2 (en) * | 2005-07-29 | 2009-07-28 | Qualcomm Incorporated | Instruction cache having fixed number of variable length instructions |
US7949854B1 (en) | 2005-09-28 | 2011-05-24 | Oracle America, Inc. | Trace unit with a trace builder |
US8015359B1 (en) | 2005-09-28 | 2011-09-06 | Oracle America, Inc. | Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit |
US7953961B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder |
US8024522B1 (en) | 2005-09-28 | 2011-09-20 | Oracle America, Inc. | Memory ordering queue/versioning cache circuit |
US7953933B1 (en) | 2005-09-28 | 2011-05-31 | Oracle America, Inc. | Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit |
US8370576B1 (en) | 2005-09-28 | 2013-02-05 | Oracle America, Inc. | Cache rollback acceleration via a bank based versioning cache ciruit |
US7783863B1 (en) | 2005-09-28 | 2010-08-24 | Oracle America, Inc. | Graceful degradation in a trace-based processor |
US7987342B1 (en) | 2005-09-28 | 2011-07-26 | Oracle America, Inc. | Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer |
US8019944B1 (en) | 2005-09-28 | 2011-09-13 | Oracle America, Inc. | Checking for a memory ordering violation after a speculative cache write |
US8037285B1 (en) | 2005-09-28 | 2011-10-11 | Oracle America, Inc. | Trace unit |
US8051247B1 (en) | 2005-09-28 | 2011-11-01 | Oracle America, Inc. | Trace based deallocation of entries in a versioning cache circuit |
US7814298B1 (en) | 2005-09-28 | 2010-10-12 | Oracle America, Inc. | Promoting and appending traces in an instruction processing circuit based upon a bias value |
US8499293B1 (en) | 2005-09-28 | 2013-07-30 | Oracle America, Inc. | Symbolic renaming optimization of a trace |
US7676634B1 (en) | 2005-09-28 | 2010-03-09 | Sun Microsystems, Inc. | Selective trace cache invalidation for self-modifying code via memory aging |
US7966479B1 (en) | 2005-09-28 | 2011-06-21 | Oracle America, Inc. | Concurrent vs. low power branch prediction |
US8032710B1 (en) | 2005-09-28 | 2011-10-04 | Oracle America, Inc. | System and method for ensuring coherency in trace execution |
US7937564B1 (en) | 2005-09-28 | 2011-05-03 | Oracle America, Inc. | Emit vector optimization of a trace |
US7877630B1 (en) | 2005-09-28 | 2011-01-25 | Oracle America, Inc. | Trace based rollback of a speculatively updated cache |
US7849292B1 (en) | 2005-09-28 | 2010-12-07 | Oracle America, Inc. | Flag optimization of a trace |
US7870369B1 (en) | 2005-09-28 | 2011-01-11 | Oracle America, Inc. | Abort prioritization in a trace-based processor |
US7797517B1 (en) | 2005-11-18 | 2010-09-14 | Oracle America, Inc. | Trace optimization via fusing operations of a target architecture operation set |
CN100444119C (zh) * | 2005-12-28 | 2008-12-17 | 中国科学院计算技术研究所 | 一种面向服务体系结构中消息层异常处理方法 |
US8370609B1 (en) | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US8010745B1 (en) | 2006-09-27 | 2011-08-30 | Oracle America, Inc. | Rolling back a speculative update of a non-modifiable cache line |
US8074060B2 (en) * | 2008-11-25 | 2011-12-06 | Via Technologies, Inc. | Out-of-order execution microprocessor that selectively initiates instruction retirement early |
CN102360344B (zh) * | 2011-10-10 | 2014-03-12 | 西安交通大学 | 矩阵处理器及其指令集和嵌入式系统 |
US8935574B2 (en) | 2011-12-16 | 2015-01-13 | Advanced Micro Devices, Inc. | Correlating traces in a computing system |
US8832500B2 (en) | 2012-08-10 | 2014-09-09 | Advanced Micro Devices, Inc. | Multiple clock domain tracing |
US8959398B2 (en) | 2012-08-16 | 2015-02-17 | Advanced Micro Devices, Inc. | Multiple clock domain debug capability |
GB2553582B (en) * | 2016-09-13 | 2020-07-08 | Advanced Risc Mach Ltd | An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry |
US20220100626A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Monitoring performance cost of events |
Family Cites Families (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3896419A (en) * | 1974-01-17 | 1975-07-22 | Honeywell Inf Systems | Cache memory store in a processor of a data processing system |
WO1993017385A1 (en) * | 1992-02-27 | 1993-09-02 | Intel Corporation | Dynamic flow instruction cache memory |
US6167536A (en) | 1997-04-08 | 2000-12-26 | Advanced Micro Devices, Inc. | Trace cache for a microprocessor-based device |
US6018786A (en) * | 1997-10-23 | 2000-01-25 | Intel Corporation | Trace based instruction caching |
US6185675B1 (en) * | 1997-10-24 | 2001-02-06 | Advanced Micro Devices, Inc. | Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks |
US5930497A (en) * | 1997-12-11 | 1999-07-27 | International Business Machines Corporation | Method and means for generation of realistic access patterns in storage subsystem benchmarking and other tests |
US6182210B1 (en) | 1997-12-16 | 2001-01-30 | Intel Corporation | Processor having multiple program counters and trace buffers outside an execution pipeline |
GB2381101B (en) | 1998-04-20 | 2003-06-25 | Intel Corp | System and method for maintaining branch information |
US6256727B1 (en) * | 1998-05-12 | 2001-07-03 | International Business Machines Corporation | Method and system for fetching noncontiguous instructions in a single clock cycle |
US6339822B1 (en) * | 1998-10-02 | 2002-01-15 | Advanced Micro Devices, Inc. | Using padded instructions in a block-oriented cache |
US6345295B1 (en) * | 1999-01-22 | 2002-02-05 | International Business Machines Corporation | Conducting traces in a computer system attachment network |
US6247097B1 (en) * | 1999-01-22 | 2001-06-12 | International Business Machines Corporation | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions |
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US6357016B1 (en) * | 1999-12-09 | 2002-03-12 | Intel Corporation | Method and apparatus for disabling a clock signal within a multithreaded processor |
US6889319B1 (en) * | 1999-12-09 | 2005-05-03 | Intel Corporation | Method and apparatus for entering and exiting multiple threads within a multithreaded processor |
US6578128B1 (en) * | 2001-03-29 | 2003-06-10 | Emc Corporation | Address management for a shared memory region on a multi-processor controller board |
US20020144101A1 (en) * | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
US6973543B1 (en) * | 2001-07-12 | 2005-12-06 | Advanced Micro Devices, Inc. | Partial directory cache for reducing probe traffic in multiprocessor systems |
US6823428B2 (en) * | 2002-05-17 | 2004-11-23 | International Business | Preventing cache floods from sequential streams |
US7139902B2 (en) * | 2002-10-29 | 2006-11-21 | Broadcom Corporation | Implementation of an efficient instruction fetch pipeline utilizing a trace cache |
US7024537B2 (en) * | 2003-01-21 | 2006-04-04 | Advanced Micro Devices, Inc. | Data speculation based on addressing patterns identifying dual-purpose register |
US7143273B2 (en) * | 2003-03-31 | 2006-11-28 | Intel Corporation | Method and apparatus for dynamic branch prediction utilizing multiple stew algorithms for indexing a global history |
US7003629B1 (en) * | 2003-07-08 | 2006-02-21 | Advanced Micro Devices, Inc. | System and method of identifying liveness groups within traces stored in a trace cache |
US8069336B2 (en) * | 2003-12-03 | 2011-11-29 | Globalfoundries Inc. | Transitioning from instruction cache to trace cache on label boundaries |
-
2003
- 2003-10-01 US US10/676,437 patent/US7133969B2/en active Active
-
2004
- 2004-06-28 JP JP2006533824A patent/JP2007507791A/ja active Pending
- 2004-06-28 WO PCT/US2004/020721 patent/WO2005041024A2/en active Application Filing
- 2004-06-28 GB GB0606179A patent/GB2422464B/en not_active Expired - Fee Related
- 2004-06-28 CN CN2004800287538A patent/CN100407134C/zh active Active
- 2004-06-28 DE DE112004001854T patent/DE112004001854T5/de not_active Ceased
- 2004-06-28 KR KR1020067008482A patent/KR100993018B1/ko not_active IP Right Cessation
- 2004-09-30 TW TW093129526A patent/TWI352927B/zh active
Also Published As
Publication number | Publication date |
---|---|
JP2007507791A (ja) | 2007-03-29 |
TW200517955A (en) | 2005-06-01 |
US20050076180A1 (en) | 2005-04-07 |
US7133969B2 (en) | 2006-11-07 |
CN1864131A (zh) | 2006-11-15 |
GB2422464B (en) | 2007-02-14 |
GB2422464A (en) | 2006-07-26 |
KR20060108644A (ko) | 2006-10-18 |
KR100993018B1 (ko) | 2010-11-09 |
CN100407134C (zh) | 2008-07-30 |
GB0606179D0 (en) | 2006-05-10 |
TWI352927B (en) | 2011-11-21 |
WO2005041024A2 (en) | 2005-05-06 |
WO2005041024A3 (en) | 2006-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE112004001854T5 (de) | System und Verfahren zur Handhabung von Sonderinstruktionen in einem Prozessor auf Grundlage eines Cache-Speichers mit Ablaufverfolgung | |
DE112004002848B4 (de) | Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor | |
DE112005002173B4 (de) | Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist | |
DE112004002365T5 (de) | Übergang vom Befehls-Cache-Speicher zum Ablaufverfolgungs-Cache-Speicher basierend auf Markengrenzen | |
DE60036016T2 (de) | Schnell multithreading für eng gekoppelte multiprozessoren | |
DE112006002237B4 (de) | Verfahren zur selbstinitiierenden Synchronisierung in einem Computersystem | |
DE60025028T2 (de) | Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt | |
DE112007003801B3 (de) | Vorrichtung mit einer speichereinheit und einer logik zur bereitstellung eines effizienten mechanismus‘ für transaktionalspeicherausführungen in out-of-order-prozessoren | |
DE60222402T2 (de) | Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher | |
DE60009151T2 (de) | Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung | |
DE69633166T2 (de) | Integrierter schaltkreis mit mehreren funktionen und gemeinsamer verwendung mehrerer interner signalbusse zur verteilung der steuerung des buszugriffes und der arbitration | |
DE69835100T2 (de) | Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren | |
DE60223023T2 (de) | Verwendung von typenbit zur verfolgung der speicherung von ecc- und vordekodierungsbit in einem cache der ebene 2 | |
DE69932066T2 (de) | Mechanismus zur "store-to-load forwarding" | |
DE60005860T2 (de) | Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle | |
DE60308201T2 (de) | Datenverarbeitungssystem mit externen und internen anweisungssätzen | |
DE69631778T2 (de) | Flexible implementierung eines systemverwaltungsmodus in einem prozessor | |
DE10085375B4 (de) | Verfahren und Einrichtung für einen pipeline-verschachtelten Multi-Thread-Befehlsdecodierer | |
DE60102017T2 (de) | Räumungsfilter für adressenübersetzungspuffer | |
DE112010004322T5 (de) | Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge | |
DE19506734A1 (de) | Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange | |
DE602004010265T2 (de) | Load-store-einheit mit wiederholungsmechanismus | |
DE112006003597T5 (de) | Unbeschränkte Transaktionsspeichersysteme | |
DE69633474T2 (de) | Adressierungsverfahren zur nicht-sequentiellen Ausführung von Ladebefehlen hinsichtlich Speicherungsbefehlen | |
DE112006001698T5 (de) | Grundfunktionen zum Verbessern von Thread-Level Spekulation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
OP8 | Request for examination as to paragraph 44 patent law |
Ref document number: 112004001854 Country of ref document: DE Date of ref document: 20060803 Kind code of ref document: P |
|
8181 | Inventor (new situation) |
Inventor name: ALSUP, MITCHELL, AUSTIN, TEX., US Inventor name: SMAUS, GREGORY WILLIAM, AUSTIN, TEX., US Inventor name: PICKETT, JAMES K., AUSTIN, TEX., US Inventor name: MCCINN, BRIAN D., BUDA, TEX., US Inventor name: FILIPPO, MICHAEL A., MANCHACA, TEX., US Inventor name: SANDER, BENJAMIN T., AUSTIN, TEX., US |
|
8127 | New person/name/address of the applicant |
Owner name: GLOBALFOUNDRIES INC., GRAND CAYMAN, KY |
|
8128 | New person/name/address of the agent |
Representative=s name: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER, |
|
R002 | Refusal decision in examination/registration proceedings | ||
R003 | Refusal decision now final |
Effective date: 20120505 |