-
HINTERGRUND
-
Technisches Gebiet
-
Mehrere unterschiedliche Ausführungsformen beziehen sich auf Addierbefehle, Verfahren zur Ausführung der Anweisungen, Ausführungseinheiten, um die Anweisungen auszuführen oder Geräte, die solche Ausführungseinheiten aufnehmen. Insbesondere beziehen sich mehrere unterschiedliche Ausführungsformen auf Addierbefehle, um Dreiweg-Additionen mit Übertrag auszuführen, Verfahren, um die Anweisungen auszuführen, Ausführungseinheiten, um die Anweisungen auszuführen oder Geräte, die solche Ausführungseinheiten aufnehmen.
-
Information zum Stand der Technik
-
Addierbefehle sind im Allgemeinen in Befehlssatz-Architekturen (instruction set architectures; ISAs) enthalten. Die Addierbefehle ermöglichen Geräten, Daten zu addieren oder zu summieren.
-
Bekannte Addierbefehle umfassen den ADD-Addierbefehl, und den ADC-Addierbefehl mit Übertrag, die beide im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen beschrieben werden: Befehlssatz-Referenz, A-M, Bestellnummer: 253666-032US, September 2009, sowie in verschiedenen älteren Handbüchern.
-
Der ADD- und ADC-Befehl sind jeweils nur fähig zwei Operanden zu addieren. In bestimmten Fällen kann das Nachteile haben.
-
Aufgrund der Wichtigkeit, Daten schnell und effizient zu verarbeiten, waren neue und unterschiedliche Addierbefehle nützlich.
-
Seite 12 des Folien-Satzes von M. Shaaban: Computer Organization. EECC 550. Selected Chapter 5 „For More Practice” Exercices. 2006. URL: http://meseec.ce.rit.edu/eecc550-winter2005/550-chapter5-exercices.pdf offenbart eine Aufforderung die neue Instruktion „add3” zu dem „MIPS Multi Cycle Datapath of figure 5.28” zu ergänzen. Die Formulierung „Register $s0 gets the sum of $s1, $s2 and $s3” beschreibt, dass das Register $s0 die Summe aus $s1, $s2 und $s3 erhält.
-
Die Druckschrift von R. Subramanyan, Chapter 6: Operand Addressing and Instruction Representation. URL: http://www.eca.cs.purdue.edu/CS250/ir/lec/Chap6.pdf bildet das Skript einer Grundlagenvorlesung in der exemplarisch dokumentiert wird, welche Kompromisse der Fachmann bei der Wahl von Operanden in Kauf nehmen muss. So führen komplexe Formen von Operanden zu einer Vereinfachung der Programmierung und kleinere Befehle zu einer Beschränkung der Operanden, des Satzes der Operanden-Typen und der maximalen Größe der Operanden. Wenige Operanden ermöglichen es der Hardware schneller zu arbeiten, da ein schnelleres Abrufen der Operanden und Dekodieren ermöglicht wird.
-
Im Vorlesungsmanuskript von K. Gaj: Computer Arithmetic, Implementations in Hardware and Software (ECE 645), Lecture 6, George Mason University (USA), 2007. URL: http://teal.gmu.edu/courses/ECE645/viewgraphs_S07/lecture6_multiadd_2.pdf wird die mathematische Grundlage von ”Multioperand Addition” dargestellt. Daraus ergibt sich, dass für eine verlustfreie Addition von zwei Operanden entsprechend der Formel „# of bits of S = ... k + [log2 n]” ein zusätzliches Bit benötigt wird und für eine verlustfreie Darstellung einer Addition mit drei Operanden zwei zusätzliche Bits benötigt werden.
-
KURZE BESCHREIBUNG VON MEHREREN ANSICHTEN DER ZEICHNUNGEN
-
Am besten ist die Erfindung zu verstehen, wenn auf die folgende Beschreibung und die sie begleitenden Zeichnungen, die die Ausführungsformen der Erfindung veranschaulichen, Bezug genommen wird. In den Zeichnungen:
-
1 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens zur Verarbeitung einer Ausführungsform eines Addierbefehls.
-
2 ist ein Blockdiagramm einer beispielhaften Ausführungsform einer Befehlsverarbeitungsvorrichtung.
-
3 ist ein Blockdiagramm, das eine Ausführungsform einer Kombination eines Registers und einer Vielzahl von Flags zeigt, die verwendet werden können, um die Summe einer Ausführungsform eines Addierbefehls zu speichern.
-
4 zeigt verschiedene vorzeichenlose numerische Ganzzahl-Datentypen, die für verschiedene Ausführungsformen geeignet sind.
-
5 ist ein Blockdiagramm einer Ausführungsform von einer Ausführungseinheit, die auf eine Ausführungsform eines Addierbefehls mit Flags anspricht.
-
6 zeigt ein EFLAGS-Register, das eine beispielhafte Ausführungsform eines Flag-Registers mit einer Vielzahl von Flags repräsentiert.
-
7 zeigt eine beispielhafte Ausführungsform eines geeigneten 32-Bit-Allzweckregistersatzes.
-
8 zeigt eine beispielhafte Ausführungsform eines geeigneten 64-Bit-Allzweckregistersatzes.
-
9 zeigt eine Beschreibung einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert.
-
10 zeigt eine Operation in Pseudocode einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert.
-
11 zeigt eine Beschreibung einer ADOC3 Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert.
-
12 zeigt eine Operation in Pseudocode einer ADOC3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert.
-
13 zeigt eine Ausführungsform von einer als vier vorzeichenlose Quadword-Ganzzahlen gespeicherten vorzeichenlosen 256-Bit-Ganzzahl, die jeweils in einem von vier entsprechenden Registern gespeichert sind.
-
14 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl mit einer vorzeichenlosen 64-Bit-Ganzzahl und die Summierung der zugehörigen partiellen Produkte mit ADD/ADC-Befehlen.
-
15 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl mit einer vorzeichenlosen 64-Bit-Ganzzahl und die Summierung der zugehörigen partiellen Produkte mit ADD3/ADOC3-Befehlen gemäß einer Ausführungsform der Erfindung.
-
16 ist ein Blockdiagramm einer Ausführungsform eines Addierbefehls, die einen impliziten Quelloperanden aufweist, welcher derselbe wie ein impliziter Zieloperand eines ganzzahligen Multiplikationsbefehls ist.
-
17 ist ein Blockdiagramm einer ersten beispielhaften Ausführungsform eines geeigneten Computersystems.
-
18 ist ein Blockdiagramm einer zweiten beispielhaften Ausführungsform eines geeigneten Computersystems.
-
AUSFÜHRLICHE BESCHREIBUNG
-
In der folgenden Beschreibung werden zahlreiche spezifischen Details, wie beispielsweise Befehls-Implementierungsdetails, Datentypen, Registerarten, Registereinteilungen, Prozessorarten, Systemkonfigurationen und Ähnliches erläutert. Es ist jedoch offensichtlich, dass erfindungsgemäße Ausführungsformen auch ohne diese spezifischen Details realisierbar sind. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht in den Hintergrund rücken zu lassen.
-
Ausführungsformen betreffen neue und nützliche Addierbefehle, die drei Operanden zusammenaddieren können. Weitere Ausführungsformen betreffen Ausführungseinheiten, um die Addierbefehle auszuführen. Noch weitere Ausführungsformen betreffen allgemeine Prozessoren, Spezialprozessoren, Controller oder andere Logikeinheiten oder Befehlsverarbeitungsvorrichtungen, die solche Ausführungseinheiten aufweisen oder fähig sind solche Befehle auszuführen. Weitere Ausführungsformen betreffen Addierbefehle gespeichert auf einer Disk, in einem Speicher oder einem anderen körperlichen maschinenlesbaren Medium.
-
1 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens 100 zur Verarbeitung einer Ausführungsform eines Addierbefehls. Bei verschiedenen Ausführungsformen kann das Verfahren durch einen allgemeinen Prozessor, einen Spezialprozessor (z. B. einen Grafikprozessor oder einen Digitalsignal-Prozessor), einen Hardwarebeschleuniger (z. B. einen kryptografischen Beschleuniger), oder eine andere Art von Logikeinheit oder Befehlsverarbeitungsvorrichtung ausgeführt werden.
-
Ein Addierbefehl kann beim Prozessor oder einer anderen Befehlsverarbeitungsvorrichtung bei Block 102 empfangen werden. Der Addierbefehl kann einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigen.
-
Dann kann eine Summe des ersten, zweiten und dritten Quelloperanden als ein Resultat des Addierbefehls bei Block 104 gespeichert werden. Bei einer oder mehreren Ausführungsformen kann die Summe teilweise in einem Zieloperanden, der durch den Addierbefehl angezeigt wird, und teilweise in einer Vielzahl von Flags gespeichert werden. Bei einer oder mehreren Ausführungsformen kann die Summe, die gespeichert wird, eine Summe des ersten, zweiten und dritten Quelloperanden umfassen, die zu einer arithmetischen Kombination der Flags addiert wird.
-
2 ist ein Blockdiagramm einer beispielhaften Ausführungsform einer Befehlsverarbeitungsvorrichtung 210. Bei einer oder mehreren Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein allgemeiner Prozessor sein. Der Prozessor kann irgendeiner von mehreren Complex Instruction Set Computing-(CISC)-Prozessoren, Reduced Instruction Set Computing-(RISC)-Prozessoren, Very Long Instruction Word-(VLIW)-Prozessoren, mehreren Hybriden davon oder eine vollständig andere Art von Prozessor sein. Bei einer oder mehreren Ausführungsformen kann der Prozessor ein Allzweckprozessor von der Art sein, die von der Intel Corporation, Santa Clara, Kalifornien, gefertigt wird, obwohl das nicht erforderlich ist. Spezifische Beispiele der bei Intel Corporation verfügbaren Allzweckprozessoren umfassen, sind aber nicht beschränkt auf, Intel® CoreTM i7 processor Extreme Edition, Intel® CoreTM i7 processor, Intel® CoreTM i5 processor, Intel® CoreTM2 Extreme processor, Intel® CoreTM2 Quad processor, Intel® CoreTM2 Duo processor, Intel® Pentium® processor, and Intel® Celeron® processor.
-
Alternativ kann die Befehlsverarbeitungsvorrichtung ein Spezialprozessor sein. Repräsentative Beispiele für geeignete Spezialprozessoren, umfassen, sind aber nicht beschränkt auf, Netzwerkprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Grafikprozessoren, Koprozessoren, eingebettete Prozessoren und Digitalsignal-Prozessoren (DSPs), um nur einige Beispiele zu nennen. Diese Prozessoren können ebenfalls auf CISC, RISC, VLIW, Hybriden davon oder vollständig auf anderen Arten von Prozessoren beruhen.
-
Bei noch weiteren Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein Controller (z. B. ein Mikrokontroller) oder eine andere Art von logischer Schaltung sein, die Anweisungen verarbeiten kann.
-
Unter erneuter Bezugnahme auf 2 kann die Befehlsverarbeitungsvorrichtung während der Verwendung eine Ausführungsform eines Addierbefehls 212 empfangen. Beispielsweise kann der Addierbefehl von einem Speicher oder von der Software empfangen werden. Bei einer oder mehreren Ausführungsformen kann der Addierbefehl einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigen. Der Addierbefehl kann anzeigen, dass die drei Quelloperanden summiert werden sollen und die Summe in einem durch den Addierbefehl angezeigten Zieloperanden zu speichern ist. Der Addierbefehl kann implizit die Quelle und den Zieloperanden anzeigen und/oder explizit angeben. Zum Beispiel kann der Addierbefehl ein oder mehrere dedizierte technische Gebiete oder Sätze von Bits aufweisen, um explizit ein Register, Speicher oder einen anderen Speicherort anzugeben, der ein oder mehreren Operanden entspricht.
-
Der Addierbefehl kann einen Maschinenbefehl oder ein Steuersignal repräsentieren, welche durch die Befehlsverarbeitungsvorrichtung erkannt werden. Die Befehlsverarbeitungsvorrichtung kann spezifische oder bestimmte Schaltung oder andere Logik aufweisen (z. B. Software kombiniert mit Hardware und/oder Firmware), die betriebsfähig ist, eine Additionsoperation von drei Quelloperanden als Antwort auf den Addierbefehl und/oder wie durch diesen angegeben auszuführen und eine Summe im Ziel als Antwort auf oder infolge des Addierbefehls zu speichern.
-
Die gezeigte Ausführungsform der Befehlsverarbeitungsvorrichtung umfasst einen Befehlsdecoder 214. Der Decoder kann den Addierbefehl 212 empfangen und decodieren. Der Decoder kann ein oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Anweisungen oder andere Steuersignale, die den Originaladdierbefehl widerspiegeln oder von ihm abgeleitet sind, generieren und ausgeben. Der Decoder kann unter Verwendung mehrerer unterschiedlicher Mechanismen implementiert sein. Beispiele von geeigneten Mechanismen umfassen, sind aber nicht beschränkt auf, Mikrocode Read Only Memories (ROM), Nachschlagtabellen, Hardwareimplementierungen, programmierbare Logik-Arrays (PLAs) u. ä.
-
Der Decoder ist keine erforderliche Komponente der Vorrichtung. Bei einer oder mehreren anderen Ausführungsformen kann die Vorrichtung stattdessen einen Anweisungsemulator, einen Anweisungsübersetzer, einen Anweisungsumwandler, einen Anweisungsinterpreter oder andere Anweisungsumwandlungslogik aufweisen. Mehrere unterschiedliche Arten von Anweisungsemulatoren, Anweisungsumwandlern, Anweisungsübersetzern u. ä. sind in der Technik bekannt. Die Anweisungsumwandlungslogik kann den Addierbefehl empfangen, emulieren, übersetzen, umwandeln, interpretieren oder anderweitig den Addierbefehl konvertieren und ein oder mehrere Anweisungen oder Steuersignale, die dem Originaladdierbefehl entsprechen, ausgeben. Die Anweisungsumwandlungslogik kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. In einigen Fällen kann sich einige oder die gesamte Anweisungsumwandlungslogik außerhalb der Chiplage getrennt vom Rest der Befehlsverarbeitungsvorrichtung, wie beispielsweise in einer separaten Chiplage oder in einem Systemspeicher befinden. In einigen Fällen kann die Befehlsverarbeitungsvorrichtung sowohl den Decoder als auch die Anweisungsumwandlungslogik aufweisen.
-
Unter erneuter Bezugnahme auf 2 umfasst die Befehlsverarbeitungsvorrichtung eine Ausführungseinheit 216. Beispielsweise kann die Ausführungseinheit eine Arithmetikeinheit, ein Rechenwerk oder Ähnliches umfassen. Die Ausführungseinheit umfasst eine Additionseinheit 218, die eine Addition, wie beispielsweise eine vorzeichenbehaftete und vorzeichenlose Ganzzahladdition ausführen kann.
-
In der gezeigten Ausführungsform ist die Ausführungseinheit mit einem Ausgang des Decoders gekoppelt oder anderweitig in Kommunikation damit. Der Begriff „gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem elektrischem Kontakt sind oder in direkter elektrischer Verbindung stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, trotzdem aber miteinander arbeiten oder interagieren (z. B. durch eine dazwischen befindliche Komponente). Als ein Beispiel können der Decoder und die Ausführungseinheit miteinander durch einen dazwischen befindlichen optionalen Puffer und/oder durch eine oder mehrere andere in der Technik bekannte Komponenten gekoppelt sein, die möglicherweise zwischen einen Decoder und eine Ausführungseinheit gekoppelt sind. Infolge des Decoders, der die Addierbefehle decodiert, kann die Ausführungseinheit ein oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Anweisungen oder andere Steuersignale empfangen, welche den Addierbefehl widerspiegeln oder von ihm abgeleitet sind. Alternativ kann die Ausführungseinheit Anweisungen oder Steuersignale von der oben genannten Anweisungsumwandlungslogik empfangen und ausführen.
-
Infolge des Addierbefehls kann der Decoder oder ein anderer Teil der Vorrichtung auf die drei durch den Addierbefehl angezeigten Quelloperanden zugreifen. Die Quelloperanden können in Registern, in Speicher oder anderen Speicherorten gespeichert sein. Bei der gezeigten Ausführungsform werden ein erster Quelloperand (SRC1), ein zweiter Quelloperand (SRC2) und ein dritter Quelloperand (SRC3) zusammen in Registern eines Registersatzes 220 gespeichert, obwohl das nicht erforderlich ist.
-
Der Registersatz 220 kann zusammen mit potenziell anderen Registern (z. B. Steuerregister, Statusregister, Flagregister, usw.) Teil einer Registerdatei sein. Jedes Register kann ein Speicherort oder Gerät sein, das verwendet werden kann, um Daten zu speichern. Mehrere unterschiedliche Arten von Registern sind geeignet, solange sie wie hier beschrieben zum Speichern und Bereitstellen von Daten fähig sind. Die Register können mit einem neuen Namen versehen sein oder nicht. Beispiele von geeigneten Registern, umfassen sind aber nicht beschränkt auf dedizierte physische Register, dynamisch zugewiesene physische Register, die Registerumbenennung verwenden, Kombinationen von dedizierten und dynamisch zugewiesenen physischen Registern usw. Der Registersatz kann sich oftmals physisch auf der Chiplage mit der Ausführungseinheit befinden. Die Register können von außerhalb des Prozessors oder von einer Perspektive des Programmierers sichtbar sein. Zum Beispiel können Anweisungen Operanden, die in den Registern gespeichert sind, angeben.
-
Die Ausführungseinheit kann Schaltung oder andere Ausführungslogik (z. B. mehrere Kombinationen von Software und/oder Hardware und/oder Firmware) umfassen, die betriebsfähig ist, den Addierbefehl auszuführen (z. B. ein oder mehrere Anweisungen oder andere Steuersignale abgeleitet vom Addierbefehl). Bei einer oder mehreren Ausführungsformen kann die Ausführungseinheit infolge des Addierbefehls 212 betriebsfähig sein, einen ersten Quelloperanden (SRC1), einen zweiten Quelloperanden (SRC2) und einen dritten Quelloperanden (SRC3) anzuzeigen, um eine Summe des ersten, zweiten und dritten Quelloperanden infolge des Addierbefehls teilweise in einem Zieloperanden (DEST) angezeigt durch den Addierbefehl zu speichern. Wie gezeigt, kann der Zieloperand (DEST) ein Register sein. Alternativ kann der Zieloperand eine Stelle im Speicher oder einem anderen Speicherort sein. In der Darstellung entspricht der Zieloperand einem separaten Register von für die Quelloperanden verwendeten Register. Alternativ kann ein für einen Quelloperanden verwendetes Register ebenfalls für den Zieloperanden verwendet werden. Zum Beispiel kann der Zieloperand den Quelloperanden überschreiben.
-
Bei einer oder mehreren Ausführungsformen kann die Summe zusätzlich dazu, teilweise im Zieloperanden (DEST) gespeichert zu sein, ebenfalls teilweise in einer Vielzahl von Flags, wie beispielsweise einem ersten Flag 222 und einem zweiten Flag 224 gespeichert sein. Wie gezeigt können die Flags in einem Register 226, wie beispielsweise einem Statusregister, einem Flag-Register oder einem Bedingungscoderegister gespeichert sein, obwohl das nicht erforderlich ist.
-
Prozessoren und mehrere andere Arten von Logikeinheiten haben häufig Flags. Zum Beispiel können die Flags jeweils ein oder mehrere Bits umfassen und jedes Bit kann einen binären Wert von Eins oder Null haben. Diese unterschiedlichen Werte der Flags können zugeordnete oder vorausgesetzte Bedeutungen für den Prozessor oder eine andere Logikeinheit haben. Die Flags werden für mehrere unterschiedliche Zwecke verwendet. In einigen Fällen werden die Flags verwendet, um einen Status, Zustand, eine Bedingung oder ein Ergebnis von Operationen aufzuzeichnen.
-
Bei einer oder mehreren Ausführungsformen kann das erste Flag 222 ein Carry-Flag sein und das Carry-Flag 222 kann verwendet werden, um ein Teil der Summe zu speichern. Ein Carry-Flag ist eine bekannte Art des architektonischen Flags oder Statusflags, die gewöhnlich bei Prozessoren und anderen Logikeinheiten angetroffen werden. Das Carry-Flag kann verwendet werden, um anzuzeigen, ob es einen Überlauf bei einer arithmetischen Operation gibt oder nicht. Zum Beispiel kann das Carry-Flag ein einzelnes Bit sein, das einen ersten Wert haben kann (z. B. ein binärer Wert 1), wenn es einen Überlauf während einer vorherigen Operation gibt, wie beispielsweise ein Übertrag oder negativer Übertrag aus dem höchstwertigen Bit des Ergebnisses in einer arithmetischen Operation, oder das Carry-Flag kann andernfalls einen zweiten Wert haben (z. B. einen binären Wert 0), wenn es keinen solchen Überlauf gibt. Das Carry-Flag kann verwendet werden, um anzuzeigen, dass eine arithmetische Operation ein Ergebnis generiert hat, das in der Größenordnung größer ist, als es die Anzahl an Bits in einem gegebenen Register oder Speicherort repräsentieren kann. Das Carry-Flag kann in arithmetischen Operationen, wie beispielsweise Addition und Subtraktion verwendet werden.
-
Um weiter zu zeigen, wie ein Carry-Flag bei der Addition verwendet werden kann, betrachten wir ein Beispiel, in dem die Zahlen 255 und 255 unter Verwendung vorzeichenloser 8-Bit-Ganzzahlen zusammenaddiert werden. Der Wert von 255 plus 255 ist 510. Die Zahl 510 wird in binär als „1 1111 1110” dargestellt. Es ist jedoch zu beachten, dass „1 1111 1110” 9 Bits statt nur 8 Bits hat. Mit anderen Worten erfordert das binäre Darstellen der Zahl 510 9 Bits statt nur 8 Bits. Die acht niedrigstwertigen Bits „1111 1110” sind die Binärdarstellung für die Zahl 254. Da die Summe von 255 plus 255 einen „Übertrag” aus dem höchstwertigen achten Bit in das neunte Bit generiert, kann das Carry-Flag auf einen Wert 1 gesetzt werden. Das Setzen des Carry-Flags auf einen Wert 1 kann der Maschine anzeigen, dass das Ergebnis in einer vorzeichenlosen 8-Bit-Interpretation nicht richtig ist, und/oder es kann anzeigen, dass das korrekte Ergebnis die 9-Bit-Verknüpfung des 1-Bit-Carry-Flags mit dem 8-Bit-Ergebnis ist. Das Carry-Flag kann (z. B. als ein Übertrag in) für eine nachfolgende arithmetische Operation, wie beispielsweise Addition oder und Subtraktion verwendet werden.
-
Bei einer oder mehreren Ausführungsformen kann das erste Flag 222 das Carry-Flag sein und das zweite Flag 224 kann ein architektonisches Flag sein, das ungefähr analog zur Art verwendet werden kann, wie das Carry-Flag 222 verwendet wird. Das architektonische Flag 224 kann verwendet werden, um anzuzeigen, ob es einen Überlauf bei arithmetischen Operationen gibt oder nicht. Zum Beispiel kann das architektonische Flag 224 ein einzelnes Bit sein, das einen ersten Wert haben kann (z. B. einen binären Wert 1), wenn es einen Überlauf aus dem Carry-Flag 222 während einer vorherigen Operation gibt, oder das architektonische Flag 224 kann andernfalls einen zweiten Wert haben (z. B. ein binärer Wert 0), wenn es keinen solchen Überlauf aus dem Carry-Flag 222 gibt. Das architektonische Flag 224 kann verwendet werden, um anzuzeigen, dass eine arithmetische Operation ein Ergebnis generiert hat, das in der Größenordnung größer ist als es die Zahl von Bits in einem gegebenen Register oder Speicherort plus dem ersten Flag (z. B. das Carry-Flag) repräsentieren kann. Das erste Flag (z. B. das Carry-Flag) 222 und das zweite oder zusätzliche architektonische Flag 224 können jeweils mindestens ein Zusatzbit bereitstellen, das verwendet werden kann, um die Summe des Addierbefehls zu speichern.
-
Bei einer oder mehreren Ausführungsformen kann das zweite oder zusätzliche architektonische Flag 224 ein Überlauf-Flag sein. Ein Überlauf-Flag ist eine weitere bekannte Art des architektonischen Flags oder Statusflags, die gewöhnlich in Prozessoren und anderen Logikeinheiten angetroffen werden. Jedoch werden Überlauf-Flags nicht konventionell in der Art verwendet, wie das zweite oder zusätzliche architektonische Flag 224 wie oben beschrieben verwendet wird. Im Fall von ADD- und ADC-Anweisungen wird das Überlauf-Flag momentan definiert, um einen Überlauf für vorzeichenbehaftete ganze Zahlen zu erkennen. Jedoch wird das Überlauf-Flag nicht in Kombination mit einem anderen Flag konventionell verwendet, um den Teil einer Summe zu speichern. Außerdem wird das Überlauf-Flag in Kombination mit einem anderen Flag nicht konventionell verwendet, um vielfache Überträge bereitzustellen. Außerdem wird das Überlauf-Flag nicht konventionell als eine Erweiterung einer Breite von vorzeichenlosen Operanden verwendet.
-
Demgemäß ist die Verwendung des Überlauf-Flags, wie oben beschrieben, eine Zweckneubestimmung des Carry-Flags. Alternativ kann bei einer oder mehreren anderen Ausführungsformen ein anderes bestehendes architektonisches Flag im Zweck neu bestimmt werden. Bei einer bestehenden Architektur kann eine solche Zweckneubestimmung eines bestehenden architektonischen Flags dazu tendieren, eine geringere Veränderung für die gesamte Architektur und Dokumentation darzustellen, als wenn man ein vollständig neues oder dediziertes Flag einführt. Alternativ können bei einer oder mehreren Ausführungsformen, ein oder mehrere neue oder dedizierte Flags für das erste und/oder zweite Flag eingeführt werden, die für die hier beschriebenen Zwecke zu verwenden sind.
-
Um das Verschleiern der Beschreibung zu vermeiden, ist eine relativ einfache Befehlsverarbeitungsvorrichtung gezeigt und beschrieben worden. Es ist jedoch selbstverständlich, dass andere Ausführungsformen eine Vielzahl von Ausführungseinheiten haben können. Zum Beispiel kann die Vorrichtung vielfache unterschiedliche Arten von Ausführungseinheiten, wie beispielsweise Arithmetikeinheiten, Rechenwerke (ALUs), Ganzzahl-Einheiten usw. umfassen. Mindestens eine von diesen Einheiten kann auf eine Ausführungsform des Addierbefehls wie hier offenbart ansprechen. Noch weitere Ausführungsformen können Mehrkerne, logische Prozessoren oder Ausführungsengines aufweisen. Eine Ausführungseinheit, die betriebsfähig ist, einen Addierbefehl auszuführen, kann wie hier offenbart innerhalb in mindestens einem, mindestens zwei, den meisten oder allen Kernen, logischen Prozessoren oder Ausführungsengines enthalten sein.
-
Die Befehlsverarbeitungsvorrichtung kann ebenfalls optional ein oder mehrere andere bekannte Komponenten umfassen. Zum Beispiel können andere Ausführungsformen optional Befehlsabruflogik, Vordekodierlogik, Dispositionslogik, Neuordnungspuffer, Verzweigungsvorhersagelogik, Rückordnungslogik, Registerumbenennungslogik und Ähnliches oder eine Kombination davon umfassen. Diese Komponenten können konventionell oder mit geringen Anpassungen implementiert werden, die für fachkundige Personen aufgrund der vorliegenden Offenbarung offensichtlich wären. Eine weitere Beschreibung dieser Komponenten wird nicht benötigt, um die Ausführungsformen hierin zu verstehen, obwohl eine weitere Beschreibung, wenn gewünscht, im öffentlichen Schrifttum ohne Weiteres verfügbar ist. Es gibt buchstäblich zahlreiche unterschiedliche Kombinationen und Konfigurationen solcher in der Technik bekannten Komponenten. Der Umfang der Erfindung ist auf keine solche bekannte Kombination oder Konfiguration begrenzt. Ausführungsformen können entweder mit oder ohne solche zusätzlichen Komponenten implementiert sein.
-
3 ist ein Blockdiagramm, das eine Ausführungsform einer Kombination eines Registers 330 und einer Vielzahl von Flags 322, 324 zeigt, die verwendet werden können, um die Summe einer Ausführungsform eines Addierbefehls zu speichern. Ein Register hat Bits [N:0]. Das Register kann verwendet werden, um ein Teil der Summe zu speichern. Einige repräsentative Bits der Summe sind im Register gespeichert gezeigt.
-
Ein erstes Flag 322 hat ein Zusatzbit [N + 1]. Ähnlich hat ein zweites Flag 324 ein Zusatzbit [N + 2]. Die zwei Bits der Flags stellen zwei Zusatzbits bereit, um einen anderen Teil der Summe zu speichern. Die zwei Bits der Flags [N + 2:N + 1] können ausgewertet oder von der Maschine als eine Verknüpfung von Bits des Registers [N:0] verstanden werden, das eine vollständige Summe bereitstellt. Das Bit [N + 2] speichert ein höchstwertiges Bit (MSB) der Summe. Das Bit [N + 1] speichert ein nächsthöchstwertiges Bit (MSB) der Summe.
-
Als ein konkretes Beispiel kann das Register Bits [31:0] haben, um einen Teil der Summe zu speichern, wobei das erste Flag 322 ein Zusatzbit [32] und das zweite Flag 324 ebenfalls ein Zusatzbit [33] aufweisen kann, die gemeinsam verwendet werden können, um einen Teil der Summe zu speichern. Als ein anderes konkretes Beispiel kann das Register Bits [63:0] haben, um einen Teil der Summe zu speichern, und die ersten und zweiten Flags können zwei Zusatzbits [65:64] haben, um einen Teil der Summe zu speichern.
-
Vorteilhafterweise können diese durch die ersten und zweiten Flags bereitgestellten Zusatzbits einer größeren Summe ermöglichen, gespeichert zu werden. Wenn man drei Zahlen addiert, kann in einigen Fällen ein Zusatzbit des Übertrags benötigt werden. Wenn man drei Quelloperanden abhängig von den Werten der Operanden addiert, können diese Zusatzbits verwendet und/oder benötigt werden, um die resultierende Summe zu speichern. Betrachten wir ein Beispiel für Operanden in 64-Bit-Registern. Da der größte vorzeichenlose Wert der 3 Register (264 – 1) sein kann, kann die resultierende Zwischensumme höchstens 3·264 sein, wenn OF:CF = 1:1. Dieser Wert ist kleiner als (266 – 1). Demgemäß sind zwei Zusatzbits, die durch Flags zusätzlich zu den durch das Register bereitgestellten 64 Bits bereitgestellt werden, ausreichend, um die höchstwertigen Bits einer Summe von irgendwelchen in drei entsprechenden 64-Bit-Registern gespeicherten drei Werten darzustellen. Der größte Wert, der durch den Addierbefehl, welcher die drei Quelloperanden summiert, generiert wird, verursacht keinen Überlauf. Ähnlich sind die zwei Zusatzbits, die durch Flags zusätzlich zu einem 32-Bit-Register bereitgestellt werden, ausreichend, um die höchstwertigen Bits einer Summe von irgendwelchen in drei entsprechenden 32-Bit-Registern gespeicherten drei Werten darzustellen.
-
Bei einer oder mehreren Ausführungsformen kann der Addierbefehl ganze Zahlen addieren. Bei einer oder mehreren Ausführungsformen können die ganzen Zahlen vorzeichenlose Ganzzahlen sein. Alternativ können bei einer oder mehreren Ausführungsformen die ganzen Zahlen vorzeichenbehaftete ganze Zahlen sein. Um bestimmte Konzepte zu zeigen, tendiert die vorliegende Offenbarung dazu, die Multiplikation von vorzeichenlosen Ganzzahlen zu betonen, obwohl der Umfang der Erfindung nicht derart begrenzt ist.
-
4 zeigt verschiedene vorzeichenlose numerische Ganzzahl-Datentypen, die für verschiedene Ausführungsformen geeignet sind. Eine erste Art ist eine „vorzeichenlose Wort-Ganzzahl”. Die vorzeichenlose Wort-Ganzzahl hat 16 Bits. Eine zweite Art ist eine vorzeichenlose Doppelwort-Ganzzahl. Die vorzeichenlose Doppelwort-Ganzzahl hat 32 Bits. Eine dritte Art ist eine vorzeichenlose Quadword-Ganzzahl. Die vorzeichenlose Quadword-Ganzzahl hat 64 Bits. Dies sind nur einige veranschaulichenden Beispiele. Andere Größen von vorzeichenlosen Ganzzahlen, wie beispielsweise Byte oder Arten breiter als 64-Bit (z. B. 128-Bit-Arten) sind ebenfalls geeignet. Des Weiteren sind analoge Arten der vorzeichenbehafteten Ganzzahl ebenfalls geeignet.
-
Ein Addierbefehl kann gemäß einer oder mehreren Ausführungsformen ein Addierbefehl mit Flags sein, der betriebsfähig ist, eine Ausführungseinheit und/oder einen Prozessor (oder eine andere Befehlsverarbeitungsvorrichtung) zu veranlassen, eine Summe zu generieren, die teilweise basierend auf einer Vielzahl von Flags berechnet wird. Bei einer oder mehreren Ausführungsformen kann die Summe, die teilweise basierend auf der Mehrheit von Flagsberechnet wird, eine Summe von drei Quelloperanden, die zu einer arithmetischen Kombination der Mehrheit von Flags addiert sind, umfassen.
-
5 ist ein Blockdiagramm einer Ausführungsform von einer Ausführungseinheit 516, die auf eine Ausführungsform eines Addierbefehls mit Flags 513 antwortet. Der Addierbefehl mit Flags zeigt einen ersten Quelloperanden (SRC1), einen zweiten Quelloperanden (SRC2), einen dritten Quelloperand (SRC3), ein erstes Flag (F1) als einen Quelloperanden und ein zweites Flag (F2) als einen Quelloperanden an. Die Anweisung kann die ersten und zweiten Flags als implizite oder vorausgesetzte Quelloperanden anzeigen.
-
Als Antwort auf den Addierbefehl mit Flags kann die Ausführungseinheit SRC1, SRC2, SRC3, F1 und F2 empfangen. Bei einer oder mehreren Ausführungsformen kann die Ausführungseinheit infolge des Addierbefehls mit Flags betriebsfähig sein, eine Summe von SRC1, SRC2 und SRC3 zu speichern, die teilweise basierend auf den Flags F1 und F2 in einem Zieloperanden (DEST) angezeigt durch den Addierbefehl mit Flags berechnet ist. Wie bei einer oder mehreren Ausführungsformen gezeigt, kann die Summe berechnet werden als: DEST = SRC1 + SRC2 + SCR3 + F1 + 2·F2
-
In dieser Summe repräsentiert der Ausdruck „F1 + 2·F2” eine arithmetische Kombination der Flags F1 und F2. Das zweite Flag (F2) hat einen Multiplikator von zwei.
-
6 zeigt ein EFLAGS-Register 626, das eine beispielhafte Ausführungsform eines Flag-Registers mit einer Vielzahl von Flags repräsentiert. Das EFLAGS-Register ist ein 32-Bit-Register, das eine Gruppe von Statusflags, ein Steuerungsflag und eine Gruppe von Systemflags umfasst.
-
Die Statusflags umfassen ein Carry-Flag (CF, Bit 0), ein Paritätsflag (PF, Bit 2), ein Hilfsübertragsflag (AF, Bit 4), ein Nullflag (ZF, Bit 6), ein Vorzeichenflag (SF, Bit 7) und ein Überlauf-Flag (OF, Bit 11). Wie zuvor bei einer oder mehreren Ausführungsformen erwähnt, können das Carry-Flag (CF, Bit 0) und das Überlauf-Flag (OF, Bit 11) als die ersten und zweiten Flags 222, 224 verbunden mit den hier offenbarten Addierbefehlen verwendet werden. CF und OF werden aus diesem Grund betont, obwohl die Verwendung von diesen bestimmten Flags nicht erforderlich ist.
-
Die Systemflags umfassen ein Trap-Flag (TF, Bit 8), ein Unterbrechungsfreigabe-Flag (IF, Bit 9), ein I/O privilegierter Level (IOPL, Bits 12–13), eine verschachtelte Task (NT, Bit 14), ein Zusammenfassungsflag (RF, Bit 16), ein Virtual-8086-Modus (VM, Bit 17), eine Anordnungsprüfung (AC, Bit 18), ein virtuelles Interruptflag (VIF, Bit 19), ein virtueller Interrupt ausstehend (VIP, Bit 20) und ein ID-Flag (ID, Bit 21). Das Steuerungsflag umfasst ein Richtungsflag (DF, Bit 10). Die Bits 22–31 von EFLAGS sind reserviert.
-
Das EFLAGS-Register ist der Nachfolger eines früheren 16-Bit-FLAG-Registers. Zusätzlich wurde das EFLAGS-Register bei 64-Bit-Modus-Prozessoren durch ein RFLAGS-Register ersetzt und auf 64-Bit erweitert. Die unteren 32 Bits von RFLAGS sind dieselben wie EFLAGS.
-
Das EFLAGS-Register ist eine bestimmte beispielhafte Ausführungsform eines Registers mit geeigneten Flags, um ein oder mehrere Ausführungsformen zu implementieren, obwohl dieses bestimmte Register und diese bestimmten Flags sicherlich nicht erforderlich sind. Eine zusätzliche Beschreibung der EFLAGS/RFLAGS-Register und des Carry-Flags ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 1 der Intel® 64- und IA-32-Architekturen verfügbar: Grundarchitektur, Bestellnummer: 253665-032US, September 2009.
-
Bei einer oder mehreren Ausführungsformen kann ein Addierbefehl ein oder mehrere Quelloperanden und/oder ein oder mehrere Zieloperanden in einem Allzweckregister-Satz anzeigen. Bei einer oder mehreren Ausführungsformen können diese Allzweckregister verwendet werden, um ganze Zahlen zu speichern.
-
7 zeigt eine beispielhafte Ausführungsform eines geeigneten 32-Bit-Allzweckregistersatzes 740. Der 32-Bit-Registersatz umfasst acht 32-Bit- oder Doppelwort-Allzweckregister. Diese Register sind als EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP bezeichnet. Diese 32-Bit-Register sind ebenfalls in 16-Bit- und 8-Bit-Modi adressierbar. Die unteren 16 Bits der Register EAX, EBX, ECX, und EDX sind entsprechend als AX, BX, CX und DX bezeichnet. Beispielsweise können vorzeichenlose Wort-Ganzzahlen mit 16 Bits entsprechend in den Registern BX, CX und DX gespeichert werden. Vorzeichenlose Doppelwort-Ganzzahlen mit 32 Bits können in den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, R8D–R15D gespeichert werden.
-
8 zeigt eine beispielhafte Ausführungsform eines geeigneten 64-Bit-Allzweckregistersatzes 850. Der 64-Bit-Registersatz umfasst sechzehn 64-Bit- oder Quadword-Allzweckregister. Diese Register sind als RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14 und R15 bezeichnet. Diese Register sind im 32-Bit-Modus bei 32-Bit-Operanden betriebsfähig und im 64-Bit-Modus bei 64-Bit-Operanden betriebsfähig. Die unteren 32 Bits der Register RAX, RBX, RCX, RDX, RSI, RDI, RBP und RSP entsprechen den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP. Die unteren 32 Bits der Register R8–R15 sind ebenfalls im 32-Bit-Modus adressierbar und sind als R8D–R15D bezeichnet. Beispielsweise können vorzeichenlose Quadword-Ganzzahlen mit 64 Bits in den Registern RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP oder R8–R15 gespeichert werden.
-
Diese Allzweckregister sind in mehreren x86-Architektur-Prozessoren verfügbar und geeignet, ein oder mehrere Ausführungsformen zu implementieren, obwohl diese bestimmten Register sicherlich nicht erforderlich sind. Eine zusätzliche Beschreibung der Allzweckregister ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 1 der Intel® 64- und IA-32-Architekturen verfügbar: Grundarchitektur, Bestellnummer: 253665-032US, September 2009.
-
Ein Addierbefehl ist gemäß einer bestimmten beispielhaften Ausführungsform ein ADD3-Befehl zur Addition einer vorzeichenlosen Ganzzahl von drei Operanden Die ADD3-Anweisung kann standardisierten 3-Byte x86 Befehlscode aufweisen, der optional ein REX-Präfix haben kann, um mehr Register und einen breiteren Datenraum zu adressieren.
-
Der ADD3-Befehl ist ein Drei-Operanden-Befehl, wobei zwei der Operanden explizite Operanden sind und der andere Operand ein impliziter Operand ist. Der Befehlsoperand, der den ADD3-Befehl codiert, ist in Tabelle 1 gezeigt. Tabelle 1. ADD3-Operandenkodierung
Operand1 | Operand2 | Operand3 | Operand4 |
ModRM: reg (R, W) | ModRM: r/m (R) | Implizierte EAX/RAX (R) | n/z |
-
Operand1 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (Reg) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern für den 64-Bit-Modus-Befehl sein. Lesen (R) und Schreiben (W) sind für Operand1 zugelassen.
-
Operand2 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (r) oder in Speicher (m) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern (r) oder in Speicher (m) für den 64-Bit-Modus-Befehl sein. Lesen (R) ist für Operand2 zugelassen.
-
Operand3 ist implizit als das EAX-32-Bit-Allzweckregister für den 32-Bit-Modus-Befehl oder als das RAX-64-Bit-Allzweckregister für den 64-Bit-Modus-Befehl identifiziert. Der Operand3 wird als ein implizierter oder impliziter Quelloperand verwendet. Die EAX/RAX-Register sind auch ein implizit identifizierter Zieloperand für die MULX-Anweisung, die hier an anderer Stelle beschrieben wird. Lesen (R) ist für Operand3 zugelassen. Operand4 ist für die ADD3-Anweisung nicht verfügbar.
-
9 zeigt eine Beschreibung einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert. Eine 16-Bit-Operand-Größe ist gegenwärtig für die ADD3-Anweisung nicht codierbar. ADD3 definiert das Carry-Flag (CF) und Überlauf-Flag (OF) anders als der ADD-Befehl im Softwareentwickler-Handbuch, Band-2A der Intel 64- und IA-32- Architekturen. CF, OF, SF, ZF und PF werden basierend auf dem Ergebnis gesetzt. Das SF-Flag wird gesetzt, wenn das höchstwertige Bit (z. B. Bit [63] im 64-Bit-Modus oder Bit [31] im 32-Bit-Modus) des Ergebnisses gesetzt wird. Das AF-Flag wird auf Null gesetzt.
-
10 zeigt eine Operation eines ADD3-Befehls im Pseudocode, der eine bestimmte beispielhafte Ausführungsform eines Addierbefehls darstellt. SRC bezeichnet einen Quelloperanden, DEST bezeichnet einen Zieloperanden, EAX und RAX bezeichnen implizite Allzweckregister, TEMP bezeichnet ein vorübergehendes oder Zwischenergebnis, CF bezeichnet das Carry-Flag und OF bezeichnet das Überlauf-Flag.
-
Es ist zu beachten, dass Bits [33:32] im 32-Bit-Modus respektive in OF und CF und dass Bits [65:64] im 64-Bit-Modus respektive in OF und CF gespeichert werden.
-
Ein Addierbefehl mit Flags, gemäß einer anderen bestimmten beispielhaften Ausführungsform, ist ein ADOC3-Addition der vorzeichenlosen Ganzzahl von drei Operanden mit OF/CF-Flag-Befehl. Die ADOC3-Anweisung kann standardisierten 3-Byte x86 Befehlscode aufweisen, der optional ein REX-Präfix haben kann, um mehr Register und einen breiteren Datenraum zu adressieren.
-
Der ADOC3-Befehl ist ein Drei-Operanden-Befehl, wobei zwei der Operanden explizite Operanden sind und der andere Operand ein impliziter Operand ist. Der Befehlsoperand, der für den ADOC3-Befehl codiert, ist in Tabelle 2 gezeigt. Tabelle 2. ADOC3-Operandenkodierung
Operand1 | Operand2 | Operand3 | Operand4 |
ModRM: reg (R, W) | ModRM: r/m (R) | Implizierte EAX/RAX (R) | n/z |
-
Operand1 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (Reg) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern für den 64-Bit-Modus-Befehl sein. Lesen (R) und Schreiben (W) sind für Operand1 zugelassen.
-
Operand2 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (r) oder in Speicher (m) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern (r) oder in Speicher (m) für den 64-Bit-Modus-Befehl sein. Lesen (R) ist für Operand2 zugelassen.
-
Operand3 ist implizit als das EAX-32-Bit-Allzweckregister für den 32-Bit-Modus-Befehl oder als das RAX-64-Bit-Allzweckregister für den 64-Bit-Modus-Befehl identifiziert. Der Operand3 wird als ein implizierter oder impliziter Quelloperand verwendet. Die EAX/RAX-Register sind auch ein implizit identifizierter Zieloperand für die MULX-Anweisung, die hier an anderer Stelle beschrieben wird. Lesen (R) ist für Operand3 zugelassen. Operand4 ist für den ADOC3 Befehl nicht verfügbar.
-
11 zeigt eine Beschreibung einer ADOC3 Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert. Eine 16-Bit-Operand-Größe ist gegenwärtig für den ADOC3-Befehl nicht codierbar. Die Eingabe-OF- und -CF-Werte haben keine Beschränkungen; wenn diese Flags beide 1 sind, dann sind die Ergebnisse des Befehls gut definiert, da die größten generierten Werte keine Überläufe verursachen. ADOC3 definiert das Carry-Flag (CF) und Überlauf-Flag (OF) anders als der ADD-Befehl im Softwareentwickler-Handbuch, Band-2A der Intel 64- und IA-32-Architekturen. CF, OF, SF, ZF und PF werden basierend auf dem Ergebnis gesetzt. Das SF-Flag wird gesetzt, wenn das höchstwertige Bit (z. B. Bit [63] im 64-Bit-Modus oder Bit [31] im 32-Bit-Modus) des Ergebnisses gesetzt wird. Das AF-Flag wird auf Null gesetzt.
-
12 zeigt eine Operation in Pseudocode einer ADOC3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert. SRC bezeichnet einen Quelloperanden, DEST bezeichnet einen Zieloperanden, EAX und RAX bezeichnen implizite Allzweckregister, TEMP bezeichnet ein vorübergehendes oder Zwischenergebnis, CF bezeichnet das Carry-Flag und OF bezeichnet das Überlauf-Flag. Es ist zu beachten, dass Bits [33:32] im 32-Bit-Modus respektive in OF und CF und dass Bits [65:64] im 64-Bit-Modus respektive in OF und CF gespeichert werden. Es ist ebenfalls zu beachten, dass die Summe auf der arithmetischen Kombination „(2·OF) + CF” beruht.
-
Alternative Ausführungsformen der ADD3- und ADOC3-Befehle sind ebenfalls beabsichtigt. Zum Beispiel können bei einer oder mehreren Ausführungsformen der ADD3- und/oder ADOC3-Befehl optional eine VEX-Codierung verwenden. Die VEX-Codierung kann den Befehlen ermöglichen, explizit drei Operanden statt nur zwei anzugeben. Zum Beispiel kann bei einer oder mehreren alternativen Ausführungsformen ADD3 in der VEX-Codierung dargestellt werden als: reg=reg+r/m+vvvv. Als ein weiteres Beispiel kann bei einer oder mehreren alternativen Ausführungsformen ADOC3 in der VEX-Codierung dargestellt werden als: reg=reg+r/m+vvvv+OC. Eine weitere Beschreibung von Befehlscodes, Codierung, REX und VEX-Präfixen ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen verfügbar: Befehlssatz-Referenz, A–M, Bestellnummer: 253666-032US, September 2009.
-
Die hier offenbarten Addierbefehle sind Allzweckbefehle und können in einer Vielzahl von unterschiedlichen Arten von Algorithmen verwendet werden. Die Addierbefehle sind nicht darauf begrenzt, in irgendwelchen bekannten Algorithmen verwendet zu werden. Eher wird erwartet, dass die Addierbefehle in einer Vielzahl von unterschiedlichen Arten von Algorithmen verwendet werden.
-
Es wird gegenwärtig angenommen, dass die hier offenbarten Addierbefehle helfen werden, die Geschwindigkeit und/oder Effizienz der Multiplikation von großen Zahlen außerordentlich zu verbessern. Die Multiplikation von großen Zahlen wird in mehreren unterschiedlichen Arten von Algorithmen verwendet. Zum Beispiel ist die große ganzzahlige Multiplikation in der modularen Potenzierung, Kryptografie, Verschlüsselung mit öffentlichem Schlüssel, Transport Layer Security (TLS), Secure Sockets Layer (SSL), Intemetprotokoll-Sicherheit (IPsec), Intemetprotokoll Version 6 (IPv6), sowie bei mehreren anderen nicht kryptografischen Algorithmen allgemein verbreitet. Hinsichtlich der Kryptografie hat es in den letzten Jahren einen bedeutenden Anstieg in der Verwendung von kryptografischen Algorithmen, zum Beispiel aufgrund von zunehmend mehr Internet- und anderen Netzwerktransaktionen, gegeben, die kryptografisch geschützt sind. Als Resultat können dedizierte kryptografische Beschleuniger, eingebettete kryptografische Prozessoren, Server, die zahlreiche Verbindungen unterstützen und Ähnliches solche kryptografischen Algorithmen sehr häufig ausführen. Daher kann die Leistung von diesen Geräten durch die Geschwindigkeit und/oder Effizienz, mit der sie imstande sind, eine große ganzzahlige Multiplikation auszuführen, wesentlich beeinträchtigt werden. Obwohl vielleicht zu einem geringeren Ausmaß führen Desktop-Computer, Laptops und andere Geräte ebenfalls große ganzzahlige Multiplikationen aus, die mit solchen kryptografischen Algorithmen verbunden sind. Hochleistungsrechner führen ebenfalls Multiplikationen mit großen Zahlen aus, die mit der Arithmetik von großen Zahlen verbunden sind. Diese und anderen Arten von elektronischen Bauelementen können ebenfalls die Multiplikation mit großen Zahlen für mehrere andere nicht kryptografische Algorithmen oder Verwendungen ausführen. Demgemäß waren neue und unterschiedliche Befehle, die helfen, die Geschwindigkeit und/oder Effizienz der Multiplikation mit großen Zahlen zu erhöhen, nützlich.
-
Bei der großen ganzzahligen Multiplikation kann mindestens eine Ganzzahl, die größer ist als eine Größe eines Registers oder eines anderen Speicherorts, der verwendet wird, um die Ganzzahl zu speichern, multipliziert werden. Zum Beispiel kann eine 512-Bit-, 256-bit- oder 128-Bit-Ganzzahl in 64-Bit-, 32-Bit- oder kleineren Registern gespeichert werden. Als Resultat könnte die 512-Bit- 256-bit- oder 128-Bit-Ganzzahl nicht in ein einzelnes 64-Bit- oder 32-Bit-Register passen. Eher können mehre unterschiedliche 64-Bit- oder 32-Bit-Teile der 512-Bit-, 256-bit- oder 128-Bit-Ganzzahl in unterschiedlichen 64-bit- oder 32-Bit-Registern oder anderen Speicherorten gespeichert werden.
-
Um diese weiter darzustellen, zeigt 13 eine Ausführungsform einer vorzeichenlosen 256-Bit-Ganzzahl gespeichert als vier vorzeichenlose Quadword-Ganzzahlen A1–A4 von denen jede in einem von vier entsprechenden Registern gespeichert ist. Insbesondere wird eine erste vorzeichenlose Quadword-Ganzzahl (A1) in einem ersten Register 1130-1 gespeichert, eine zweite vorzeichenlose Quadword-Ganzzahl (A2) wird in einem zweiten Register 1130-2 gespeichert, eine dritte vorzeichenlose Quadword-Ganzzahl (A3) wird in einem dritten Register 1130-3 gespeichert und eine vierte vorzeichenlose Quadword-Ganzzahl (A4) wird in einem vierten Register 1130-4 gespeichert. Die vier vorzeichenlosen Quadword-Ganzzahlen (A1–A4) stellen gemeinsam die vorzeichenlose 256-Bit-Ganzzahl dar. Die vorzeichenlose 256-bit-Ganzzahl, die auf solche Art und Weise gespeichert ist, kann als ein Mehrwort-Vektor von vorzeichenlosen Ganzzahlen bezeichnet werden.
-
Das Ausführen der Multiplikation an einer großen Ganzzahl, die zu groß ist, um in ein einzelnes Register zu passen, kann bestimmte Herausforderungen aufstellen. Zum Beispiel kann mehr als ein Multiplikationsbefehl verwendet werden. Jeder Multiplikationsbefehl kann verursachen, dass eine Multiplikation an nur einem Teil der großen Ganzzahl ausgeführt wird, um ein partielles Produkt zu bilden. Das partielle Produkt kann ein vollständig berechnetes Produkt von nur einem Teil von mindestens einer Zahl darstellen. Jedes dieser partiellen Produkte kann dann addiert oder anderweitig kombiniert werden, um das gesamte Produkt der ursprünglichen großen Ganzzahl zu erhalten. Das Addieren der partiellen Produkte kann die Ausbreitung der Addition mit Übertrag einschließen.
-
Ein geeigneter Multiplikationsbefehl ist MUL-vorzeichenloser Multiplikationsbefehl. Der MUL Befehl wird im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen beschrieben: Befehlssatz-Referenz, A–M, Bestellnummer: 253666-032US, September 2009, sowie in verschiedenen älteren Handbüchern. Jedoch löscht oder setzt der MUL-Befehl das Carry-Flag (CF) und Überlauf-Flag (OF) abhängig von den höherwertigen Bits des Produkts. Da der MUL-Befehl das Carry-Flag ändern kann, sollte der MUL-Befehl nicht generell innerhalb einer Serie von Addierbefehlen (z. B. ADD/ADC) platziert werden. Außerdem müssten die partiellen Produktergebnisse der MUL-Befehle generell gespeichert und die Addierbefehle (z. B. ADD/ADC) dann nachfolgend an den partiellen Produktergebnissen ausgeführt werden. Abhängig von der Anzahl an Registern, die verfügbar sind, kann das Speichern aller dieser partiellen Produktergebnisse der MUL-Befehle bevor sie addiert werden in einigen Fällen dazu tendieren, alle verfügbaren Register aufzubrauchen, was in einem Speicherfüllen/-überfüllen und/oder in Zugriffen auf den Systemspeicher resultieren kann.
-
Eine Alternative zum MUL-Befehl ist MULX-Befehl zum vorzeichenlosen Multiplizieren ohne Beeinträchtigung von Flags, offenbart in der US-Patentanmeldung Serien-Nr._________, eingereicht am _________, mit dem Titel „MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG”, welche dem Zessionar der vorliegenden Patentanmeldung zugeordnet ist. Der MULX-Befehl führt eine vorzeichenlose Multiplikation eines ersten Quelloperanden und eines zweiten Quelloperanden aus und speichert ein Ergebnis in einem Zieloperanden ohne arithmetische Flags zu lesen oder schreiben. Das befähigt möglicherweise leistungsstarkes Programmieren, wo Software Operationen des Addierens mit Übertrag und Multiplikationen verschachteln kann. Das RDX/EDX-Register wird als eine implizite Quelle verwendet. Das RAX/EDX-Register wird als ein implizites Ziel der niedrigen 64/32 Bits des Ergebnisses verwendet. Die hohen 64/32 Bits des Ergebnisses werden in einen explizit verschlüsselten Zielregister-Operanden geschrieben.
-
Ein relativ einfaches Vergleichsbeispiel der großen ganzzahligen Multiplikation ausgeführt mit den bekannten ADD/ADC-Befehlen und den speziellen ADD3/ADOC3-Ausführungsform-Befehlen, die hier offenbart werden, unterstützt dabei, die Vorteile zu demonstrieren, drei Quelloperanden mit einem Addierbefehl addieren zu können.
-
14 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) mit einer vorzeichenlosen 64-Bit-Ganzzahl (B1) und die Summierung der zugehörigen partiellen Produkte mit ADD/ADC-Befehlen. Ein Beispiel einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) wurde gezeigt und in Verbindung mit 13 oben beschrieben. Für jede Spalte mit Ausnahme der niedrigst-/höchstwertigen gibt es einen High-Teil eines Produkts und einen Low-Teil eines nachfolgenden Produkts, die zu einer Partialsumme addiert werden sollen. Ein Nachteil bei den ADD/ADC-Befehlen ist, dass generell zwei Serien von Addierbefehlen ausgeführt werden müssen. Eine anfängliche Serie von Addierbefehlen wird von rechts nach links durch die Pfeile mit durchgezogenen Linien gezeigt und eine nachfolgende Serie von Addierbefehlen wird von rechts nach links durch die Pfeile mit gestrichelten Linien gezeigt. Wie gezeigt, werden neun Befehle verwendet. Viele der Additionen sind Additionen mit Übertrag, was zu Serialisierung führen kann und möglicherweise dazu tendiert, den Streaming-Fluss von Anwendungen zu begrenzen. Des Weiteren kann das die Menge an temporären Daten (z. B. Teilsummen), die aufrechterhalten werden, erhöhen. In einigen Situationen kann das dazu tendieren, die Anzahl an verfügbaren Registern zu überschreiten, die zu Speicherzugriffen führen.
-
Im Gegensatz dazu zeigt 15 die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) mit einer vorzeichenlosen 64-Bit-Ganzzahl (B1) und die Summierung der verbundenen partiellen Produkte mit ADD3/ADOC3-Befehlen gemäß einer oder mehreren Ausführungsformen. Jeder von diesen Befehlen kann drei Ganzzahlen addieren und es gibt zwei Flags, die verfügbar sind, um einen Teil der Summe zu speichern. Als Resultat ist es möglich, die Additionen in einem Arbeitsgang anstatt in zwei abzuschließen. Vorteilhafterweise kann das helfen, die Serialisierung des Prozesses zu reduzieren. Des Weiteren werden nur fünf Befehle statt neun verwendet. Vorteilhafterweise kann das dabei helfen, die Anzahl von Befehlen zu reduzieren, die decodiert, gepuffert, ausgeführt, usw. werden müssen. Des Weiteren kann die Anzahl an vorübergehenden Ergebnissen, die aufrechterhalten werden müssen, reduziert werden, was helfen kann, bestimmte Zugriffe auf Speicher zu vermeiden. Jedes Produkt Ai·B1 kann durch einen MUL- oder MULX-Befehl generiert werden.
-
16 ist ein Blockdiagramm einer Ausführungsform eines Addierbefehls. Bei dieser Ausführungsform hat der Addierbefehl einen impliziten Quelloperanden (z. B. ein Speicherort), welcher derselbe wie ein impliziter Zieloperand (z. B. ein Speicherort) eines ganzzahligen Multiplikationsbefehls ist. Beispielsweise hatten die oben beschriebenen ADD3- und ADOC3-Befehle jeweils einen impliziten Quelloperand EAX im 32-Bit-Modus und RAX im 64-Bit-Modus. Auch nach der obigen Beschreibung des MULX-Befehls, ist daran zu erinnern, dass das RAX/EDX-Register als ein implizites Ziel der niedrigen 64/32 Bits des Ergebnisses des MULX-Befehls verwendet wird. Alternativ kann ein anderes implizites Register oder ein anderer Speicherort verwendet werden.
-
Bei einigen Algorithmen kann das helfen, einen MOV-Befehl oder eine andere Datenbewegungsoperation zu vermeiden. Diese zusätzlichen MOV-Befehle tendieren dazu, die Anzahl an Befehlen zu erhöhen, die decodiert werden müssen, sowie die Anzahl von Operationen, die potenziell gepuffert und ausgeführt werden müssen. Das Eliminieren von Befehlen, wie beispielsweise Transportbefehlen, kann helfen, die Anzahl an Befehlen zu reduzieren, die decodiert/konvertiert, möglicherweise gepuffert und ausgeführt werden müssen. Zusätzlich, kann die Verminderung der Anzahl von Befehlen helfen, wenn ein decodierter Stream-Puffer (DSB) oder ähnliches verwendet werden soll, um einer Schleife von decodierten Befehlen zu ermöglichen, innerhalb des DSB zu passen, was weiter helfen kann, die Verarbeitungsgeschwindigkeit zu erhöhen, indem geschwindigkeitsbegrenzende Decodierungsoperationen vermieden werden. Vorteilhafterweise kann das helfen, die Geschwindigkeit und/oder Effizienz der großen ganzzahligen Multiplikation und bestimmten anderen Algorithmen zu erhöhen, in denen der Addierbefehl eine Addition am Produkt des Multiplikationsbefehls ausführt.
-
Andere Ausführungsformen sind nicht auf das Addieren von nur drei Quelloperanden oder das Verwenden von nur zwei Flags begrenzt. Bei einer oder mehreren alternativen Ausführungsformen können vier oder mehr Quelloperanden optional summiert und drei oder mehr Flags optional verwendet werden.
-
Eine oder mehrere Ausführungsformen umfassen einen gefertigten Artikel, der ein körperliches maschinenzugängliches und/oder maschinenlesbares Medium umfasst, das einen darauf gespeicherten Addierbefehl aufweist, der, wenn er durch eine Maschine (z. B. eine Ausführungseinheit) ausgeführt wird, bewirkt, dass eine Additionsoperation an drei Operanden und/oder Ganzzahlen ausgeführt wird. Das körperliche Medium kann ein oder mehrere feste Materialien umfassen. Das Medium kann einen Mechanismus umfassen, der zum Beispiel Information in einer Form speichert, die durch die Maschine zugänglich ist. Zum Beispiel kann das Medium optional beschreibbare Medien, wie beispielsweise eine Diskette, ein optisches Speichermedium, eine optische Disk, eine CD-ROM, eine Magnetdiskette, eine magnetooptische Disk, ein Read Only Memory (ROM), eine programmierbare ROM (PROM), eine Erasable-and-Programmable ROM (EPROM), eine Electrically-Erasable-and-Programmable ROM (EEPROM), einen Direktzugriffsspeicher (RAM), einen Static-RAM (SRAM), einen Dynamic-RAM (DRAM), einen Flash-Speicher und Kombinationen davon umfassen.
-
Geeignete Maschinen umfassen, sind aber nicht beschränkt auf, Ausführungseinheiten, Allzweckprozessoren, Spezialprozessoren (z. B. Grafikprozessoren und kryptografische Prozessoren), kryptografische Beschleuniger, Netzwerkkommunikationsprozessoren, Computersysteme, Netzwerkgeräte, Modems, Personal Digital Assistants (PDAs), Handys und eine Vielzahl von anderen elektronischen Geräten mit ein oder mehreren Ausführungseinheiten, um nur einige Beispiele zu nennen.
-
Noch weitere Ausführungsformen betreffen ein Computersystem, ein eingebettetes System oder ein anderes elektronisches Gerät mit einer Ausführungseinheit und/oder ein Verfahren wie hier offenbart ausführt.
-
17 ist ein Blockdiagramm einer ersten beispielhaften Ausführungsform eines geeigneten Computersystems 1701.
-
Das Computersystem umfasst einen Prozessor 1700. Der Prozessor umfasst mindestens eine Ausführungseinheit 1706, die fähig ist, mindestens einen Addierbefehl 1702 auszuführen.
-
Der Prozessor ist mit einem Chipsatz 1781 über einen Bus (z. B. einen Frontside-Bus) oder eine andere Kopplungsstruktur 1780 gekoppelt. Die Kopplungsstruktur kann verwendet werden, um Datensignale zwischen dem Prozessor und den anderen Komponenten im System über den Chipsatz zu übertragen.
-
Der Chipsatz umfasst einen Systemlogikbaustein bekannt als ein Memory-Controller-Hub (MCH) 1782. Der MCH ist mit dem Frontside-Bus oder einer anderen Kopplungsstruktur 1780 gekoppelt.
-
Ein Speicher 1786 ist mit dem MCH gekoppelt. Bei verschiedenen Ausführungsformen kann der Speicher einen Direktzugriffsspeicher (RAM) umfassen. DRAM ist ein Beispiel einer Art von RAM verwendet in einigen, aber nicht allen Computersystemen. Wie gezeigt, kann der Speicher verwendet werden, um Befehle 1787, wie beispielsweise ein oder mehrere Addierbefehle und Daten 1788 zu speichern.
-
Eine Komponentenkopplungsstruktur 1785 ist auch mit dem MCH gekoppelt. Bei einer oder mehreren Ausführungsformen kann die Komponentenkopplungsstruktur ein oder mehrere Peripheral Component Interconnect Express-(PCIe)-Schnittstellen umfassen. Die Komponentenkopplungsstruktur kann anderen Komponenten ermöglichen, an den Rest des Systems durch den Chipsatz gekoppelt zu werden. Ein Beispiel solcher Komponenten ist ein Grafikchip oder eine andere Grafikbaugruppe, obwohl dies optional und nicht erforderlich ist.
-
Der Chipsatz umfasst auch einen Eingabe/Ausgabe-(I/O)-Controller-Hub (ICH) 1784. Der ICH ist mit dem MCH durch den Hub-Schnittstellenbus oder die andere Kopplungsstruktur 1783 gekoppelt. Bei einer oder mehreren Ausführungsformen können der Bus oder die andere Kopplungsstruktur 1783 eine Direct Media Interface (DMI) umfassen.
-
Ein Datenspeicher 1789 ist mit dem ICH gekoppelt. Bei verschiedenen Ausführungsformen kann der Datenspeicher ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Laufwerk, ein Flash-Speicher-Gerät oder Ähnliches oder eine Kombination davon umfassen.
-
Eine zweite Komponentenkopplungsstruktur 1790 ist auch mit dem ICH gekoppelt. Bei einer oder mehreren Ausführungsformen kann die Komponentenkopplungsstruktur ein oder mehrere Peripheral Component Interconnect Express-(PCIe)-Schnittstellen umfassen. Die zweite Komponentenkopplungsstruktur kann mehreren Arten von Komponenten ermöglichen, mit dem Rest des Systems durch den Chipsatz gekoppelt zu werden.
-
Ein serieller Erweiterungsanschluss 1791 ist auch mit dem ICH gekoppelt. Bei einer oder mehreren Ausführungsformen kann der serielle Erweiterungsanschluss ein oder mehrere USB-Ports umfassen. Der serielle Erweiterungsanschluss kann mehreren anderen Arten von Eingabe-/Ausgabegeräten ermöglichen, mit dem Rest des Systems durch den Chipsatz gekoppelt zu werden.
-
Einige erläuternde Beispiele anderer Komponenten, die optional mit dem ICH gekoppelt sein können, umfassen, sind aber nicht beschränkt auf, einen Audiocontroller, einen drahtlosen Transceiver und ein Benutzereingabegerät (z. B. eine Tastatur, Maus).
-
Ein Netzwerk-Controller ist auch mit dem ICH gekoppelt. Der Netzwerk-Controller kann dem System ermöglichen, mit einem Netzwerk gekoppelt zu werden.
-
Bei einer oder mehreren Ausführungsformen kann das Computersystem eine Version des WINDOWSTM Betriebssystems, verfügbar von Microsoft Corporation aus Redmond, Washington ausführen. Alternativ können andere Betriebssysteme, wie beispielsweise UNIX, Linux oder eingebettete Systeme verwendet werden.
-
Dies ist nur ein bestimmtes Beispiel eines geeigneten Computersystems. Zum Beispiel kann in einer oder mehreren alternativen Ausführungsformen der Prozessor mehrere Kerne aufweisen. Als ein weiteres Beispiel kann in einer oder mehreren alternativen Ausführungsformen MCH 1782 physisch auf der Chiplage mit dem Prozessor 1700 integriert sein und der Prozessor kann direkt mit einem Speicher 1786 durch den integrierten MCH gekoppelt sein. Als ein weiteres Beispiel können in einer oder mehreren alternativen Ausführungsformen andere Komponenten auf der Chiplage mit dem Prozessor integriert sein, wie beispielsweise um ein System-on-Chip-(SoC)-Design bereitzustellen. Als noch ein weiteres Beispiel kann in einer oder mehreren alternativen Ausführungsformen das Computersystem mehrere Prozessoren aufweisen.
-
18 ist ein Blockdiagramm einer zweiten beispielhaften Ausführungsform eines geeigneten Computersystems 1801. Die zweite beispielhafte Ausführungsform weist bestimmte Ähnlichkeiten mit dem ersten Beispiel-Computersystem auf, das unmittelbar darüber beschrieben ist. Zur Klarheit tendiert die Erörterung dazu, die Differenzen zu betonen, ohne alle Ähnlichkeiten zu wiederholen.
-
Ähnlich wie bei der ersten beispielhaften Ausführungsform, die oben beschrieben ist, umfasst das Computersystem einen Prozessor 1800 und einen Chipsatz 1881 mit einem I/O-Controller-Hub (ICH) 1884. Auf ähnliche Weise wie bei der ersten beispielhaften Ausführungsform umfasst das Computersystem eine erste Komponentenkopplungsstruktur 1885 gekoppelt mit dem Chipsatz, eine zweite Komponentenkopplungsstruktur 1890 gekoppelt mit dem ICH, ein serieller Erweiterungsanschluss 1891 gekoppelt mit dem ICH, ein Netzwerk-Controller 1892 gekoppelt mit dem ICH und einen Datenspeicher 1889 gekoppelt mit dem ICH.
-
Bei dieser zweiten Ausführungsform ist der Prozessor 1800 ein Mehrkernprozessor. Der Mehrkernprozessor umfasst die Prozessorkerne 1894-1 bis 1894-M, wobei M eine ganze Zahl gleich oder größer als zwei (z. B. zwei, vier, sieben oder mehr) sein kann. Jeder Kern kann mindestens eine Ausführungseinheit umfassen, die fähig ist, mindestens eine Ausführungsform eines Befehls wie hier offenbart auszuführen. Wie gezeigt umfasst der Kern-1 einen Cache 1895 (z. B. einen L1-Cache). Jeder der anderen Kerne kann auf ähnliche Weise einen dedizierten Cache umfassen. Die Prozessorkerne können auf einem einzelnen integrierten Schaltungs-(IC)-Chip implementiert sein.
-
Der Prozessor umfasst auch mindestens einen gemeinsam benutzten Cache 1896. Der Cache kann Daten speichern (z. B. Befehle), die von einer oder mehreren Komponenten des Prozessors, wie beispielsweise den Kernen verwendet werden. Zum Beispiel kann der gemeinsam benutzte Cache lokal Daten, die in einem Speicher 1886 für den schnellen Zugriff durch Komponenten des Prozessors gespeichert sind, zwischenspeichern. Bei einer oder mehreren Ausführungsformen kann der gemeinsam benutzte Cache ein oder mehrere Mid-Level-Caches, wie beispielsweise Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, ein Last Level Cache (LLC) und/oder Kombinationen davon umfassen.
-
Die Prozessorkerne und der gemeinsam benutzte Cache sind jeweils mit einem Bus oder einer anderen Kopplungsstruktur 1897 gekoppelt. Der Bus oder die andere Kopplungsstruktur kann die Kerne und den gemeinsam benutzten Cache koppeln und Kommunikation ermöglichen.
-
Der Prozessor umfasst auch einen Memory-Controller-Hub (MCH) 1882. Wie gezeigt in dieser beispielhaften Ausführungsform ist der MCH im Prozessor 1800 integriert. Zum Beispiel kann sich der MCH mit den Prozessorkernen auf der Chiplage befinden. Der Prozessor ist mit dem Speicher 1886 durch den MCH gekoppelt. Bei einer oder mehreren Ausführungsformen kann der Speicher DRAM umfassen, obwohl das nicht erforderlich ist.
-
Der Chipsatz umfasst einen I/O-Hub 1893. Der I/O-Hub ist mit dem Prozessor durch einen Bus (z. B. eine QuickPath-Kopplungsstruktur (QPI)) oder eine andere Kopplungsstruktur 1880 gekoppelt. Die erste Komponentenkopplungsstruktur 1885 ist mit dem I/O-Hub 1893 gekoppelt.
-
Dies ist nur ein bestimmtes Beispiel eines geeigneten Systems. Andere Systemdesigns und Konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, Personal Digital Assistants, technische Arbeitsplätze, Server, Netzwerkgeräte, Netzwerkhubs, Switches, eingebettete Prozessoren, Digitalsignal-Prozessoren (DSPs), Grafikbaugruppen, Videospiel-Geräte, Set-Top-Boxen, Mikrocontroller, Handys, tragbare Mediaplayer, tragbare Geräte und mehrere andere elektronische Geräte bekannt sind, sind auch geeignet. Im Allgemeinen ist eine riesige Vielzahl von Systemen oder elektronischen Geräten generell geeignet, die einen Prozessor und/oder eine Ausführungseinheit, wie sie hier offenbart wird, aufnehmen können.
-
In der obigen Beschreibung sind zum Zweck der Erklärung zahlreiche spezifische Details erläutert, um ein gründliches Verständnis der erfindungsgemäßen Ausführungsformen zu ermöglichen. Für fachkundige Personen ist es jedoch offensichtlich, dass ein oder mehrere andere Ausführungsformen ohne einige dieser spezifischen Details realisierbar sind. Die speziellen oben beschriebenen Ausführungsformen sind nicht bereitgestellt, um die Erfindung zu begrenzen, sondern um Ausführungsformen der Erfindung zu veranschaulichen. Der Umfang der Erfindung wird nicht durch die oben aufgeführten spezifischen Beispiele eingegrenzt, sondern nur durch die nachfolgenden Ansprüche. In anderen Fällen sind bekannte Schaltungen, Strukturen, Geräte und Operationen in Blockdiagramm-Form oder ohne Einzelheiten gezeigt worden, um das Verschleiern des Verständnisses der Beschreibung zu vermeiden. Wo es als geeignet angesehen wurde, sind Bezugszeichen oder Endteile von Bezugszeichen unter den Figuren wiederholt worden, um entsprechende oder analoge Elemente anzuzeigen, die optional ähnliche Merkmale haben können.
-
Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder sie können in maschinenausführbaren Befehlen verkörpert sein, die verwendet werden können, um eine Schaltung oder Hardware zu bewirken (oder zumindest darin zu resultieren), die mit den Befehlen programmiert ist, welche die Operationen ausführen. Die Schaltung kann einen Allzweck- oder Spezialprozessor oder eine logische Schaltung umfassen, um nur einige Beispiele zu nennen. Optional können die Operationen auch durch eine Kombination aus Hardware und Software ausgeführt werden. Eine Ausführungseinheit und/oder ein Prozessor können spezifische oder spezielle Schaltung oder eine andere gegenüber einem Maschinenbefehl ansprechende Logik umfassen oder ein oder mehrere Steuersignale, die vom Maschinenbefehl abgeleitet sind, um einen durch einen Befehl angegebenen Ergebnis-Operanden zu speichern.
-
Jeder Verweis auf „eine Ausführungsform” oder „eine oder mehrere Ausführungsformen” in dieser Schrift bedeutet beispielsweise, dass ein bestimmtes Merkmal in der Umsetzung der Erfindung enthalten sein kann. Auf ähnliche Weise sollte es offensichtlich sein, dass in der Beschreibung verschiedene Merkmale manchmal bei einer einzelnen Ausführungsform, Figur oder Beschreibung davon zum Zweck der Vereinfachung der Offenbarung und zum Erreichen eines besseren Verständnisses verschiedener erfinderischer Aspekte in Gruppen zusammengefasst sind. Diese Methode der Offenbarung soll jedoch nicht als eine Absicht ausgelegt werden, dass die Erfindung mehr Merkmale erfordert als diejenigen, die in jedem Anspruch ausdrücklich zitiert sind. Wie es die folgenden Ansprüche widerspiegeln, kann die Erfindung vielmehr auch aus weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform bestehen.
-
Somit sind die Ansprüche, die der detaillierten Beschreibung folgen, hiermit ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch selbstständig als separate Ausführungsform dieser Erfindung steht.