-
HINTERGRUND
-
Das Ausführen von Computerprogrammanweisungen kann das Speichern von Daten in physischen Registern beinhalten. Während der Programmausführung müssen in einem physischen Register gespeicherte Daten gegebenenfalls in einem Speicherplatz gespeichert werden und an einem Speicherplatz gespeicherte Daten müssen gegebenenfalls in ein physisches Register geladen werden. In Mikroarchitekturentwürfen (z.B. einer zentralen Verarbeitungseinheit (CPU, central processing unit) befinden sich Anweisungsausführungseinheiten näher an physischen Registern als am Speicher. Somit nimmt das Laden von Daten aus einem Speicherplatz (selbst einem Cachespeicherplatz) in ein physisches Register üblicherweise mehr Zeit in Anspruch als das Kopieren der Daten aus einem anderen physischen Register.
-
KURZDARSTELLUNG
-
In einer oder mehreren beispielhaften Ausführungsformen der Offenbarung wird ein Verfahren zum Umgehen eines Speicherzugriffs für eine Ladeanweisung offenbart. Das Verfahren beinhaltet das Feststellen einer vorhergesagten Anweisungsadresse (IA, instruction address), die einer zu der Ladeanweisung gehörenden Lade-IA entspricht, zumindest zum Teil, indem auf eine erste Datenstruktur zugegriffen wird, die nur mit lAs indexiert wird, welche zu Ladeanweisungen gehören, und mindestens ein Teil der vorhergesagten IA genutzt wird, um i) auf eine zweite Datenstruktur zuzugreifen, um ein erstes physisches Register festzustellen, das einen zu der Ladeanweisung gehörenden Wert speichert, oder um ii) anstelle des Zugriffs auf die zweite Datenstruktur auf eine dritte Datenstruktur zuzugreifen, um den zu der Ladeanweisung gehörenden Wert zu erhalten. Das Verfahren beinhaltet des Weiteren das Ausführen einer vorhergesagten Ladeoperation zumindest zum Teil, indem ein zweites physisches Register auf den Wert gesetzt wird, der zu der Ladeanweisung gehört.
-
In einer oder mehreren weiteren beispielhaften Ausführungsformen der Offenbarung wird ein System zum Umgehen eines Speicherzugriffs für eine Ladeanweisung offenbart. Das System enthält mindestens einen Speicher, der durch einen Computer ausführbare Anweisungen speichert, und mindestens einen Prozessor, der so konfiguriert ist, dass er auf den mindestens einen Speicher zugreift und die durch einen Computer ausführbaren Anweisungen ausführt, um einen Satz von Operationen durchzuführen. Zu den Operationen gehören das Feststellen einer vorhergesagten Anweisungsadresse, die einer zu der Ladeanweisung gehörenden Lade-IA entspricht, zumindest zum Teil, indem auf eine erste Datenstruktur zugegriffen wird, die nur mit lAs indexiert wird, welche zu Ladeanweisungen gehören, und mindestens ein Teil der vorhergesagten IA genutzt wird, um i) auf eine zweite Datenstruktur zuzugreifen, um ein erstes physisches Register festzustellen, das einen zu der Ladeanweisung gehörenden Wert speichert, oder um ii) anstelle des Zugriffs auf die zweite Datenstruktur auf eine dritte Datenstruktur zuzugreifen, um den zu der Ladeanweisung gehörenden Wert zu erhalten. Zu den Operationen gehören des Weiteren das Ausführen einer vorhergesagten Ladeoperation zumindest zum Teil, indem ein zweites physisches Register auf den Wert gesetzt wird, der zu der Ladeanweisung gehört.
-
In einer oder mehreren weiteren beispielhaften Ausführungsformen der Offenbarung wird ein Computerprogrammprodukt zum Umgehen eines Speicherzugriffs für eine Ladeanweisung offenbart, das ein nicht flüchtiges Speichermedium enthält, welches von einer Verarbeitungsschaltung gelesen werden kann, wobei das Speichermedium Anweisungen speichert, die von der Verarbeitungsschaltung ausgeführt werden können, um zu veranlassen, dass ein Verfahren durchgeführt wird. Das Verfahren beinhaltet das Feststellen einer vorhergesagten Anweisungsadresse (IA, instruction address), die einer zu der Ladeanweisung gehörenden Lade-IA entspricht, zumindest zum Teil, indem auf eine erste Datenstruktur zugegriffen wird, die nur mit lAs indexiert wird, welche zu Ladeanweisungen gehören, und mindestens ein Teil der vorhergesagten IA genutzt wird, um i) auf eine zweite Datenstruktur zuzugreifen, um ein erstes physisches Register festzustellen, das einen zu der Ladeanweisung gehörenden Wert speichert, oder um ii) anstelle des Zugriffs auf die zweite Datenstruktur auf eine dritte Datenstruktur zuzugreifen, um den zu der Ladeanweisung gehörenden Wert zu erhalten. Das Verfahren beinhaltet des Weiteren das Ausführen einer vorhergesagten Ladeoperation zumindest zum Teil, indem ein zweites physisches Register auf den Wert gesetzt wird, der zu der Ladeanweisung gehört.
-
Figurenliste
-
Die ausführliche Beschreibung erfolgt unter Bezugnahme auf die beigefügten Zeichnungen. Die Zeichnungen werden nur zum Zweck der Veranschaulichung bereitgestellt und bilden lediglich beispielhafte Ausführungsformen der Offenbarung ab. Die Zeichnungen werden bereitgestellt, um das Verständnis der Offenbarung zu vereinfachen und sind nicht als Einschränkung der Schutzbreite, des Umfangs oder der Anwendbarkeit der Offenbarung anzusehen. In den Zeichnungen kennzeichnet/kennzeichnen die äußerste(n) linke(n) Ziffer(n) einer Bezugszahl die Zeichnung, in der die Bezugszahl erstmalig erscheint. Die Verwendung derselben Bezugszahlen ist ein Hinweis auf ähnliche, aber nicht unbedingt die gleichen oder identische Komponenten. Es können jedoch auch verschiedene Bezugszahlen verwendet werden, um ähnliche Komponenten zu kennzeichnen. Verschiedene Ausführungsformen können andere als die in den Zeichnungen veranschaulichten Elemente oder Komponenten nutzen und einige Elemente und/oder Komponenten sind in verschiedenen Ausführungsformen gegebenenfalls nicht vorhanden. Die Verwendung von Singular-Terminologie, um eine Komponente oder ein Element zu beschreiben, kann je nach Kontext eine Plural-Anzahl solcher Komponenten oder Elemente und umgekehrt umfassen.
- 1 ist ein Blockschaubild, das die Ausführung einer vorhergesagten Ladeoperation schematisch abbildet, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen.
- 2 ist ein Prozessablaufdiagramm eines veranschaulichenden Verfahrens zur Ausführung einer vorhergesagten Ladeoperation, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen.
- 3 ist ein Prozessablaufdiagramm eines veranschaulichenden Verfahrens zur Feststellung, ob eine vorhergesagte Ladeoperation ausgeführt werden soll, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen.
- 4 ist eine schematische Darstellung einer veranschaulichenden Datenverarbeitungseinheit, die so konfiguriert ist, dass sie eine oder mehrere beispielhafte Ausführungsformen der Offenbarung ausführt.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Zu beispielhaften Ausführungsformen der Offenbarung gehören unter anderem Systeme, Verfahren, durch einen Computer lesbare Datenträger, Techniken und methodische Vorgehensweisen, um eine vorhergesagte Ladeoperation auszuführen, die einen Speicherzugriff für eine Ladeanweisung umgeht. In bestimmten beispielhaften Ausführungsformen wird ein erstes physisches Register, das vorhersagegemäß einen von der Ladeanweisung zu ladenden Wert speichert, gekennzeichnet und der in dem ersten physischen Register gespeicherte Wert wird in ein zweites physisches Register zur Verwendung durch eine Konsumentenoperation kopiert. Eine der Ladeanweisung entsprechende vorhergesagte Speicheranweisung kann gekennzeichnet werden und auf eine Zuordnungstabelle kann zugegriffen werden, um zu der vorhergesagten Speicheranweisung gehörende Daten zu erhalten. Die Daten können eine Kennzeichnung des ersten physischen Registers sowie eine Kennzeichnung (z.B. eine Anweisungskennung) einer Produzentenoperation enthalten, die den in dem ersten physischen Register gespeicherten Wert erzeugt/geändert hat. Infolge der Ausführung der vorhergesagten Ladeoperation erhält man die gewünschten Daten von der Produzentenoperation und der Cachespeicherzugriff, der andernfalls notwendig wäre, um die Ladeanweisung auszuführen und die Daten von einem Speicherplatz in ein physisches Register zu kopieren, kann umgangen werden.
-
1 ist ein Blockschaubild, das die Ausführung einer vorhergesagten Ladeoperation schematisch abbildet, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen. 2 ist ein Prozessablaufdiagramm eines veranschaulichenden Verfahrens 200 zur Ausführung einer vorhergesagten Ladeoperation, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen. 3 ist ein Prozessablaufdiagramm eines veranschaulichenden Verfahrens 300 zur Feststellung, ob eine vorhergesagte Ladeoperation ausgeführt werden soll, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen. Die 2 und 3 werden nachstehend jeweils in Verbindung mit 1 beschrieben.
-
Jede Operation des Verfahrens 200 und/oder des Verfahrens 300 kann von einer oder mehreren Komponenten (z.B. Engines) durchgeführt werden, die in 1 abgebildet sind. Diese Komponente(n) kann/können in einer beliebigen Kombination aus Hardware, Software und/oder Firmware ausgeführt sein. In bestimmten beispielhaften Ausführungsformen können eine oder mehrere dieser Komponenten zumindest zum Teil als Software und/oder Firmware ausgeführt sein, die ein oder mehrere Programmmodule enthält oder eine Gruppe von einem oder mehreren Programmmodulen ist, welche durch einen Computer ausführbare Anweisungen enthalten, die, wenn sie von einer Verarbeitungsschaltung ausgeführt werden, die Durchführung von einer oder mehreren Operationen veranlassen. Ein System oder eine Einheit, das bzw. die hierin als so konfiguriert beschrieben ist, dass es/sie beispielhafte Ausführungsformen der Offenbarung ausführt, kann eine oder mehrere Verarbeitungsschaltungen enthalten, von denen jede eine oder mehrere Verarbeitungseinheiten oder -knoten enthalten kann. Zu durch einen Computer ausführbaren Anweisungen kann durch einen Computer ausführbarer Programmcode gehören, der, wenn er von einer Verarbeitungseinheit ausgeführt wird, veranlassen kann, dass auf Eingabedaten, die in dem durch einen Computer ausführbaren Programmcode enthalten sind oder von dem durch einen Computer ausführbaren Programmcode referenziert werden, zugegriffen wird und diese verarbeitet werden, um Ausgabedaten zu ergeben.
-
Zunächst Bezug nehmend auf 1 ist eine Gruppe von Engines abgebildet, zu denen eine Vorhersageengine 102, eine Registerüberwachungsengine 104, eine Schreib-/Leseengine 106 und eine Anweisungsausführungsengine 108 gehören. Diese Engines können in einer beliebigen Kombination aus Hardware, Software und/oder Firmware ausgeführt sein. In bestimmten beispielhaften Ausführungsformen können diese Engines über eine oder mehrere Einheiten hinweg ausgeführt werden, welche über die in 4 abgebildete veranschaulichende Konfiguration verfügen.
-
Nun Bezug nehmend auf die 1 und 2 in Verbindung miteinander können am Block 202 durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 ausgeführt werden, um das Ausführen einer Produzentenoperation zu veranlassen, die einen Wert erzeugt/ändert, der zu einem bestimmten architekturdefinierten Register des Satzes von architekturdefinierten Registern 128 gehört, die in der Mikroarchitektur definiert wurden. Zur leichteren Erklärung kann die Bezugszahl 128 hierin zur Bezeichnung des vorstehend erwähnten bestimmten architekturdefinierten Registers verwendet werden. In bestimmten beispielhaften Ausführungsformen kann ein Satz von architekturdefinierten Registern als Teil eines Mikroarchitekturentwurfs angegeben werden. Der Satz von architekturdefinierten Registern kann einem Satz von physischen Registern in der Mikroarchitektur zugeordnet werden. In bestimmten beispielhaften Ausführungsformen kann eine Anzahl von physischen Registern größer oder gleich einer Anzahl von architekturdefinierten Registern sein. Somit kann das architekturdefinierte Register 128 verschiedenen physischen Registern für verschiedene Anweisungen und/oder mehreren physischen Registern gleichzeitig zugeordnet werden. Genauer gesagt, ein zu dem architekturdefinierten Register 128 gehörender Wert kann in verschiedenen physischen Registern für verschiedene Anweisungen und/oder in mehreren physischen Registern gleichzeitig gespeichert werden.
-
Als ein nicht abschließendes Beispiel kann die Produzentenoperation die Werte in zwei Registern summieren und die resultierende Summe in einem der Register speichern. Wenn R1 zum Beispiel das architekturdefinierte Register 128 darstellt, kann die Produzentenoperation R1 = R1 + R2 sein, wobei R2 ein anderes architekturdefiniertes Register ist. Wie zuvor beschrieben wurde, kann das architekturdefinierte Register 128 (z.B. R1) zunächst zum Beispiel dem physischen Register 20 (pR20) zugeordnet werden. Ebenso kann das architekturdefinierte Register R2 dem physischen Register 22 (pR22) zugeordnet werden. Infolge der Produzentenoperation können die in pR20 und pR22 gespeicherten Werte summiert und die resultierende Summe kann im physischen Register 21 (pR21) gespeichert werden. Das physische Register pR21 kann dem architekturdefinierten Register 128 (R1) zugeordnet werden, wodurch die Summe dem architekturdefinierten Register 128 (R1) zugeordnet wird.
-
In bestimmten beispielhaften Ausführungsformen können durch einen Computer ausführbare Anweisungen der Registerüberwachungsengine 104 ausgeführt werden, um eine Zuordnung zwischen architekturdefinierten Registern und physischen Registern beizubehalten/zu ändern. In einer In-Order-Maschine kann die Anzahl der architekturdefinierten Register gleich der Anzahl der physischen Register sein. Dies ist so, weil Anweisungen in der Reihenfolge ausgeführt werden, in der sie in einer In-Order-Maschine ausgegeben werden, und somit besteht keine Notwendigkeit, mehr physische Register als architekturdefinierte Register zu verwalten. In einer Out-of-Order-Maschine kann jedoch eine aktuellere/jüngere Anweisung vor einer älteren Anweisung ausgeführt werden und somit besteht eine Notwendigkeit, eine größere Anzahl von physischen Registern als architekturdefinierten Registern zu verwalten.
-
In diesen beispielhaften Ausführungsformen, in denen die Anzahl der physischen Register die Anzahl der architekturdefinierten Register überschreitet, kann eine Zuordnung zwischen architekturdefinierten Registern und physischen Registern beibehalten werden. Diese Zuordnung zwischen architekturdefinierten Registern und physischen Registern kann sich in Daten widerspiegeln, die in einer Registerzuordnungstabelle 138 gespeichert werden, welche von der Registerüberwachungsengine 104 verwaltet/aktualisiert wird. Die Registerzuordnungstabelle 138 kann mit einem architekturdefinierten Register indexiert werden und für jedes indexierte architekturdefinierte Register eine Kennzeichnung eines physischen Registers speichern, das einen zu diesem architekturdefinierten Register gehörenden Wert speichert. Im Hinblick auf eine In-Order-Decodierung/-Zuteilung, um die Anweisungen an eine Out-of-Order-Engine zu senden, wird nur der älteste Verweis auf das architekturdefinierte Register benötigt. Bei einem Löschen des Inhalts der Anweisungspipeline, bei dem sich die Pipeline in einen früheren Zustand zurücksetzen muss, kann das architekturdefinierte Register allein möglicherweise jedoch nicht ausreichend sein. Vielmehr kann in solchen Fällen auch das Wissen, welche Anweisung dem Punkt entspricht, an dem die Löschung stattfand, notwendig sein. Dies könnte mittels einer Micro-op-Anweisungs-ID erreicht werden.
-
Nun insbesondere auf den Block 202 des Verfahrens 200 Bezug nehmend, kann die Produzentenoperation, die ausgeführt wird, dazu führen, dass ein Wert erzeugt und in einem physischen Register 130 gespeichert wird, das dem architekturdefinierten Register 128 zugeordnet wird. Alternativ kann die Produzentenoperation zu einer Änderung eines vorhandenen, im physischen Register 130 gespeicherten Wertes führen. Eine Kennzeichnung des physischen Registers 130, das den von der Produzentenoperation erzeugten/geänderten Wert speichert, kann in der Registerzuordnungstabelle 138 zusammen mit dem entsprechenden architekturdefinierten Register 128 gespeichert werden. Das heißt, in die Registerzuordnungstabelle 138 kann in Abhängigkeit von der Produzentenoperation geschrieben werden.
-
Allgemein gesagt, die Registerzuordnungstabelle 138 kann jeweils nur ein einziges physisches Register einem architekturdefinierten Register zuordnen/mit einem ... verknüpfen. Um jedoch der möglichen Notwendigkeit Rechnung zu tragen, eine Löschung des Inhalts der Anweisungspipeline durchzuführen, kann die Registerzuordnungstabelle 138 Zuordnungen/Verknüpfungen zwischen einem architekturdefinierten Register und mehreren physischen Registern speichern. Man nehme zum Beispiel an, dass ein Satz von Anweisungen (z.B. die Anweisungen 1 bis 100) zugeteilt wurde. Eine Teilmenge dieser Anweisungen wurde möglicherweise ausgegeben. Von den Anweisungen, die ausgegeben wurden, kann eine ältere Anweisung noch in Ausführung befindlich sein, während die Ausführung einer neueren Anweisung abgeschlossen sein kann. Zum Beispiel kann die ältere Anweisung eine komplexe Quadratwurzelberechnung oder dergleichen sein, während die neuere Anweisung eine verhältnismäßig einfache Ladeanweisung sein kann. Es sei angemerkt, dass eine neuere Anweisung die Ausführung zwar vor einer älteren Anweisung abschließen kann, die neuere Anweisung aber erst abgeschlossen und mit einem Prüfpunkt versehen werden kann, wenn die ältere Anweisung die Ausführung abschließt, um den Anschein aufrechtzuerhalten, dass die Anweisungen unter Einhaltung der Reihenfolge ausgeführt werden.
-
In einem beispielhaften Fall kann eine vorhergesagte Verzweigung zum Beispiel an der Anweisung 15 vorgenommen worden sein. Wenn später festgestellt wird, dass die Verzweigung falsch vorhergesagt wurde (z.B. wurde die Verzweigung vorgenommen, als sie nicht hätte vorgenommen werden sollen oder umgekehrt), sind alle Anweisungen in der Pipeline nach der Verzweigungsanweisung (z.B. die Anweisungen 16 bis 100) falsch. Dies würde ein Löschereignis auslösen, demzufolge alle Anweisungen in der Pipeline nach der Verzweigungsanweisung gelöscht werden und die Pipeline zurückgesetzt wird, wobei mit der richtigen Zieladresse der Verzweigungsanweisung begonnen wird.
-
In bestimmten beispielhaften Ausführungsformen kann die vorstehend beschriebene Verzweigungsanweisung zwischen zwei Anweisungen auftreten, die dasselbe architekturdefinierte Register betreffen. Zum Beispiel kann eine Anweisung vor der Verzweigungsanweisung den Wert, der zu dem architekturdefinierten Register R7 gehört, dem architekturdefinierten Register R1 zuweisen und die Anweisung nach der Verzweigungsanweisung kann den Wert, der zu dem architekturdefinierten Register R2 gehört, R1 zuweisen. Es dürfte sich verstehen, dass die zu diesen architekturdefinierten Registern gehörenden Werte in verschiedenen physischen Registern gespeichert werden können. Wenn die Verzweigung falsch vorhergesagt wird, wie vorstehend beschrieben wurde, muss der zu dem architekturdefinierten Register R1 gehörende Wert auf den zum architekturdefinierten Register R7 gehörenden Wert (und nicht auf den zum architekturdefinierten Register R2 gehörenden Wert) zurückgesetzt werden. Um den Wert des architekturdefinierten Registers R1 ordnungsgemäß zurückzusetzen, muss die Registerzuordnungstabelle 138 einen Verlauf von Zuordnungen zwischen physischen Registern und architekturdefinierten Registern festhalten. Im Einzelnen kann die Registerzuordnungstabelle 138 in dem vorstehend vorgestellten Beispiel eine Zuordnung zwischen dem architekturdefinierten Register R1 und einem physischen Register, das dem architekturdefinierten Register R7 entspricht, sowie eine Zuordnung zwischen dem architekturdefinierten Register R1 und einem physischen Register, das dem architekturdefinierten Register R2 entspricht, speichern, so dass ein zum architekturdefinierten Register R1 gehörender früherer Wert wiederhergestellt werden kann, falls ein Löschereignis stattfindet. Ferner kann eine jeweilige Anweisungskennung zusammen mit jeder Zuordnung gespeichert werden, um zu kennzeichnen, welcher Wert basierend darauf zurückgesetzt werden soll, wo in der Anweisungspipeline die Löschung stattfand. Es dürfte sich verstehen, dass das vorstehende Beispiel lediglich veranschaulichend und nicht erschöpfend ist. Zum Beispiel kann die Registerzuordnungstabelle 138 eine beliebige Anzahl von Zuordnungen zwischen einem gegebenen architekturdefinierten Register und physischen Registern speichern.
-
Am Block 204 kann ein Ereignis stattfinden, das es erforderlich macht, dass in physischen Registern gespeicherte Registerwerte im Speicher gespeichert werden müssen. Ein Beispiel eines solchen Ereignisses kann die Ausführung einer Funktion sein, die es erforderlich macht, dass in den physischen Registern gespeicherte Registerwerte in den Speicher kopiert werden müssen. Wenn zum Beispiel 16 architekturdefinierte Register in einer Mikroarchitektur angegeben sind, ein Algorithmus aber 17 Werte benötigt, können nicht alle Werte gleichzeitig den 16 architekturdefinierten Registern zugeordnet werden. Folglich kann mindestens ein Registerwert in den Speicher übergeben werden, um während der Ausführung des Algorithmus ein oder mehrere architekturdefinierte Register freizugeben. In weiteren beispielhaften Ausführungsformen ist die von einer Funktion benötigte Anzahl von Registern möglicherweise nicht vor der Ausführung der Funktion bekannt oder es kann die Gefahr bestehen, dass das Ausführen der Funktion Registerwerte verfälscht, wobei Registerwerte in diesem Fall an den Speicher übergeben werden können.
-
Am Block 206 können durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 ausgeführt werden, um eine Speicheranweisung auszuführen, um einen zu dem architekturdefinierten Register 128 gehörenden Wert an einem Speicherplatz im Speicher zu speichern. Der Speicherplatz im Speicher kann zum Beispiel ein Speicherplatz im Cachespeicher wie etwa ein L1-Cachespeicher oder ein L2-Cachespeicher sein. Unter Bezugnahme auf das zuvor vorgestellte gleiche Beispiel kann das Ausführen der Speicheranweisung dazu führen, dass der im pR21 (dem physischen Register 130, das dem architekturdefinierten Register 128 zugeordnet wurde) gespeicherte Wert an einem Speicherplatz gespeichert wird.
-
In bestimmten beispielhaften Ausführungsformen kann ein der ausgeführten Speicheranweisung entsprechender Eintrag in einer Vorhersageweiterleitungs-Zuordnungstabelle 122 (die nachstehend in Kurzform als Zuordnungstabelle 122 bezeichnet wird) erzeugt werden. Genauer gesagt, durch einen Computer ausführbare Anweisungen der Schreib-/Leseengine 106 können ausgeführt werden, um eine Schreiboperation 126 durchzuführen, um den Eintrag in der Zuordnungstabelle 122 zu erzeugen. In bestimmten beispielhaften Ausführungsformen kann die Zuordnungstabelle 122 als eine regfile mit mehren Lese- und Schreibports ausgeführt sein. Die regfile kann so konfiguriert sein, dass sie jede geeignete Anzahl von Einträgen (z.B. 32, 64 usw.) aufnimmt. Eine bestimmte Anzahl von Bits kann für jeden Eintrag zugeordnet werden. Zum Beispiel kann der Eintrag, welcher der am Block 206 ausgeführten Speicheranweisung entspricht, eine bestimmte Anzahl von Bits (z.B. 10 Bits) enthalten, die für die Speicherung eines virtuellen Anweisungsadress-(IA-)Tags vorgesehen sind. Die Zuordnungstabelle 122 kann mit mindestens einem Teil von SpeicherlAs indexiert werden.
-
Das virtuelle lA-Tag kann ein Teil der ganzen zu der Speicheranweisung gehörenden IA 124 sein. Die Anzahl der Bits, die für die Speicherung des virtuellen IA-Tags verwendet wird, kann einen Kompromiss zwischen Aliasing, das sich aus der Verwendung einer geringen Anzahl von Bits für das Tag ergeben kann, und der höheren Anzahl von Einträgen, die infolge der geringeren Anzahl von Bits, die für das Tag verwendet werden, in der Zuordnungstabelle 122 gespeichert werden können, widerspiegeln. Die Anzahl der für das Tag verwendeten Bits kann zumindest zum Teil auch von der Menge an für die Zuordnungstabelle 122 verfügbarem Speicher, Leistungsvorgaben, Frequenzvorgaben und/oder Kostenvorgaben bestimmt werden. Der der Speicheranweisung entsprechende Eintrag kann des Weiteren eine bestimmte Anzahl von Bits (z.B. 8 Bits) für die Speicherung einer Anweisungskennung (z.B. einer Micro-op-ID) der Speicheranweisung; eine bestimmte Anzahl von Bits (z.B. 8 Bits) für die Speicherung einer Anweisungskennung einer Produzentenoperation, die der Speicheranweisung entspricht; und eine bestimmte Anzahl von Bits (z.B. 8 Bits) für die Speicherung einer Kennzeichnung des physischen Registers, das einen von der Produzentenoperation erzeugten/geänderten Wert gespeichert hat (und gegebenenfalls vorhersagegemäß gerade speichert), wobei ein solcher Wert durch eine Ausführung der Speicheranweisung an einen Speicherplatz kopiert wird, enthalten. Es dürfte sich verstehen, dass die bestimmte Ausführung der Zuordnungstabelle 122 einschließlich der für jeden Eintrag und für jedes Datenfeld innerhalb eines jeden Eintrags zugeordneten Anzahl von Bits lediglich veranschaulichend und nicht erschöpfend ist.
-
Am Block 208 können die Registerwerte aus dem Speicher an die physischen Register übertragen werden. Als ein Beispiel können die am Block 204 in den Speicher kopierten Registerwerte in die physischen Register zurückgespeichert werden, nachdem eine Rückkehr von einem Funktionsaufruf stattgefunden hat. In bestimmten beispielhaften Ausführungsformen kann eine Ladeanweisung, die einen Wert aus einem Speicherplatz an eine physische Position lädt, jedoch umgangen werden, indem eine vorhergesagte Ladeoperation durchgeführt wird.
-
Im Einzelnen können durch einen Computer ausführbare Anweisungen der Vorhersageengine 102 am Block 210 ausgeführt werden, um vorherzusagen, dass die am Block 206 ausgeführte Speicheranweisung mit einer auszuführenden Ladeanweisung korreliert wird, und um die IA der Speicheranweisung zum Kennzeichnen eines physischen Registers zu nutzen, das den zu dem architekturdefinierten Register 128 gehörenden Wert speichert. Genauer gesagt, die Vorhersageengine 102 kann einen Speicher-IA 118 von dem Vorhersagearray 114 kennzeichnen, die zu der Speicheranweisung gehört, welche vorhersagegemäß mit der Ladeanweisung korreliert (oder eine korrelierte Lade-IA im Falle einer Behandlung einer konstanten Ladeoperation, was später in dieser Offenbarung ausführlicher beschrieben wird). In bestimmten beispielhaften Ausführungsformen könnte die Speicheranweisung mehrere Micro-op-Speicheroperationen umfassen. In solchen beispielhaften Ausführungsformen gibt die von dem Vorhersagearray 114 erhaltene Ladevorhersage nicht nur die Speicher-IA 118 an, sondern auch eine uop-Position der Speicheranweisung. In diesen beispielhaften Ausführungsformen, in denen die Speicheranweisung eine einzelne Micro-op ist, kann der Standardwert von 0 verwendet werden. Die Vorhersageengine 102 kann dann die korrelierte IA (entweder die Speicher-IA 118 oder eine Lade-IA im Falle von konstanten Ladeoperationen) nutzen, um auf die Zuordnungstabelle 122 zuzugreifen und ein physisches Register zu kennzeichnen, das den zu der korrelierten Anweisung gehörenden Wert speichert (z.B. den zum architekturdefinierten Register 128 gehörenden Wert).
-
Unter nochmaliger Bezugnahme auf das zuvor vorgestellte Beispiel kann das Ziel des gekennzeichneten physischen Registers pR21 sein, das dem architekturdefinierten Register 128 zugeordnet ist und in dem infolge einer Ausführung einer Produzentenoperation, die der vorhergesagten Speicheranweisung entspricht, ein Wert gespeichert wurde. Dieser Prozess wird später in dieser Offenbarung unter Bezugnahme auf das veranschaulichende Verfahren von 3 ausführlicher beschrieben. Es dürfte sich verstehen, dass die Zuordnungstabelle 122 in bestimmten beispielhaften Ausführungsformen zwar als sich außerhalb der Vorhersageengine 102 befindlich gezeigt ist, die Zuordnungstabelle 122 jedoch in der Vorhersageengine 102 enthalten sein kann.
-
Am Block 212 können durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 ausgeführt werden, um die vorhergesagte Ladeoperation durchzuführen, indem der Wert in dem am Block 210 gekennzeichneten physischen Register in ein anderes physisches Register gesetzt wird, das gerade dem architekturdefinierten Register 128 zugeordnet ist. Nochmals unter Bezugnahme auf das zuvor vorgestellte Beispiel kann der im pR21 gespeicherte Wert in das physische Register 30 (pR30) kopiert werden, wobei pR30 gerade dem architekturdefinierten Register 128 zugeordnet ist. In bestimmten beispielhaften Ausführungsformen müssen gegebenenfalls verschiedene Vorgaben erfüllt werden, bevor die vorhergesagte Ladeoperation durchgeführt wird. Zum Beispiel muss ein zu der Korrelation zwischen der vorhergesagten Speicheranweisung und der Ladeanweisung gehörender Vertrauenswert gegebenenfalls einen Schwellenwert erfüllen, um mit der vorhergesagten Ladeoperation fortzufahren. Ferner müssen gegebenenfalls verschiedene Abhängigkeitsvorgaben zwischen Anweisungen erfüllt werden. Diese Vorgaben werden später in dieser Offenbarung unter Bezugnahme auf das veranschaulichende Verfahren 300 von 3 ausführlicher beschrieben.
-
In bestimmten beispielhaften Ausführungsformen kann eine Prüfladeoperation durchgeführt werden, um zu prüfen, ob die vorhergesagte Ladeoperation dazu geführt hat, dass der richtige Wert in dem physischen Register gespeichert wird, das gerade dem architekturdefinierten Register 128 zugeordnet ist, so dass sichergestellt ist, dass eine Konsumentenoperation den richtigen Wert bearbeitet. Im Einzelnen können am Block 214 durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 ausgeführt werden, um die Prüfladeoperation einzuleiten, indem der zu dem architekturdefinierten Register 128 gehörende Wert aus dem Speicher abgerufen wird. Wie zuvor erwähnt wurde, wurde der Wert infolge der Ausführung einer Speicheranweisung möglicherweise an einem Speicherplatz gespeichert. Nochmals unter Bezugnahme auf das zuvor vorgestellte Beispiel kann der Wert im pR21, der von der Speicheranweisung an einem bestimmten Speicherplatz [x] gespeichert wurde, von diesem Speicherplatz [x] abgerufen werden.
-
Am Block 216 kann der abgerufene Wert mit dem Wert verglichen werden, der in dem am Block 210 gekennzeichneten physischen Register gespeichert ist. Wenn die Werte unterschiedlich sind, kann dies anzeigen, dass die vorhergesagte Ladeoperation dazu führte, dass der falsche Wert in dem physischen Register gespeichert wurde, das gerade dem architekturdefinierten Register 128 zugeordnet ist. Somit können am Block 218 die Ladeanweisung und alle Anweisungen in der Anweisungspipeline, die jünger als die Ladeanweisung sind, aus der Pipeline gelöscht werden. Der Inhalt der Pipeline kann insbesondere bei einer Out-of-Order-Maschine auf diese Weise gelöscht werden, bei der jüngere Anweisungen als die Ladeanweisung möglicherweise bereits ausgeführt wurden und sich gegebenenfalls auf den falschen Wert gestützt haben, der in dem physischen Register gespeichert war, das zu der vorhergesagten Speicheranweisung gehört. Nachdem der Inhalt der Pipeline gelöscht wurde, kann die Ladeanweisung am Block 220 ausgeführt werden, indem nicht die vorhergesagte Ladeoperation durchgeführt wird, sondern der zu dem architekturdefinierten Register 128 gehörende Wert aus dem Speicher abgerufen wird. Um sicherzustellen, dass die vorhergesagte Ladeoperation nicht nochmals durchgeführt wird, kann die Ausführung des Algorithmus die Durchführung einer vorhergesagten Ladeoperation unmittelbar nach dem erfolgten Löschen des Inhalts einer Pipeline verhindern.
-
Wie unter Bezugnahme auf das veranschaulichende Verfahren 300 von 3 ausführlicher beschrieben wird, können in bestimmten beispielhaften Ausführungsformen die Ergebnisse der Prüfladeoperation verwendet werden, um einen Vertrauenswert zu aktualisieren, der zu der Korrelation zwischen der vorhergesagten Speicheranweisung und der Ladeanweisung gehört. Wenn zum Beispiel der von dem Speicherplatz abgerufene Wert gleich dem in dem physischen Register gespeicherten Wert ist, das zu der vorhergesagten Speicheranweisung gehört (eine positive Feststellung am Block 216), kann der Vertrauenswert erhöht werden. Umgekehrt kann der Vertrauenswert verringert werden, wenn die Werte unterschiedlich sind (eine negative Feststellung). Des Weiteren kann in bestimmten beispielhaften Ausführungsformen gemäß einem anderen Mittel zur Bestätigung der Richtigkeit der Daten nur die vorhergesagte Ladeoperation durchgeführt und die Prüfladeoperation nicht durchgeführt werden.
-
Genauer gesagt, anstatt eine Prüfladeoperation durchzuführen, kann die Zuordnungstabelle 122 stattdessen aktualisiert werden, um widerzuspiegeln, wie sich im Speicher gespeicherte Werte ändern können. Im Einzelnen kann ein Mechanismus bereitgestellt werden, um sicherzustellen, dass eine vorhergesagte Ladeoperation nicht durchgeführt wird, wenn der Inhalt im Speicher, der einem Wert eines physischen Registers entspricht, von einem Prozessorkern, der den Wert im Speicher gespeichert hat, oder von einem anderen Prozessorkern geändert wird. Zu einem solchen Mechanismus kann die Bereitstellung der Möglichkeit gehören, dass ein Prozessorkern exklusive Rechte für die Speicherung an einem bestimmten Speicherplatz oder einem Bereich von Speicherplätzen erhält.
-
Man nehme zum Beispiel an, dass ein Multithread-Programm auf zwei Prozessorkernen - dem Kern A und dem Kern B - ausgeführt wird. Man nehme weiter an, dass der Kern A exklusive Rechte für das Schreiben an den Speicherplatz x hat, der Kern B jedoch die Möglichkeit braucht, an denselben Speicherplatz zu schreiben. Man nehme darüber hinaus an, dass eine Speicheranweisung und eine Ladeanweisung auf dem Kern A ausgeführt werden (die nachstehend als Speicheranweisung A und Ladeanweisung A bezeichnet werden) und dass eine Speicheranweisung und eine Ladeanweisung auf dem Kern B ausgeführt werden (die nachstehend als Speicheranweisung B und Ladeanweisung B bezeichnet werden). Der Kern A kann die Speicheranweisung A ausführen, um einen ersten Wert an dem Speicherplatz x zu speichern. Der Kern B kann dann die Speicheranweisung B ausführen, was dazu führt, dass ein zweiter, abweichender Wert am Speicherplatz x gespeichert wird. Wenn anstelle der Ladeanweisung A dann eine vorhergesagte Ladeoperation durchgeführt würde, würde nicht der richtige gewünschte Wert (d.h. der am Speicherplatz x gespeicherte zweite Wert), sondern der erste Wert aus einem physischen Register abgerufen werden.
-
Wenn ein Prozessorkern (z.B. der Kern A) keine exklusiven Rechte für das Schreiben an einen bestimmten Speicherplatz oder einen Bereich von Speicherplätzen mehr hat, kann der Eintrag in der Zuordnungstabelle 122, der der von dem Prozessorkern ausgeführten Speicheranweisung entspricht (z.B. der Speicheranweisung A), somit aktualisiert werden, um anzuzeigen, dass der Eintrag ungültig gemacht worden ist. Genauer gesagt, ein Bit kann gesetzt oder invertiert werden, um anzuzeigen, dass der Wert, der in dem physischen Register gespeichert ist, das in dem Eintrag in der Zuordnungstabelle 122 gekennzeichnet ist, nicht mehr gültig ist. Unter Bezugnahme auf das oben vorgestellte Beispiel würde eine vorhergesagte Ladeoperation folglich nicht für eine Ladeanweisung A durchgeführt werden, da, wenn die korrelierte Speicheranweisungs-IA (z.B. die IA für die Speicheranweisung A) für den Zugriff auf einen Eintrag in der Zuordnungstabelle 122 verwendet wird, der Eintrag ungültig gemacht würde.
-
Das veranschaulichende Verfahren 200 von 2 geht davon aus, dass eine vorhergesagte Ladeoperation durchgeführt wird. Wie zuvor erwähnt wurde, müssen gegebenenfalls jedoch verschiedene Vorgaben ausgewertet werden, um festzustellen, ob die vorhergesagte Ladeoperation durchgeführt werden kann. 3 ist ein Prozessablaufdiagramm eines veranschaulichenden Verfahrens 300 zur Feststellung, ob eine vorhergesagte Ladeoperation ausgeführt werden soll, um einen Speicherzugriff für eine Ladeanweisung gemäß einer oder mehreren beispielhaften Ausführungsformen der Offenbarung zu umgehen.
-
Bezug nehmend auf die 1 und 3 in Verbindung miteinander, kann am Block 302 eine Datenpaarbildung zwischen einer Ladeanweisung und einer Speicheranweisung unter Verwendung von Operandenadressen 110, die zu der Ladeanweisung und der Speicheranweisung gehören, festgestellt werden. Während eine Anweisungsadresse eine Speicheradresse ist, die einen Hinweis auf einen Speicherplatz im Speicher gibt, an dem eine Programmanweisung gespeichert wird, ist eine Operandenadresse eine Speicheradresse, die einen Hinweis auf einen Speicherplatz im Speicher gibt, an dem von einer Programmanweisung bearbeitete Daten gespeichert werden. In bestimmten beispielhaften Ausführungsformen können Programmanweisungen und von den Programmanweisungen genutzte Daten in demselben Cachespeicher (z.B. einem gemeinsam genutzten Cachespeicher) oder in verschiedenen Cachespeichern (z.B. einem Anweisungscachespeicher und einem Datencachespeicher) gespeichert werden.
-
Genauer gesagt, am Block 302 kann auf eine Datenpaarbildungstabelle 112 zugegriffen werden. Die Datenpaarbildungstabelle 112 kann mit mindestens einem Teil der Operandenadresse von Daten indexiert werden, die zu einer Programmanweisung gehören (z.B. einer Speicheranweisung, eine Ladeanweisung usw.). Wenn eine Speicheranweisung ausgeführt wird, kann in die Datenpaarbildungstabelle 112 geschrieben werden. Im Einzelnen kann in der Datenpaarbildungstabelle 112 ein Eintrag erzeugt werden, der mindestens einen Teil einer Operandenadresse, die zu der Speicheranweisung gehört, zusammen mit einem Operandenadresstag (z.B. einem anderen Teil der Operandenadresse, die zu der Speicheranweisung gehört) sowie einer Speicher-IA für die Speicheranweisung speichert.
-
Unter der Annahme von 64-Bit-Operandenadressen zum Beispiel, bei denen das Bit 0 das höchstwertige Bit und das Bit 63 das niedrigstwertige Bit ist, können die Bits 54 bis 63 als Index verwendet werden. Theoretisch können die Bits 0 bis 53 dann als das Operandenadresstag gespeichert werden. Da die Datenpaarbildungstabelle 112 kein Funktionsarray, sondern ein Performance-Array ist, kann jedoch eine geringere Anzahl von Bits (z.B. die Bits 32 bis 53) für das Operandenadresstag verwendet werden, um ein Gleichgewicht zu schaffen zwischen der Aliasing-Menge, die akzeptabel ist, und der gewünschten Anzahl von Einträgen, die von der Datenpaarbildungstabelle 112 aufgenommen werden können. Das heißt, wenn eine größere Anzahl von Bits für das Operandenadresstag verwendet wird, entsteht weniger Aliasing, jedoch nimmt die Datenpaarbildungstabelle 112 unter Berücksichtigung eines gesamten Maximalbereichs/Bitbudgets für die Tabelle auch eine geringere Anzahl von Einträgen auf. Aliasing kann entstehen, wenn zwei Einträge in der Datenpaarbildungstabelle 112 denselben Operandenadressenindex sowie dasselbe Operandenadresstag haben, jedoch verschiedenen Speicheranweisungen entsprechen, wobei in diesem Fall möglicherweise die falsche Speicheranweisung mit einer Ladeanweisung paarweise zusammengefasst wird. Vorhergesagten Ladeoperationen, die dazu führen, dass aufgrund des Aliasing der falsche Wert in ein physisches Register geladen wird, kann begegnet werden, indem eine Prüfladeoperation oder beliebige der anderen beispielhaften Mechanismen, die zuvor beschrieben wurden, durchgeführt werden.
-
Nach wie vor unter Bezugnahme auf den Block 302 kann die Datenpaarbildungstabelle 112 unter Verwendung eines Teils einer Operandenadresse, die zu einer Ladeanweisung gehört, gelesen werden. Im Einzelnen kann der Teil der zu der Ladeanweisung gehörenden Operandenadresse verwendet werden, um einen Eintrag in der Datenpaarbildungstabelle 112 aufzufinden, der einen übereinstimmenden Operandenadressenindex hat. Ein zu der Ladeanweisung gehörendes Operandenadresstag kann dann mit dem Operandenadresstag verglichen werden, das in dem übereinstimmenden Eintrag gespeichert ist. Wenn die Operandenadresstags übereinstimmen, kann eine mögliche Datenpaarbildung 112 zwischen der Ladeanweisung und der Speicheranweisung gekennzeichnet werden.
-
In bestimmten beispielhaften Ausführungsformen kann für jede Speicheranweisung in die Datenpaarbildungstabelle 112 geschrieben werden. Das heißt, ein Eintrag kann in der Datenpaarbildungstabelle 112 für jede Speicheranweisung erzeugt werden, wobei der Eintrag mit mindestens einem Teil der Operandenadresse indexiert wird, an der die Daten von der Speicheranweisung im Speicher gespeichert werden, und wobei der Eintrag die IA der Speicheranweisung enthält. In bestimmten beispielhaften Ausführungsformen jedoch können Daten in einem Ausschalt-Lernmodus in die Datenpaarbildungstabelle 112 geschrieben werden, gemäß dem Daten nicht für jede Speicheranweisung geschrieben werden können.
-
In einem Fall zum Beispiel, der wiederholten Code (z.B. eine Schleife) innerhalb eines Bereichs von Code einschließt, in dem sich vorhergesagte Verzweigungen befinden, kann wiederholt eine Speicheranweisung innerhalb der Schleife angetroffen werden. Somit ist es gegebenenfalls nicht erforderlich, jedes Mal, wenn die Speicheranweisung angetroffen wird, einen Eintrag in der Datenpaarbildungstabelle 112 für sie zu erzeugen, weil wahrscheinlich schon ein Eintrag erzeugt worden ist und die Speicheranweisung in dem Vorhersagearray 114 wahrscheinlich schon mit einer Ladeanweisung paarweise zusammengefasst wurde und somit wahrscheinlich kein zusätzlicher Lerneffekt erzielt wird, indem zusätzliche Einträge in der Datenpaarbildungstabelle 112 erzeugt werden. In bestimmten beispielhaften Ausführungsformen können in Fällen, in denen eine Schleife in einem Bereich von Code vorhanden ist, der über vorhergesagte Verzweigungen verfügt, jedoch trotzdem begrenzt Inhalte zu Lernzwecken erfasst werden. Zum Beispiel kann in der Datenpaarbildungstabelle 112 für 1 von 10 Speicheranweisungen ein Eintrag erzeugt werden. Die vorstehende Erörterung bezüglich des Ausschalt-Lernens gilt gleichermaßen auch für konstante Ladeoperationen.
-
Am Block 304 kann die Datenpaarbildung zwischen der Speicheranweisung und der Ladeanweisung als ein Eintrag in einem Vorhersagearray 114 gespeichert werden. Die Datenpaarbildung kann zusammen mit einem Vertrauenswert gespeichert werden, der einen zu der Paarbildung gehörenden Vertrauensgrad widerspiegelt. Genauer gesagt, der Vertrauenswert kann einen Vertrauensgrad angeben, dass die Ausführung der Ladeanweisung zum Abruf eines gleichen Werts von einem Speicherplatz führt, der an dem Speicherplatz infolge der Ausführung der Speicheranweisung gespeichert wurde, welche mit der Ladeanweisung paarweise zusammengefasst ist.
-
In bestimmten beispielhaften Ausführungsformen kann eine vorhandene Verzweigungsvorhersagestruktur wie beispielsweise eine Tabelle eines Verzweigungszielpufferspeichers (BTB, branch target buffer) verwendet werden, um Daten zu speichern, die andernfalls in dem Vorhersagearray 114 gespeichert würden. Die BTB-Tabelle kann zum Beispiel mit der IA einer Verzweigungsanweisung indexiert werden und eine Ziel-IA zusammen mit der Verzweigungs-IA speichern. Die Ziel-IA ist die IA einer Zielanweisung, die auszuführen ist, wenn die Verzweigung vorgenommen wird. In bestimmten beispielhaften Ausführungsformen kann jede Paarbildung aus Verzweigungs-IA und Ziel-IA als ein einzelner Eintrag in der BTB-Tabelle gespeichert werden. In anderen beispielhaften Ausführungsformen kann die BTB-Tabelle mehrfach-assoziative Einträge enthalten, wodurch mehrere Verzweigungen innerhalb eines gegebenen Codeblocks (z.B. eines 64-Byte-Codeblocks) überwacht werden können.
-
In diesen beispielhaften Ausführungsformen, in denen mehrere Verzweigungen für einen gegebenen Codeblock überwacht werden können, kann ein Teil der IA für jede Verzweigungsanweisung, die in diesem Codeblock vorhanden sein kann, über all diese Verzweigungsanweisungen hinweg gemeinsam verwendet werden. Bei einer Mikroarchitektur, bei der lAs zum Beispiel unter Verwendung von 64 Bits dargestellt werden, kann das gemeinsam genutzte Tag ein Anfangsteil der höchstwertigen Bits (z.B. der Bits 0 bis X) sein. Dieses gemeinsam genutzte Tag kann nur ein Mal in der BTB-Tabelle für jede Verzweigungsanweisung in dem Codeblock gespeichert werden und es kann zusammen mit einer Ziel-IA für jede Verzweigungsanweisung und einem Tag gespeichert werden, um die Verzweigungsanweisungen voneinander zu unterscheiden (z.B. die niedrigstwertigen Bits ((Y+1) bis 63, um den Offset innerhalb des Codeblocks unter Berücksichtigung eines Index (X+1) bis Y zu bezeichnen). Durch diese gemeinsame Nutzung von Tags steht in der BTB-Tabelle zusätzlicher Speicher zur Verfügung, um Speicher-IAs und Lade-IAs je gesamte feste Anzahl von Bits zu speichern. Wenn die BTB-Tabelle zum Beispiel bis zu 3 Verzweigungsanweisungen innerhalb eines gegebenen Codeblocks überwachen kann und es zufällig weniger als 3 Verzweigungsanweisungen innerhalb des Codeblocks gibt, gestattet die gemeinsame Nutzung von Tags zwischen den Verzweigungsanweisungen (das die Anzahl der Verzweigungen festlegt, die Tag-Bits gemeinsam nutzen sollen), zusätzliche Einträge in der BTB-Tabelle, die nicht für die Speicherung von Verzweigungs-IA-/Ziel-IA-Zuordnungen verwendet werden, für die Speicherung von Lade-IA/-Speicher-IA-Zuordnungen zu verwenden. Im Einzelnen kann die Lade-IA anstelle der Verzweigungs-IA und die Speicher-IA anstelle der Ziel-IA gespeichert werden. Auf diese Weise kann eine kombinierte BTB-Tabelle verwaltet werden, die sowohl Paarbildungen aus Verzweigungsanweisungen und Zielanweisungen als auch Paarbildungen aus Ladeanweisungen und Speicheranweisungen speichert und dadurch die Notwendigkeit der Verwaltung des getrennten Vorhersagearrays 114 überflüssig macht.
-
Am Block 306 kann eine IA 116 gekennzeichnet werden. Die IA 116 kann als Eingabe in die Vorhersageengine 102 bereitgestellt werden. Am Block 308 können durch einen Computer ausführbare Anweisungen der Vorhersageengine 102 ausgeführt werden, um auf das Vorhersagearray 114 unter Verwendung der IA 116 zuzugreifen, um eine vorhergesagte Speicher-IA 118 festzustellen, die der IA 116 entspricht. Im Einzelnen kann das Vorhersagearray 114 indexiert werden, indem mindestens Teile von Anweisungsadressen verwendet werden. Somit kann mindestens ein Teil der IA 116 verwendet werden, um festzustellen, ob das Vorhersagearray 114 eine Datenpaarbildung zwischen der IA 116 und einer IA enthält, die zu einer Speicheranweisung gehört. Wenn eine solche Datenpaarbildung vorhanden ist, kann die Speicheranweisung als eine vorhergesagte Speicheranweisung behandelt werden, die der Anweisung mit der IA 116 entspricht.
-
In bestimmten beispielhaften Ausführungsformen kann die Anweisung mit der IA 116 zuerst decodiert werden, um festzustellen, dass es sich dabei um eine Ladeanweisung handelt, bevor die IA 116 für den Zugriff auf das Vorhersagearray 114 verwendet wird. Wenn auf das Vorhersagearray 114 nur zugegriffen wird, wenn eine Anweisung decodiert und festgestellt wurde, dass es eine Ladeanweisung ist, kann gegebenenfalls Strom gespart werden. Dies würde jedoch wahrscheinlich auch die Programmausführung verlangsamen, da Zugriffe auf das Vorhersagearray 114 nur stattfinden können, wenn eine Anweisung decodiert und festgestellt wurde, dass es eine Ladeanweisung ist. In weiteren beispielhaften Ausführungsformen ist es gegebenenfalls nicht erforderlich, die Anweisung zuerst zu decodieren, um festzustellen, dass es eine Ladeanweisung ist, und stattdessen kann für jede Anweisung, die abgerufen wird, auf das Vorhersagearray 114 zugegriffen werden. In solchen beispielhaften Ausführungsformen würde eine vorhergesagte Ladeoperation jedoch nur durchgeführt werden, wenn bei der Decodierung der Anweisung, deren IA 116 für den Zugriff auf das Vorhersagearray 114 verwendet wird, schließlich festgestellt wird, dass es eine Ladeanweisung ist.
-
In diesen beispielhaften Ausführungsformen, in denen vor der Decodierung der Anweisung auf das Vorhersagearray 114 zugegriffen wird, kann zumindest teilweise gleichzeitig mit dem Anweisungsabruf (Synchronmodus) auf das Vorhersagearray 114 zugegriffen werden oder alternativ, wenn die Vorhersageengine 102 dem Anweisungsabruf zeitlich voraus ist, kann auf das Vorhersagearray 114 zumindest teilweise gleichzeitig mit Zugriffen auf die BTB-Tabelle (die üblicherweise vor dem Anweisungsabruf stattfinden) zugegriffen werden. Der Anweisungsabruf kann der Vorhersageengine 102 zeitlich nachlaufen, wenn zum Beispiel im L1-Cachespeicher ein Cachefehler auftritt und auf den L2-Cachespeicher zugegriffen werden muss, um die Anweisung abzurufen. Als ein weiteres Beispiel kann der Anweisungsabruf der Vorhersageengine 102 zeitlich nachlaufen, wenn der Anweisungsabruf unter Einhaltung der Reihenfolge stattfinden muss, auf das Vorhersagearray 114 aber außerhalb der Reihenfolge zugegriffen werden kann.
-
In bestimmten beispielhaften Ausführungsformen kann eine Anweisungskennung (z.B. eine Micro-op-ID), die zu der vorhergesagten Speicheranweisung gehört, zusätzlich zu der IA der vorhergesagten Speicheranweisung aus dem Vorhersagearray 114 abgerufen werden. Genauer gesagt, eine Anweisung kann in mehrere Micro-op-IDs aufgeteilt werden. Zum Beispiel kann eine Speicheranweisung tatsächlich mehrere Speicheroperationen umfassen, wobei jede über ihre eigene Micro-op-ID verfügt. Die Micro-op-ID kann verwendet werden, um Speicheranweisungen innerhalb einer Mehrfach-Speicheranweisung voneinander zu unterscheiden, und sie kann des Weiteren verwendet werden, um die bestimmte Speicheranweisung innerhalb der Mehrfach-Speicheranweisung zu kennzeichnen, die mit einer Ladeanweisung korreliert.
-
Am Block 310 können durch einen Computer ausführbare Anweisungen der Schreib-/Leseengine 106 ausgeführt werden, um unter Verwendung der vorhergesagten Speicher-IA und/oder der Anweisungskennung, die zu der vorhergesagten Speicheranweisung 118 gehört, auf die Zuordnungstabelle 122 zuzugreifen und eine Leseoperation 120 durchzuführen, um einen entsprechenden übereinstimmenden Eintrag in der Zuordnungstabelle 122 abzurufen. Der in der Zuordnungstabelle 122 gespeicherte übereinstimmende Eintrag, welcher der vorhergesagten Speicheranweisung entspricht, kann beliebige der beispielhaften Arten von Daten enthalten, die zuvor beschrieben wurden. Im Einzelnen kann der übereinstimmende Eintrag in der Zuordnungstabelle 122 ein virtuelles IA-Tag, das zu der vorhergesagten Speicheranweisung gehört (z.B. mindestens einen Teil der vorhergesagten Speicheranweisungs-IA 118); eine Anweisungskennung (z.B. eine Micro-op-ID) der vorhergesagten Speicheranweisung; eine Anweisungskennung einer Produzentenoperation, die der vorhergesagten Speicheranweisung entspricht; und eine Kennzeichnung des physischen Registers enthalten, das einen von der Produzentenoperation erzeugten/geänderten Wert gespeichert hat (und vorhersagegemäß gerade speichert), wobei ein solcher Wert durch die Ausführung der vorhergesagten Speicheranweisung an einen Speicherplatz kopiert wird. Es dürfte sich verstehen, dass in physischen Registern gespeicherte aktuelle Werte nicht in dem Vorhersagearray 114 gespeichert werden, sondern vielmehr in einer Registerdatei gespeichert werden können.
-
Am Block 312 können durch einen Computer ausführbare Anweisungen der Vorhersageengine 102 ausgeführt werden, um festzustellen, ob eine oder mehrere Abhängigkeitsvorgaben erfüllt werden. Eine beispielhafte Abhängigkeitsvorgabe kann darin bestehen, dass die vorhergesagte Ladeoperation nach erfolgter Durchführung der Produzentenoperation stattfindet. Dies kann festgestellt werden, indem eine Anweisungskennung, die zu der Produzentenoperation in den Register-/Abhängigkeitsdaten 134 gehört, gekennzeichnet und die Anweisungskennung der Produzentenoperation mit einer zu der vorhergesagten Ladeoperation gehörenden Anweisungskennung verglichen wird, um sicherzustellen, dass die Produzentenoperation bereits durchgeführt worden ist. Eine weitere beispielhafte Abhängigkeitsvorgabe kann darin bestehen, dass die vorhergesagte Speicheranweisung vor einer Prüfladeoperation ausgeführt wird. Dies kann ebenso festgestellt werden, indem eine Anweisungskennung der vorhergesagten Speicheranweisung mit einer Anweisungskennung der Prüfladeoperation verglichen wird.
-
Als Reaktion auf eine negative Feststellung am Block 312 kann das Verfahren 300 wieder vom Block 312 fortfahren, wo erneut festgestellt wird, ob eine oder mehrere Abhängigkeitsvorgaben erfüllt werden. Die Feststellung am Block 312 kann wiederholt ausgeführt werden, bis eine positive Feststellung, dass alle Abhängigkeitsvorgaben erfüllt werden, getroffen wird. Als Reaktion auf eine positive Feststellung am Block 312 kann das Verfahren 300 zum Block 314 schalten, wo durch einen Computer ausführbare Anweisungen der Vorhersageengine 102 ausgeführt werden können, um festzustellen, ob der Vertrauenswert einen Schwellenwert erreicht. In Abhängigkeit von der Ausführung kann ein erster Wert einen zweiten Wert erreichen, wenn der erste Wert größer oder gleich dem zweiten Wert ist oder wenn der erste Wert kleiner oder gleich dem zweiten Wert ist. Die Entscheidung am Block 312 kann getroffen werden, um sicherzustellen, dass vorhergesagte Ladeoperationen nur durchgeführt werden, wenn der zu der Paarbildung 112 aus Ladeanweisung und vorhergesagter Speicheranweisung gehörende Vertrauenswert einen Schwellenwert erreicht, wodurch ein geeignetes Vertrauen angezeigt wird, dass ein Wert, der infolge einer Produzentenoperation, die zu der vorhergesagten Speicheranweisung gehört, in einem physischen Register gespeichert wird, derselbe Wert ist, der bei Ausführung der Ladeanweisung aus dem Speicher abgerufen würde. Dies wiederum zeigt ein geeignetes Vertrauen an, dass ein Konsument den richtigen Wert bearbeiten würde, wenn eine vorhergesagte Ladeoperation durchgeführt und die Ausführung der aktuellen Ladeanweisung umgangen wird.
-
Als Reaktion auf eine positive Feststellung am Block 314 können durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 am Block 316 ausgeführt werden, um eine vorhergesagte Ladeoperation zumindest zum Teil beruhend auf dem physischen Register anzuwenden, das in dem übereinstimmenden Eintrag in der Zuordnungstabelle 122 gekennzeichnet ist. Im Einzelnen kann ein weiteres physisches Register 130, das gerade dem architekturdefinierten Register 128 zugeordnet ist, aus der Registerzuordnungstabelle 138 gekennzeichnet werden und die vorhergesagte Ladeoperation kann durchgeführt werden, um einen Wert, der in dem physischen Register gespeichert ist, das in dem übereinstimmenden Eintrag in der Zuordnungstabelle 122 gekennzeichnet ist, in das physische Register 130 zu kopieren, das gerade dem architekturdefinierten Register 128 zugeordnet ist. Ferner können beliebige Abhängigkeiten zwischen Registern aus den Register-/Abhängigkeitsdaten 134 gekennzeichnet werden. Zum Beispiel kann der Wert, auf den das physische Register gesetzt wird, das in dem übereinstimmenden Eintrag in der Zuordnungstabelle 122 gekennzeichnet ist, von den Werten abhängen, auf die weitere physische Register gesetzt werden.
-
In bestimmten beispielhaften Ausführungsformen kann das Verfahren 300 vom Block 316 zum Block 318 schalten. Ferner kann das Verfahren 300 als Reaktion auf eine negative Feststellung am Block 314 den Block 316 überspringen und direkt zum Block 318 schalten. Am Block 318 können durch einen Computer ausführbare Anweisungen der Anweisungsausführungsengine 108 ausgeführt werden, um eine Prüfladeoperation durchzuführen. Wie zuvor erwähnt wurde, kann eine Prüfladeoperation das Abrufen eines Werts, der an einem Speicherplatz gespeichert ist, welcher von der Ladeanweisung angegeben wird, und das Vergleichen des abgerufenen Werts mit dem Wert des physischen Registers beinhalten, der zur Durchführung der vorhergesagten Ladeoperation verwendet wird.
-
Am Block 320 kann der Vertrauenswert, der zu der Paarbildung 112 aus Ladeanweisung und vorhergesagter Speicheranweisung gehört, zumindest zum Teil beruhend darauf aktualisiert werden, ob die Prüfladeoperation mit der vorhergesagten Ladeoperation übereinstimmt oder, genauer gesagt, ob der aus dem Speicher durch die Prüfladeoperation abgerufene Wert gleich dem Wert des physischen Registers ist, der zur Durchführung der vorhergesagten Ladeoperation verwendet wird. Wenn die Werte nicht übereinstimmen, kann der Vertrauenswert verringert werden, was es unwahrscheinlicher macht, dass zukünftige vorhergesagte Ladeoperationen für Ladeanweisungen durchgeführt werden, die mit der vorhergesagten Speicheranweisung in dem Vorhersagearray 114 korreliert sind. Umgekehrt, wenn die Werte übereinstimmen, kann der Vertrauenswert erhöht werden, was es wahrscheinlicher macht, dass zukünftige vorhergesagte Ladeoperationen für Ladeanweisungen durchgeführt werden, die mit der vorhergesagten Speicheranweisung korreliert sind. Es dürfte sich verstehen, dass die vorhergesagte Ladeoperation am Block 316 nicht durchgeführt wird, wenn am Block 314 eine negative Feststellung getroffen wird. Jedoch kann der Vertrauenswert am Block 320 dennoch aktualisiert werden. Im Einzelnen kann dennoch eine Vorhersage getroffen werden, obgleich im Falle einer negativen Feststellung am Block 314 eine vorhergesagte Ladeoperation nicht durchgeführt werden kann. Nach der Durchführung der Prüfladeoperation am Block 318 kann der Vertrauenswert dann am Block 320 beruhend darauf aktualisiert werden, ob die Vorhersage richtig war. Wenn die Vorhersage richtig ist, kann der Vertrauenswert erhöht werden. Wenn der Vertrauenswert stark genug wird, kann beruhend auf der Vorhersage in der Zukunft schließlich eine vorhergesagte Ladeoperation durchgeführt werden.
-
Das Durchführen einer vorhergesagten Ladeoperation gemäß beispielhaften Ausführungsformen der Offenbarung verbessert die Leistung der Anweisungsausführung, da sie die Durchführung einer Register-zu-Register-Kopieroperation anstelle eines Speicherzugriffs einschließt. Registeroperationen schließen weniger Ausführungszyklen ein als Speicherzugriffe. Somit ist eine Konsumentenoperation in der Lage, einen Wert zu bearbeiten, der infolge der vorhergesagten Ladeoperation in einem physischen Register gespeichert ist, ohne darauf warten zu müssen, dass die aktuelle Ladeanweisung einen Speicherzugriff durchführt und den abgerufenen Wert in einem physischen Register speichert. Das Durchführen einer vorhergesagte Ladeoperation gemäß beispielhaften Ausführungsformen der Offenbarung gestattet auch eine Anweisungsausführung außerhalb der Reihenfolge. Im Einzelnen kann eine aktuellere Anweisung in einer Anweisungswarteschlange, die sich auf den Wert stützt, der zu einer älteren Ladeanweisung in der Warteschlange gehört, ausgeführt werden, während die Prüfung der älteren Ladeanweisung immer noch auf ihren Abschluss wartet, wenn zum Beispiel eine vorhergesagte Ladeoperation durchgeführt wird, um den Wert aus einem physischen Register zu erhalten, das die aktuellere Anweisung ausführen muss.
-
In bestimmten beispielhaften Ausführungsformen kann eine Mustertabelle verwaltet und auf diese zugegriffen werden, um mit Situationen umzugehen, in denen eine vorhergesagte Ladeoperation zu einem falschen Wert führen kann, da es nicht eindeutig ist, welche Speicheranweisung mit einer Ladeanweisung korrelieren kann. Man nehme zum Beispiel an, dass der folgende Pseudocode einen Bedingungscode darstellt, der ausgeführt wird: wenn x=1, führe eine Speicheranweisung an IA Y aus, um den Wert 1 am Speicherplatz [x] zu speichern, führe sonst eine Speicheranweisung an IA Z aus, um den Wert 2 am Speicherplatz [x] zu speichern. Folglich können verschiedene Werte am Speicherplatz [x] in Abhängigkeit vom Ergebnis des Konditionals (d.h., ob x=1 oder nicht und somit welche Speicheranweisung ausgeführt wird) gespeichert werden. Man nehme des Weiteren an, dass auf diesen Bedingungscode eine Ladeanweisung folgt, um den Inhalt am Speicherplatz [x] in ein physisches Register zu laden. In diesem Beispiel kann eine vorhergesagte Ladeoperation möglicherweise nicht durchgeführt werden, weil das Vorhersagearray 114 eine Lade-IA einer einzelnen Speicher-IA zuordnet und es in diesem Fall nicht eindeutig ist, welche Speicher-IA mit der Lade-IA korreliert werden soll. Diese Uneindeutigkeit wird nur während der Programmausführung gelöst, wenn das Ergebnis des Konditionals bekannt wird.
-
Eine Mustertabelle, auf die parallel zu dem Vorhersagearray 114 zugegriffen werden kann, kann für den Umgang mit solchen beispielhaften Fällen verwendet werden. Die Mustertabelle kann dem Vorhersagearray 114 ähnlichen Inhalt (z.B. Speicher-IAs) speichern, aber anders als das Vorhersagearray 114 indexiert werden. Im Einzelnen kann die Mustertabelle mittels eines Hashs einer IA mit einem Muster indexiert werden, das Langzeit-Ergebnisse des Konditionals darstellt, während das Vorhersagearray 114 unter Verwendung einer IA (z.B. einer Lade-IA) indexiert werden kann. Zum Beispiel kann das Muster die Ergebnisse der letzten Anzahl X von Verzweigungsanweisungen angeben. Das Muster kann mittels eines Global History Vector (GHV) dargestellt werden, wobei jeder Bitwert in dem GHV anzeigt, ob eine Langzeit-Verzweigungsanweisung vorgenommen wurde oder nicht.
-
Während eine IA (z.B. eine Lade-IA) für die Indexierung in Abhängigkeit von dem Vorhersagearray 114 verwendet werden kann, um zu versuchen, die IA einer korrelierten Anweisung (z.B. einer Speicher-IA, der IA einer korrelierten Ladeanweisung usw.) zu kennzeichnen, kann die IA somit in bestimmten beispielhaften Ausführungsformen mit einem Muster (z.B. dem GHV) gehasht werden, um einen Hashwert zu erhalten, der zur Indexierung in Abhängigkeit von der Mustertabelle verwendet wird. Wenn sich eine Übereinstimmung für den Hashwert in der Mustertabelle befindet, kann die entsprechende IA, die in diesem übereinstimmenden Eintrag in der Mustertabelle gespeichert ist (z.B. eine Speicher-IA, die IA einer korrelierten Ladeanweisung usw.), anstelle des durch den Zugriff auf das Vorhersagearray 114 erhaltenen Ergebnisses (sofern vorhanden) verwendet werden.
-
Beispielhafte Ausführungsformen der Offenbarung wurden hauptsächlich in Verbindung mit dem Kennzeichnen von Speicheranweisungen beschrieben, die mit Ladeanweisungen korreliert werden. In bestimmten beispielhaften Ausführungsformen kann das Korrelieren einer Speicheranweisung mit einer Ladeanweisung jedoch schwierig sein. Genauer gesagt, in bestimmten beispielhaften Ausführungsformen kann eine Ladeanweisung wiederholt ausgeführt werden, um einen Wert von demselben Speicherplatz im Speicher zu laden (was hierin als konstante Ladeoperationen bezeichnet wird). Zum Beispiel kann der Code, der gerade ausgeführt wird, eine Schleife enthalten, die es erforderlich macht, dass eine konstante Ladeoperation wiederholt ausgeführt wird, um mehrmals dieselben Daten von demselben Speicherplatz zu laden. In einem solchen beispielhaften Fall wurde die Speicheranweisung, die diese Daten an diesem Speicherplatz gespeichert hat, möglicherweise viel früher ausgeführt, so dass eine Korrelation der Speicheranweisung mit der konstanten Ladeoperation schwierig ist.
-
In solchen beispielhaften Ausführungsformen kann die Datenpaarbildungstabelle 112 wirksam eingesetzt werden, um zu ermöglichen, dass vorhergesagte Ladeoperationen in Verbindung mit konstanten Ladeoperationen durchgeführt werden. Genauer gesagt, die Datenpaarbildungstabelle 112 wurde zuvor als eine Tabelle beschrieben, die die lAs von Speicheranweisungen speichert; Lade-IAs können jedoch ebenfalls in der Datenpaarbildungstabelle 112 gespeichert werden, um die Durchführung von vorhergesagten Ladeoperationen in Verbindung mit konstanten Ladeoperationen zu ermöglichen. Wenn sich in der Datenpaarbildungstabelle 112 keine Übereinstimmung befindet, wenn mindestens ein Teil der zu einer Ladeanweisung gehörenden Operandenadresse in Abhängigkeit von der Tabelle 112 indexiert wird, kann im Einzelnen ein neuer Eintrag in der Datenpaarbildungstabelle 112 erzeugt werden, der als seinen Index mindestens einen Teil der zu der Ladeanweisung gehörenden Operandenadresse enthält und die IA der konstanten Ladeoperation speichert. Wenn die konstante Ladeoperation dann wieder ausgeführt wird, kann sich eine Übereinstimmung in der Datenpaarbildungstabelle 112 befinden und eine Ladeanweisung-Ladeanweisung-Paarbildung kann in dem Vorhersagearray 114 gespeichert werden. Ein Eintrag in dem Vorhersagearray 114 kann je nach Fall als eine Ladeanweisung-Ladeanweisung-Paarbildung oder als eine Speicheranweisung-Ladeanweisung-Paarbildung bezeichnet werden.
-
In bestimmten beispielhaften Ausführungsformen kann eine Ladeanweisung abhängig von einer Speicheranweisung sein, die wesentlich früher auftrat, so dass das physische Register - dessen Wert von der Speicheranweisung im Speicher gespeichert wurde - den von der Ladeanweisung benötigten Wert nicht mehr speichern kann. Selbst wenn man eine vorhergesagte Speicher-IA von dem Vorhersagearray 114 beruhend auf der IA der Ladeanweisung erhält, würde in solchen beispielhaften Ausführungsformen entweder kein Eintrag, der dieser vorhergesagten Speicher-IA entspricht, in der Zuordnungstabelle 122 vorhanden sein oder der entsprechende Eintrag würde ungültig gemacht werden. In beiden Fällen könnte eine vorhergesagte Ladeoperation unter Verwendung des physischen Registers, das zu der vorhergesagten Speicheranweisung gehört, nicht durchgeführt werden.
-
Ein IA-Speicherdatenarray 136 kann bereitgestellt werden, um Fällen wie dem vorstehend beschriebenen Rechnung zu tragen, in dem ein physisches Register zwischen dem Zeitpunkt, zu dem eine Speicheranweisung ausgeführt wird, und dem Zeitpunkt, zu dem eine Ladeanweisung ausgeführt werden soll, möglicherweise wiederverwendet oder außer Betrieb genommen wurde, was dazu führt, dass ein Eintrag in der Zuordnungstabelle 122, der der Speicheranweisung entspricht, ungültig gemacht wird. Das IA-Speicherdatenarray 136 kann zu Speicheranweisungen gehörende Daten in Abhängigkeit von den zu den Speicheranweisungen gehörenden lAs speichern.
-
Genauer gesagt, das IA-Speicherdatenarray 136 kann mit einer Speicher-IA indexiert werden und anstatt zum Beispiel eine Kennzeichnung eines physischen Registers zu speichern, von dem angenommen wird, dass es einen zu einer Speicheranweisung gehörenden Wert hält (wie es die Zuordnungstabelle 122 tut), kann das IA-Speicherdatenarray 136 den entsprechenden Wert selbst speichern. Wenn eine Speicheranweisung ausgeführt wird, wird somit ein Wert in einen Cachespeicher geschrieben und zusätzlich kann der Wert auch in dem IA-Speicherdatenarray 136 gespeichert und mit der IA der Speicheranweisung indexiert werden. Auf diese Weise kann das IA-Speicherdatenarray 136 als eine Sicherung für die Zuordnungstabelle 122 dienen. Das heißt, wenn ein einer Speicher-IA entsprechender Eintrag in der Zuordnungstabelle 122 ungültig gemacht wurde (was anzeigt, dass das in dem Eintrag gekennzeichnete physische Register nicht mehr den richtigen Wert speichert), kann auf das IA-Speicherdatenarray 136 unter Verwendung der Speicher-IA zugegriffen werden, um zu versuchen, einen Eintrag in dem IA-Speicherdatenarray 136 aufzufinden. Wenn sich in dem IA-Speicherdatenarray 136 ein übereinstimmender Eintrag befindet, können die Daten aus dem übereinstimmenden Eintrag abgerufen und zur Durchführung einer vorhergesagten Ladeoperation verwendet werden.
-
Das IA-Speicherdatenarray 136 kann eine größere Speicherkapazität als die Zuordnungstabelle 122 haben (d.h. in der Lage sein, mehr Einträge aufzunehmen), doch werden Daten gegebenenfalls später in das IA-Speicherdatenarray 136 als in die Zuordnungstabelle 122 geschrieben. Dies ist so, weil eine Speicheranweisung für die in das IA-Speicherdatenarray 136 zu schreibenden Daten ausgeführt werden muss, wohingegen die in einem physischen Register gespeicherten Daten, welches in einem Eintrag in der Zuordnungstabelle 122 gekennzeichnet ist, zur Verfügung stehen können, nachdem die Produzentenoperation durchgeführt wurde, ohne eine Ausführung der Speicheranweisung erforderlich zu machen.
-
Ferner kann in bestimmten beispielhaften Fällen ein Eintrag in der Zuordnungstabelle 122 ungültig gemacht werden, doch wurden die zuvor in dem physischen Register gespeicherten Daten möglicherweise noch nicht in das IA-Speicherdatenarray 136 geschrieben. Zum Beispiel kann es ein Prozessorentwurf gestatten, mehrere Speicheranweisungen parallel auszuführen und die entsprechenden Daten in eine Warteschlange zu schreiben, um schließlich im Speicher gespeichert zu werden. Das Schreiben in das IA-Speicherdatenarray 136 kann jedoch bandbreitenbegrenzt sein, so dass es zwischen der Ausführung von Speicheranweisungen und dem Schreiben von Daten in das IA-Speicherdatenarray 136 eine Verzögerung gibt. In dem vorstehend beschriebenen Fall kann es somit eine Verzögerung zwischen dem Zeitpunkt, zu dem ein Eintrag in der Zuordnungstabelle 122 ungültig gemacht wird, und dem Zeitpunkt, zu dem ein Eintrag in dem IA-Speicherdatenarray 136 erzeugt wird, geben. In einem weiteren beispielhaften Fall kann ein Eintrag in der Zuordnungstabelle 122 ungültig gemacht werden und die Daten stehen möglicherweise auch nicht in dem IA-Speicherdatenarray 136 zur Verfügung, weil der Eintrag in dem IA-Speicherdatenarray 136 gegebenenfalls mit Daten überschrieben worden ist, die einer anderen Speicheranweisung entsprechen, die denselben Index wie die Speicheranweisung hat, die von Interesse ist (aufgrund von Aliasing).
-
Ob eine vorhergesagte Ladeoperation durchgeführt wird, kann in diesen beispielhaften Fällen, in denen ein Eintrag in der Zuordnungstabelle 122 ungültig gemacht wird und die Daten des physischen Registers nicht in dem IA-Speicherdatenarray 136 gespeichert werden, von dem Timing abhängen, mit dem festgestellt wird, dass eine Ladeoperation eine vorhergesagte Ladeoperation ist. Wenn zum Beispiel festgestellt wird, dass eine Ladeanweisung eine vorhergesagte Ladeoperation ist, bevor auf die Zuordnungstabelle 122 und das IA-Speicherdatenarray 136 zugegriffen wird, und der Eintrag in der Zuordnungstabelle 122 ungültig gemacht worden ist und in dem IA-Speicherdatenarray 136 kein Eintrag vorhanden ist, kann die vorhergesagte Ladeoperation dennoch durchgeführt werden, würde aber dazu führen, dass falsche Daten in ein Register geladen werden, und es somit erforderlich machen, dass der Inhalt einer Pipeline gelöscht wird, wie zuvor beschrieben wurde. Umgekehrt, wenn auf die Zuordnungstabelle 122 und das IA-Speicherdatenarray 136 zugegriffen wird, bevor festgestellt wird, dass eine Ladeanweisung eine vorhergesagte Ladeoperation ist, kann die vorhergesagte Ladeoperation nicht durchgeführt werden, wenn der Eintrag in der Zuordnungstabelle 122 ungültig gemacht wurde und in dem IA-Speicherdatenarray 136 kein Eintrag vorhanden ist. In bestimmten beispielhaften Ausführungsformen ist der erstere Fall wahrscheinlicher, wenn auf das Vorhersagearray 114 zumindest teilweise parallel mit dem Anweisungsabruf zugegriffen wird, während der letztere Fall wahrscheinlicher ist, wenn auf das Vorhersagearray 114 zumindest teilweise parallel oder in Abhängigkeit von der Anweisungsdecodierung zugegriffen wird.
-
Um die Verzögerung zwischen dem Zeitpunkt, zu dem ein physisches Register wiederverwendet wurde (z.B. wurde ein Eintrag in der Zuordnungstabelle 122 ungültig gemacht), und dem Zeitpunkt, zu dem der Registerwert in das IA-Speicherdatenarray 136 geschrieben wird, zu verkürzen, kann der Registerwert in bestimmten beispielhaften Ausführungsformen nach dem Ungültigmachen der regfile in das IA-Speicherdatenarray 136 kopiert werden. Ferner kann das IA-Speicherdatenarray 136 früher in der Anweisungspipeline gelesen werden, falls für den Zugriff auf das IA-Speicherdatenarray 136 zusätzliche Zeit nötig sein sollte.
-
In bestimmten beispielhaften Ausführungsformen kann in das IA-Speicherdatenarray 136 in Verbindung mit konstanten Ladeoperationen geschrieben werden. Wie zuvor beschrieben wurde, kann, wenn keine übereinstimmende Operandenadresse für eine Ladeanweisung in der Datenpaarbildungstabelle 112 gefunden wird (z.B. keine mögliche Speicheranweisung für eine paarweise Zusammenfassung mit der Ladeanweisung), die IA der Ladeanweisung in die Datenpaarbildungstabelle 112 geschrieben werden. Dann wird, wenn die konstante Ladeanweisung erneut auftritt, eine Übereinstimmung in der Datenpaarbildungstabelle 112 erkannt und eine Ladeanweisung-Ladeanweisung-Paarbildung wird in das Vorhersagearray 114 geschrieben, wodurch die Ladeanweisung für eine Vorhersage qualifiziert wird. An dem Punkt, an dem sich die Ladeanweisung für eine Vorhersage qualifiziert, können die zu der Ladeanweisung gehörenden Daten in das IA-Speicherdatenarray 136 geschrieben und mit der IA der Ladeanweisung indexiert werden. Wenn die konstante Ladeanweisung erneut auftritt, kann man die übereinstimmende Lade-IA somit von dem Vorhersagearray 114 erhalten und sie für den Zugriff auf die entsprechenden Daten in dem IA-Speicherdatenarray 136 verwenden, ohne auf die Zuordnungstabelle 122 zugreifen zu müssen.
-
In dieser gesamten Offenbarung wurden die Begriffe „Array“ und „Tabelle“ verwendet. Ein Array kann zum Beispiel eine Datenstruktur sein, die üblicherweise auf 1 oder 2 Leseports beschränkt ist, so dass üblicherweise höchstens zwei Leseoperationen oder eine Lese- und eine Schreiboperation durchgeführt werden können. Eine Tabelle kann eine größere Gruppe von Datenstrukturen umfassen als ein Array. Zum Beispiel kann eine Tabelle eine regfile mit einer größeren Anzahl von Ports als ein Array sein, die in einer beliebigen Kombination aus Lese- und Schreiboperationen definiert sein können. Ein Array kann dichter besetzt als eine regfile sein. Während bestimmte Datenstrukturen entweder als ein Array oder eine Tabelle beschrieben wurden, dürfte es sich verstehen, dass die Offenbarung nicht auf diese Arten von Datenstrukturen beschränkt ist und dass stattdessen jede beliebige, als ein Array oder eine Tabelle beschriebene Datenstruktur unter Verwendung einer jeden geeigneten Art von Datenstruktur umgesetzt werden kann.
-
Ferner kann sich in bestimmten beispielhaften Ausführungsformen der Offenbarung der Begriff „Ladeanweisung“ oder Varianten davon auf eine einzelne Ladeanweisung beziehen. In weiteren beispielhaften Ausführungsformen der Offenbarung kann sich der Begriff „Ladeanweisung“ auf eine Ladeoperation beziehen, die eine unter mehreren verschiedenen Micro-ops innerhalb einer komplexen Anweisung ist, die in einer Complex Instruction Set Computing-(CISC-)Architektur verwendet werden kann. Zum Beispiel kann eine Architektur eine add-Anweisung definieren, bei der einer der Werte, die hinzugefügt werden, aus dem Speicher stammt. In einem solchen Fall kann die Ladeanweisung eine Micro-op innerhalb der add-Anweisung sein.
-
Beispielhafte Ausführungsformen der Offenbarung stellen verschiedene technische Merkmale, technische Wirkungen und/oder Verbesserungen der Technologie bereit. Zum Beispiel stellen beispielhafte Ausführungsformen der Offenbarung die technische Wirkung der Verbesserung der Anweisungsausführungsleistung bereit. Beispielhafte Ausführungsformen der Offenbarung stellen auch die technische Wirkung der Verbesserung der Anweisungsausführung außerhalb der Reihenfolge bereit. Diese technischen Wirkungen werden zumindest zum Teil durch die technischen Merkmale der Feststellung einer Anweisung, die vorhersagegemäß mit einer Ladeanweisung korreliert, des Erhaltens von Daten, die zu einer Produzentenoperation gehören, welche der vorhergesagten korrelierten Anweisung entspricht, und der Durchführung einer vorhergesagten Ladeoperation erreicht, die es einem Konsumenten gestattet, einen in einem physischen Register gespeicherten Wert zu nutzen, welches in den erhaltenen Daten gekennzeichnet ist, während ein Speicherzugriff in Verbindung mit der Ausführung der Ladeanweisung vermieden wird. Die vorhergesagte korrelierte Anweisung kann eine Speicheranweisung oder eine Ladeanweisung (im Falle von konstanten Ladeoperationen) sein. Zu den technischen Merkmalen gehören des Weiteren ein Vorhersagearray, das nur unter Verwendung von lAs von Ladeanweisungen indexiert wird, die Möglichkeit, konstante Ladeoperationen vorherzusagen, das Kombinieren der BTB-Tabelle und des Vorhersagearrays, die Möglichkeit, Prüfladeoperationen durchzuführen, das Bereitstellen einer Mustertabelle und eines IA-Speicherdatenarrays, um die Anzahl der Gelegenheiten zur Durchführung einer vorhergesagten Ladeoperation zu erhöhen, und so weiter. Diese technischen Merkmale stellen zumindest zum Teil die technische Wirkung einer verbesserten Anweisungsausführungsleistung bereit, da das Kopieren von Daten aus einem physischen Register in ein anderes physisches Register weniger Ausführungszyklen in Anspruch nimmt als das Zugreifen auf einen Speicherplatz und das Kopieren von an dem Speicherplatz gespeicherten Daten in ein physisches Register. Diese technischen Merkmale stellen zumindest zum Teil die technische Wirkung der Verbesserung der herkömmlichen Anweisungsausführung außerhalb der Reihenfolge bereit, da sie eine Vielzahl von nicht routinemäßigen und nicht herkömmlichen Mechanismen zur Durchführung einer vorhergesagten Ladeoperation bereitstellen. Folglich stellen die vorstehend beschriebenen technischen Merkmale und die resultierende technische Wirkung eine Verbesserung der Funktionsweise eines Computers dar. Es dürfte sich verstehen, dass die vorstehenden Beispiele von technischen Merkmalen, technischen Wirkungen und Verbesserungen der Funktionsweise eines Computers und von Computertechnologie, die von beispielhaften Ausführungsformen der Offenbarung bereitgestellt werden, lediglich veranschaulichend und nicht erschöpfend sind.
-
Eine oder mehrere veranschaulichende Ausführungsformen der Offenbarung sind hierin beschrieben. Solche Ausführungsformen dienen lediglich zur Veranschaulichung des Umfangs dieser Offenbarung und sind nicht als Einschränkung in irgendeiner Weise gedacht. Folglich fallen Varianten, Änderungen und Äquivalente von hierin beschriebenen Ausführungsformen ebenfalls unter den Umfang dieser Offenbarung.
-
4 ist eine schematische Darstellung einer veranschaulichenden Datenverarbeitungseinheit 400, die so konfiguriert ist, dass sie eine oder mehrere beispielhafte Ausführungsformen der Offenbarung ausführt. Der in 1 abgebildete Einheitenarchitekturstack 100 kann einer veranschaulichenden Konfiguration der Datenverarbeitungseinheit 400 entsprechen. Zwar kann die Einheit 400 hierin im Singular beschrieben werden, doch dürfte es sich verstehen, dass mehrere Instanzen der Einheit 400 bereitgestellt werden können und in Verbindung mit der Einheit 400 beschriebene Funktionalität über diese mehreren Instanzen verteilt sein kann.
-
In einer veranschaulichenden Konfiguration kann die Einheit 400 einen oder mehrere Prozessoren (Prozessor(en)) 402, eine oder mehrere Speichereinheiten 404 (die hierin generisch als der Speicher 404 bezeichnet werden), eine oder mehrere Eingabe-/Ausgabe-(„E/A“-)Schnittstelle(n) 406, eine oder mehrere Netzwerkschnittstellen 408 sowie den Datenspeicher 410 enthalten. Die Einheit 400 kann des Weiteren einen oder mehrere Busse 412 enthalten, die verschiedene Komponenten der Einheit 400 funktional verbinden.
-
Zu dem Bus/den Bussen 412 kann mindestens ein Systembus und/oder ein Speicherbus und/oder ein Adressbus oder ein Nachrichtenbus gehören und er/sie kann/können den Austausch von Informationen (z.B. Daten (darunter durch einen Computer ausführbaren Code), Signalisierung usw.) zwischen verschiedenen Komponenten der Einheit 400 erlauben. Zu dem Bus/den Bussen 412 kann, ohne darauf beschränkt zu sein, ein Speicherbus oder ein Speichercontroller, ein peripherer Bus, ein Accelerated Graphics Port und so weiter gehören. Der Bus/die Busse 412 kann/können zu jeder geeigneten Busarchitektur gehören, darunter, ohne darauf beschränkt zu sein, eine Industry Standard Architecture (ISA), eine Micro Channel Architecture (MCA), eine Enhanced ISA (EISA), eine Video Electronics Standards Association-(VESA-)Architektur, eine Accelerated Graphics Port-(AGP-)Architektur, eine Peripheral Component Interconnects-(PCI-)Architektur, eine PCI-Express-Architektur, eine Personal Computer Memory Card International Association-(PCMCIA-)Architektur, eine Universal Serial Bus-(USB-)Architektur und so weiter.
-
Der Speicher 404 kann den in 1 abgebildeten physischen Speicher 102 darstellen und flüchtigen Speicher (Speicher, der seinen Zustand behält, wenn er mit Strom versorgt wird) wie beispielsweise Direktzugriffsspeicher (RAM) und/oder nicht flüchtigen Speicher (Speicher, der seinen Zustand selbst dann behält, wenn er nicht mit Strom versorgt wird) wie beispielsweise Nur-Lese-Speicher (ROM), Flashspeicher, ferroelektrischer RAM (FRAM) und so weiter beinhalten. Persistenter Datenspeicher, in der Verwendung des Begriffs hierin, kann nicht flüchtigen Speicher beinhalten. In bestimmten beispielhaften Ausführungsformen kann flüchtiger Speicher einen schnelleren Schreib-/Lesezugriff als nicht flüchtiger Speicher ermöglichen. In bestimmten weiteren beispielhaften Ausführungsformen können bestimmte Arten von nicht flüchtigem Speicher (z.B. FRAM) einen schnelleren Schreib-/Lesezugriff als bestimmte Arten von flüchtigem Speicher ermöglichen.
-
In verschiedenen Ausführungen kann der Speicher 404 mehrere verschiedene Arten von Speicher wie beispielsweise verschiedene Arten von statischem Direktzugriffsspeicher (SRAM), verschiedene Arten von dynamischem Direktzugriffsspeicher (DRAM), verschiedene Arten von nicht veränderbarem ROM und/oder beschreibbare Varianten von ROM wie beispielsweise elektrisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM), Flashspeicher und so weiter beinhalten. Der Speicher 404 kann Hauptspeicher sowie verschiedene Formen von Cachespeicher wie beispielsweise (einen) Anweisungscachespeicher, (einen) Datencachespeicher, (einen) Adressumsetzpufferspeicher (TLBs) und so weiter beinhalten. Des Weiteren kann es sich bei dem Cachespeicher wie beispielsweise einem Datencachespeicher um einen Cachespeicher mit mehreren Stufen handeln, der als eine Hierarchie von einem oder mehreren Cachespeicher-Stufen (L1, L2 usw.) organisiert ist.
-
Der Datenspeicher 410 kann auswechselbaren Speicher und/oder nicht auswechselbaren Speicher, darunter, ohne darauf beschränkt zu sein, Magnetspeicher, optischen Plattenspeicher und/oder Bandspeicher beinhalten. Der Datenspeicher 410 kann eine nicht flüchtige Speicherung von durch einen Computer ausführbaren Anweisungen und anderen Daten bereitstellen. Der Speicher 404 und der Datenspeicher 410, auswechselbar und/oder nicht auswechselbar, sind Beispiele für durch einen Computer lesbare Speichermedien (CRSM, computer-readable storage media) in der Verwendung des Begriffs hierin.
-
Der Datenspeicher 410 kann durch einen Computer ausführbaren Code, Anweisungen oder dergleichen speichern, die in den Speicher 404 ladbar und durch den/die Prozessor(en) 402 ausführbar sein können, um den/die Prozessor(en) 402 zu veranlassen, verschiedene Operationen durchzuführen oder einzuleiten. Der Datenspeicher 410 kann zusätzlich Daten speichern, die in den Speicher 404 zur Verwendung durch den/die Prozessor(en) 402 während der Ausführung der durch einen Computer ausführbaren Anweisungen kopiert werden können. Überdies können Ausgabedaten, die infolge einer Ausführung der durch einen Computer ausführbaren Anweisungen durch den/die Prozessor(en) 402 erzeugt werden, zunächst im Speicher 404 gespeichert und schließlich in den Datenspeicher 410 zur nicht flüchtigen Speicherung kopiert werden.
-
Genauer gesagt, der Datenspeicher 410 kann ein oder mehrere Betriebssysteme (O/S, operating systems) 414 (zu denen das O/S 414 gehören kann und zu denen eine oder mehrere virtuelle O/S-Instanzen gehören können); ein oder mehrere Datenbankverwaltungssysteme (DBMS, database management systems) 416, die so konfiguriert sind, dass sie auf den Speicher 404 und/oder einen oder mehrere externe Datenspeicher (nicht gezeigt) zugreifen; und ein oder mehrere Programmmodule, Anwendungen, Engines, durch einen Computer ausführbaren Code, Skripte oder dergleichen wie zum Beispiel eine Vorhersageengine 418, eine Registerüberwachungsengine 420, eine Schreib-/Leseengine 422 und eine Anweisungsausführungsengine 424 speichern. Beliebige der Komponenten, die als im Datenspeicher 410 gespeichert abgebildet sind, können eine beliebige Kombination aus Software, Firmware und/oder Hardware beinhalten. Die Software und/oder Firmware kann durch einen Computer ausführbare Anweisungen (z.B. durch einen Computer ausführbaren Programmcode) beinhalten, die in den Speicher 404 zur Ausführung durch einen oder mehrere der Prozessor(en) 402 geladen werden können, um beliebige der zuvor in Verbindung mit entsprechend benannten Engines beschriebene Operationen durchzuführen.
-
Wenngleich in 4 nicht gezeigt, kann der Datenspeicher 410 des Weiteren verschiedene Arten von Daten speichern, die von Komponenten der Einheit 400 genutzt werden (z.B. Datenpaarbildungen 112, das Vorhersagearray 114, die Zuordnungstabelle 122, das IA-Speicherdatenarray 136 usw.). Beliebige in dem Datenspeicher 410 gespeicherte Daten können in den Speicher 404 zur Verwendung durch den/die Prozessor(en) 402 bei der Ausführung von durch einen Computer ausführbaren Anweisungen geladen werden. Ferner können beliebige in dem Datenspeicher 410 gespeicherte Daten möglicherweise in (einem) externen Datenspeicher(n) gespeichert werden und über das DBMS 416 kann auf sie zugegriffen werden und sie können in den Speicher 404 zur Verwendung durch den/die Prozessor(en) 402 bei der Ausführung von durch einen Computer ausführbaren Anweisungen geladen werden.
-
Der/die Prozessor(en) 402 können so konfiguriert sein, dass sie auf den Speicher 404 zugreifen und darin geladene durch einen Computer ausführbare Anweisungen ausführen. Zum Beispiel kann/können der/die Prozessor(en) 404 so konfiguriert sein, dass er/sie durch einen Computer ausführbare Anweisungen der verschiedenen Programmmodule, Anwendungen, Engines oder dergleichen der Einheit 400 ausführt/ausführen, um die Durchführung von verschiedenen Operationen gemäß einer oder mehreren Ausführungsformen der Offenbarung zu veranlassen oder zu vereinfachen. Der/die Prozessor(en) 402 kann/können jede geeignete Verarbeitungseinheit beinhalten, die in der Lage ist, Daten als Eingabe anzunehmen, die Eingabedaten gemäß gespeicherten, durch einen Computer ausführbaren Anweisungen zu verarbeiten und Ausgabedaten zu erzeugen. Der/die Prozessor(en) 402 kann/können jede beliebige Art einer geeigneten Verarbeitungseinheit beinhalten, darunter, ohne darauf beschränkt zu sein, eine zentrale Verarbeitungseinheit, einen Mikroprozessor, einen Reduced Instruction Set Computer-(RISC-) Mikroprozessor, einen Complex Instruction Set Computer-(CISC-) Mikroprozessor, einen Mikrocontroller, eine anwendungsspezifische integrierte Schaltung (ASIC, Application Specific Integrated Circuit), eine im Feld programmierbare Gatter-Anordnung (FPGA, Field Programmable Gate Array), ein System-on-a-Chip (SoC), einen Digitalsignalprozessor (DSP) und so weiter. Des Weiteren kann/können der/die Prozessor(en) 402 über jeden geeigneten Mikroarchitekturentwurf verfügen, der eine beliebige Anzahl von Teilkomponenten wie zum Beispiel Register, Multiplexer, arithmetisch-logische Einheiten, Cache-Controller zur Steuerung von Schreib-/Leseoperationen in den/aus dem Cachespeicher, Verzweigungsvorhersagefunktionen oder dergleichen beinhaltet. Der Mikroarchitekturentwurf des Prozessors/der Prozessoren 402 kann in der Lage sein, beliebige einer Vielzahl von Anweisungssätzen zu unterstützen.
-
Nun Bezug nehmend auf weitere veranschaulichende Komponenten, die als im Datenspeicher 410 gespeichert abgebildet sind, kann das O/S 414 aus dem Datenspeicher 410 in den Speicher 404 geladen werden und eine Schnittstelle zwischen anderer Anwendungssoftware, die auf der Einheit 400 ausgeführt wird, und Hardware-Ressourcen der Einheit 400 bereitstellen. Genauer gesagt, das O/S 414 kann einen Satz von durch einen Computer ausführbaren Anweisungen beinhalten, um Hardware-Ressourcen der Einheit 400 zu verwalten und anderen Anwendungsprogrammen allgemeine Dienste bereitzustellen. In bestimmten beispielhaften Ausführungsformen kann das O/S 414 die Ausführung von einem oder mehreren der Programmmodule beinhalten oder auf andere Weise steuern, die als in dem Datenspeicher 410 gespeichert abgebildet sind. Das O/S 414 kann ein beliebiges Betriebssystem beinhalten, das heute bekannt ist oder in der Zukunft entwickelt werden kann, darunter, ohne darauf beschränkt zu sein, ein beliebiges Server-Betriebssystem, ein beliebiges Mainframe-Betriebssystem oder ein beliebiges anderes proprietäres oder nicht proprietäres Betriebssystem.
-
Das DBMS 416 kann in den Speicher 404 geladen werden und Funktionalität für den Zugriff auf, den Abruf, die Speicherung und/oder die Bearbeitung von Daten, die im Speicher 404 gespeichert sind, Daten, die im Datenspeicher 410 gespeichert sind und/oder Daten, die in (einem) externen Datenspeicher(n) gespeichert sind, unterstützen. Das DBMS 416 kann beliebige einer Vielzahl von Datenbankmodellen (z.B. relationales Modell, Objektmodell usw.) verwenden und beliebige einer Vielzahl von Abfragesprachen unterstützen. Das DBMS 416 kann auf Daten zugreifen, die in einem oder mehreren Datenschemata dargestellt und in jeder geeigneten Datenrepository gespeichert sind. Zu (einem) externen Datenspeicher(n), auf den/die die Einheit 400 über das DBMS 416 zugreifen kann, können, ohne darauf beschränkt zu sein, Datenbanken (z.B. relationale, objektorientierte usw.), Dateisysteme, unstrukturierte Dateien, verteilte Datenspeicher, in denen Daten auf mehr als einem Knoten eines Computernetzwerks gespeichert werden, Peer-zu-Peer-Netzwerkdatenspeicher oder dergleichen gehören.
-
Nun Bezug nehmend auf weitere veranschaulichende Komponenten der Einheit 400 kann/können die Eingabe/Ausgabe-(E/A-)Schnittstelle(n) 406 den Empfang von Eingabeinformationen durch die Einheit 400 von einer oder mehreren E/A-Einheiten sowie die Ausgabe von Informationen von der Einheit 400 an die eine oder die mehreren E/A-Einheit(en) vereinfachen. Zu den E/A-Einheiten können beliebige einer Vielzahl von Komponenten wie beispielsweise eine Anzeige oder ein Bildschirm mit einer berührungsempfindlichen Oberfläche oder einem Touchscreen; eine Audioausgabeeinheit zur Tonerzeugung wie beispielsweise ein Lautsprecher; eine Audioerfassungseinheit wie beispielsweise ein Mikrofon; eine Bild- und/oder Videoerfassungseinheit wie beispielsweise eine Kamera; eine haptische Einheit; und so weiter gehören. Beliebige dieser Komponenten können in die Einheit 400 integriert oder separate Komponenten sein. Zu den E/A-Einheiten kann des Weiteren zum Beispiel eine beliebige Anzahl von Peripherieeinheiten wie etwa Datenspeichereinheiten, Druckeinheiten und so weiter gehören.
-
Zu der/den E/A-Schnittstelle(n) 406 kann auch eine Schnittstelle für eine externe Peripherieeinheitenverbindung wie beispielsweise einen Universal Serial Bus-(USB-), FireWire-, Thunderbolt-, Ethernet-Port oder ein anderes Verbindungsprotokoll gehören, das eine Verbindung mit einem oder mehreren Netzwerken herstellen kann. Zu der/den E/A-Schnittstelle(n) 406 kann auch eine Verbindung zu einer oder mehreren Antennen gehören, um über ein drahtloses lokales Netz (WLAN) (wie beispielsweise Wi-Fi)-Funk, Bluetooth und/oder ein drahtloses Netzwerkradio wie beispielsweise ein Radio, das mit einem drahtlosen Übertragungsnetzwerk wie etwa einem Long Term Evolution-(LTE-)Netzwerk, WiMAX-Netzwerk, 3G-Netzwerk usw. Daten austauschen kann, eine Verbindung mit einem oder mehreren Netzwerken herzustellen.
-
Zu der Einheit 400 können des Weiteren eine oder mehrere Netzwerkschnittstellen 408 gehören, über die die Einheit 400 mit beliebigen einer Vielzahl von anderen Systemen, Plattformen, Netzwerken, Einheiten und so weiter Daten austauschen kann. Die Netzwerkschnittstelle(n) 408 kann/können einen Datenaustausch beispielsweise mit einer oder mehreren anderen Einheiten über ein oder mehrere Netzwerke ermöglichen. Zu solch einem Netzwerk/solchen Netzwerken können, ohne darauf beschränkt zu sein, eine oder mehrere beliebige unterschiedliche Arten von Übertragungsnetzwerken wie zum Beispiel Kabelnetzwerke, öffentliche Netzwerke (z.B. das Internet), private Netzwerke (z.B. Frame Relay-Netzwerke), drahtlose Netzwerke, Mobilfunknetze, Telefonnetze (z.B. ein öffentliches Telefonnetz) oder beliebige andere geeignete private oder öffentliche paketvermittelte oder leitungsvermittelte Netzwerke gehören. Ein solches Netzwerk/solche Netzwerke kann/können über jeden geeigneten damit verbundenen Datenaustauschbereich verfügen und zu ihm/ihnen können zum Beispiel globale Netzwerke (z.B. das Internet), Hochgeschwindigkeitsnetze (MANs, metropolitan area networks), Weitverkehrsnetze (WANs, wide area networks), lokale Netze (LANs, local area networks) oder Personal Area Networks (PANs) gehören. Ferner kann/können (ein) solche(s) Netzwerk(e) Übertragungsverbindungen und zugehörige Netzeinheiten (z.B. Vermittlungseinheiten der Datenübertragungsschicht, Router usw.) beinhalten, um Netzverkehr über jede geeignete Art von Medium, darunter, ohne darauf beschränkt zu sein, Koaxialkabel, verdrillter Draht (z.B. verdrillter Kupferdraht), Glasfaserkabel, ein Hybrid Fiber Coax-(HFC-)Medium, ein Mikrowellenmedium, ein Hochfrequenzübertragungsmedium, ein Satellitenübertragungsmedium oder eine beliebige Kombination daraus, zu übertragen.
-
Es dürfte sich verstehen, dass die Programmmodule, die in 4 als im Datenspeicher 410 gespeichert abgebildet sind, lediglich veranschaulichend und nicht erschöpfend sind und dass eine Verarbeitung, die als eine von irgendeinem bestimmten Modul unterstützte Verarbeitung beschrieben ist, alternativ über mehrere Module, Engines oder dergleichen verteilt sein oder von einem anderen Modul, einer anderen Engine oder dergleichen durchgeführt werden kann. Ferner können verschiedene Programmmodule, Skripte, Plugins, Anwendungsprogrammierschnittstellen (APIs, Application Programming Interfaces) oder ein beliebiger anderer geeigneter durch einen Computer ausführbarer Code, der lokal auf der Einheit 400 und/oder auf (einer) anderen Datenverarbeitungseinheit(en), auf die über ein oder mehrere Netzwerke zugegriffen werden kann, gehostet wird, bereitgestellt werden, um Funktionalität, die von den in 4 abgebildeten Modulen bereitgestellt wird, und/oder zusätzliche oder alternative Funktionalität zu unterstützen. Des Weiteren kann Funktionalität auf eine jede geeignete Weise modularisiert werden, so dass eine Verarbeitung, die als eine von einem bestimmten Modul durchgeführte Verarbeitung beschrieben ist, von einer Gruppe einer beliebigen Anzahl von Programmmodulen durchgeführt werden kann, oder Funktionalität, die als von irgendeinem bestimmten Modul unterstützte Funktionalität beschrieben ist, zumindest zum Teil von einem anderen Modul unterstützt werden kann. Ferner können Programmmodule, die die hierin beschriebene Funktionalität unterstützen, über eine beliebige Anzahl von Einheiten 400 gemäß jedem geeigneten Datenverarbeitungsmodell wie zum Beispiel einem Client-Server-Modell, einem Peer-to-Peer-Modell und so weiter ausführbar sein. Ferner kann beliebige der Funktionalität, die als von beliebigen der in 4 abgebildeten Module unterstützte Funktionalität beschrieben ist, zumindest teilweise in Hardware und/oder Firmware über eine beliebige Anzahl von Einheiten ausgeführt sein.
-
Es dürfte sich des Weiteren verstehen, dass die Einheit 400 alternative und/oder zusätzliche Hardware-, Software- oder Firmware-Komponenten über die beschriebenen oder abgebildeten hinaus beinhalten kann, ohne vom Umfang der Offenbarung abzuweichen. Insbesondere dürfte es sich verstehen, dass Software-, Firmware- oder Hardware-Komponenten, die als einen Teil der Einheit 400 bildende Komponenten abgebildet sind, lediglich veranschaulichend sind und dass in verschiedenen Ausführungsformen einige Komponenten nicht vorhanden sein oder zusätzliche Komponenten bereitgestellt werden können. Während verschiedene veranschaulichende Module als im Datenspeicher 410 gespeicherte Software-Module abgebildet und beschrieben wurden, dürfte es sich verstehen, dass Funktionalität, die als von den Modulen unterstützte Funktionalität beschrieben ist, durch eine beliebige Kombination aus Hardware, Software und/oder Firmware ermöglicht werden kann. Es dürfte sich des Weiteren verstehen, dass jedes der vorstehend erwähnten Module in verschiedenen Ausführungsformen eine logische Partitionierung von unterstützter Funktionalität darstellen kann. Diese logische Partitionierung ist zur einfacheren Erklärung der Funktionalität abgebildet und ist gegebenenfalls nicht repräsentativ für die Struktur von Software, Hardware und/oder Firmware zur Ausführung der Funktionalität. Folglich dürfte es sich verstehen, dass Funktionalität, die als von einem bestimmten Modul bereitgestellte Funktionalität beschrieben ist, in verschiedenen Ausführungsformen zumindest zum Teil von einem oder mehreren anderen Modulen bereitgestellt werden kann. Des Weiteren sind ein oder mehrere abgebildete Module in bestimmten Ausführungsformen gegebenenfalls nicht vorhanden, während in anderen Ausführungsformen nicht abgebildete zusätzliche Programmmodule und/oder Engines vorhanden sein können und mindestens einen Teil der beschriebenen Funktionalität und/oder zusätzlicher Funktionalität unterstützen können.
-
Eine oder mehrere Operationen des Verfahrens 200 oder des Verfahrens 300 können von einer Einheit 400 durchgeführt werden, die über die in 4 abgebildete veranschaulichende Konfiguration verfügt, oder, genauer gesagt, von einem oder mehreren Programmmodulen, Engines, Anwendungen oder dergleichen, die auf einer solchen Einheit ausführbar sind. Es dürfte sich jedoch verstehen, dass solche Operationen in Verbindung mit zahlreichen anderen Einheitenkonfigurationen ausgeführt werden können.
-
Die in dem veranschaulichenden Verfahren von 2 oder dem veranschaulichenden Verfahren von 3 beschriebenen und abgebildeten Operationen können in jeder geeigneten Reihenfolge wie gewünscht in verschiedenen beispielhaften Ausführungsformen der Offenbarung aus- oder durchgeführt werden. Zusätzlich kann in bestimmten beispielhaften Ausführungsformen mindestens ein Teil der Operationen parallel ausgeführt werden. Überdies können in bestimmten beispielhaften Ausführungsformen weniger, mehr oder andere Operationen als die in 2 oder 3 abgebildeten durchgeführt werden.
-
Wenngleich bestimmte Ausführungsformen der Offenbarung beschrieben worden sind, erkennt der Fachmann, dass zahlreiche weitere Änderungen und alternative Ausführungsformen innerhalb des Umfangs der Offenbarung liegen. Zum Beispiel kann beliebiges der Funktionalität bzw. können beliebige der Verarbeitungsmöglichkeiten, die mit Bezug auf ein(e) bestimmte(s) System, Systemkomponente, Einheit oder Einheitenkomponente beschrieben wurden, von einem beliebigen anderen System, einer beliebigen anderen Einheit oder Komponente durchgeführt werden. Während verschiedene veranschaulichende Ausführungen und Architekturen gemäß Ausführungsformen der Offenbarung beschrieben worden sind, wird der Fachmann verstehen, dass zahlreiche weitere Änderungen an den hierin beschriebenen veranschaulichenden Ausführungen und Architekturen ebenfalls innerhalb des Umfangs dieser Offenbarung liegen. Ferner dürfte es sich verstehen, dass (ein/eine) beliebige(s) Operation, Element, Komponente, Daten oder dergleichen, die hierin als auf (einer/einem) anderen Operation, Element, Komponente, Daten oder dergleichen beruhend beschrieben sind, zusätzlich auf einer/einem oder mehr weiteren Operationen, Elementen, Komponenten, Datum/Daten oder dergleichen beruhen können. Folglich sollte die Formulierung „beruht auf“ oder Varianten davon als „beruht zumindest zum Teil auf“ ausgelegt werden.
-
Bei der vorliegenden Offenbarung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) beinhalten, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert sind, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Offenbarung auszuführen.
-
Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch kodierte Einheit wie zum Beispiel Lochkarten oder gehobene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. durch ein Glasfaserkabel geleitete Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
-
Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
-
Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, im Feld programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Offenbarung durchzuführen.
-
Aspekte der vorliegenden Offenbarung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
-
Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
-
Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
-
Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Offenbarung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.