-
ALLGEMEINER STAND DER TECHNIK
-
Technisches Gebiet
-
Hier beschriebene Ausführungsformen betreffen allgemein Prozessoren. Insbesondere betreffen hier beschriebene Ausführungsformen allgemein das Laden von Daten aus Speicher mit Prozessoren.
-
Hintergrundinformationen
-
Verschiedene Arten von Computersystemen und/oder anderen Datenverarbeitungssystemen weisen typischerweise wenigstens einen Prozessor und einen Systemspeicher auf. Der Speicher kann verwendet werden, um verschiedene Arten von Software und zugehörige Daten zu speichern.
-
Während des Betriebs kann der Prozessor Befehle durchführen, um die Daten aus dem Speicher zu laden oder sonstwie auszulesen. Sobald sie geladen wurden, können die Daten arithmetisch, logisch oder sonstwie vom Prozessor verarbeitet werden. Schließlich können die verarbeiteten Daten wieder in den Speicher zurückgespeichert werden.
-
Figurenliste
-
Die Erfindung kann am besten verstanden werden, indem auf die nachfolgende Beschreibung und die beigefügten Zeichnungen Bezug genommen wird, die verwendet werden, um die Ausführungsformen zu veranschaulichen. Es zeigen:
- 1 ein Blockdiagramm einer Ausführungsform eines Prozessors, der betreibbar ist, um eine Ausführungsform eines Speicherauslesebefehls durchzuführen.
- 2 ein Ablaufdiagramm einer Ausführungsform eines Verfahrens zum Durchführen einer Ausführungsform eines Speicherauslesebefehls.
- 3 ein Blockdiagramm einer Ausführungsform eines Prozessors, der betreibbar ist, um eine Ausführungsform des Speicherauslesebefehls durchzuführen.
- 4 ein Ablaufdiagramm einer Ausführungsform eines Verfahrens zur Handhabung defekter Daten, das für eine Ausführungsform eines Speicherauslesebefehls geeignet ist.
- 5 ein Blockdiagramm einer beispielhaften Ausführungsform eines Prozessors mit einem Kern und einem oder mehreren Sätzen von Hilfslogik, geeignet für Ausführungsformen.
- 6A ein Blockdiagramm, das eine Ausführungsform einer In-Order-Pipeline und eine Ausführungsform einer registerumbenennenden Out-of-Order-Ausgabe-/Ausführungspipeline veranschaulicht.
- 6B ein Blockdiagramm einer Ausführungsform eines Prozessorkerns mit einer Frontend-Einheit, die an eine Ausführungsengine-Einheit gekoppelt ist, und beide sind an eine Speichereinheit gekoppelt.
- 7A ein Blockdiagramm einer Ausführungsform eines einzelnen Prozessorkerns, zusammen mit dessen Verbindung zum On-Die-Verbindungsnetz und mit der zugehörigen lokalen Untermenge des Level-2 (L2)-Caches.
- 7B ein Blockdiagramm einer Ausführungsform einer erweiterten Ansicht eines Teils des Prozessorkerns aus 7A.
- 8 ein Blockdiagramm einer Ausführungsform eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann.
- 9 ein Blockdiagramm einer ersten Ausführungsform einer Computerarchitektur.
- 10 ein Blockdiagramm einer zweiten Ausführungsform einer Computerarchitektur.
- 11 ein Blockdiagramm einer dritten Ausführungsform einer Computerarchitektur.
- 12 ein Blockdiagramm einer vierten Ausführungsform einer Computerarchitektur.
- 13 ein Blockdiagramm der Verwendung eines Software-Befehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung.
-
AUSFÜHRLICHE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
-
Offenbart werden hier Ausführungsformen von Speicherauslesebefehlen, Ausführungsformen von Prozessoren zum Durchführen der Befehle, Ausführungsformen von Verfahren, die von den Prozessoren beim Durchführen der Befehle durchgeführt werden, Ausführungsformen von Systemen mit einem oder mehreren Prozessoren zum Durchführen der Befehle und Ausführungsformen von Programmen oder maschinenlesbaren Medien, die die Befehle bereitstellen. In einigen Ausführungsformen können die Prozessoren eine Decodiereinheit oder andere Logik, um den Speicherauslesebefehl zu empfangen und/oder zu decodieren, und eine Ausführungseinheit oder andere Logik, um den Speicherauslesebefehl durchzuführen, aufweisen. In der nachfolgenden Beschreibung sind zahlreiche spezifische Einzelheiten dargelegt (z. B. spezifische Befehlsoperationen, Datenformate, Prozessorkonfigurationen, mikroarchitektonische Einzelheiten, Sequenzen von Operationen usw.). Allerdings können Ausführungsformen auch unabhängig von diesen spezifischen Einzelheiten realisiert werden. In anderen Fällen sind bekannte Schaltungen, Strukturen und Verfahren nicht im Detail beschrieben worden, um das Verständnis der Beschreibung nicht zu erschweren.
-
Eine Herausforderung besteht darin, dass Daten, während sie sich im Speicher oder auf dem Weg zum Prozessor befinden, wenn diese ausgelesen werden, oder im Prozessor oder beim Zurückspeichern in den Speicher manchmal defekt werden können. Beispielsweise können die Daten beschädigt, mängelbehaftet, fehlerhaft, falsch oder sonstwie defekt werden. Als ein spezifisches Beispiel können die Daten defekt sein, wenn, aus welchem Grund auch immer, ein Datenparitätsfehler auftritt, bei dem die Daten zu einem zugehörigen Satz von Paritätsdaten inkonsistent sind. Als ein weiteres spezifisches Beispiel können die Daten defekt sein, wenn, aus welchem Grund auch immer, ein Fehlerkorrekturcode (Error Correction Code, ECC)-Fehler auftritt, bei dem die Daten einen Fehler aufweisen, den verknüpfte Fehlerkorrekturcode-Daten nicht korrigieren können. Als noch ein weiteres spezifisches Beispiel können die Daten defekt sein, wenn ein unbeabsichtigtes Umkehren von einem oder mehreren Bits in einer oder mehreren Speicherzellen des Speichers und/oder in einer oder mehreren Datenspeichervorrichtungen des Prozessors erfolgt, beispielsweise aufgrund von kosmischer Strahlung oder aus einem anderen Grund. Als ein weiteres spezifisches Beispiel können die Daten defekt sein, wenn, aus welchem Grund auch immer, ein „Poison-Detection“ (Gifterkennungs“)-Indikator mit den Daten verknüpft ist (z. B. durch Logik des Prozessors, andere Systemhardwarekomponenten usw.). Dies sind nur einige veranschaulichende Beispiele für mögliche Ursachen von defekten Daten.
-
Allgemein sollten solche defekten Daten nicht für weitere Verarbeitungen oder Berechnungen verwendet werden. Folglich wird, wenn irgendeine von verschiedenen Arten von Speicherauslesebefehlen durchgeführt wird, die Erkennung derartiger defekter Daten im Allgemeinen eine Maschinenprüfausnahme (Machine Check Exception, MCE) oder eine(n) ähnlich schwerwiegende(n) Ausnahme oder Fehler auslösen oder verursachen. Defekte Daten sind eine mögliche Ursache für eine solche MCE, die vom Prozessor erzeugt werden kann, wenn er einen Hardwarefehler oder ein Problem erkennt, beispielsweise unkorrigierte defekte Daten. MCEs stehen typischerweise für schwerwiegende Ausnahmen oder Fehler, beispielsweise Abbruchklasse-Ausnahmen, fatale Ausnahmen, fatale Fehler oder dergleichen. Bestimmte Arten von MCEs können in bestimmten Situationen behebbar oder korrigierbar sein, beispielsweise bei bestimmten Arten von Fehlern und falls der Prozessor eine architektonische Unterstützung aufweist, um eine derartige Behebung oder Korrektur durchzuführen. Beispielsweise kann dies für eine Klasse von architektonischen Fehlern der Fall sein, bei denen die Systemsoftware eine Behebung versuchen kann, die als unkorrigierte behebbare (Uncorrected Recoverable, UCR) Fehler bekannt sind. Solche Fehler können unkorrigierte Fehler darstellen, die erkannt worden sind, aber nicht den Prozessorkontext beschädigt haben. Bei bestimmten solcher Fehlerarten kann es, sobald die Systemsoftware eine bestimmte Behebungsaktion durchgeführt hat, möglich sein, die Ausführung auf dem Prozessor fortzusetzen. Der Maschinenprüfhandler kann Informationen zu dem Fehler verwenden (z. B. in MSRs oder sonstwo), um zu versuchen, das Problem zu beheben. Allerdings sind andere Arten von MCEs unter Umständen nicht behebbar oder korrigierbar. In Fällen, in denen die MCEs nicht behoben oder korrigiert werden können, kann ein Neustart des Prozessors und/oder des Systems erforderlich sein, bevor der Normalbetrieb wiederaufgenommen werden kann.
-
Die Notwendigkeit, den Prozessor und/oder das System bei wenigstens einigen solcher MCEs oder anderen solcher schwerwiegenden Ausnahmen oder Fehler neu zu starten, bringt im Allgemeinen eine Tendenz zur Leistungsreduzierung mit sich. Darüber hinaus kann in einigen Ausführungsformen, wie weiter unten beschrieben, Systemspeicher in Blockdatenspeicher-Modi und/oder für Blockstil-Nutzungsarten, wie sie traditionell auf dem Speichermarkt zur Anwendung kommen, verwendet werden. Das Verwenden von Systemadressraum zum Adressieren von Blockdatenspeicher-Regionen kann im Vergleich zu herkömmlichen, für Blockvorrichtungen verwendeten Blocksemantik tendenziell Effizienz und verbesserte Leistung bieten. Allerdings kann der Blockmodus eine unterschiedliche Fehlerbehandlung beinhalten, die von der Fehlerbehandlung, wenn Fehler im Systemadressraum auftreten, abweicht. Beispielsweise können Fehler, die im Verlauf von Blockoperationen auftreten, in einem Statusregister gemeldet werden, und ein Blocktreiber kann Fehler behandeln, die über das Statusregister gemeldet werden. Hier beschriebene Ausführungsformen können dazu beitragen zu ermöglichen, dass Blockregionen im Systemadressraum adressiert werden können; gleichzeitig können sie es dem Prozessor aber ermöglichen, Fehler in der Blockregion anzuzeigen, ohne eine Maschinenprüfausnahme oder dergleichen anzunehmen, was im Allgemeinen erfolgen würde, wenn solche Blockregionen mit herkömmlichen Blockdatenspeicher-Semantiken adressiert werden. Alternative Ansätze zur Handhabung solcher MCEs oder anderer schwerwiegender Ausnahmen oder Fehler, die keinen Neustart des Prozessors und/oder des Systems erfordern, können nützlich und vorteilhaft sein.
-
1 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 100, der betreibbar ist, um eine Ausführungsform eines Speicherauslesebefehls 102 durchzuführen. In der Darstellung ist ein Speicher 108 mit dem Prozessor gekoppelt, wenngleich andere Ausführungsformen sich nur auf den Prozessor ohne den Speicher beziehen (z. B. den Prozessor, bevor dieser in einem System mit dem Speicher eingesetzt wird). Der Speicher kann eine oder mehrere Speichervorrichtungen eines oder mehrerer Typen aufweisen (z. B. dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM), Flash-Speicher, Festplatten, Dual In-Line Memory-Module (DIMMs) und dergleichen sowie verschiedene Kombinationen davon).
-
In einigen Ausführungsformen kann es sich bei dem Prozessor um einen Universalprozessor (z. B. einen Universal-Mikroprozessor oder eine zentrale Verarbeitungseinheit (Central Processing Unit, CPU) des Typs handeln, der in Desktop-, Laptop- oder anderen Computern verwendet wird). Alternativ kann es sich bei dem Prozessor um einen Spezialprozessor handeln. Beispiele für geeignete Spezialprozessoren beinhalten, ohne hierauf beschränkt zu sein, Netzprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Grafikprozessoren, Coprozessoren, eingebettete Prozessoren, digitale Signalprozessoren (DSPs) und Steuerungen (z. B. Mikrocontroller). Der Prozessor kann eine von verschiedenen Architekturen für die Verarbeitung komplexer Befehlssätze (Complex Instruction Set Computing, CISC), Architekturen für die Verarbeitung reduzierter Befehlssätze (Reduced Instruction Set Computing, RISC), Architekturen für sehr lange Befehlswörter (Very Long Instruction Word, VLIW), Hybridarchitekturen und andere Arten von Architekturen aufweisen oder kann eine Kombination von unterschiedlichen Architekturen aufweisen (z. B. können unterschiedliche Kerne unterschiedliche Architekturen aufweisen). In einigen Ausführungsformen kann der Prozessor aufweisen, auf wenigstens einer integrierten Schaltung oder einem Halbleiterplättchen („Die“) angeordnet zu sein. In einigen Ausführungsformen kann der Prozessor wenigstens einige Hardware aufweisen (z. B. Transistoren, Kondensatoren, Dioden, Schaltungen, nichtflüchtigen Speicher zum Speichern von Mikrocode oder dergleichen).
-
Während des Betriebs kann der Prozessor 100 den Speicherauslesebefehl 102 empfangen. Gemäß verschiedenen Aspekten kann der Befehl von einer Off-Processor- und/oder einer Off-Die-Quelle (z. B. von Off-Die-Speicher oder einem Bus oder einer anderen Zwischenverbindung) oder von einer On-Processor- und/oder einer On-Die-Quelle (z. B. von einem Befehlscache, einer Befehlswarteschlange oder einem On-Die-Speicher) empfangen werden. Der Speicherauslesebefehl kann einen Makrobefehl, einen Maschinencodebefehl oder einen anderen Befehl oder ein anderes Steuersignal eines Befehlssatzes des Prozessors repräsentieren.
-
In einigen Ausführungsformen kann der Speicherauslesebefehl einen Quellspeicheroperanden 110 im Speicher 108 explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder sonstwie (z. B. implizit) anzeigen. Der Quellspeicheroperand kann auf verschiedene Art und Weise in unterschiedlichen Ausführungsformen angezeigt werden. In einigen Ausführungsformen kann der Befehl einen Zeiger oder andere Speicheradressinformationen 120 identifizieren, um (potenziell mit anderen Informationen, je nach Adressierungsmodus) den Quellspeicheroperanden zu identifizieren. Wie gezeigt, können die Speicheradressinformationen optional in einem Satz von Registern 118 (z. B. in skalaren Registern, Universalregistern usw.) des Prozessors gespeichert sein. Beispielsweise kann der Befehl ein Quellregister in dem Satz von Registern, die die Speicheradressinformationen speichern, explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder sonstwie (z. B. implizit) anzeigen. Als ein Beispiel kann der Befehl ein Quelloperanden-Spezifikationsfeld aufweisen, um explizit ein solches Quellregister zu spezifizieren. Alternativ kann ein solches Quellregister optional auch implizit für den Befehl vorliegen (z. B. implizit für einen Opcode des Befehls). Beispielsweise kann der Prozessor implizit oder inhärent verstehen, dass er dieses implizite Register einsehen soll, wenn er diesen Befehl erkennt (z. B. wenn er den Opcode decodiert), ohne dass der Befehl irgendwelche Nicht-Opcode-Bits aufweisen muss, um das Quellregister explizit zu spezifizieren. In Abhängigkeit von dem jeweiligen Adressierungsmodus können die Speicheradressinformationen 120 optional mit anderen Speicheradressinformationen kombiniert sein, um den Quellspeicheroperanden zu adressieren. Derartige zusätzliche Speicheradressinformationen können sich in einem anderen Register (z. B. einem Datensegmentregister, einem erweiterten Segmentregister oder anderen Speicheradressregistern), in der Codierung des Befehls oder sonstwo befinden. Beispielsweise kann, bei der segmentierten Adressierung, ein Programm mehrere unabhängige Adressräume aufweisen, die als Segmente bekannt sind. Eine Byte-Adresse kann als Kombination aus der Adressinformation aus einem Segmentregister und weiteren Adressinformationen (z. B. eine Byte-Adresse) aus einem Universalregister (z. B. segment-register:byte-address) spezifiziert sein. Beispielsweise kann die Adresse DS:FF79H verwendet werden, um das Byte an Adresse FF79H in dem vom DS-Segmentregister angegebenen Segment zu adressieren.
-
Jedes der Register 118 kann einen On-Die- (oder auf einer integrierten Schaltung angeordneten) Datenspeicherort repräsentieren, der dazu dient, Daten zu speichern. Die Register können architektonisch sichtbare Register oder Architekturregister repräsentieren, die für Software und/oder einen Programmierer sichtbar sind und/oder bei denen es sich um die Register handelt, die von Befehlen des Befehlssatzes des Prozessors angezeigt werden, um Operanden zu identifizieren. Diesen Architekturregistern sind andere nicht-architektonische Register in einer gegebenen Mikroarchitektur (z. B. temporäre Register, Neuordnungspuffer, Rückordnungsregister usw.) gegenübergestellt. Die Register können auf verschiedene Art und Weise in unterschiedlichen Mikroarchitekturen implementiert sein und sind nicht auf einen bestimmten Designtyp beschränkt. Beispiele für geeignete Arten von Registern beinhalten, ohne jedoch hierauf beschränkt zu sein, dedizierte physische Register, unter Verwendung der Registerumbenennung dynamisch zugewiesene physische Register und Kombinationen davon.
-
In einigen Ausführungsformen kann der Speicherauslesebefehl auch einen Zieldatenspeicherort 114 explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder sonstwie (z. B. implizit) anzeigen. Wie gezeigt, kann es sich bei dem Zieldatenspeicherort in einigen Ausführungsformen optional um einen anderen Ort im Speicher handeln. In solchen Ausführungsformen sind dieselben Ansätze wie oben für den Quellspeicheroperanden beschrieben geeignet, um den Zielspeicheroperanden zu identifizieren. Alternativ kann es sich bei dem Zieldatenspeicherort optional um ein oder mehrere Register des Prozessors (z. B. ein oder mehrere Universalregister, ein oder mehrere gepackte Datenregister usw.) oder um einen anderen Datenspeicherort handeln. Solche Register oder andere Datenspeicherorte können spezifiziert oder impliziert sein.
-
Es wird erneut Bezug genommen auf 1; der Prozessor weist eine Decodiereinheit oder einen Decodierer 104 auf. Die Decodiereinheit kann den Speicherauslesebefehl empfangen und decodieren. Die Decodiereinheit kann einen oder mehrere relativ untergeordnete Befehle oder Steuersignale ausgeben (z. B. einen oder mehrere Mikrobefehle, Mikrooperationen, Mikrocode-Einsprungpunkte, decodierte Befehle oder Steuersignale usw.), die den relativ übergeordneten Speicherauslesebefehl wiedergeben, repräsentieren und/oder von diesem abgeleitet sind. In einigen Ausführungsformen kann die Decodiereinheit eine oder mehrere Eingangsstrukturen (z. B. Port(s), Zwischenverbindung(en), eine Schnittstelle) zum Empfangen des Speicherauslesebefehls, eine damit gekoppelte Befehlserkennungs- und Decodierlogik zum Erkennen und Decodieren des Speicherauslesebefehls sowie eine oder mehrere damit gekoppelte Ausgabestrukturen (z. B., Port(s), Zwischenverbindung(en), Schnittstelle) zum Ausgeben des (der) relativ untergeordneten Befehls (Befehle) oder Steuersignals (Steuersignale) aufweisen. Die Decodiereinheit kann unter Verwendung verschiedener Mechanismen implementiert sein, einschließlich, jedoch nicht beschränkt auf Mikrocode-Festwertspeicher (Read-Only Memories, ROMs), Nachschlagetabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs) und andere Mechanismen, die sich zum Implementieren von Decodiereinheiten eignen. In einigen Ausführungsformen kann die Decodiereinheit auf einem Halbleiterplättchen (z. B. auf einem Halbleiterplättchen mit der Ausführungseinheit 106) vorhanden sein. In einigen Ausführungsformen kann die Decodiereinheit wenigstens einige Hardware (z. B. Transistoren, integrierte Schaltungen oder On-Die-Firmware usw.) aufweisen.
-
In einigen Ausführungsformen kann, statt dass der Speicherauslesebefehl direkt für die Decodiereinheit bereitgestellt wird, optional ein Befehlsemulator, ein Translator, ein Morpher, ein Interpreter oder ein anderes Befehlsumwandlungsmodul verwendet werden. Verschiedene Arten von Befehlsumwandlungsmodulen können in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. In einigen Ausführungsformen kann sich das Befehlsumwandlungsmodul außerhalb des Prozessors befinden, beispielsweise auf einem getrennten Halbleiterplättchen und/oder in einem Speicher (z. B. als statisches, dynamisches oder Laufzeit-Emulationsmodul). Beispielsweise kann das Befehlsumwandlungsmodul den Speicherauslesebefehl, der aus einem ersten Befehlssatz stammen kann, empfangen und kann den Speicherauslesebefehl emulieren, übersetzen, umformen, interpretieren oder sonstwie in einen oder mehrere entsprechende Zwischenbefehle oder Zwischensteuersignale umwandeln, die aus einem zweiten, davon verschiedenen Befehlssatz stammen können. Die ein oder mehreren Zwischenbefehle oder Zwischensteuersignale des zweiten Befehlssatzes können für eine Decodiereinheit (z. B. die Decodiereinheit 104) bereitgestellt werden, die diese in einen oder mehrere untergeordnete Befehle oder Steuersignale decodieren kann, die von nativer Hardware des Prozessors (z. B. von einer oder mehreren Ausführungseinheiten) ausgeführt werden können.
-
Es wird erneut Bezug genommen auf 1; die Ausführungseinheit 106 ist mit der Decodiereinheit 104 und den Registern 118 gekoppelt. In einigen Ausführungsformen kann sich die Ausführungseinheit auf einem Halbleiterplättchen oder einer integrierten Schaltung (z. B. mit der Decodiereinheit) befinden. Die Ausführungseinheit kann die ein oder mehreren decodierten oder sonstwie konvertierten Befehle oder Steuersignale, die den Speicherauslesebefehl repräsentieren und/oder von diesem abgeleitet sind, empfangen. Während des Einsatzes und der Nutzung kann die Ausführungseinheit auch betrieben werden, um mit dem Speicher und/oder dem Quellspeicheroperanden gekoppelt zu sein. In einigen Ausführungsformen kann die Ausführungseinheit, in Reaktion auf und/oder infolge des Speicherauslesebefehls (z. B. in Reaktion auf ein oder mehrere Befehle oder Steuersignale, die von dem Befehl decodiert wurden, und/oder in Reaktion darauf, dass der Befehl decodiert wird, und/oder in Reaktion darauf, dass der Befehl für einen Decodierer bereitgestellt wird) betrieben werden, um Daten 112 aus dem Quellspeicheroperanden 110 auszulesen. Dies wird allgemein an dem ersten Pfeil 113 gezeigt. In Fällen, in denen die Daten nicht defekt sind, kann die Ausführungseinheit ferner betrieben werden, um die Daten 116 am Zieldatenspeicherort 114 zu speichern. Dies wird allgemein an dem zweiten Pfeil 115 gezeigt.
-
Allerdings können die Daten in einigen Fällen defekt sein. Beispielsweise können die Daten auf die verschiedenen oben beschriebenen Arten defekt sein. In einigen Ausführungsformen kann der Prozessor Logik und/oder Mechanismen aufweisen und/oder sonstwie betrieben werden, um derartige defekte Daten zu erkennen oder zu identifizieren. Beispielsweise können, in einigen Ausführungsformen, die Ausführungseinheit und/oder der Prozessor betrieben werden und/oder Logik aufweisen, um eine optionale Anzeige 124 (die optional z. B. mikroarchitektonisch sein kann, wenngleich dies nicht erforderlich ist), dass die Daten defekt sind, zu überprüfen, zu beobachten oder darauf zuzugreifen. Ein geeignetes Beispiel für eine solche Anzeige ist eine „Poison“-Anzeige (z. B. ein oder mehrere Bits mit einem bestimmten Wert, der als „Poison“-Anzeige verstanden wird), die logisch an die Daten gebunden ist oder sonstwie mit den Daten verknüpft ist. Eine solche „Poison“-Anzeige kann beispielsweise als Teil einer Lese-Antwort-Transaktion bereitgestellt sein. Andere geeignete Beispiele für solche Anzeigen sind Signale von Caches, Registerdateien oder anderen On-Die-Datenspeicherorten oder Logik, die Paritätsfehler, Fehlerkorrekturcode-Fehler oder andere derartige Anzeigen defekter Daten durch eine von verschiedenen möglichen Arten von Logik zur Erkennung defekter Daten des Prozessors anzeigt.
-
In einigen Ausführungsformen kann, wenn die Daten defekt sind, die Ausführungseinheit in Reaktion auf und/oder infolge des Speicherauslesebefehls betrieben werden, um eine Anzeige defekter Daten 122 an einem architektonisch sichtbaren Datenspeicherort zu speichern. Wie gezeigt, kann es sich bei dem architektonisch sichtbaren Datenspeicherort in einigen Ausführungsformen optional um ein Register des Satzes von Registern 118 des Prozessors handeln. Beispielsweise können ein Universalregister, ein skalares Register oder dergleichen verwendet werden. Beispielsweise kann ein gegebener Wert, der von dem Prozessor und/oder der Software dahingehend verstanden wird, dass er defekte Daten anzeigt (z. B. ein Wert von minus eins als mögliches Beispiel), in einem solchen Register gespeichert sein, wenn die Daten defekt sind, und irgendein anderer Wert kann im Register gespeichert sein, wenn die Daten nicht defekt sind. Alternativ kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein oder mehrere Bedingungscode-Bits, beispielsweise ein oder mehrere Kennzeichen, Bits in einem Kennzeichenregister, Statusbits, Bits in einem Statusregister oder andere Bedingungscode-Bits handeln. Beispielsweise kann ein gegebenes Bedingungscode-Bit einen ersten Wert aufweisen (z. B. gemäß einer möglichen Konvention als binäre Eins gesetzt), um anzuzeigen, dass die Daten defekt sind, oder kann einen zweiten, unterschiedlichen Wert aufweisen (z. B. auf binär Null gelöscht), um anzuzeigen, dass die Daten nicht defekt sind. Herkömmlicherweise wäre es typisch, die Ausnahmebedingung zu verursachen, wenn die Daten defekt sind. Beispielsweise kann der Speicherauslesebefehl in einem Befehlssatz mit einem oder mehreren Speicherauslesebefehlen enthalten sein, die schon länger im Befehlssatz vorgelegen haben, was (z. B. bedingungslos) eine Ausnahmebedingung verursachen würde, wenn defekte Daten gelesen werden.
-
In einigen Ausführungsformen kann die Ausführungseinheit ferner in Reaktion auf und/oder infolge des Speicherauslesebefehls betrieben werden, wenn die Daten defekt sind, um die Ausführung des Speicherauslesebefehls abzuschließen, ohne eine Ausnahme, eine Maschinenprüfausnahme, einen Abbruch, eine(n) andere(n) fatale(n) oder wenigstens schwerwiegende(n) Ausnahme oder Fehler oder eine andere Ausnahmebedingung 128 auszulösen, zu initiieren oder sonstwie zu verursachen. Gezeigt wird dies in der Darstellung durch ein „X“ durch die Ausnahmebedingung 128, die ansonsten einem Handler 126 signalisieren oder einen solchen alarmieren würde. Beispielsweise kann, in einigen Ausführungsformen, der Speicherauslesebefehl rückgeordnet oder sonstwie übergeben werden, ohne eine solche Ausnahmebedingung 128 zu verursachen. In einigen Ausführungsformen kann der Speicherauslesebefehl abgeschlossen werden, ohne eine Übergabe an einen MCE-Handler, einen Ausnahmehandler, einen anderen Handler für schwerwiegende Ausnahmen oder Fehler, einen Betriebssystem-Handler oder einen anderen solchen Handler 126 zu verursachen. Vielmehr kann, in einigen Ausführungsformen, der Speicherauslesebefehl stattdessen die Anzeige der defekten Daten 122 an dem architektonisch sichtbaren Datenspeicherort speichern und dann rückordnen oder sonstwie übergeben. In einigen Ausführungsformen kann dies selbst dann der Fall sein, wenn die Daten in einer Art und Weise defekt sind, in der die Befehlssatz-Architektur vor dem Einführen des Speicherauslesebefehls eine nicht behebbare MCE verursacht hätte.
-
Vorteilhafterweise kann der Speicherauslesebefehl dazu dienen, die Ausführungseinheit und/oder den Prozessor zu veranlassen, defekte Daten durch Speichern der Anzeige der defekten Daten an einem architektonisch sichtbaren Datenspeicherort zu signalisieren, ohne eine(n) schwerwiegende(n) Ausnahme oder Fehler zu verursachen. Ohne Einschränkung kann dies, wenigstens in einigen Fällen und/oder unter bestimmten Umständen, dem Prozessor und/oder der Software ermöglichen, die Anzeige der defekten Daten 122 zu beobachten und zu versuchen, die defekten Daten zu ersetzen und/oder zu reparieren, ohne eine Ausnahmebedingung zu verursachen. Beispielsweise, kann in einem Fall, in dem eine weitere, nicht defekte Kopie der Daten existiert, was beispielsweise in verschiedenen Formen von RAID (Redundant Array of Independent Disks) und/oder anderen auf Datenredundanz basierenden Techniken der Fall sein kann, privilegierte Systemsoftware in der Lage sein, die Anzeige der defekten Daten 122 zu beobachten und die defekten Daten durch eine andere redundante Kopie der Daten, bei der es sich um nicht defekte Daten handelt, zu ersetzen. In anderen Fällen kann Logik des Prozessors und/oder Software potenziell in der Lage sein, die defekten Daten (z. B. durch Anwenden zusätzlicher Fehlerkorrekturmaßnahmen oder dergleichen) zu reparieren. Dies kann dazu beitragen, wenigstens einige solcher Ausnahmebedingungen und/oder wenigstens einige Neustarts des Prozessors und/oder des Systems zu vermeiden.
-
Die Ausführungseinheit und/oder der Prozessor können spezifische oder besondere Logik (z. B. Transistoren, integrierte Schaltungen oder andere Hardware, potenziell kombiniert mit Firmware (z. B. in nicht-flüchtigem Speicher gespeicherte Befehle) und/oder Software) aufweisen, die betreibbar ist, den Speicherauslesebefehl durchzuführen. Wie hier verwendet, impliziert der Begriff „Ausführungseinheit“ nicht eine einzelne diskrete Einheit, die alle vorgenannten möglichen Operationen durchführt, und ist auch nicht darauf beschränkt. Vielmehr können solche Operationen potenziell von separater oder verteilter Logik durchgeführt werden, die über zwei oder mehrere Einheiten oder Komponenten in einem Speichersubsystem (z. B. eine Speichereinheit einer Speicherzugriffseinheit) verteilt ist. Als ein Beispiel kann die Ausführungseinheit eine kombinierte Lade-/Speicherausführungseinheit aufweisen, um Daten von einer Quelle zu laden und diese an einem Ziel zu speichern. Als ein weiteres Beispiel kann die Ausführungseinheit eine Ladeeinheit, um Daten von einer Quelle zu laden, und eine separate Speichereinheit, um Daten an einem Ziel zu speichern, sowie möglicherweise andere Komponenten/Einheiten aufweisen. Der Einfachheit halber, und um dem allgemeinen Gebrauch des Begriffs Ausführungseinheit zu entsprechen, dahingehend, dass er sich auf die Komponente bezieht, die tatsächlich einen Befehl ausführt oder durchführt, wird solche Logik hier als Ausführungseinheit bezeichnet. Es kann hier auch angegeben sein, dass ein Speichersubsystem und/oder eine Speichereinheit und/oder eine Speicherzugriffseinheit und/oder eine Speicherzugriffslogik des Prozessors und/oder einer Speicherschnittstelleneinheit oder Logik des Prozessors betreibbar ist, um den Speicherauslesebefehl wie hier offenbart durchzuführen.
-
Um die Verständlichkeit der Beschreibung nicht zu beeinträchtigen, wird ein relativ einfacher Prozessor 100 gezeigt und beschrieben. Allerdings kann der Prozessor optional auch andere Prozessorkomponenten aufweisen. Beispielsweise können verschiedene Ausführungsformen verschiedene Kombinationen und Konfigurationen der für irgendeine der 6-8 gezeigten und beschriebenen Komponenten aufweisen. Alle Komponenten des Prozessors können miteinander gekoppelt sein, damit sie wie vorgesehen betrieben werden können. Beispielsweise kann, unter Berücksichtigung von 6B, der Befehlscache 6 die Befehle zwischenspeichern, die Befehlsabrufeinheit 638 kann den Befehl abrufen, die Decodiereinheit 640 kann den Befehl decodieren, die Planereinheit 656 kann die zugehörigen Operationen zeitlich planen, die Ausführungseinheit 662 kann den Befehl durchführen, die Rückordnungseinheit 654 kann den Befehl rückordnen usw.
-
2 ist ein Ablaufdiagramm einer Ausführungsform eines Verfahrens 230 zum Durchführen einer Ausführungsform eines Speicherauslesebefehls. In verschiedenen Ausführungsformen kann das Verfahren von einem Prozessor, einer Befehlsverarbeitungseinrichtung, einer digitalen Logikvorrichtung oder einer integrierten Schaltung durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 230 von und/oder mit dem Prozessor 100 aus 1 und/oder unter Verwendung des Befehls 102 aus 1 durchgeführt werden. Die Komponenten, Merkmale und spezifischen optionalen Einzelheiten, die hier für den Prozessor 100 und/oder den Befehl 102 beschrieben werden, gelten optional auch für das Verfahren 230. Alternativ kann das Verfahren 230 von und/oder in einem ähnlichen oder hiervon verschiedenen Prozessor oder einer ähnlichen oder hiervon verschiedenen Einrichtung und/oder unter Verwendung eines ähnlichen oder hiervon verschiedenen Befehls durchgeführt werden. Darüber hinaus kann der Prozessor 100 Verfahren durchführen, die identisch mit dem Verfahren 230 sind oder ähnlich oder anders ausgeführt sind.
-
Das Verfahren 230 beinhaltet bei Block 231 das Empfangen des Speicherauslesebefehls. Gemäß verschiedenen Aspekten kann der Befehl an einem Prozessor oder einem Teil davon (z. B. einer Befehlsabrufeinheit, einer Decodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. Gemäß verschiedenen Aspekten kann der Befehl von einer Off-Processor- und/oder einer Off-Die-Quelle (z. B. von Speicher, einer Zwischenverbindung usw.) oder von einer On-Processor- und/oder einer On-Die-Quelle (z. B. von einem Befehlscache, einer Befehlswarteschlange usw.) empfangen werden. In einigen Ausführungsformen kann der Speicherauslesebefehl einen Quellspeicheroperanden und einen Zieldatendatenspeicherort spezifizieren (z. B explizit spezifizieren) oder sonstwie anzeigen (z. B. implizit anzeigen).
-
Bei Block 232 können die Daten, in Reaktion auf und/oder infolge des Speicherauslesebefehls, aus dem Quellspeicheroperanden geladen oder sonstwie ausgelesen werden. In einigen Fällen können die gelesenen Daten defekt sein. In anderen Fällen können die gelesenen Daten nicht defekt sein.
-
Bei Block 233 kann eine Bestimmung vorgenommen werden, ob die aus dem Quellspeicheroperanden ausgelesenen Daten defekt sind. Beispielsweise kann dies das Prüfen auf eine Anzeige, dass die Daten defekt sind, einschließen. Die vorstehend beschriebenen Arten von Anzeigen sind geeignet (z. B. „Poison“-Anzeigen, Paritätsfehleranzeigen, Fehlerkorrekturcode (Error Correction Code, ECC)-Fehleranzeigen usw.).
-
Falls die Bestimmung bei Block 233 ergibt, dass die Daten nicht defekt sind (d. h. die Bestimmung lautet „Nein“), kann das Verfahren mit Block 234 fortgesetzt werden. Bei Block 234 können die gelesenen Daten am Zieldatenspeicherort gespeichert werden. Das Verfahren kann dann mit dem optionalen Block 235 fortgesetzt werden.
-
Bei dem optionalen Block 235 kann, in einigen Ausführungsformen, optional eine Bestimmung vorgenommen werden, ob weitere Daten vorliegen, wenngleich dies nicht erforderlich ist. Diese Bestimmung kann für bestimmte Arten von Speicherauslesebefehlen existieren (z. B. wiederholte Speicherverschiebungs- oder -kopierbefehle, Sammelbefehle, Befehle, die unterschiedliche Datenteile sequenziell aus dem Speicher auslesen, und dergleichen), existiert aber unter Umständen nicht oder entfällt vollständig für andere Arten von Speicherauslesebefehlen (z. B. Befehle, die Daten aus dem Speicher in ein einzelnes Register einlesen, Befehle, die nur einen Teil der Daten gleichzeitig lesen und dann stoppen, usw.). Falls die optionale Bestimmung bei Block 235 ergibt, dass es weitere zu lesende Daten gibt (d. h. die Bestimmung lautet „Ja“), kann das Verfahren erneut zu Block 232 wechseln, wo zusätzliche Daten gelesen werden können. Dann können die zusätzlichen Daten bei Block 233 erneut auf defekte Daten untersucht werden, und so weiter.
-
Alternativ gilt: Falls die Bestimmung bei Block 235 ergibt, dass es keine weiteren zu lesenden Daten gibt (d. h., die Bestimmung lautet „Nein“), kann das Verfahren mit dem optionalen Block 236 fortgesetzt werden. In Fällen, in denen Block 235 optional entfällt (z. B. bei bestimmen Arten von Speicherauslesebefehlen wie vorstehend erörtert), kann das Verfahren auch direkt von Block 234 mit dem optionalen Block 236 fortgesetzt werden. Bei dem optionalen Block 236 kann, sobald alle Daten aus dem Speicher ausgelesen worden und am Zieldatenspeicherort gespeichert worden sind, und in Fällen, in denen bei Block 233 keine Daten als defekt bestimmt wurden, in einigen Ausführungsformen, eine Anzeige, dass keine defekten Daten vorhanden sind, optional an einem architektonisch sichtbaren Datenspeicherort gespeichert werden. In einigen Ausführungsformen kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein Register (z. B. ein Universalregister) handeln. In anderen Ausführungsformen kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein oder mehrere Bedingungscode-Bits handeln. Der Speicherauslesebefehl kann dann abgeschlossen und rückgeordnet oder sonstwie übergeben werden.
-
Es wird erneut Bezug genommen auf Block 233; falls stattdessen die Bestimmung bei Block 233 darin bestanden hat, dass die Daten defekt sind (d. h. die Bestimmung lautete „Ja“), kann das Verfahren von Block 233 mit Block 237 fortgesetzt werden. An Block 237 kann, in einigen Ausführungsformen, eine Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort gespeichert werden. Dies kann wie vorstehend beschrieben erfolgen. In einigen Ausführungsformen kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein Register (z. B. ein Universalregister) handeln. In anderen Ausführungsformen kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein oder mehrere Bedingungscode-Bits handeln. Das Verfahren kann dann zu Block 238 vorrücken.
-
Bei Block 238 kann die Ausführung des Speicherauslesebefehls abgeschlossen werden, ohne eine Ausnahmebedingung zu verursachen, selbst nachdem einige der Daten als defekt bestimmt wurden. In einigen Ausführungsformen erfolgt unter Umständen keine erzwungene Übergabe an einen Handler. Vielmehr kann es möglich sein, den Speicherauslesebefehl abzuschließen und optional rückzuordnen oder sonstwie zu übergeben, und dann kann der nächste Befehl nach dem Speicherauslesebefehl (z. B. der nächste sequenzielle Befehl) durchgeführt werden.
-
Ohne Einschränkung können der Prozessor und/oder privilegierte Systemsoftware optional/potenziell auf die bei Block 237 gespeicherte Anzeige der defekten Daten zugreifen und können versuchen, die defekten Daten zu reparieren, so dass diese nicht mehr defekt sind, und/oder die defekten Daten durch Daten zu ersetzen, die nicht defekt sind (z. B. eine nicht defekte Kopie der Daten).
-
Verschiedene Untermengen der in den Blöcken 232 bis 238 gezeigten Operationen können in Reaktion auf und/oder infolge des Speicherauslesebefehls durchgeführt werden, abhängig davon, ob Daten defekt sind oder nicht, je nach Art des Speicherauslesebefehls (z. B., ob mehrere Datenteile sequenziell gelesen werden, usw.). Beispielsweise kann eine erste Instanz des Speicherauslesebefehls nur die Blöcke 231, 232, 233, 237 und 238 durchführen. Als ein weiteres Beispiel kann eine zweite Instanz des Speicherauslesebefehls nur die Blöcke 231, 232, 233, 234, 235 und 236 durchführen. Noch weitere Instanzen können die Blöcke 232, 233 und 234 ein oder mehrere Male aufsuchen und durchlaufen, bevor schließlich die Blöcke 237 und 238 oder Block 236 durchgeführt werden.
-
3 ist ein Blockdiagramm einer Ausführungsform eines Prozessors 300, der betreibbar ist, um eine Ausführungsform des Speicherauslesebefehls 302 durchzuführen. Der Prozessor 300 kann identisch mit dem Prozessor 100 aus 1 sein oder ähnlich oder anders ausgeführt sein. Der Prozessor weist eine Decodiereinheit 304, die betreibbar ist, um den Speicherauslesebefehl 302 zu decodieren, eine Ausführungseinheit 306, die betreibbar ist, um den Speicherauslesebefehl auszuführen oder durchzuführen, und Register 318, die betreibbar sind, um die Operanden 320, 340, 342, 322, die mit dem Speicherauslesebefehl verknüpft sind, zu speichern, auf. Diese Komponenten können optional identisch mit oder ähnlich den entsprechend benannten Komponenten aus 1 sein (z. B. eine oder mehrere Eigenschaften aufweisen, die identisch oder ähnlich sind). Um die Verständlichkeit der Beschreibung nicht zu beeinträchtigen, werden die unterschiedlichen und/oder zusätzlichen Eigenschaften der Ausführungsform aus 3 vorrangig beschrieben, ohne alle Eigenschaften zu wiederholen, die optional identisch mit oder ähnlich den Eigenschaften sein können, die für die Ausführungsform aus 1 beschrieben wurden.
-
Während des Betriebs kann der Prozessor 300 den Speicherauslesebefehl 302 empfangen. Gemäß verschiedenen Aspekten kann der Befehl von einer Off-Processor- und/oder einer Off-Die-Quelle oder von einer On-Processor- und/oder einer On-Die-Quelle empfangen werden. Der Speicherauslesebefehl kann einen Makrobefehl, einen Maschinencodebefehl oder einen anderen Befehl oder ein anderes Steuersignal eines Befehlssatzes des Prozessors repräsentieren. In einigen Ausführungsformen kann es sich bei dem Speicherauslesebefehl um einen Speicherauslesebefehl und einen Speicherablagebefehl handeln. Beispielsweise kann es sich bei dem Befehl um einen Speicherkopierbefehl handeln, um Daten von einem Ort im Speicher an einen anderen Ort zu kopieren, oder um einen Speicherverschiebungsbefehl, um Daten von einem Ort im Speicher an einen anderen zu verschieben.
-
In einigen Ausführungsformen kann der Speicherauslesebefehl jedes von einem Quellspeicheroperanden 310 (z. B. einen Startort) in einem Speicher 308, einem Zielspeicheroperanden 314 (z. B. einen Startort) im Speicher explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder sonstwie (z. B. implizit) anzeigen. Beispielsweise kann der Befehl die Startpunkte oder die Teile der Quell- und Zieloperanden mit den niedrigsten Adressen anzeigen. Die Quell- und Zieloperanden können einfach auch als eine Quelle und ein Ziel des Befehls angesehen und bezeichnet werden. Die Quell- und Zielspeicheroperanden können auf die vorstehend für den Quellspeicheroperanden aus 1 beschriebenen verschiedenen Arten angezeigt werden. Beispielsweise können optional, wie gezeigt, die Speicheradressinformationen 320 zum Adressieren des Beginns des Quellspeicheroperanden 310 und die Speicheradressinformationen 340 zum Adressieren des Beginns des Quellspeicheroperanden 314 jeweils in einem unterschiedlichen Register eines Satzes von Registern 318 (z. B. in Universalregistern) des Prozessors gespeichert sein.
-
In einigen Ausführungsformen kann der Speicherauslesebefehl auch eine Datenmenge 342, die vom Quellspeicheroperanden 310 zum Zielspeicheroperanden 314 kopiert, verschoben oder sonstwie gespeichert werden soll, explizit (z. B. durch ein oder mehrere Felder oder einen Satz von Bits) spezifizieren oder sonstwie (z. B. implizit) anzeigen. Die zu kopierende Datenmenge kann in unterschiedlichen Ausführungsformen auf verschiedene Art und Weise ausgedrückt werden. Beispielsweise kann, in verschiedenen Ausführungsformen, die Datenmenge als eine Anzahl von zu kopierenden Bits, Bytes, Wörtern, Doppelwörtern, Vierwörtern oder Datenelementen oder als eine Länge des Quelloperanden in Bits, Bytes, Wörtern, Doppelwörtern, Vierwörtern oder Datenelementen oder als eine Größe einer zu kopierenden Zeichenfolge oder als eine Adresse, ein Zeiger, ein Versatz oder eine andere Anzeige eines Endes oder des Teils mit der höchsten Adresse des Quell- oder Zieloperanden ausgedrückt werden. Wie gezeigt, kann, in einigen Ausführungsformen, der Befehl ein Register in dem Satz von Registern 318 spezifizieren oder sonstwie anzeigen, um die Datenmenge 342 zu speichern. Alternativ kann die Datenmenge an einem Speicherort oder einem anderen Datenspeicherort gespeichert werden. Als noch eine andere Option kann die zu kopierende Datenmenge optional in einem Feld oder einem anderen Teil des Befehls selbst (z. B. in einem Direktoperandenfeld) spezifiziert oder angezeigt sein.
-
Es wird erneut Bezug genommen auf 3; der Prozessor weist die Decodiereinheit oder den Decodierer 304 auf. Die Decodiereinheit kann betreibbar sein, um den Speicherauslesebefehl 302 zu decodieren. Die Ausführungseinheit 306 ist mit der Decodiereinheit 304 und den Registern 318 gekoppelt. In einigen Ausführungsformen kann die Ausführungseinheit, in Reaktion auf und/oder infolge des Speicherauslesebefehls (z. B. in Reaktion auf ein oder mehrere Befehle oder Steuersignale, die von dem Befehl decodiert wurden, und/oder in Reaktion darauf, dass der Befehl decodiert wird, und/oder in Reaktion darauf, dass der Befehl für einen Decodierer bereitgestellt wird) betrieben werden, um unterschiedliche diskrete Datenteile 312A, 312B von sequenziellen oder zusammenhängenden Datenspeicherorten des Quellspeicheroperanden 310 sequenziell zu laden, zu lesen oder sonstwie zu empfangen. Beispielsweise kann ein erster Datenteil 312A wie durch einen ersten Pfeil 313A gezeigt gelesen werden, und dann kann ein zweiter Datenteil 312B wie durch einen zweiten Pfeil 313B gezeigt gelesen werden, und so weiter. Die Ausführungseinheit kann ferner betreibbar sein, um, in Reaktion auf und/oder infolge des Speicherauslesebefehls, Datenteile 316A, 316B getrennt und/oder sequenziell an sequenzielle und/oder zusammenhängende Datenspeicherorte des Zielspeicheroperanden 314 zu kopieren, zu verschieben, zu schreiben oder sonstwie zu speichern. Beispielsweise kann ein erster Datenteil 316A wie durch einen ersten Pfeil 315A gezeigt gespeichert werden, und dann kann ein zweiter Datenteil 316B wie durch einem zweiten Pfeil 315B gezeigt gespeichert werden, und so weiter. Die Datenteile können entweder unmodifiziert zurückgespeichert werden, oder es können vorher Modifikationen an den Daten vorgenommen werden. Die Teile können in verschiedenen Ausführungsformen unterschiedliche Datengröße-Granularitäten aufweisen, beispielsweise Byte-, Wort-, Doppelwort- oder Vierwort-Größen. Derartige getrennte und/oder sequenzielle Lese- und Speicheroperationen können mehrere Male, gegebenenfalls viele Male wiederholt werden, bis die gesamte Datenmenge (z. B. wie durch die zu kopierende Datenmenge 342 angezeigt) vom Quellspeicheroperanden zum Zielspeicheroperanden übertragen worden ist. Gemäß einem Aspekt kann der Befehl optional ein Wiederholungspräfix aufweisen, wenngleich der Schutzbereich der Erfindung diesbezüglich nicht eingeschränkt ist.
-
Die im unmittelbar vorangehenden Abschnitt beschriebenen Operationen können in Fällen durchgeführt werden, in denen die gelesenen oder gespeicherten Daten nicht defekt sind. Allerdings können, in einigen Ausführungsformen, einige der Daten gegebenenfalls defekt sein. Beispielsweise können die Daten auf die verschiedenen oben beschriebenen Arten defekt sein. In einigen Ausfiihrungsform können die Ausführungseinheit und/oder der Prozessor Logik und/oder Mechanismen aufweisen und/oder sonstwie betrieben werden, um zu bestimmen, wann Daten defekt sind. Beispielsweise können, in einigen Ausführungsformen, die Ausführungseinheit und/oder der Prozessor betreibbar sein und/oder Logik aufweisen, um eine optionale Anzeige 324 (z. B. möglicherweise eine mikroarchitektonische Anzeige, wenngleich dies nicht erforderlich ist), dass die Daten defekt sind, zu überprüfen, zu beobachten oder darauf zuzugreifen. Ein geeignetes Beispiel für eine solche Anzeige ist eine „Poison“-Anzeige (z. B. ein oder mehrere Bits mit einem bestimmten Wert, der als „Poison“-Anzeige verstanden wird), die logisch an die Daten gebunden ist oder sonstwie mit den Daten verknüpft ist. Eine solche „Poison“-Anzeige kann beispielsweise als Teil einer Lese-Antwort-Transaktion bereitgestellt sein. Andere geeignete Beispiele für solche Anzeigen sind Signale von Caches, Registerdateien oder anderen On-Die-Datenspeicherorten oder Logik, die Paritätsfehler, Fehlerkorrekturcode-Fehler oder andere derartige Anzeigen defekter Daten durch eine von verschiedenen möglichen Arten von Logik zur Erkennung defekter Daten des Prozessors anzeigt.
-
In einigen Ausführungsformen kann, wenn die Daten defekt sind, die Ausführungseinheit in Reaktion auf und/oder infolge des Speicherauslesebefehls betrieben werden, um eine Anzeige defekter Daten 322 an einem architektonisch sichtbaren Datenspeicherort zu speichern. Wie gezeigt, kann es sich bei dem architektonisch sichtbaren Datenspeicherort in einigen Ausführungsformen optional um ein Register des Satzes von Registern 318 des Prozessors handeln. Beispielsweise kann ein gegebener Wert, der von dem Prozessor und/oder der Software dahingehend verstanden wird, dass er defekte Daten anzeigt (z. B. ein Wert von minus eins als mögliches Beispiel), in einem solchen Register gespeichert sein, wenn die Daten defekt sind, und irgendein anderer Wert kann im Register gespeichert sein, wenn die Daten nicht defekt sind. Alternativ kann es sich bei dem architektonisch sichtbaren Datenspeicherort um ein oder mehrere Bedingungscode-Bits, beispielsweise ein oder mehrere Kennzeichen, Bits in einem Kennzeichenregister, Statusbits, Bits in einem Statusregister oder andere Bedingungscode-Bits handeln. Beispielsweise kann ein gegebenes Bedingungscode-Bit einen ersten Wert aufweisen (z. B. gemäß einer möglichen Konvention als binäre Eins gesetzt), um anzuzeigen, dass die Daten defekt sind, oder kann einen zweiten, unterschiedlichen Wert aufweisen (z. B. auf binär Null gelöscht), um anzuzeigen, dass die Daten nicht defekt sind.
-
In einigen Ausführungsformen kann die Ausführungseinheit ferner in Reaktion auf und/oder infolge des Speicherauslesebefehls betrieben werden, wenn die Daten defekt sind, um die Ausführung des Speicherauslesebefehls abzuschließen, ohne eine Ausnahme, eine Maschinenprüfausnahme, einen Abbruch, eine(n) andere(n) fatale(n) oder wenigstens schwerwiegende(n) Ausnahme oder Fehler oder eine andere Ausnahmebedingung 328 auszulösen, zu initiieren oder sonstwie zu verursachen. Gezeigt wird dies in der Darstellung durch ein „X“ durch die Ausnahmebedingung 328, die ansonsten einem Handler 326 signalisieren oder einen solchen alarmieren würde. Beispielsweise kann, in einigen Ausführungsformen, der Speicherauslesebefehl rückgeordnet oder sonstwie übergeben werden, ohne eine solche Ausnahmebedingung zu verursachen. In einigen Ausführungsformen kann der Speicherauslesebefehl abgeschlossen werden, ohne eine Übergabe an einen MCE-Handler, einen Ausnahmehandler, einen anderen Handler für schwerwiegende Ausnahmen oder Fehler, einen Betriebssystem-Handler oder einen anderen solchen Handler 326 zu verursachen. Vielmehr kann, in einigen Ausführungsformen, der Speicherauslesebefehl stattdessen die Anzeige der defekten Daten 322 an dem architektonisch sichtbaren Datenspeicherort speichern und dann rückordnen oder sonstwie übergeben. In einigen Ausführungsformen kann dies selbst dann der Fall sein, wenn die Daten in einer Art und Weise defekt sind, in der die Befehlssatz-Architektur vor dem Einführen des Speicherauslesebefehls eine nicht behebbare MCE verursacht hätte.
-
In einigen Ausführungsformen kann die Ausführungseinheit ferner in Reaktion auf und/oder infolge des Speicherauslesebefehls, wenn dieser abgeschlossen wird, bevor die gesamte Datenmenge 342 übertragen worden ist, betreibbar sein, um eine aktualisierte Datenmenge (z. B. durch Überschreiben der Datenmenge 342) zu speichern. In einigen Ausführungsformen kann die Software diese aktualisierte Datenmenge verwenden, um dazu beizutragen, den genauen Ort der defekten Daten zu identifizieren. Außerdem kann diese aktualisierte Datenmenge möglicherweise verwendet werden, falls der Speicherauslesebefehl neu gestartet oder wiederaufgenommen wird, um an der Stelle wieder zu beginnen, wo er zuvor aufgehört hat.
-
In einigen Ausführungsformen können unterschiedliche Teile des Systemspeichers eines Computersystems oder einer anderen elektronischen Vorrichtung auf verschiedene Art und Weise verwendet werden. Beispielsweise kann es unterschiedliche Modi geben, in denen ein Teil des Speichers auf verschiedene Art und Weise verwendet wird. Beispielsweise kann, in einem Modus, ein Teil des Speichers verwendet werden, um die Systemsoftware zu erweitern, wobei DRAM oder anderer Speicher, der normalerweise für Primärspeicher verwendet wird, annähernd analog zu einem Cache der vierten Ebene verwendet wird. In einem anderen Modus kann der Teil des Speichers als persistenter Speicher verwendet werden, um Inhalte selbst bei einem Stromausfall beizubehalten. Der persistente Speicher kann entweder nativ nichtflüchtigen Speicher repräsentieren, oder batteriegestützten flüchtigen Speicher oder eine Kombination davon. In noch einem anderen Modus kann der Teil des Speichers als Blockdatenspeicher verwendet werden, wie etwa solcher, der traditionell auf dem Speichermarkt verwendet wird.
-
Herkömmlicherweise sind Blockdatenspeicher-Regionen typischerweise vom Systemadressraum nicht adressierbar. Stattdessen kann die Blockregion von einem Blocktreiber oder dergleichen verwaltet werden. Allerdings können, in einigen Ausführungsformen, die Speicherauslesebefehle wie hier offenbart betrieben werden, um Blockdatenspeicherorte im Blockdatenspeicher im Systemadressraum (z. B. dem physischen Speicher des Systems, den Befehle des Befehlssatzes adressieren können) zu adressieren. Dies kann zutreffen, selbst wenn es sich bei dem Prozessor um einen Universalprozessor wie etwa eine universelle zentrale Verarbeitungseinheit (Central Processing Unit, CPU) handelt. Dies kann es Software ermöglichen, Blockregionen wie einen Systemadressraum zu adressieren. Das Verwenden des Systemadressraums kann dazu beitragen, die Effizienz und/oder Leistung verglichen mit der herkömmlichen Blocksemantik, die typischerweise für Blockvorrichtungen verwendet wird, zu verbessern.
-
In einigen Ausführungsformen kann es nützlich oder vorteilhaft sein, defekte Daten von Blockdatenspeicherorten anders zu handhaben oder zu behandeln als defekte Daten von Nicht-Blockdatenspeicherorten (z. B. DRAM oder anderer Primärspeicher). 4 ist ein Ablaufdiagramm einer Ausführungsform eines Verfahrens 460 zur Handhabung defekter Daten, das für eine Ausführungsform eines Speicherauslesebefehls geeignet ist. In verschiedenen Ausführungsformen kann das Verfahren von einem Prozessor, einer Befehlsverarbeitungseinrichtung, einer digitalen Logikvorrichtung oder einer integrierten Schaltung durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 460 von und/oder mit dem Prozessor 100 aus 1 und/oder während der Durchführung des Befehls 102 aus 1 durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 460 von und/oder mit dem Prozessor 300 aus 1 und/oder während der Durchführung des Befehls 302 aus 1 durchgeführt werden. Die Komponenten, Merkmale und spezifischen optionalen Einzelheiten, die hier für den Prozessor 100 und/oder den Prozessor 300 und für den Befehl 102 und/oder den Befehl 302 beschrieben werden, gelten optional auch für das Verfahren 406. Alternativ kann das Verfahren 460 von und/oder in einem ähnlichen oder hiervon verschiedenen Prozessor oder einer ähnlichen oder hiervon verschiedenen Einrichtung und/oder während der Durchführung eines ähnlichen oder hiervon verschiedenen Befehls durchgeführt werden. Darüber hinaus können die Prozessoren 100 und/oder 300 Verfahren durchführen, die identisch mit dem Verfahren 460 sind oder ähnlich oder anders ausgeführt sind.
-
Das Verfahren 460 repräsentiert einen Teil der Operationen eines Speicherauslesebefehls, nachdem eine Bestimmung 461 vorgenommen wurde, dass die Daten defekt sind. Beispielsweise kann diese Bestimmung wie vorstehend in Verbindung mit Block 233 aus 2 beschrieben vorgenommen werden.
-
Das Verfahren kann nach einer solchen Bestimmung 461 mit Block 462 fortgesetzt werden. Bei Block 462 kann, in einigen Ausführungsformen, eine Bestimmung vorgenommen werden, ob die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden. Beispielsweise sind die Ausführungseinheit und/oder der Prozessor betreibbar, um diese Bestimmung vorzunehmen, indem ein oder mehrere modellspezifische Register (MSRs), die verwendet werden, um Bereiche von Blockdatenspeicher anzuzeigen, untersucht werden, um zu bestimmen, ob ein Speicherort, von dem Daten bezogen wurden, einem dieser für Blockdatenspeicher verwendeten Bereiche entspricht. Als ein anderes Beispiel ist die Ausführungseinheit betreibbar, um diese Bestimmung vorzunehmen, indem eine Lese-Antwort (z. B. ein erweiterter Antwortcode davon), die mit dem Lesen der Daten verknüpft ist, untersucht wird, was anzeigen kann, ob ein Speicherort, von dem Daten bezogen wurden, Blockdatenspeicher entspricht.
-
Falls die Bestimmung bei Block 462 ergibt, dass die Daten, die defekt sind, von dem Blockdatenspeicherort gelesen wurden (d. h. die Bestimmung lautet „Ja“), kann das Verfahren mit Block 463 fortgesetzt werden. Bei Block 463 kann, in einigen Ausführungsformen, eine Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort gespeichert werden. Dann kann, bei Block 464, die Ausführung des Speicherauslesebefehls abgeschlossen werden, ohne eine Ausnahmebedingung zu verursachen, selbst nachdem einige der Daten als defekt bestimmt wurden. In einigen Ausführungsformen erfolgt unter Umständen keine erzwungene Übergabe an einen Handler. Vielmehr kann es möglich sein, den Speicherauslesebefehl abzuschließen und optional rückzuordnen oder sonstwie zu übergeben. In einigen Ausführungsformen können die Operationen bei Block 463 und 464 wie vorstehend (z. B. in Verbindung mit 1 und/oder 3) beschrieben durchgeführt werden. Ohne Einschränkung können der Prozessor und/oder privilegierte Systemsoftware optional/potenziell auf die bei Block 463 gespeicherte Anzeige der defekten Daten zugreifen und können versuchen, die defekten Daten zu reparieren, so dass diese nicht mehr defekt sind, und/oder die defekten Daten durch Daten zu ersetzen, die nicht defekt sind (z. B. eine nicht defekte Kopie der Daten). Wenigstens in einigen Fällen kann dies dazu beitragen zu vermeiden, dass ein Neustart des Prozessors und/oder des Systems erforderlich ist.
-
Alternativ gilt: Falls die Bestimmung bei Block 462 darin bestand, dass die Daten, die defekt sind, nicht von dem Blockdatenspeicherort gelesen wurden (d. h. die Bestimmung lautet „Nein“), kann das Verfahren mit Block 465 fortgesetzt werden. Bei Block 465 kann, in einigen Ausführungsformen, der Speicherauslesebefehl eine Ausnahmebedingung initiieren, auslösen oder sonstwie verursachen. In einigen Ausführungsformen kann es sich bei der Ausnahmebedingung um eine Maschinenprüfausnahme oder eine(n) andere(n) solche(n) schwerwiegende(n), fatale(n) oder Abbruchklasse-Ausnahme oder Fehler handeln. In einigen Ausführungsformen kann dies eine erzwungene Übergabe an einen Handler eines der vorstehend beschriebenen Typen (z. B. einen Maschinenprüfausnahme-Handler) bewirken. Dann kann es möglich sein, den Speicherauslesebefehl abzuschließen und optional rückzuordnen oder sonstwie zu übergeben.
-
Verschiedene Untermengen der in den Blöcken 461 bis 465 gezeigten Operationen können in Reaktion auf und/oder infolge des Speicherauslesebefehls durchgeführt werden, abhängig davon, ob defekte Daten von dem Blockdatenspeicherort gelesen wurden oder nicht. Beispielsweise kann eine erste Instanz des Speicherauslesebefehls nur die Blöcke 461, 462, und 465 durchführen. Als ein weiteres Beispiel kann eine zweite Instanz des Speicherauslesebefehls nur die Blöcke 461, 462, 463 und 464 durchführen.
-
Vorteilhafterweise kann dieses Verfahren einem Prozessor ermöglichen, autonom zu bestimmen, ob er eine Ausnahme und eine erzwungene Übergabe an einen Handler veranlasst, oder ob er stattdessen eine Anzeige defekter Daten an einem architektonischen Datenspeicherort speichert (und z. B. dem Prozessor und/oder Software erlaubt zu versuchen, die defekten Daten zu korrigieren), basierend auf und/oder abhängig von einem Typ einer Speicherregion, von der die defekten Daten gelesen wurden. Insbesondere kann dies ermöglichen, dass Daten von Blockdatenspeicherorten anders gehandhabt werden als Daten von regulären Speicherorten (z. B. DRAM und anderer Primärspeicher).
-
5 ist ein Blockdiagramm einer beispielhaften Ausführungsform eines Prozessors 500 mit einem Kern 570 und einem oder mehreren Sätzen von Hilfslogik 572, der für Ausführungsformen geeignet ist. In dem dargestellten Beispiel gibt es eine erste Hilfslogik 572-1, optional eine zweite Hilfslogik 572-2 und optional weitere. In einigen Ausführungsformen kann ein Speicherauslesebefehl 502 für den Kern 570 bereitgestellt werden. Beispielsweise kann der Speicherauslesebefehl einen Befehl repräsentieren, der verwendet wird, um mehrere, oder in einigen Fällen potenziell viele sequenzielle Datenteile zu lesen (z. B. den Befehl 302 aus 3). In einigen Ausführungsformen kann, anstatt dass der Kern den gesamten Speicherauslesebefehl durchführt, der Kern stattdessen wenigstens einem der Sätze von Hilfslogik wenigstens eine erste Speicherausleseoperation 574 zuweisen. Beispielsweise kann, in einigen Ausführungsformen, der Kern eine zu übertragende Datenmenge in zwei oder mehr nicht überlappende Teile aufteilen und diese jeweiligen Teile zwei oder mehr Sätzen von Hilfslogik zuweisen. Beispiele für geeignete Hilfslogik beinhalten, ohne hierauf beschränkt zu sein, einen Hilfskern, einen Beschleuniger, eine Auslagerungsengine und dergleichen. Die Hilfslogik kann dann die Speicherausleseoperationen durchführen, was dazu beitragen kann, diese Aufgabe vom Kern auszulagern. Dies kann dazu beitragen, dem Kern zu ermöglichen, andere Aufgaben durchzuführen. Außerdem können die zwei oder mehr Sätze von Hilfslogik in der Lage sein, die Übertragungen parallel oder gleichzeitig durchzuführen, was dazu beitragen kann, die Leistung zu verbessern. In einigen Fällen kann dies außerdem dazu beitragen, den Stromverbrauch zu reduzieren. Beispielsweise kann der Kern eine höhere Leistungsaufnahme aufweisen als jeder der Sätze der Hilfslogik (z. B. kann die Hilfslogik Logik oder Merkmale mit einer geringeren Leistungsaufnahme aufweisen, der Kern kann als In-Order- anstatt als Out-of-Order-Kern ausgeführt sein usw.).
-
Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
-
Prozessorkerne können für unterschiedliche Zwecke und in unterschiedlichen Prozessoren auf verschiedene Art und Weise implementiert sein. So können beispielsweise Implementierungen solcher Kerne beinhalten: 1) einen universellen In-Order-Kern für allgemeine Datenverarbeitungszwecke; 2) einen universellen Out-of-Order-Hochleistungskern für allgemeine Datenverarbeitungszwecke; 3) einen Spezialkern, der primär für grafische und/oder wissenschaftliche (Durchsatz)Berechnungen vorgesehen ist. Implementierungen von unterschiedlichen Prozessoren können beinhalten: 1) eine CPU mit einem oder mehreren universellen In-Order-Kernen für allgemeine Verarbeitungszwecke und/oder einem oder mehreren universellen Out-of-Order-Kernen für allgemeine Verarbeitungszwecke; und 2) einen Coprozessor mit einem oder mehreren Spezialkernen, der (die) primär für grafische und/oder wissenschaftliche (Durchsatz)Berechnungen vorgesehen ist (sind). Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die beinhalten können: 1) den Coprozessor auf einem anderen Chip als die CPU; 2) den Coprozessor auf einem separaten Halbleiterplättchen in demselben Paket wie die CPU; 3) den Coprozessor auf demselben Halbleiterplättchen wie die CPU (in diesem Fall wird ein solcher Coprozessor manchmal als Speziallogik bezeichnet, beispielsweise als integrierte Grafik und/oder wissenschaftliche (Durchsatz)Logik oder als Spezialkerne); und 4) ein System auf einem Chip, der auf demselben Halbleiterplättchen die beschriebene CPU (manchmal als Anwendungskern(e) oder als Anwendungsprozessor(en) bezeichnet), den vorstehend beschriebenen Coprozessor und zusätzliche Funktionalität aufweisen kann. Beispielhafte Kernarchitekturen werden als nächstes beschrieben, gefolgt von Beschreibungen von beispielhaften Prozessoren und Computerarchitekturen.
-
Beispielhafte Kernarchitekturen
-
Blockdiagramm In-Order- und Out-of-Order-Kern
-
6A ist ein Blockdiagramm, das eine beispielhafte In-Order-Pipeline und eine beispielhafte registerumbenennende Out-of-Order-Ausgabe-/Ausführungspipeline gemäß Ausführungsformen der Erfindung veranschaulicht. 6B ist ein Blockdiagramm, das eine beispielhafte Ausführungsform eines In-Order-Architekturkerns und einen beispielhaften registerumbenennenden Out-of-Order-Ausgabe-/Ausführungsarchitekturkern zur Aufnahme in einen Prozessor gemäß Ausführungsformen der Erfindung veranschaulicht. Die in 6A-B mit einer durchgehenden Linie gekennzeichneten Felder veranschaulichen die In-Order-Pipeline und den In-Order-Kern, während die optionale Ergänzung der mit einer gestrichelten Linie gekennzeichneten Felder die Registerumbenennung, die Out-of-Order-Ausgabe-/Ausführungspipeline und den Out-of-Order-Ausgabe-/Ausführungskern veranschaulicht. Da der In-Order-Aspekt eine Untermenge des Out-of-Order-Aspekts ist, wird der Out-of-Order-Aspekt beschrieben.
-
In 6A weist eine Prozessorpipeline 600 eine Abrufstufe 602, eine Längendecodierstufe 604, eine Decodierstufe 606, eine Zuweisungsstufe 608, eine Umbenennungsstufe 610, eine Zeitplanungsstufe (auch Versandstufe oder Ausgabestufe genannt) 612, eine Registerlese-/Speicherlesestufe 614, eine Ausführungsstufe 616, eine Rückschreibe-/Speicherschreibstufe 618, eine Ausnahmebehandlungsstufe 622 und eine Übergabestufe 624 auf.
-
6b zeigt einen Prozessorkern 690 mit einer Frontend-Einheit 630, die an eine Ausführungsengine-Einheit 650 gekoppelt ist, und beide sind an eine Speichereinheit 670 gekoppelt. Bei dem Kern 690 kann es sich um einen Kern für die Verarbeitung reduzierter Befehlssätze (Reduced Instruction Set Computing, RISC), einen Kern für die Verarbeitung komplexer Befehlssätze (Complex Instruction Set Computing, CISC), einen Kern für sehr lange Befehlswörter (Very Long Instruction Word, VLIW) oder eine hybride oder alternative Kernart handeln. Als eine noch andere Option kann es sich bei dem Kern 690 um einen Spezialkern handeln, beispielsweise einen Netz- oder Kommunikationskern, eine Kompressionsengine, einen Coprozessorkern, den Kern einer Grafikverarbeitungseinheit für allgemeine Verarbeitungszwecke (General Purpose Computing Graphics Processing Unit, GPGPU), einen Grafikkern oder dergleichen.
-
Die Frontend-Einheit 630 um weist eine Sprungvorhersage-Einheit 632 auf, die an eine Befehlscache-Einheit 634 gekoppelt ist, welche an einen Übersetzungspuffer (Translation Lookaside Buffer, TLB) für Befehle 636 gekoppelt ist, der wiederum an eine Befehlsabrufeinheit 638 gekoppelt ist, die an eine Decodiereinheit 640 gekoppelt ist. Die Decodiereinheit 640 (oder der Decodierer) kann Befehle decodieren und als Ausgabe eine oder mehrere Mikrooperationen, Mikrocode-Einsprungpunkte, Mikrobefehle, andere Befehle oder andere Steuersignale generieren, die anhand der ursprünglichen Befehle decodiert werden oder die ursprünglichen Befehle in anderer Weise wiedergeben oder von den ursprünglichen Befehlen abgeleitet sind. Die Decodiereinheit 640 kann unter Verwendung von verschiedenen Mechanismen implementiert sein. Beispiele für geeignete Mechanismen beinhalten, ohne jedoch hierauf beschränkt zu sein, Nachschlagetabellen, Hardware-Implementierungen, programmierbare logische Anordnungen (Programmable Logic Arrays, PLAs), Festwertspeicher (Read-only Memories, ROMs) für Mikrocode usw. In einer Ausführungsform weist der Kern 690 einen Mikrocode-ROM oder ein anderes Medium auf, das Mikrocode für bestimmte Makrobefehle (z. B. in einer Decodiereinheit 640 oder sonstwie in der Frontend-Einheit 630) speichert. Die Decodiereinheit 640 ist an eine Umbenennungs-/Zuweisungseinheit 652 in der Ausführungsengine-Einheit 650 gekoppelt.
-
Die Ausführungsengine-Einheit 650 weist die Umbenennungs-/Zuweisungseinheit 652 auf, die an eine Rückordnungseinheit 654 und an einen Satz von einer oder mehreren Planereinheit(en) 656 gekoppelt ist. Die Planereinheit(en) 656 repräsentiert (repräsentieren) eine beliebige Anzahl von unterschiedlichen Planern, einschließlich Reservierungsstationen, ein zentrales Befehlsfenster usw. Die Planereinheit(en) 656 ist (sind) an die physische(n) Registerdatei-Einheit(en) 658 gekoppelt. Jede der physischen Registerdatei-Einheiten 658 repräsentiert eine oder mehrere physische Registerdateien, von denen verschiedene ein oder mehrere unterschiedliche Datentypen speichern, beispielsweise skalare Ganzzahl, skalarer Gleitkommawert, gepackte Ganzzahl, gepackter Gleitkommawert, Vektorganzzahl, Vektorgleitkommawert, Status (z. B. einen Befehlszeiger, bei dem es sich um die Adresse des nächsten auszuführenden Befehls handelt) usw. In einer Ausführungsform umfasst die physische Registerdatei-Einheit 658 eine Vektorregister-Einheit, eine Schreibmaskenregister-Einheit und eine Skalarregister-Einheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Universalregister bereitstellen. Die physische(n) Registerdatei-Einheit(en) 658 wird (werden) von der Rückordnungseinheit 654 überlappt, um verschiedene Arten zu veranschaulichen, auf die eine Registerumbenennung und eine Out-of-Order-Ausführung implementiert sein können (z. B. unter Verwendung von (einem oder mehreren) Neuordnungspuffern und (einer oder mehreren) Rückordnungsregisterdateien; unter Verwendung von (einer oder mehreren) zukünftigen Dateien, (einem oder mehreren) historischen Puffern und (einer oder mehreren) Rückordnungsregisterdateien; unter Verwendung von Register-Maps und eines Registerpools. Die Rückordnungseinheit 654 und die physische(n) Registerdatei-Einheit(en) 658 ist (sind) an den (die) Ausführungscluster 660 gekoppelt. Die Ausführungsgruppierung(en) 660 weist (weisen) einen Satz von einer oder mehreren Ausführungseinheiten 662 und einen Satz von einer oder mehreren Speicherzugriffseinheiten 664 auf. Die Ausführungseinheiten 662 können verschiedene Operationen (z. B. Verschiebungen, Additionen, Subtraktionen, Multiplikationen) an verschiedenen Datentypen (z. B. skalarer Gleitkommawert, gepackte Ganzzahl, gepackter Gleitkommawert, Vektorganzzahl, Vektorgleitkommawert) durchführen. Zwar können einige Ausführungsformen eine Anzahl von Ausführungseinheiten aufweisen, die für spezifische Funktionen oder Sätze von Funktionen vorgesehen sind, jedoch können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle sämtliche Funktionen durchführen, aufweisen. Die Planereinheit(en) 656, die physische(n) Registerdatei-Einheit(en) 658 und die Ausführungscluster 660 werden als möglicherweise mehrfach vorhanden gezeigt, weil bestimmte Ausführungsformen getrennte Pipelines für bestimmte Arten von Daten/Operationen erzeugen (z. B. eine skalare Ganzzahl-Pipeline, eine Pipeline für skalare Gleitkommawerte/gepackte Ganzzahlen/gepackte Gleitkommawerte/Vektorganzzahlen/Vektorgleitkommawerte und/oder eine Speicherzugriffspipeline, die jeweils eine eigene Planereinheit, physische Registerdatei-Einheit und/oder Ausführungscluster aufweisen - und im Fall einer separaten Speicherzugriffspipeline sind bestimmte Ausführungsformen implementiert, bei denen nur der Ausführungscluster dieser Pipeline die Speicherzugriffseinheit(en) 664 aufweist). Ferner sei darauf hingewiesen, dass in den Fällen, in denen separate Pipelines verwendet werden, eine oder mehrere dieser Pipelines als Out-of-Order-Ausgabe-/Ausführungspipeline und der Rest als In-Order-Pipeline ausgeführt sein kann (können).
-
Der Satz von Speicherzugriffseinheiten 664 ist an die Speichereinheit 670 gekoppelt, welche eine Daten-TLB-Einheit 672 aufweist, die an eine Datencache-Einheit 674 gekoppelt ist, welche wiederum an eine Level-2 (L2)-Cache-Einheit 676 gekoppelt ist. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 664 eine Ladeeinheit, eine Speicheradresseinheit und eine Speicherdateneinheit aufweisen, wobei jede dieser Einheiten an die Daten-TLB-Einheit 672 in der Speichereinheit 670 gekoppelt ist. Die Befehlscache-Einheit 634 ist ferner an eine Level-2 (L2)-Cache-Einheit 676 in der Speichereinheit 670 gekoppelt. Die L2-Cache-Einheit 676 ist an einen oder mehrere andere Cache-Level und letztendlich an einen Hauptspeicher gekoppelt.
-
Beispielsweise kann die registerumbenennende Out-of-Order-Ausgabe/Ausführungskern-Architektur die Pipeline 600 wie folgt implementieren: 1) die Befehlsabrufeinheit 638 führt die Abruf- und Längendecodierstufen 602 und 604 durch; 2) die Decodiereinheit 640 führt die Decodierstufe 606 durch; 3) die Umbenennungs-/Zuweisungseinheit 652 führt die Zuweisungsstufe 608 und die Umbenennungsstufe 610 durch; 4) die Planereinheit(en) 656 führt (führen) die Planungsstufe 612 durch; 5) die physische(n) Registerdatei-Einheit(en) 658 und die Speichereinheit 670 führen die Registerlese-/Speicherlesestufe 614 durch; der Ausführungscluster 660 führt die Ausführungsstufe 616 durch; 6) die Speichereinheit 670 und die physische(n) Registerdateieinheit(en) 658 führen die Rückschreibe-/Speicherschreibstufe 618 durch; 7) verschiedene Einheiten können in die Ausnahmebehandlungsstufe 622 einbezogen sein; und 8) die Rückordnungseinheit 654 und die physische(n) Registerdatei-Einheit(en) 658 führen die Übergabestufe 624 durch.
-
Der Kern 690 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt worden sind); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, Kalifornien) wie hier beschrieben. In einer Ausführungsform weist der Kern 690 Logik für das Unterstützen einer Befehlssatzerweiterung für gepackte Daten (z. B. AVX1, AVX2) auf, so dass die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung von gepackten Daten durchgeführt werden können.
-
An dieser Stelle sei angemerkt, dass der Kern ein Multithreading (das Ausführen von zwei oder mehreren parallelen Sätzen von Operationen oder Programmfäden) unterstützen kann und dies auf verschiedene Art und Weise realisieren kann, einschließlich zeitscheibenbasiertes Multithreading, simultanes Multithreading (bei dem ein einzelner physischer Kern für jeden der Programmfäden, die dieser physische Kern gleichzeitig verarbeitet, einen logischen Kern bereitstellt) oder eine Kombination davon (z. B. zeitscheibenbasiertes Abrufen und Decodieren und anschließendes simultanes Multithreading wie beispielsweise bei der Intel® Hyperthreading-Technologie).
-
Auch wenn die Registerumbenennung im Zusammenhang mit der Out-of-Order-Ausführung beschrieben wird, versteht es sich, dass die Registerumbenennung auch in einer In-Order-Architektur verwendet werden kann. Auch wenn die dargestellte Ausführungsform des Prozessors getrennte Befehls- und Datencache-Einheiten 634/674 und eine gemeinsam genutzte L2-Cache-Einheit 676 aufweist, können alternative Ausführungsformen einen einzelnen internen Cache für beides, Befehle und Daten, aufweisen, wie beispielsweise einen internen Level-1 (L1)-Cache oder mehrere Ebenen von internem Cache. In einigen Ausführungsformen kann das System eine Kombination aus einem internen Cache und einem externen Cache aufweisen, der außerhalb des Kerns und/oder Prozessors liegt. Alternativ kann der gesamte Cache außerhalb des Kerns und/oder Prozessors liegen.
-
Spezifische beispielhafte In-Order-Kernarchitektur
-
Die 7A-B zeigen ein Blockdiagramm einer spezifischeren beispielhaften In-Order-Kernarchitektur, deren Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne desselben Typs und/oder unterschiedlicher Typen) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Verbindungsnetz mit großer Bandbreite (z. B. ein Ringnetz) mit fester Funktionslogik, Speicher-E/A-Schnittstellen und anderer erforderlicher E/A-Logik, je nach Anwendung.
-
7A ist ein Blockdiagramm eines einzelnen Prozessorkerns, zusammen mit dessen Verbindung zum On-Die-Verbindungsnetz 702 und mit der zugehörigen lokalen Untermenge des Level-2 (L2)-Caches 704 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdecodierer 700 den x86-Befehlssatz mit einer Befehlssatzerweiterung für gepackte Daten. Ein L1-Cache 706 ermöglicht latenzarme Zugriffe auf den Cache-Speicher in die Skalar- und Vektoreinheiten. Während in einer Ausfiihrungsform (um das Design zu vereinfachen) eine Skalareinheit 708 und eine Vektoreinheit 710 getrennte Registersätze (Skalarregister 712 bzw. Vektorregister 714) verwenden und zwischen diesen übertragene Daten in den Speicher geschrieben und dann aus einem Level-1 (L1)-Cache 706 erneut eingelesen werden, können alternative Ausführungsformen der Erfindung einen unterschiedlichen Ansatz verfolgen (z. B. das Verwenden eines einzelnen Registersatzes oder das Einschließen eines Kommunikationspfads, der es erlaubt, Daten ohne Schreiben und Zurücklesen zwischen den zwei Registerdateien zu übertragen).
-
Die lokale Untermenge des L2-Caches 704 ist Teil eines globalen L2-Caches, der in getrennte lokale Untermengen unterteilt ist, eine pro Prozessorkern. Jeder Prozessorkern weist einen direkten Zugriffspfad zu seiner eigenen lokalen Untermenge des L2-Caches 704 auf. Von einem Prozessorkern gelesene Daten werden in dessen eigener Untermenge des L2-Caches 704 gespeichert, und es kann schnell darauf zugegriffen werden, was parallel zum Zugreifen anderer Prozessorkerne auf deren Untermengen des lokalen L2-Caches erfolgen kann. Von einem Prozessorkern geschriebene Daten werden in der zum Prozessorkern gehörigen Untermenge des L2-Caches 704 gespeichert und, falls erforderlich, aus anderen Untermengen gelöscht. Das Ringnetz stellt die Kohärenz für gemeinsam genutzte Daten sicher. Das Ringnetz ist bidirektional, um es Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu ermöglichen, chipintern miteinander zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bits breit.
-
7B ist eine erweiterte Ansicht eines Teils des Prozessorkerns aus 7A gemäß Ausführungsformen der Erfindung. 7B beinhaltet einen L1-Datencache 706A, Teil des L1-Caches 704 sowie mehr Einzelheiten hinsichtlich der Vektoreinheit 710 und der Vektorregister 714. Insbesondere ist die Vektoreinheit 710 eine Vektorverarbeitungseinheit (Vector Processing Unit, VPU) mit einer Breite 16 (siehe die ALU 728 mit Breite 16), die einen oder mehrere Befehle für Ganzzahlen, einfach genaue Gleitkomma- und doppelt genaue Gleitkommabefehle ausführt. Die VPU unterstützt das Swizzeln der Registereingaben mit Swizzle-Einheit 720, die numerische Umwandlung mit numerischen Umwandlungseinheiten 722A-B und die Replikation mit einer Replikationseinheit 724 am Speichereingang. Schreibmaskenregister 726 erlauben das Vorhersagen von resultierenden Vektorschreibvorgängen.
-
Prozessor mit integrierter Speichersteuerung und Graphik
-
8 ist ein Blockdiagramm eines Prozessors 800, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik gemäß Ausführungsformen der Erfindung aufweisen kann. Die mit einer durchgehenden Linie gekennzeichneten Felder in 8 zeigen einen Prozessor 800 mit einem einzelnen Kern 802A, einem Systemagenten 810, einem Satz von einer oder mehreren Bussteuerungseinheiten 816, während die optionale Ergänzung der mit einer gestrichelten Linie gekennzeichneten Felder einen alternativen Prozessor 800 mit mehreren Kernen 802A-N, einem Satz von einer oder mehreren integrierten Speichersteuerungseinheiten 814 in der Systemagent-Einheit 810 und einer Speziallogik 808 zeigt.
-
Somit können unterschiedliche Implementierungen des Prozessors 800 aufweisen: 1) eine CPU mit der Speziallogik 808, bei der es sich um eine integrierte Grafik und/oder eine wissenschaftliche (Durchsatz)Logik handelt (die einen oder mehrere Kerne aufweisen kann), und die Kerne 802A-N, bei denen es sich um einen oder mehrere Universalkerne (z. B. universelle In-Order-Kerne, universelle Out-of-Order-Kerne, eine Kombination der beiden) handelt; 2) einen Coprozessor, mit den Kernen 802A-N, bei denen es sich um eine große Anzahl von Spezialkernen handelt, die primär für grafische und/oder wissenschaftliche (Durchsatz)Berechnungen vorgesehen sind; und 3) einen Coprozessor mit den Kernen 802A-N, bei denen es sich um eine große Anzahl von universellen In-Order-Kernen handelt. Somit kann es sich bei dem Prozessor 800 um einen Universalprozessor, einen Coprozessor oder einen Spezialprozessor wie beispielsweise einen Netz- oder Kommunikationsprozessor, eine Kompressionsengine, einen Grafikprozessor, eine GPGPU (General Purpose Graphics Processing Unit), einen durchsatzstarken MIC (Many Integrated Core)-Coprozessor (mit 30 oder mehr Kernen), einen eingebetteten Prozessor oder dergleichen handeln. Der Prozessor kann auf einem oder mehreren Chips implementiert sein. Der Prozessor 800 kann Teil eines Substrats sein und/oder unter Verwendung einer Anzahl von Prozesstechnologien wie beispielsweise BiCMOS, CMOS oder NMOS auf einem oder mehreren Substraten implementiert sein.
-
Die Speicherhierarchie weist in den Kernen eine oder mehrere Ebenen von Cache, einen Satz von oder eine oder mehrere gemeinsam genutzte(n) Cache-Einheit(en) 806 und externen Speicher (nicht gezeigt), der an den Satz von integrierten Speichersteuerungseinheiten 814 gekoppelt ist, auf. Der Satz von gemeinsam genutzten Cache-Einheiten 806 kann einen oder mehrere Mid-Level-Caches, beispielsweise Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Level, einen Last-Level-Cache (LLC) und/oder Kombinationen davon aufweisen. Während in einer Ausführungsform eine ringbasierte Verbindungseinheit 812 die integrierte Grafiklogik 808, den Satz von gemeinsam genutzten Cache-Einheiten 806 und die Systemagent-Einheit 810/die integrierten Speichersteuerungseinheit(en) 814 untereinander verbindet, können alternative Ausführungsformen eine beliebige Anzahl von bekannten Techniken für das Verbinden solcher Einheiten verwenden. In einer Ausführungsform wird die Kohärenz zwischen einer/einem oder mehreren Cache-Einheiten 806 und Kernen 802-A-N beibehalten.
-
In einigen Ausführungsformen sind einer oder mehrere der Kerne 802A-N Multithreadingfähig. Der Systemagent 810 weist diejenigen Komponenten auf, welche die Kerne 802A-N koordinieren und betreiben. Die Systemagent-Einheit 810 kann beispielsweise eine Leistungssteuerungseinheit (Power Control Unit, PCU) und eine Anzeigeeinheit aufweisen. Die PCU kann Logik und Komponenten darstellen oder beinhalten, die für das Regeln des Leistungszustands der Kerne 802A-N und der integrierten Grafiklogik 808 benötigt werden. Die Anzeigeeinheit hat die Aufgabe, eine oder mehrere extern angeschlossene Anzeigen anzusteuern.
-
Die Kerne 802A-N können in Bezug auf den Architekturbefehlssatz homogen oder heterogen sein; das heißt, zwei oder mehr der Kerne 802A-N können in der Lage sein, denselben Befehlssatz auszuführen, während andere in der Lage sein können, nur eine Untermenge dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
-
Beispielhafte Computerarchitekturen
-
Die 9-12 sind Blockdiagramme beispielhafter Computerarchitekturen. Andere Systementwürfe und Konfigurationen nach dem Stand der Technik für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten (PDAs), Arbeitsstationen (Engineering Workstations, EWS), Server, Netzvorrichtungen, Netzknoten, Switches, eingebettete Prozessoren, digitale Signalprozessoren (DSPs), Grafikvorrichtungen, Videospielvorrichtungen, Set-top-Boxen, Mikrocontroller, Mobiltelefone, tragbare Medienwiedergabegeräte, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine enorme Vielzahl von verschiedenen Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder andere Ausführungslogik wie hier offenbart aufzunehmen, geeignet.
-
Es wird nun Bezug genommen auf 9; gezeigt wird ein Blockdiagramm eines Systems 900 gemäß einer Ausführungsform der vorliegenden Erfindung. Das System 900 kann einen oder mehrere Prozessoren 910, 915 aufweisen, die an einen Steuerungsknoten 920 gekoppelt sind. In einer Ausführungsform weist der Steuerungsknoten 920 einen Grafikspeicher-Steuerungsknoten (Graphics Memory Controller Hub, GMCH) 990 und einen Eingabe-/Ausgabe-Knoten (Input/Output Hub, IOH) 950 auf (die auf getrennten Chips liegen können); der GMCH 990 weist Speicher- und Grafiksteuerungen auf, an die Speicher 940 und ein Coprozessor 945 gekoppelt sind; der IOH 950 koppelt Eingabe/Ausgabe (E/A)-Vorrichtungen 960 an den GMCH 990. Alternativ sind eine oder beide der Speicher- und Grafiksteuerungen (wie hier beschrieben) im Prozessor integriert, der Speicher 940 und der Coprozessor 945 sind direkt an den Prozessor 910 gekoppelt und der Steuerungsknoten 920 befindet sich in einem einzelnen Chip mit dem IOH 950.
-
Der optionale Charakter zusätzlicher Prozessoren 915 ist in 9 durch die gestrichelten Linien angegeben. Jeder Prozessor 910, 915 kann einen oder mehrere der hier beschriebenen Verarbeitungskerne aufweisen und eine Version des Prozessors 800 sein.
-
Bei dem Speicher 940 kann es sich beispielsweise um dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM), Phasenwechselspeicher (Phase Change Memory, PCM) oder um eine Kombination der beiden handeln. Bei mindestens einer Ausführungsform kommuniziert der Steuerungsknoten 920 mit dem (den) Prozessor(en) 910, 915 über einen Multi-Drop-Bus, wie beispielsweise einen Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie beispielsweise QuickPath Interconnect (QPI), oder eine ähnliche Verbindung 995.
-
In einer Ausführungsform ist der Coprozessor 945 ein Spezialprozessor, wie beispielsweise ein durchsatzstarker MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsknoten 920 einen integrierten Grafikbeschleuniger aufweisen.
-
Es kann verschiedene Unterschiede zwischen den physischen Ressourcen 910, 915 im Hinblick auf ein Spektrum von Gütemetriken geben, einschließlich architektonische, mikroarchitektonische, thermische, leistungsaufnahmebezogene Eigenschaften und dergleichen.
-
In einer Ausführungsform führt der Prozessor 910 Befehle aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In den Befehlen können Coprozessorbefehle eingebettet sein. Der Prozessor 910 erkennt diese Coprozessorbefehle als Befehle eines Typs, der von dem verbundenen Coprozessor 945 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 910 diese Coprozessorbefehle (oder Steuersignale, die Coprozessorbefehle repräsentieren) über einen Coprozessor-Bus oder eine andere Zwischenverbindung an den Coprozessor 945 aus. Ein oder mehrere Coprozessoren 945 akzeptieren die empfangenen Befehle und führen diese aus.
-
Es wird nun Bezug genommen auf 10; gezeigt wird ein Blockdiagramm eines ersten spezifischeren Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung. Wie in 10 gezeigt, ist das Mehrprozessorsystem 1000 ein Punkt-zu-Punkt-Verbindungssystem und weist einen ersten Prozessor 1070 und einen zweiten Prozessor 1080 auf, die über eine Punkt-zu-Punkt-Verbindung 1050 gekoppelt sind. Jeder der Prozessoren 1070 und 1080 kann eine Version des Prozessors 800 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1070 und 1080 die Prozessoren 910 bzw. 915, während der Coprozessor 1038 der Coprozessor 945 ist. In einer anderen Ausführungsform sind die Prozessoren 1070 und 1080 Prozessor 910 bzw. Coprozessor 945.
-
Die Prozessoren 1070 und 1080 werden mit integrierter Speichersteuerungseinheit (Integrated Memory Controller, IMC) 1072 bzw. 1082 gezeigt. Der Prozessor 1070 weist außerdem als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt (P-P)-Schnittstellen 1076 und 1078 auf; in ähnlicher Weise weist der zweite Prozessor 1080 P-P-Schnittstellen 1086 und 1088 auf. Die Prozessoren 1070, 1080 können Informationen über eine Punkt-zu-Punkt (P-P)-Schnittstelle 1050 unter Verwendung von P-P-Schnittstellenschaltungen 1078, 1088 austauschen. Wie in 10 gezeigt, koppeln die IMCs 1072 und 1082 die Prozessoren an die jeweiligen Speicher, nämlich einen Speicher 1032 und einen Speicher 1034, die Teile des lokal mit den jeweiligen Prozessoren verbundenen Hauptspeichers sein können.
-
Die Prozessoren 1070, 1080 können jeder über individuelle P-P-Schnittstellen 1052, 1054 Informationen mit einem Chipsatz 1090 austauschen, wobei Punkt-zu-Punkt-Schnittstellenschaltungen 1076, 1094, 1086, 1098 verwendet werden. Der Chipsatz 1090 kann optional über eine Hochleistungsschnittstelle 1039 Informationen mit dem Coprozessor 1038 austauschen. In einer Ausführungsform ist der Coprozessor 1038 ein Spezialprozessor, wie beispielsweise ein durchsatzstarker MIC-Prozessor, ein Netz- oder Kommunikationsprozessor, eine Kompressionsengine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
-
Ein gemeinsam genutzter (nicht gezeigter) Cache kann in jedem Prozessor enthalten sein oder außerhalb beider Prozessoren liegen, aber mit den Prozessoren über eine P-P-Verbindung verbunden sein, so dass lokale Cache-Informationen jedes oder beider Prozessoren im gemeinsam genutzten Cache gespeichert werden können, falls ein Prozessor in einen Niedrigenergiemodus versetzt wird.
-
Der Chipsatz 1090 kann über eine Schnittstelle 1096 an einen ersten Bus 1016 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1016 ein Peripheriegeräteverbindungsbus (Peripheral Component Interconnect, PCI) oder ein Bus wie beispielsweise ein PCI Express-Bus oder ein anderer E/A-Verbindungsbus der dritten Generation sein, wenngleich der Schutzbereich der vorliegenden Erfindung nicht hierauf beschränkt ist.
-
Wie in 10 gezeigt, können verschiedene E/A-Vorrichtungen 1014 an den ersten Bus 1016 gekoppelt sein, zusammen mit einer Busbrücke 1018, die den ersten Bus 1016 an einen zweiten Bus 1020 koppelt. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 1015, beispielsweise Coprozessoren, durchsatzstarke MIC-Prozessoren, GPGPUs, Beschleuniger (wie beispielsweise Grafikbeschleuniger oder Digitalsignal-Verarbeitungseinheiten (Digital Signal Processing Units, DSPs)), feldprogrammierbare Gate-Arrays oder andere Prozessoren, an den ersten Bus 1016 gekoppelt. In einer Ausführungsform kann der zweite Bus 1020 ein Bus mit geringer Stiftzahl (Low Pin Count, LPC) sein. Verschiedene Vorrichtungen können an einen zweiten Bus 1020 gekoppelt sein, in einer Ausführungsform beispielsweise eine Tastatur und/oder eine Maus 1022, Kommunikationsvorrichtungen 1027 und eine Datenspeichereinheit 1028 wie beispielsweise ein Plattenlaufwerk oder eine Massenspeichervorrichtung, die Befehle/Code und Daten 1030 aufweisen kann. Ferner kann ein Audio-E/A 1024 an den zweiten Bus 1020 gekoppelt sein. Es sei darauf hingewiesen, dass auch andere Architekturen möglich sind. So kann ein System beispielsweise anstelle der Punkt-zu-Punkt-Architektur aus 10 einen Multi-Drop-Bus oder eine andere derartige Architektur implementieren.
-
Es wird nun Bezug genommen auf 11; gezeigt wird ein Blockdiagramm eines zweiten spezifischeren Systems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung. Gleiche Elemente in 10 und 11 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 10 wurden in 11 ausgelassen, um zu verhindern, dass andere Aspekte von 11 verdeckt werden.
-
11 veranschaulicht, dass die Prozessoren 1070, 1080 einen integrierten Speicher und eine E/A-Steuerungslogik (Control Logic, „CL“) 1072 bzw. 1082 aufweisen können. Somit weist die CL 1072, 1082 integrierte Speichersteuerungseinheiten und eine E/A-Steuerungslogik auf. 11 veranschaulicht, dass nicht nur die Speicher 1032, 1034 an die CL 1072, 1082 gekoppelt sind, sondern auch, dass die E/A-Vorrichtungen 1114 ebenfalls an die Steuerungslogik 1072, 1082 gekoppelt sind. Bisherige E/A-Vorrichtungen 1115 sind an den Chipsatz 1090 gekoppelt.
-
Es wird nun Bezug genommen auf 12; gezeigt wird ein Blockdiagramm eines SoCs 1200 gemäß einer Ausführungsform der vorliegenden Erfindung. Ähnliche Elemente in 8 tragen ähnliche Bezugszeichen. Außerdem stehen mit einer gestrichelten Linie gekennzeichnete Felder für optionale Merkmale auf fortschrittlicheren SoCs. In 12 ist (sind) eine Verbindungseinheit(en) 1202 gekoppelt an: einen Anwendungsprozessor 1210, der einen Satz von einem oder mehreren Kernen 202A-N und eine (mehrere) gemeinsam genutzte Cache-Einheit(en) 806 aufweist; eine Systemagent-Einheit 810; (eine) Bussteuerungseinheit(en) 816; (eine) integrierte Speichersteuerungseinheit(en) 814; einen Satz von einem oder mehreren Coprozessoren 1220, der integrierte Grafiklogik aufweisen kann, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor; eine statische Direktzugriffsspeichereinheit (Static Random Access Memory, SRAM) 1230; eine Direktspeicherzugriffseinheit (Direct Memory Access, DMA) 1232; und eine Anzeigeeinheit 1240 für das Ankoppeln an ein oder mehrere externe Anzeigen. In einer Ausführungsform weist (weisen) der (die) Coprozessor(en) 1220 einen Spezialprozessor wie beispielsweise einen Netzprozessor oder einen Kommunikationsprozessor, eine Kompressionsengine, eine GPGPU, einen durchsatzstarken MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen auf.
-
Ausführungsformen der hier offenbarten Mechanismen können in Hardware, Software, Firmware implementiert sein oder eine Kombination dieser Implementierungsansätze darstellen. Ausführungsformen der Erfindung können als Computerprogramme oder als Programmcode implementiert sein, die/der auf programmierbaren Systemen ausgeführt werden/wird, die wenigstens einen Prozessor, ein Speichersystem (mit flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), wenigstens eine Eingabevorrichtung und wenigstens eine Ausgabevorrichtung umfassen.
-
Programmcode, beispielsweise der in 10 dargestellte Code 1030, kann auf Eingabebefehle angewendet werden, um die hier beschriebenen Funktionen durchzuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können in bekannter Weise auf eine oder mehrere Ausgabevorrichtungen angewendet werden. Für die Zwecke dieser Patentanmeldung weist ein Verarbeitungssystem ein beliebiges System auf, das über einen Prozessor verfügt, beispielsweise: einen digitalen Signalprozessor (Digital Signal Processor, DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (Application Specific Integrated Circuit, ASIC) oder einen Mikroprozessor.
-
Der Programmcode kann in einer prozeduralen Hochsprache oder in einer objektorientierten Programmiersprache für das Kommunizieren mit einem Verarbeitungssystem implementiert sein. Der Programmcode kann auf Wunsch auch in Assembler- oder Maschinensprache implementiert sein. Tatsächlich sind die hier beschriebenen Mechanismen hinsichtlich des Schutzbereichs nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann es sich bei der Sprache um eine kompilierte oder eine interpretierte Sprache handeln.
-
Ein oder mehrere Aspekte von wenigstens einer Ausführungsform kann (können) durch repräsentative Befehle implementiert sein, die auf einem maschinenlesbaren Medium gespeichert sind, das verschiedene Logiken im Prozessor repräsentiert, welche beim Auslesen durch eine Maschine bewirken, dass die Maschine Logik für das Durchführen der hier beschriebenen Verfahren erstellt. Solche Darstellungen, „IP-Kerne“ genannt, können auf einem physischen, maschinenlesbaren Medium gespeichert werden und an verschiedene Kunden oder Fertigungseinrichtungen geliefert werden, damit sie dort in die Fertigungsmaschinen geladen werden, die tatsächlich die Logik oder den Prozessor ausmachen.
-
Ein solches maschinenlesbares Medium kann, ohne Einschränkung, nicht-transitorische, physische Anordnungen von Artikeln aufweisen, die von einer Maschine oder einer Vorrichtung gefertigt oder geformt werden, einschließlich Speichermedien wie beispielsweise Festplatten, irgendeine andere Art von Platte einschließlich Disketten, optische Platten, Compact-Disk-Festwertspeicher (Compact Disk Read-only Memories, CD-ROMs), wiederbeschreibbare CDs (Compact Disk Rewritables, CD-RWs) und magnetooptische Platten, Halbleitervorrichtungen wie beispielsweise Festwertspeicher (Read-only Memories, ROMs), Direktzugriffsspeicher (Random Access Memories, RAMs) wie beispielsweise dynamische Direktzugriffsspeicher (Dynamic Random Access Memories, DRAMs), statische Direktzugriffsspeicher (Static Random Access Memories, SRAMs), löschbare programmierbare Festwertspeicher (Erasable Programmable Read-only Memories, EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Festwertspeicher (Electrically Erasable Programmable Read-only Memories, EEPROMs), Phasenwechselspeicher (Phase Change Memory, PCM), magnetische oder optische Karten oder irgendeine andere Art von Medien, die sich für das Speichern elektronischer Befehle eignen.
-
Entsprechend weisen Ausführungsformen der Erfindung auch nicht-transitorische, physische maschinenlesbare Medien auf, die Befehle oder Entwurfsdaten enthalten, beispielsweise eine Hardware-Beschreibungssprache (Hardware Description Language, HDL), welche die hier beschriebenen Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
-
Emulation (einschließlich binärer Übersetzung, Codeumformung usw.)
-
In einigen Fällen kann ein Befehlsumwandler verwendet werden, um einen Befehl von einem Quellbefehlssatz in einen Zielbefehlssatz umzuwandeln. So kann der Befehlsumwandler beispielsweise einen Befehl für das Verarbeiten durch den Kern in einen oder mehrere andere Befehle übersetzen (z. B. unter Verwendung einer statischen binären Übersetzung, einer dynamischen binären Übersetzung einschließlich einer dynamischen Kompilierung), umformen, emulieren oder sonstwie umwandeln. Der Befehlsumwandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. Bei dem Befehlsumwandler kann es sich um einen On-Prozessor, einen Off-Prozessor oder teilweise um einen On- und teilweise um einen Off-Prozessor handeln.
-
13 ist ein Blockdiagramm, das die Verwendung eines Software-Befehlsumwandlers zum Umwandeln von Binärbefehlen in einem Quellbefehlssatz in Binärbefehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der dargestellten Ausführungsform ist der Befehlsumwandler ein Software-Befehlsumwandler, wenngleich der Befehlsumwandler alternativ auch in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert sein kann. 13 zeigt, dass ein Programm in einer Hochsprache 1302 unter Verwendung eines x86-Kompilierers 1304 kompiliert werden kann, um x86-Binärcode 1306 zu erzeugen, der nativ von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 1316 ausgeführt werden kann. Der Prozessor mit wenigstens einem x86-Befehlssatzkern 1316 repräsentiert jeden Prozessor, der im Wesentlichen dieselben Funktionen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern durchführen kann, indem dieser Prozessor in kompatibler Weise oder sonstwie (1) einen wesentlichen Teil des Befehlssatzes des Intel x86-Befehlssatzkerns verarbeitet oder (2) Objektcode-Versionen von Anwendungen oder andere Software, die für das Ausführen auf einem Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern vorgesehen ist, ausführt, um im Wesentlichen dasselbe Ergebnis zu erzielen wie ein Intel-Prozessor mit wenigstens einem x86-Befehlssatzkern. Der x86-Kompilierer 1304 repräsentiert einen Kompilierer, der betreibbar ist, um x86-Binärcode 1306 (z. B. Objektcode) zu erzeugen, der mit oder ohne zusätzliche Verknüpfungsverarbeitung auf dem Prozessor mit wenigstens einem x86-Befehlssatzkern 1316 ausgeführt werden kann. In ähnlicher Weise zeigt 13, dass das Programm in der Hochsprache 1302 unter Verwendung eines alternativen Befehlssatz-Kompilierers 1308 kompiliert werden kann, um alternativen Befehlssatz-Binärcode 1310 zu erzeugen, der von einem Prozessor mit wenigstens einem x86-Befehlssatzkern 1314 nativ ausgeführt werden kann (z. B. einem Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien ausführen und/oder den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, Kalifornien, ausführen). Der Befehlsumwandler 1312 wird verwendet, um den x86-Binärcode 1306 in Code umzuwandeln, der vom Prozessor ohne einen x86-Befehlssatzkern 1314 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht identisch mit dem alternativen Befehlssatz-Binärcode 1310, weil ein Befehlsumwandler, der hierzu in der Lage wäre, schwer herzustellen ist; allerdings wird der umgewandelte Code den allgemeinen Betrieb bewältigen und sich aus Befehlen aus dem alternativen Befehlssatz zusammensetzen. Somit repräsentiert der Befehlsumwandler 1312 Software, Firmware, Hardware oder eine Kombination davon, die es, durch Emulation, Simulation oder einen anderen Prozess, einem Prozessor oder einer anderen elektronischen Vorrichtung, der bzw. die keinen x86-Befehlssatzprozessor oder -kern aufweist, ermöglicht, den x86-Binärcode 1306 auszuführen.
-
Für einen der hier offenbarten Prozessoren beschriebene Komponenten, Merkmale und Einzelheiten können optional auf eines der hier offenbarten Verfahren angewendet werden, das in Ausführungsformen optional durch und/oder mit solchen Prozessoren durchgeführt werden kann. Jeder der hier in Ausführungsformen beschriebenen Prozessoren kann optional in einem der hier offenbarten Systeme enthalten sein. Jeder der hier in Ausführungsformen offenbarten Befehle kann optional von und/oder mit einem der hier offenbarten Prozessoren, optional in einigen Ausführungsformen, die eine der hier gezeigten Mikroarchitekturen aufweisen, und optional in einigen Ausführungsformen, die in einem der hier gezeigten Systeme enthalten sind, durchgeführt werden. Dementsprechend können die für irgendeinen der hier offenbarten Befehle beschriebenen Merkmale und Einzelheiten daher optional in einigen Ausführungsformen auf einen/eines der hier offenbarten Prozessoren und/oder Systeme angewendet werden, die unter Umständen verwendet werden, um jene Befehle durchzuführen.
-
Hier offenbarte Prozessorkomponenten können als betreibbar, konfiguriert, fähig oder in der Lage, eine Operation durchzuführen, betrachtet werden. Beispielsweise kann ein Decodierer die Aufgabe haben, einen Befehl zu decodieren, eine Ausführungseinheit kann die Aufgabe haben, ein Ergebnis zu speichern, usw. Aus Gründen der Übersichtlichkeit versteht es sich, dass diese Ausdrücke nicht implizieren, dass die Prozessorkomponenten in Betrieb oder in Verwendung sind, sondern vielmehr darauf verweisen, was die Prozessorkomponenten zu tun fähig oder in der Lage sind, wenn sie in Betrieb sind, aber in den Vorrichtungsansprüchen sind diese Prozessorkomponenten nicht in Betrieb.
-
In der Beschreibung und in den Patentansprüchen können die Begriffe „gekoppelt“ und „verbunden“ sowie Ableitungen davon verwendet werden. Diese Begriffe sind nicht als Synonyme füreinander gedacht. Vielmehr kann in Ausführungsformen „verbunden“ verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt miteinander stehen. „Gekoppelt“ kann bedeuten, dass zwei oder mehr Elemente in direktem physischen und/oder elektrischen Kontakt miteinander stehen. Allerdings kann „gekoppelt“ auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, aber dennoch zusammenwirken oder miteinander interagieren. Beispielsweise kann eine Ausführungseinheit über eine oder mehrere dazwischenliegende Komponenten mit einem Register und/oder einer Decodiereinheit gekoppelt sein. In den Figuren werden Pfeile verwendet, um Verbindungen und Kopplungen zu zeigen.
-
Die hier offenbarten Komponenten und die in den vorstehenden Figuren dargestellten Verfahren können mit Logik, Modulen oder Einheiten, die Hardware (z. B. Transistoren, Gatter, Schaltungen usw.), Firmware (z. B. einen nichtflüchtigen Speicher, der Mikrocode oder Steuersignale speichert), Software (z. B. auf einem nicht-transitorischen computerlesbaren Speichermedium gespeichert) oder eine Kombination davon implementiert sein. In einigen Ausführungsformen können die Logik, die Module oder die Einheiten wenigstens einige oder überwiegend eine Mischung aus Hardware und/oder Firmware, gegebenenfalls kombiniert mit einiger optionaler Software, aufweisen.
-
Die Formulierung „und /oder“ kann verwendet worden sein. Die Formulierung „und /oder“ wie hier verwendet bedeutet den/die/das ein/e oder den/die/das andere(n) oder beide (z. B. bedeutet A und/oder B entweder A oder B oder sowohl A als auch B).
-
In der vorstehenden Beschreibung sind spezifische Einzelheiten dargelegt, um ein gründliches Verständnis der Ausführungsformen zu vermitteln. Allerdings können auch andere Ausführungsformen ohne diese spezifischen Einzelheiten verwirklicht werden. Der Schutzbereich der Erfindung ist nicht anhand der vorstehenden spezifischen Beispiele, sondern ausschließlich anhand der nachstehenden Patentansprüche zu bestimmen. In anderen Fällen sind bekannte Schaltungen, Strukturen, Vorrichtungen und Operationen in Form eines Blockdiagramms und/oder nicht im Detail dargestellt, um das Verständnis der vorliegenden Beschreibung nicht zu erschweren. Soweit angemessen, sind Bezugszeichen oder Endungen von Bezugszeichen in den Figuren wiederholt worden, um einander entsprechende oder gleichartige Elemente anzuzeigen, die optional ähnliche oder dieselben Eigenschaften haben können, soweit nicht anders spezifiziert oder offensichtlich.
-
Bestimmte Operationen können von Hardwarekomponenten durchgeführt werden oder können in von Maschinen ausführbaren oder von Schaltungen ausführbaren Befehlen ausgeführt sein, die verwendet werden können, um eine Maschine, Schaltung oder Hardwarekomponente (z. B. einen Prozessor, einen Teil eines Prozessors, eine Schaltung usw.) zu erzielen und/oder zu erhalten, die mit den Befehlen zum Durchführen der Operationen programmiert ist. Die Operationen können außerdem wahlweise durch eine Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, eine Schaltung oder Hardware kann spezifische oder bestimmte Schaltungen oder andere Logik (z. B. Hardware, gegebenenfalls kombiniert mit Firmware und/oder Software) aufweisen, die betrieben werden können, um den Befehl auszuführen und/oder zu verarbeiten und ein Ergebnis in Reaktion auf den Befehl zu speichern.
-
Einige Ausführungsformen weisen ein Erzeugnis (z. B. ein Computerprogrammprodukt) auf, das ein maschinenlesbares Medium aufweist. Das Medium kann einen Mechanismus aufweisen, der Informationen in einer Form bereitstellt, zum Beispiel speichert, die von der Maschine gelesen werden kann. Das maschinenlesbare Medium kann einen Befehl oder eine Befehlssequenz bereitstellen oder diese können darauf gespeichert sein, die, falls und/oder wenn sie von einer Maschine ausgeführt werden, dazu dienen die Maschine zu veranlassen und/oder die bewirken, dass die Maschine eine oder mehrere der hier offenbarten Operationen, Verfahren oder Techniken durchführt.
-
In einigen Ausführungsformen kann das maschinenlesbare Medium ein physisches und/oder ein nicht-transitorisches maschinenlesbares Datenspeichermedium aufweisen. Beispielsweise kann das nicht-transitorische maschinenlesbare Speichermedium eine Floppy-Diskette, ein optisches Speichermedium, eine optische Platte, eine optische Datenspeichervorrichtung, eine CD-ROM, eine magnetische Platte, eine magnetooptische Platte, einem Festwertspeicher (Read-Only Memory, ROM), einen programmierbaren ROM (PROM), einen löschbaren und programmierbaren ROM (EPROM), einen elektrisch löschbaren und programmierbaren ROM (EEPROM), einen Direktzugriffsspeicher (Random Access Memory, RAM), einen statischen RAM (SRAM), einen dynamischen RAM (DRAM), einen Flash-Speicher, einen Phasenwechselspeicher, ein Phasenwechsel-Datenspeichermaterial, einen nichtflüchtigen Speicher, eine nichtflüchtige Datenspeichervorrichtung, einen nicht-transitorischen Speicher, eine nicht-transitorische Datenspeichervorrichtung oder dergleichen aufweisen. Das nicht-transitorische maschinenlesbare Datenspeichermedium besteht nicht aus einem transitorischen, sich ausbreitenden Signal. In einigen Ausführungsformen kann das Datenspeichermedium ein physisches Medium aufweisen, dass Festkörpermaterie oder -material, beispielsweise ein Halbleitermaterial, ein Phasenwechselmaterial, ein magnetisches Festmaterial, ein festes Datenspeichermaterial usw. aufweist. Alternativ kann optional ein nicht-physisches transitorisches computerlesbares Übertragungsmedium, beispielsweise sich elektrisch, optisch, akustisch oder auf andere Weise ausbreitende Signale, wie etwa Trägerwellen, Infrarotsignale und digitale Signale, verwendet werden.
-
Beispiele für geeignete Maschinen beinhalten, ohne jedoch hierauf beschränkt zu sein, einen Universalprozessor, einen Spezialprozessor, eine digitale Logikschaltung, eine integrierte Schaltung oder dergleichen. Noch andere Beispiele für geeignete Maschinen beinhalten ein Computersystem oder eine andere elektronische Vorrichtung, die einen Prozessor, eine digitale Logikschaltung oder eine integrierte Schaltung aufweisen. Beispiele für solche Computersysteme oder elektronische Vorrichtungen beinhalten, ohne jedoch hierauf beschränkt zu sein, Desktop-Computer, Laptop-Computer, Notebook-Computer, Tablet-Computer, Netbooks, Smartphones, Mobiltelefone, Server, Netzvorrichtungen (z. B. Router und Switches), mobile Internet-Vorrichtungen (Mobile Internet Devices, MIDs), Medienwiedergabegeräte, Smart-Fernsehgeräte, Nettops, Set-top-Boxen und Videospielvorrichtungen.
-
Der Hinweis in der Patentschrift auf „eine einzige Ausführungsform“, „eine Ausführungsform“ oder „eine oder mehrere Ausführungsformen“ und „einige Ausführungsformen“ zeigt beispielsweise an, dass ein bestimmtes Merkmal in der praktischen Umsetzung der Erfindung enthalten sein kann, aber nicht notwendigerweise sein muss. In ähnlicher Weise sind in der Beschreibung verschiedene Merkmale manchmal in einer einzelnen Ausführungsform, Figur oder Beschreibung davon mit der Absicht gruppiert, die Offenbarung zu vereinfachen und zum Verständnis der verschiedenen erfinderischen Aspekte beizutragen. Jedoch ist dieses Offenbarungsverfahren nicht dahingehend zu interpretieren, dass beabsichtigt ist, dass die Erfindung mehr Merkmale benötigt als ausdrücklich in jedem Anspruch angegeben. Stattdessen sind, wie sich in den nachfolgenden Ansprüchen widerspiegelt, erfindungsgemäße Aspekte in weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform anzutreffen. Die nachfolgenden Ansprüche werden somit ausdrücklich in die vorliegende ausführliche Beschreibung aufgenommen, wobei jeder Anspruch für sich als gesonderte Ausführungsform der Erfindung steht.
- Beispiel 1 ist ein Prozessor mit einer Decodiereinheit zum Decodieren eines Speicherauslesebefehls. Der Speicherauslesebefehl soll einen Quellspeicheroperanden und einen Zieldatenspeicherort anzeigen. Der Prozessor weist außerdem eine mit der Decodiereinheit gekoppelte Ausführungseinheit auf. Die Ausführungseinheit soll, in Reaktion auf den Speicherauslesebefehl, Daten aus dem Quellspeicheroperanden auslesen, eine Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort speichern, wenn die Daten defekt sind, und die Ausführung des Speicherauslesebefehls abschließen, ohne eine Ausnahmebedingung zu verursachen, wenn die Daten defekt sind.
- Beispiel 2 beinhaltet den Prozessor aus Beispiel 1, optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, die Daten von einem Blockdatenspeicherort lesen soll, welcher sich in einem physischen Speicheradressraum befinden soll, der von dem Speicherauslesebefehl adressierbar ist, und optional dahingehend, dass der Prozessor eine universelle zentrale Verarbeitungseinheit (Central Processing Unit, CPU) aufweisen soll.
- Beispiel 3 beinhaltet den Prozessor aus Beispiel 1, optional dahingehend, dass die Decodiereinheit einen zweiten Speicherauslesebefehl decodieren soll, der denselben Opcode wie der Speicherauslesebefehl aufweisen soll und der einen zweiten Quellspeicheroperanden und einen zweiten Zieldatenspeicherort anzeigen soll. Optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den zweiten Speicherauslesebefehl, zweite Daten aus dem zweiten Quellspeicheroperanden auslesen soll, die zweiten Daten an dem zweiten Zieldatenspeicherort speichern soll, wenn die zweiten Daten nicht defekt sind, und eine Anzeige, dass die zweiten Daten nicht defekt sind, an dem architektonisch sichtbaren Speicherort speichern soll, wenn die zweiten Daten nicht defekt sind.
- Beispiel 4 beinhaltet den Prozessor aus Beispiel 1, optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, vor dem Speichern der Anzeige der defekten Daten bestimmen soll, ob die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden.
- Beispiel 5 beinhaltet den Prozessor aus Beispiel 4, optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, bestimmen soll, dass die Anzeige der defekten Daten gespeichert wird, wenn die Daten defekt sind und wenn die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden.
- Beispiel 6 beinhaltet den Prozessor aus Beispiel 5, optional dahingehend, dass die Decodiereinheit einen zweiten Speicherauslesebefehl decodieren soll, der denselben Opcode wie der Speicherauslesebefehl aufweisen soll und der einen zweiten Quellspeicheroperanden anzeigen soll. Optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den zweiten Speicherauslesebefehl, zweite Daten aus dem zweiten Quellspeicheroperanden auslesen soll, bestimmen soll, dass die zweiten Daten nicht von einem Blockdatenspeicherort gelesen wurden, wenn die zweiten Daten defekt sind, und eine Ausnahmebedingung verursachen soll, bevor die Ausführung des zweiten Speicherauslesebefehls abgeschlossen wird.
- Beispiel 7 beinhaltet den Prozessor aus Beispiel 6, optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den zweiten Speicherauslesebefehl, die Ausnahmebedingung verursachen soll, bei der es sich um eine Maschinenprüfausnahme handeln soll.
- Beispiel 8 beinhaltet den Prozessor aus Beispiel 1, ferner umfassend Logik zum Erkennen, dass die Daten defekt sind, basierend auf wenigstens einem von einem Datenparitätsfehler und einem Fehlerkorrekturcode (Error Correction Code, ECC)-Fehler.
- Beispiel 9 beinhaltet den Prozessor aus Beispiel 1, optional dahingehend, dass die Decodiereinheit außerdem einen zweiten Speicherauslesebefehl decodieren soll, welcher vor dem Speicherauslesebefehl in einem Befehlssatz enthalten gewesen sein soll, und optional dahingehend, dass der Prozessor, in Reaktion auf den zweiten Speicherauslesebefehl, eine Ausnahmebedingung verursachen soll, wenn Daten, die defekt sind, gelesen werden.
- Beispiel 10 beinhaltet den Prozessor aus einem der Beispiele 1 bis 9, optional dahingehend, dass die Decodiereinheit den Speicherauslesebefehl decodieren soll, der ein Universalregister als den architektonisch sichtbaren Datenspeicherort anzeigen soll, und optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, die Anzeige der defekten Daten im Universalregister speichern soll, wenn die Daten defekt sind.
- Beispiel 11 beinhaltet den Prozessor aus einem der Beispiele 1 bis 9, optional dahingehend, dass die Decodiereinheit den Speicherauslesebefehl decodieren soll, der wenigstens ein Bedingungscode-Bit als den architektonisch sichtbaren Datenspeicherort anzeigen soll, und optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, die Anzeige des wenigstens einen Bedingungscode-Bits speichern soll, wenn die Daten defekt sind.
- Beispiel 12 beinhaltet den Prozessor aus einem der Beispiele 1 bis 9, optional dahingehend, dass die Decodiereinheit den Speicherauslesebefehl decodieren soll, der den Zieldatenspeicherort anzeigen soll, der ein Zielspeicheroperand sein soll, und optional dahingehend, dass der Speicherauslesebefehl einen zweiten architektonisch sichtbaren Datenspeicherort anzeigen soll, der eine Datenmenge speichern soll, die vom Quellspeicheroperanden zum Zielspeicheroperanden gespeichert werden soll.
- Beispiel 13 beinhaltet den Prozessor aus Beispiel 12, optional dahingehend, dass die Ausführungseinheit, in Reaktion auf den Speicherauslesebefehl, eine aktualisierte Datenmenge an dem zweiten architektonisch sichtbaren Datenspeicherort speichern soll, wobei die aktualisierte Datenmenge anzeigen soll, wie viel der Datenmenge an dem Zieldatenspeicherort gespeichert worden ist, wenn die Daten, die defekt sind, gelesen wurden.
- Beispiel 14 beinhaltet den Prozessor aus einem der Beispiele 1 bis 9, optional dahingehend, dass die Decodiereinheit den Speicherauslesebefehl decodieren soll, der den Zieldatenspeicherort anzeigen soll, der ein Register des Prozessors sein soll.
- Beispiel 15 ist ein von einem Prozessor durchgeführtes Verfahren, welches das Empfangen eines Speicherauslesebefehls beinhaltet. Der Speicherauslesebefehl zeigt einen Quellspeicheroperanden und einen Zieldatenspeicherort an. Das Verfahren beinhaltet, in Reaktion auf den Speicherauslesebefehl, das Auslesen von Daten aus dem Quellspeicheroperanden. Das Verfahren beinhaltet, in Reaktion auf den Speicherauslesebefehl, das Speichern einer Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort, wenn die Daten defekt sind. Das Verfahren beinhaltet, in Reaktion auf den Speicherauslesebefehl, das Abschließen der Ausführung des Speicherauslesebefehls, ohne eine Ausnahmebedingung zu verursachen, wenn die Daten defekt sind.
- Beispiel 16 beinhaltet das Verfahren aus Beispiel 15, das ferner das Empfangen eines zweiten Speicherauslesebefehls, der denselben Opcode aufweist wie der Speicherauslesebefehl, und das Anzeigen eines zweiten Quellspeicheroperanden und eines zweiten Zieldatenspeicherorts beinhaltet. Das Verfahren beinhaltet außerdem, in Reaktion auf den zweiten Speicherauslesebefehl, das Auslesen von zweiten Daten aus dem zweiten Quellspeicheroperanden. Das Verfahren beinhaltet außerdem, in Reaktion auf den zweiten Speicherauslesebefehl, das Speichern der zweiten Daten an dem zweiten Zieldatenspeicherort, wenn die zweiten Daten nicht defekt sind. Das Verfahren beinhaltet außerdem, in Reaktion auf den zweiten Speicherauslesebefehl, das Speichern einer Anzeige, dass die zweiten Daten nicht defekt sind, an dem architektonisch sichtbaren Datenspeicherort, wenn die zweiten Daten nicht defekt sind.
- Beispiel 17 Beinhaltet das Verfahren aus Beispiel 15, das ferner, in Reaktion auf den Speicherauslesebefehl, vor dem Speichern der Anzeige der defekten Daten, das Bestimmen beinhaltet, ob die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden.
- Beispiel 18 beinhaltet das Verfahren aus Beispiel 17, das ferner das Bestimmen beinhaltet, dass die Anzeige der defekten Daten gespeichert wird, wenn die Daten defekt sind und wenn die Daten, die defekt sind, von dem Blockdatenspeicherort gelesen wurden, optional dahingehend, dass eine Bestimmung vorgenommen würde, um eine Ausnahmebedingung zu verursachen, falls die defekten Daten stattdessen nicht von dem Blockdatenspeicherort gelesen wurden.
- Beispiel 19 beinhaltet das Verfahren aus Beispiel 15, optional dahingehend, dass das Empfangen das Empfangen des Befehls beinhaltet, der den Zieldatenspeicherort anzeigt, bei dem es sich um einen Zielspeicheroperanden handelt, und einen zweiten architektonisch sichtbaren Datenspeicherort anzeigt, an dem eine Anzeige einer Datenmenge gespeichert ist, die vom Quellspeicheroperanden zum Zielspeicheroperanden gespeichert werden soll.
- Beispiel 20 beinhaltet das Verfahren aus Beispiel 15, optional dahingehend, dass das Auslesen das Lesen der Daten von einem Blockdatenspeicherort beinhaltet, welcher sich in einem physischen Speicheradressraum befindet, der von dem Speicherauslesebefehl adressierbar ist, und optional dahingehend, dass der Prozessor eine universelle zentrale Verarbeitungseinheit (Central Processing Unit, CPU) aufweist.
- Beispiel 21 beinhaltet das Verfahren aus Beispiel 15, das ferner privilegierte Systemsoftware beinhaltet, die eines von dem Ersetzen der Daten, die defekt sind, durch nicht defekte Daten und dem Reparieren der Daten, die defekt sind, so dass diese nicht mehr defekt sind, durchführt.
- Beispiel 22 ist ein System zum Verarbeiten von Befehlen, das eine Zwischenverbindung und einen Prozessor, der mit der Zwischenverbindung gekoppelt ist, aufweist. Der Prozessor soll einen Speicherauslesebefehl empfangen. Der Speicherauslesebefehl soll einen Quellspeicheroperanden und einen Zieldatenspeicherort anzeigen. Der Prozessor soll, in Reaktion auf den Speicherauslesebefehl, Daten aus dem Quellspeicheroperanden auslesen, eine Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort speichern, wenn die Daten defekt sind, und die Ausführung des Speicherauslesebefehls abschließen, ohne eine Ausnahmebedingung zu verursachen, wenn die Daten defekt sind. Das System weist außerdem einen dynamischen Direktzugriffsspeicher (Dynamic Random Access Memory, DRAM) auf, der mit der Zwischenverbindung gekoppelt ist. Der DRAM speichert einen Satz von Befehlen. Der Satz von Befehlen soll, wenn er vom System durchgeführt wird, das System veranlassen, auf die Anzeige der defekten Daten, die an dem architektonisch sichtbaren Datenspeicherort gespeichert ist, zuzugreifen und eines von dem Ersetzen der Daten, die defekt sind, durch nicht defekte Daten und dem Reparieren der Daten, die defekt sind, so dass diese nicht mehr defekt sind, durchführen.
- Beispiel 23 beinhaltet das System aus Beispiel 22, optional dahingehend, dass der Prozessor, in Reaktion auf den Speicherauslesebefehl, vor dem Speichern der Anzeige der defekten Daten bestimmen soll, ob die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden.
- Beispiel 24 ist ein Erzeugnis, das ein nicht-transitorisches maschinenlesbares Datenspeichermedium aufweist. Das nicht-transitorische maschinenlesbare Datenspeichermedium speichert mehrere Befehle, einschließlich eines Speicherauslesebefehls. Der Speicherauslesebefehl, falls er von einer Maschine ausgeführt wird, soll die Maschine veranlassen, in Reaktion auf den Speicherauslesebefehl Operationen durchzuführen, die das Auslesen von Daten aus einem Quellspeicheroperanden, der vom Speicherauslesebefehl anzuzeigen ist, beinhalten. Außerdem soll, in Reaktion auf den Speicherauslesebefehl, eine Anzeige defekter Daten an einem architektonisch sichtbaren Datenspeicherort gespeichert werden, wenn die Daten defekt sind, und, in Reaktion auf den Speicherauslesebefehl, die Ausführung des Speicherauslesebefehls abgeschlossen werden, ohne eine Ausnahmebedingung zu verursachen, wenn die Daten defekt sind.
- Beispiel 25 beinhaltet das Erzeugnis aus Beispiel 24, optional dahingehend, dass der Speicherauslesebefehl, falls er von der Maschine ausgeführt wird, die Maschine veranlassen soll, Operationen durchzuführen, die beinhalten, dass vor dem Speichern der Anzeige der defekten Daten bestimmt wird, ob die Daten, die defekt sind, von einem Blockdatenspeicherort gelesen wurden.