DE112013007736T5 - RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle - Google Patents

RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle Download PDF

Info

Publication number
DE112013007736T5
DE112013007736T5 DE112013007736.1T DE112013007736T DE112013007736T5 DE 112013007736 T5 DE112013007736 T5 DE 112013007736T5 DE 112013007736 T DE112013007736 T DE 112013007736T DE 112013007736 T5 DE112013007736 T5 DE 112013007736T5
Authority
DE
Germany
Prior art keywords
bit
instruction
bit value
processor
source operand
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112013007736.1T
Other languages
English (en)
Inventor
Xiangzheng Sun
Nan Stan Qiao
Yang Lu
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112013007736T5 publication Critical patent/DE112013007736T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/722Modular multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/723Modular exponentiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3006Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters
    • H04L9/302Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy underlying computational problems or public-key parameters involving the integer factorization problem, e.g. RSA or quadratic sieve [QS] schemes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/007Encryption, En-/decode, En-/decipher, En-/decypher, Scramble, (De-)compress
    • G06F2211/008Public Key, Asymmetric Key, Asymmetric Encryption

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Ein Prozessor umfasst eine Dekodiereinheit zum Dekodieren eines Befehls. Der Befehl zeigt einen ersten 64-Bit-Quelloperanden mit einem ersten 64-Bit-Wert an, zeigt einen zweiten 64-Bit-Quelloperanden mit einem zweiten 64-Bit-Wert an, zeigt einen dritten 64-Bit-Quelloperanden mit einem dritten 64-Bit-Wert an und zeigt einen vierten 64-Bit-Quelloperanden mit einem vierten 64-Bit-Wert an. Eine Ausführeinheit ist mit der Dekodiereinheit gekoppelt. Die Ausführeinheit ist ausgelegt, als Antwort auf den Befehl ein Ergebnis zu speichern. Das Ergebnis umfasst den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert. Die Ausführeinheit kann eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern und eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern.

Description

  • HINTERGRUND
  • Fachgebiet
  • Hierin beschriebene Ausführungsformen betreffen im Allgemeinen Prozessoren. Insbesondere betreffen hierin beschriebene Ausführungsformen im Allgemeinen Prozessoren zum Ausführen von Befehlen zur Beschleunigungs kryptografischer Algorithmen.
  • Hintergrundinformationen
  • RSA (Ron Rivest, Adi Shamir und Leonard Adleman) ist ein hinlänglich bekannter und weithin verwendeter Public-Key-Kryptografiealgorithmus. Der RSA-Algorithmus besteht aus Schlüsselerstellung, Verschlüsselung und Entschlüsselung. RSA basiert auf einem RSA-Schlüsselpaar, das einen öffentlichen RSA-Schlüssel und einen privaten RSA-Schlüssel umfasst. Der öffentliche RSA-Schlüssel kann öffentlich (z. B. jedem beliebigen) bekannt sein und zum Verschlüsseln von Nachrichten verwendet werden. Der private RSA-Schlüssel wird zum Entschlüsseln der Nachrichten verwendet. Der private RSA-Schlüssel sollte nicht öffentlich bekannt sein, sondern geheim gehalten oder nur für jene reserviert werden, die zum Entschlüsseln der verschlüsselten Nachrichten vorgesehen sind. Auf einer hohen Ebene basiert der RSA-Algorithmus auf der angenommenen Schwierigkeit, große Integer zu faktorisieren. Der öffentliche RSA-Schlüssel umfasst im Allgemeinen das Produkt zweier großer Primzahlen und einen Hilfswert. Die Primfaktoren werden geheim gehalten und zum Entschlüsseln verschlüsselter Nachrichten verwendet. Die durch den RSA-Algorithmus bereitgestellte Sicherheit basiert auf der Annahme, dass mit dem öffentlichen Schlüssel verschlüsselte Nachrichten nur unter Verwendung des privaten Schlüssels durchführbar und/oder innerhalb einer sinnvollen Menge an Zeit entschlüsselt werden können. Weitere Details zum RSA-Algorithmus finden sich, sofern erwünscht, in Request for Comments 3447, Public-Key Cryptography Standards (PKCS) Nr. 1: RSA Cryptography Specifications Version 2.1 von J. Jonsson und B. Kalinski von RSA Laboratories, Februar 2003. Weitere Details zum RSA-Algorithmus finden sich, sofern erwünscht, auch im US-Patent 4.405.829 . Allerdings ist ein Detailverständnis des RSA-Algorithmus nicht erforderlich, um die Ausführungsformen der hierin offenbarten Erfindung zu verstehen.
  • Wie oben stehend erwähnt ist der RSA-Algorithmus ein weithin verwendeter Public-Key-Kryptografiealgorithmus. Folglich wurden im Laufe der Jahre signifikante Bemühungen unternommen, die Geschwindigkeit und den Wirkungsgrad der Implementierung des RSA-Algorithmus zu erhöhen. Das ist sowohl durch eine Hardware- als auch durch eine Software-Perspektive geschehen. Einer der häufigeren Wege, den RSA-Algorithmus zu implementieren, erfolgt mit der OpenSSL-Bibliothek. Die OpenSSL-Bibliothek ist eine Open-Source-Software-Bibliothek, die diverse kryptografische Algorithmen unterstützt, zu denen auch der RSA-Algorithmus gehört. Doch selbst mit den Bemühungen, die Geschwindigkeit und Effizienz der Implementierung des RSA-Algorithmus zu erhöhen, neigt dessen Implementierung immer noch dazu, relativ rechnerintensiv zu verlaufen. Dementsprechend wären weitere Arten der Verbesserung der Geschwindigkeit und/oder des Wirkungsgrades beim Implementieren des RSA-Algorithmus von Vorteil.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die Erfindung ist unter Bezugnahme auf die nachstehende Beschreibung und die beigeschlossenen Zeichnungen, die zum Veranschaulichen von Ausführungsformen dienen, am besten verständlich. In den Zeichnungen:
  • ist 1 ein Blockschaltbild einer Ausführungsform eines Prozessors, der ausgelegt ist, eine Ausführungsform eines RSA-Beschleunigungsbefehls durchzuführen.
  • ist 2 ein Blockflussbild einer Ausführungsform eines Verfahrens zur Verarbeitung einer Ausführungsform eines RSA-Beschleunigungsbefehls.
  • ist 3 ein Blockschaltbild eines Ausführungsbeispiels für eine Mikroarchitektur für eine Ausführungsform einer Ausführeinheit.
  • zeigt 4 Pseudocode, der einen Vorgang aus einem Ausführungsbeispiel für einen RSA-Beschleunigungsbefehl darstellt.
  • ist 5 ein Blockdiagramm eines Ausführungsbeispiels für ein geeignetes Befehlsformat.
  • zeigt 6 ein Ausführungsbeispiel für einen geeigneten 64-Bit-Allzweckregistersatz.
  • ist 7A ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt.
  • ist 7B ein Blockschaltbild, das sowohl ein Ausführungsbeispiel für einen In-Order-Architekturkern als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Architekturkern zum Einbau in einen Prozessor gemäß Ausführungsformen der Erfindung zeigt.
  • ist 8A ein Blockschaltbild eines Einzelprozessorkerns zusammen mit dessen Verbindung mit dem auf dem Nacktchip gelegenen Zwischenverbindungsnetzwerk und mit dessen lokalem Teilsatz des Level-2-(L2-)Caches 804 gemäß Ausführungsformen der Erfindung.
  • ist 8B eine Vergrößerungsansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen der Erfindung.
  • ist 9 ein Blockschaltbild eines Prozessors, der mehr als einen Kern aufweisen kann, eine integrierte Arbeitsspeichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung.
  • ist die gezeigte 10 ein Blockschaltbild eines System gemäß einer Ausführungsform der vorliegenden Erfindung.
  • ist die gezeigte 11 ein Blockschaltbild eines ersten konkreteren Beispielsystems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • ist die gezeigte 12 ein Blockschaltbild eines zweiten konkreteren Beispielsystems gemäß einer Ausführungsform der vorliegenden Erfindung.
  • ist die gezeigte 13 ein Blockschaltbild eines SoC gemäß einer Ausführungsform der vorliegenden Erfindung.
  • ist 14 ein Blockschaltbild, das die Verwendung eines Softwarebefehlswandlers zum Umwandeln binärer Befehle in einen Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG VON AUSFÜHRUNGSFORMEN
  • Hierin offenbart sind RSA-Beschleunigungsbefehle, Prozessoren zum Ausführen der RSA-Beschleunigungsbefehle, durch die Prozessoren beim Verarbeiten oder Ausführen der RSA-Beschleunigungsbefehle durchgeführte Verfahren und Systeme, die einen oder mehrere Prozessoren zum Verarbeiten oder Ausführen der RSA-Beschleunigungsbefehle umfassen. In der folgenden Beschreibung sind zahlreiche konkrete Details dargelegt (z. B. konkrete Befehlsvorgänge, Datenformate, Prozessorkonfigurationen, mikroarchitektonische Details, Abfolgen von Vorgängen usw.). Ausführungsformen können jedoch auch ohne diese konkreten Details angewandt werden. In anderen Fällen sind hinlänglich bekannte Schaltungen, Strukturen und Techniken nicht im Detail dargestellt, um ein Behindern des Verständnisses der Beschreibung zu vermeiden.
  • Die Implementierung des RSA-Algorithmus unter Verwendung der OpenSSL-Bibliothek ist analysiert worden. Im Zuge dieser Analyse wurde der Intel®-VTuneTM-Analysator zur Durchführung einer Art Anwendungsprofilerstellungsanalyse unter Verwendung einer Richtarbeitslast verwendet. Die Analyse umfasste das Identifizieren bestimmter Funktionen oder Abschnitte jener Implementierung des RSA-Algorithmus durch die OpenSSL-Bibliothek, die die größten relativen Anteile der gesamten Ausführungszeit verbrauchte. Oftmals werden diese Funktionen als „heiße Funktionen” bezeichnet. Eine besondere „heiße Funktion” in der OpenSSL-Implementierung des RSA-Algorithmus, die bn_mul_mont benannt ist, stellte sich als die zeitaufwändigste Funktion heraus. Außerdem wurden auch die Befehle analysiert, aus denen die heiße Funktion bn_mul_mont entsteht. Es wurde festgestellt, dass ein Teilsatz dieser Befehle alleine für einen relativ großen Anteil der Gesamtausführungszeit verantwortlich war. Mit anderen Worten: Ein bestimmter Teilsatz von Code innerhalb der heißen Funktion bn_mul_mont stellt relativ „heißen Code” dar, der einen relativ großen Anteil der Gesamtausführungszeit verbraucht.
  • Tabelle 1 ist eine Tabelle, in der ein Satz von Befehlen aus der Funktion bn_mul_mont der OpenSSL-Implementierung des RSA-Algorithmus aufgezählt ist, von dem beobachtet wurde, dass er einen relativ großen Teil der Gesamtausführungszeit zum Implementieren des RSA-Algorithmus in Anspruch nimmt. Ohne darauf beschränkt zu sein, wird angenommen, dass die Ausführung dieses Satzes von Befehlen eine Größenordnung von etwa der Hälfte der Gesamtausführungszeit zum Implementieren des RSA-Algorithmus für die bestimmte Arbeitslast und die durchgeführte Analyse verbraucht. Tabelle 1: Heißer Code aus der OpenSSL-Funktion bn_mul_mont
    Zeile Befehl Vorgang
    1 MOV RAX, IN Der Befehl MOV (Bewegen) kopiert Quelloperand (mit IN) zu Zielortoperand (angegebenes Register RAX). Der Vorgang lautet: DEST ← SRC. Der Quelloperand ist 64 Bits und kann Allzweckregister oder Arbeitsspeicherplatz sein.
    2 MUL WORD Der Befehl MUL (Multiplizieren) multipliziert Quell-/Zielortoperand (implizites Register RAX) und Quelloperand (mit WORD) und speichert Produkt in Zielort (implizite Register RDX:RAX). Der Vorgang lautet: RDX:RAX ← RAX*SRC. Quelloperand ist 64 Bits und kann Allzweckregister oder Arbeitsspeicherplatz sein.
    3 ADD RAX, CARRY Der Befehl ADD (Addieren) addiert Quell-/Zielortoperand (angegebenes Register RAX) und Quelloperand (mit CARRY) und speichert Summe in Zielort (angegebenes Register RAX). Der Vorgang lautet: DEST ← DEST + SRC. Der Quelloperand ist 64 Bits und kann Allzweckregister oder Arbeitsspeicherplatz sein. Der Befehl ADD setzt auch ein Übertragstatuszeichen (CF), um einen Übertrag (Überlauf) in der Summe anzuzeigen.
    4 ADC RDX, 0 Der Befehl ADC (Addieren mit Übertrag) addiert Quell-/Zielortoperand (angegebenes Register RDX), Quelloperand (mit 0) und Übertragstatuszeichen (CF) und speichert Summe an Zielort (angegebenes Register RDX). Der Vorgang lautet: DEST ← DEST + SRC + CF.
    5 ADD OUT, RAX Addier Quell-/Zielortoperand (OUT) und Quelloperand (angegebenes Register RAX) und speichert Summe an Zielort (als OUT*). Der Vorgang lautet: DEST ← DEST + SRC. Setzt außerdem Übertragstatuszeichen (CF), um einen Übertrag (Überlauf) in der Summe anzuzeigen. Der Zielort ist 64 Bits und kann ein Allzweckregister oder ein Arbeitsspeicherplatz sein.
    6 ADC RDX, 0 Addiert Quell-/Zielortoperand (angegebenes Register RDX), Quelloperand (mit 0) und Übertragstatuszeichen (CF) und speichert Summe an Zielort (angegebenes Register RDX). Der Vorgang lautet: DEST ← DEST + SRC + CF.
    7 MOV CARRY, RDX Kopiert Quelloperand (angegebenes Register RDX) an Zieloperand (als CARRY*). Der Vorgang lautet: DEST ← SRC. Der Zielort ist 64 Bits und kann Allzweckregister oder Arbeitsspeicherplatz sein.
  • Die Operationen aus Tabelle 1 sind der Kernteil von Schleifen des RSA-Algorithmus. Die Eingabeparameter zu dem obigen Code sind die vier Parameter WORD, IN, OUT und CARRY, die alle 64-Bit-Parameter sind. Die Parameter IN und OUT sind ein Element von Anordnungen und werden unter Verwendung des folgenden zusammenhängenden Wertes in der nächsten Iteration aktualisiert. Der Parameter WORD bleibt während der Iterationen unverändert. Der Parameter CARRY ist von der vorherigen Iteration geerbt. Mit „geerbt” ist gemeint, dass die Ausgabe des vorherigen Zyklus die Eingabe des nächsten ist. Der Parameter OUT ist manchmal von der vorherigen Iteration geerbt. Die Gesamtoperation aus diesen sieben Befehlen soll ein Ergebnis erzeugen, das WORD*IN + CARRY + OUT entspricht. Die Multiplikation der Parameter WORD*IN kann ein Produkt von bis zu 128 Bits hervorbringen (zweimal so groß wie die 64-Bit-Parameter). Das Produkt wird in einem durch RDX:RAX dargestellten 128-Bit-Speicher gespeichert. Folglich müssen die beiden nachfolgenden Addierbefehle, die RAX beinhalten, als 128-Bit-Additionen durchgeführt werden, da ein Übertrag oder Überlauf aus den 64-Bit-Registern in das zum Speichern der Bits [128:64] des Werts verwendeten Registers RDX möglich ist. Dementsprechend werden die Befehle ADD und ADC gemeinsam dazu verwendet, die 128-Bit-Addition zu implementieren. Der Zustand des durch den ADC-Befehl verwendeten Übertragstatuszeichens (CF) steht für ein Ausführen der vorherigen, durch den vorangegangenen Befehl ADD durchgeführten Addition. D. h., aufgrund der Implementierung durch eine 64-Bit-Architektur mit nur 64-Bit-, aber keinen 128-Bit-Registern werden die 128-Bit-Additionen durch die Befehlspaare ADD und ADC implementiert. Das durch diese sieben Befehle erzeugte Ergebnis wird als zwei Ausgabeparameter OUT* und CARRY* ausgegeben.
  • In manchen Ausführungsformen können mehrere, zumindest fünf, zumindest sechs oder alle sieben der Befehle aus Tabelle 1 durch einen einzigen neuen RSA-Beschleunigungsbefehl implementiert werden. In manchen Ausführungsformen können zumindest durch die die Zeilen 2 bis 6 dargestellte Befehle in diesem einen einzigen neuen Befehl implementiert werden. In anderen Ausführungsformen können auch die durch die Zeile 1 und/oder die Zeile 7 dargestellten Befehle gegebenenfalls in diesem einen einzigen neuen Befehl implementiert werden. Vorteilhafterweise kann der RSA-Beschleunigungsbefehl dabei helfen, die Geschwindigkeit und/oder den Wirkungsgrad des Implementierens des RSA-Algorithmus zu erhöhen, besonders wenn dieser unter Verwendung der OpenSSL-Bibliothek implementiert wird und besonders wenn er unter Anwendung der Funktion bn_mul_mont implementiert wird.
  • 1 ist ein Blockschaltbild einer Ausführungsform eines Prozessors 100, der ausgelegt ist, eine Ausführungsform eines RSA-Beschleunigungsbefehls 102 durchzuführen. In manchen Ausführungsformen kann der Prozessor ein Allzweckprozessor (z. B. der gemeinhin in Tisch-, Laptop- oder sonstigen Computern verwendeten Art) sein. Alternativ dazu kann der Prozessor ein Spezialzweckprozessor sein. Beispiele für geeignete Spezialzweckprozessoren umfassen, ohne auf diese beschränkt zu sein, kryptografische Prozessoren, Netzwerkprozessoren, Kommunikationsprozessoren, Koprozessoren, Grafikprozessoren, eingebettete Prozessoren, Digitalsignalprozessoren (DSP) und Steuerungen (z. B. Mikrosteuerungen), um nur einige Beispiele zu nennen. Der Prozessor kann jedweder von diversen komplexen Befehlssatzberechnungs-(CISC-)Prozessoren, diversen reduzierten Befehlssatzberechnungs-(RISC-)Prozessoren, diversen Sehr-langes-Befehlswort-(VLIW-)Prozessoren, Prozessoren diverse Hybride von diesen oder sonstige Arten von Prozessoren sein.
  • Im Zuge der Operation kann der Prozessor 100 die Ausführungsform des RSA-Beschleunigungsbefehls 102 empfangen. Beispielsweise kann der RSA-Beschleunigungsbefehl von einer Befehlsabrufeinheit, einer Befehlswarteschlange oder dergleichen empfangen werden. Der RSA-Beschleunigungsbefehl kann einen Makrobefehl, einen Assemblersprachbefehl, einen Maschinencodebefehl oder ein sonstiges Befehls- oder Steuersignal eines Befehlssatzes des Prozessors darstellen. In manchen Ausführungsformen kann der RSA-Beschleunigungsbefehl einen ersten 64-Bit-Quelloperanden 110, der einen ersten 64-Bit-Wert 111 aufweisen soll (in der Darstellung mit „WORD” markiert), explizit angeben (z. B. durch ein oder mehrere Felder oder einen Bitsatz) oder auf sonstige Weise anzeigen (z. B. implizit anzeigen) und kann einen zweiten 64-Bit-Quelloperanden 112, der einen zweiten 64-Bit-Wert 113 aufweisen soll (in der Darstellung mit „IN” markiert), explizit angeben oder auf sonstige Weise anzeigen. Außerdem kann der RSA-Beschleunigungsbefehl einen dritten 64-Bit-Quelloperanden 114, der einen dritten 64-Bit-Wert 115 aufweisen soll (in der Darstellung mit „CARRY” markiert), explizit angeben oder auf sonstige Weise anzeigen und kann einen vierten 64-Bit-Quelloperanden 116, der einen vierten 64-Bit-Wert 117 aufweisen soll (in der Darstellung mit „OUT” markiert), explizit angeben oder auf sonstige Weise anzeigen.
  • Unter neuerlicher Bezugnahme auf 1 umfasst der Prozessor eine Dekodiereinheit oder einen Dekodierer 104. Die Dekodiereinheit kann Befehle empfangen und dekodieren, darunter den RSA-Beschleunigungsbefehl 102. Die Dekodiereinheit kann einen oder mehrere Mikrobefehle, Mikrovorgänge, Mikrocode-Eintrittspunkte, dekodierte Befehle oder Steuersignale oder sonstige relativ niedrigerstufige Befehle oder Steuersignale ausgeben, die den RSA-Beschleunigungsbefehl widerspiegeln, darstellen und/oder von diesem abstammen. Der/Das eine oder die mehreren relativ niedrigerstufigen Befehle oder Steuersignale können den relativ höherstufigen RSA-Beschleunigungsbefehl durch einen oder mehrere relativ niedrigerstufige (z. B. schaltungsstufige oder hardwarestufige) Vorgänge implementieren. In manchen Ausführungsformen kann die Dekodiereinheit eine oder mehrere Eingabestrukturen (z. B. einen oder mehrere Eingangsanschlüsse, Eingangszwischenverbindungen, eine Eingangsschnittstelle usw.) zum Empfangen des Befehls, eine mit den Eingangsstrukturen gekoppelte Befehlserkennungslogik zum Empfangen und Erkennen des RSA-Beschleunigungsbefehls, eine mit der Erkennungslogik gekoppelte Dekodierlogik zum Empfangen und Dekodieren des RSA-Beschleunigungsbefehls und eine oder mehrere mit der Dekodierlogik gekoppelte Ausgabestrukturen (z. B. einen oder mehrere Ausgangsanschlüsse, Ausgangszwischenverbindungen, eine Ausgangsschnittstelle usw.) zum Ausgeben eines oder mehrerer entsprechender niedrigerstufiger Befehle oder Steuersignale umfassen. Die Erkennungslogik und die Dekodierlogik können unter Anwendung diverser unterschiedlicher Mechanismen implementiert werden, darunter, ohne auf diese beschränkt zu sein, Mikrocode-Nur-Lese-Arbeitsspeicher(-ROM), Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLA) und sonstige zum Implementieren fachbekannter Codes angewandte Mechanismen.
  • Der Prozessor 100 umfasst auch einen Satz Register 108. In manchen Ausführungsformen können die Register Allzweckregister umfassen, die ausgelegt sind, 64-Bit-Daten zu fassen. Der Begriff „Allzweck-” wird häufig zur Bezeichnung einer Fähigkeit von Daten oder Adressen in den Registern verwendet, obwohl dies nicht erforderlich ist. Jedes der Allzweckregister kann einen Speicherplatz auf dem Nacktchip darstellen, der zum Speichern von Daten ausgelegt ist. Die Allzweckregister können architektonisch sichtbare Register (z. B. eine architektonische Registerdatei) darstellen. Die architektonisch sichtbaren oder architektonischen Register sind für die Software und/oder einen Programmierer sichtbar und/oder sind die durch Befehle angezeigten Register zum Identifizieren von Operanden. Diese architektonischen Register werden anderen, nicht architektonischen oder nicht architektonisch sichtbaren Registern in einer gegebenen Mikroarchitektur (z. B. vorläufigen Registern, Neuordnungspuffern, Rückordnungsregistern usw.) gegenübergestellt. Die Register können auf unterschiedliche Arten in unterschiedlichen Mikroarchitekturen unter Anwendung hinlänglich bekannter Techniken implementiert werden und sind nicht auf eine bestimmte Art von Schaltung beschränkt. Diverse unterschiedliche Arten von Registern sind geeignet. Beispiele für geeignete Register umfassen, ohne auf diese beschränkt zu sein, gewidmete physische Register, dynamisch zugewiesene physische Register unter Verwendung von Registerumbenennung und Kombinationen daraus. In manchen Ausführungsformen kann das Register jene aus 5 sein, wenngleich der Schutzumfang der Erfindung nicht darauf beschränkt ist.
  • Wie dargestellt, kann in manchen Ausführungsformen der erste 64-Bit-Quelloperand 110 in einem ersten Allzweckregister, der zweite 64-Bit-Quelloperand 112 in einem zweiten Allzweckregister, der dritte 64-Bit-Quelloperand 114 in einem dritten Allzweckregister und der vierte 64-Bit-Quelloperand 116 in einem vierten Allzweckregister gespeichert werden. In manchen Ausführungsformen kann das Allzweckregister RAX gegebenenfalls zum Speichern des zweiten 64-Bit-Quelloperanden verwendet werden, der den Parameter IN aufweisen soll. In manchen Ausführungsformen kann das RAX-Register dem Befehl implizit angezeigt werden oder implizit sein. Vorteilhafterweise kann die Verwendung des Registers RAX erhöhte Übereinstimmung mit den im Befehl MOV und MUL aus Tabelle 1 verwendeten bestimmten Registern bereitstellen. Alternativ dazu können andere Register verwendet werden oder kann gegebenenfalls ein zusätzlicher MOV-Befehl, ähnlich dem ersten MOV-Befehl in Zeile 1 der Tabelle 1, verwendet werden. Alternativ dazu können Arbeitsspeicherplätze oder sonstige Speicherplätze für einen oder mehrere der vier Quelloperanden verwendet werden. Beispielsweise können in manchen Ausführungsform Arbeitsspeichervorgänge potenziell für einen oder mehrere aus dem ersten und dem vierten Quelloperanden verwendet werden, wenngleich dies nicht erforderlich ist.
  • Unter neuerlicher Bezugnahme auf 1 ist die Ausführeinheit 106 mit der Dekodiereinheit 104 und den Registern 108 gekoppelt. Beispielsweise kann die Ausführeinheit eine arithmetische Einheit, eine arithmetische Logikeinheit, eine digitale Schaltung zum Durchführen arithmetischer und logischer Vorgänge, eine digitale Schaltung einschließlich eines Multiplikators und Addierers oder dergleichen umfassen. Die Ausführeinheit kann den einen oder die mehreren dekodierten oder auf sonstige Weise umgewandelten Befehle oder Steuersignale empfangen, die den RSA-Beschleunigungsbefehl 102 darstellen und/oder von diesem abstammen. Die Ausführeinheit kann auch den ersten 64-Bit-Quelloperanden 110, der den ersten 64-Bit-Wert 111 aufweisen soll (in der Darstellung als „WORD” markiert), den zweiten 64-Bit-Quelloperanden 112, der einen zweiten 64-Bit-Wert 113 aufweisen soll (in der Darstellung mit „IN” markiert), den dritten 64-Bit-Quelloperanden 114, der einen dritten 64-Bit-Wert 115 aufweisen soll (in der Darstellung mit „CARRY” markiert), und den vierten 64-Bit-Quelloperanden 116, der einen vierten 64-Bit-Wert 117 aufweisen soll (in der Darstellung mit „OUT” markiert), empfangen. Die Ausführeinheit ist ausgelegt, als Antwort auf den RSA-Beschleunigungsbefehl und/oder als Folge davon (z. B. als Antwort auf eine(n) oder mehrere Befehle oder Steuersignale, die direkt oder indirekt (z. B. durch Emulation) aus dem Befehl dekodiert wurden) ein Ergebnis zu speichern.
  • In manchen Ausführungsformen kann das Ergebnis einen Wert umfassen, der gleich dem ersten 64-Bit-Wert (WORD) multipliziert mit dem zweiten 64-Bit-Wert (IN) addiert zu dem dritten 64-Bit-Wert (CARRY) addiert zu dem vierten 64-Bit-Wert (OUT) ist und/oder diesen darstellt. In manchen Ausführungsformen kann das Ergebnis in einem ersten 64-Bit-Zielortoperanden 118, der durch den Befehl angegeben oder auf sonstige Weise angezeigt wird, und einem zweiten 64-Bit-Zielortoperanden 120, der durch den Befehl angegeben oder auf sonstige Weise angezeigt wird, gespeichert werden. In manchen Ausführungsformen kann eine niedrigstwertige (z. B. niedrigstrangige) 64-Bit-Hälfte des Ergebnisses 119 (in der Darstellung als „OUT*” markiert) in dem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden 118 gespeichert werden. D. h., der erste 64-Bit-Zielortoperand 118 kann Bits [63:0] des Ergebnisses WORD*IN + CARRY + OUT speichern. In manchen Ausführungsformen kann eine höchstwertige (z. B. höchstrangige) 64-Bit-Hälfte des Ergebnisses 121 (in der Darstellung mit „CARRY*” markiert) in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden 120 gespeichert werden. D. h., der zweite 64-Bit-Zielortoperand 120 kann Bits [127:64] des Ergebnisses WORD*IN + CARRY + OUT speichern.
  • Wie dargestellt können in manchen Ausführungsformen der erste und der zweite Zielortoperand 118, 120 gegebenenfalls Register (z. B. Allzweckregister) sein. In manchen Ausführungsformen kann das Allzweckregister RDX gegebenenfalls zum Speichern des zweiten 64-Bit-Zielortoperanden verwendet werden, der den Parameter CARRY* aufweisen soll. In manchen Ausführungsformen kann das RDX-Register dem Befehl implizit angezeigt oder implizit sein. Vorteilhafterweise kann die Verwendung des Registers RDX erhöhte Übereinstimmung mit dem von den ADC-Befehlen aus Zeile 6 der Tabelle 1 verwendeten bestimmten Register bereitstellen und kann helfen, den Befehl MOV in Zeile 7 zu beseitigen. Alternativ dazu können andere Register verwendet werden und/oder kann gegebenenfalls ein zusätzlicher Befehl MOV, ähnlich dem zweiten Befehl MOV in Zeile 7 der Tabelle 1, verwendet werden. Alternativ dazu können anstelle der Verwendung von Registern Arbeitsspeicherplätze oder sonstige Speicherplätze für einen oder mehrere der Zieloperanden verwendet werden. Beispielsweise kann in manchen Ausführungsformen ein Speichervorgang gegebenenfalls für den ersten Zieloperanden verwendet werden, wenngleich dies nicht erforderlich ist.
  • Die Ausführeinheit und/oder der Prozessor können konkrete oder bestimmte Logik (z. B. Transistoren, eine integrierte Schaltungsanordnung oder sonstige potenziell mit Firmware (z. B. in nicht flüchtigem Arbeitsspeicher gespeicherten Befehlen) und/oder Software kombinierte Hardware) umfassen, die ausgelegt ist, den RSA-Beschleunigungsbefehl durchzuführen und/oder das Ergebnis als Antwort auf und/oder als Folge des RSA-Beschleunigungsbefehls (z. B. als Antwort auf eine(n) oder mehrere Befehle oder Steuersignale, die aus dem RSA-Beschleunigungsbefehl dekodiert sind oder auf sonstige Weise davon abstammen) zu speichern. In manchen Ausführungsformen kann die Ausführeinheit eine oder mehrere Eingabestrukturen (z. B. einen oder mehrere Eingabeanschlüsse, Eingabezwischenverbindungen, eine Eingabeschnittstelle usw.) zum Empfangen von mit der einen oder den mehreren Eingabestrukturen gekoppelte Quelloperanden, einer Schaltungsanordnung oder Logik (z. B. eines Multiplikators und zumindest eines Addierers), um die Quelloperanden zu empfangen und zu verarbeiten und den Ergebnisoperanden zu erzeugen, sowie eine oder mehrere mit der Schaltungsanordnung oder Logik gekoppelte Ausgabestrukturen (z. B. einen oder mehrere Ausgabeanschlüsse, Ausgabezwischenverbindungen, eine Ausgabeschnittstelle usw.) zum Ausgeben des Ergebnisoperanden umfassen. In manchen Ausführungsformen kann die Ausführeinheit die Schaltungsanordnung oder Logik aus 3 umfassen.
  • Um ein Verunklaren der Beschreibung zu vermeiden, wird ein relativ simpler Prozessor 100 dargestellt und beschrieben. In anderen Ausführungsformen kann der Prozessor gegebenenfalls noch weitere hinlänglich bekannte Prozessorkomponenten umfassen. Mögliche Beispiele für solche Komponenten umfassen, ohne auf diese beschränkt zu sein, eine Befehlsabrufeinheit, Befehls- und Daten-Caches, zweit- oder höherstufige Caches, Out-of-Order-Ausführungslogik, eine Befehlseinplanungseinheit, eine Registerumbenennungseinheit, eine Rückordnungseinheit, eine Busschnittstelleneinheit, Befehls- und Datenübersetzungspuffer, Vorabrufpuffer, Mikrobefehlswarteschlangen, Mikrobefehlssequenzierer, weitere in Prozessoren aufgenommene Komponenten und diverse Kombinationen aus diesen. Zahlreiche unterschiedliche Kombinationen und Konfigurationen solcher Komponenten sind geeignet. Ausführungsformen sind auf keine bekannte Kombination oder Konfiguration beschränkt. Darüber hinaus können in Prozessoren aufgenommene Ausführungsformen mehrere Kerne, logische Prozessoren oder Ausführungs-Engines aufweisen, wovon zumindest eine eine Dekodiereinheit und eine Ausführeinheit zum Anwenden einer Ausführungsform eines RSA-Beschleunigungsbefehls aufweist.
  • 2 ist ein Blockflussbild einer Ausführungsform eines Verfahrens 230 zur Verarbeitung einer Ausführungsform eines RSA-Beschleunigungsbefehls. In diversen Ausführungsformen kann das Verfahren durch einen Prozessor, eine Befehlsverarbeitungsvorrichtung oder eine sonstige Logikvorrichtung durchgeführt werden. In manchen Ausführungsformen können die Vorgänge und/oder Verfahren aus 2 durch den Prozessor und/oder innerhalb des Prozessors aus 1 durchgeführt werden. Die Komponenten, Merkmale und konkreten optionalen Details, die hierin in Bezug auf den Prozessor aus 1 beschrieben sind, gelten gegebenenfalls auch für die Vorgänge und/oder das Verfahren aus 2. Alternativ dazu können die Vorgänge und/oder das Verfahren aus 2 durch einen ähnlichen oder anderen Prozessor oder eine ähnliche oder andere Vorrichtung und/oder innerhalb davon durchgeführt werden. Darüber hinaus kann der Prozessor und/oder die Vorrichtung aus 1 Vorgänge und/oder Verfahren durchführen, die gleich oder ähnlich sind wie jene in 2 oder anders.
  • Das Verfahren umfasst das Empfangen des RSA-Beschleunigungsbefehls in Block 231. In diversen Aspekten kann der Befehl an einem Prozessor, einer Befehlsverarbeitungsvorrichtung oder einem Abschnitt davon (z. B. einer Befehlsabrufeinheit, einer Dekodiereinheit, einer Busschnittstelleneinheit usw.) empfangen werden. In diversen Aspekten kann der Befehl von einer Quelle außerhalb eines Nacktchips (z. B. von Arbeitsspeicher, einer Zwischenverbindung usw.) oder von einer Quelle auf einem Nacktchip (z. B. von einem Befehls-Cache, einer Befehlswarteschlange usw.) empfangen werden. Der RSA-Beschleunigungsbefehl kann einen ersten 64-Bit-Quelloperanden mit einem ersten 64-Bit-Wert (z. B. WORD) angeben oder auf sonstige Weise anzeigen, einen zweiten 64-Bit-Quelloperanden mit einem zweiten 64-Bit-Wert (z. B. IN) angeben oder auf sonstige Weise anzeigen, einen dritten 64-Bit-Quelloperanden mit einem dritten 64-Bit-Wert (z. B. CARRY) angeben oder auf sonstige Weise anzeigen und einen vierten 64-Bit-Quelloperanden mit einem vierten 64-Bit-Wert (z. B. OUT) angeben oder auf sonstige Weise anzeigen.
  • Im Block 232 wird als Antwort auf den RSA-Beschleunigungsbefehl und/oder als Folge davon ein Ergebnis gespeichert. Repräsentativ kann eine Ausführeinheit, eine Befehlsverarbeitungsvorrichtung oder ein Prozessor den Befehl durchführen und das Ergebnis speichern. In manchen Ausführungsformen kann das Ergebnis den ersten 64-Bit-Wert (WORD) multipliziert mit dem zweiten 64-Bit-Wert (IN) addiert zu dem dritten 64-Bit-Wert (CARRY) addiert zu dem vierten 64-Bit-Wert (OUT) umfassen. In manchen Ausführungsformen kann eine niedrigstwertige (z. B. niedrigstrangige) 64-Bit-Hälfte des Ergebnisses (z. B. OUT*) in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden gespeichert werden. In manchen Ausführungsformen kann eine höchstwertige (z. B. höchstrangige) 64-Bit-Hälfte des Ergebnisses (CARRY*) in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden gespeichert werden. Wie dargestellt, können in manchen Ausführungsformen die Zielortoperanden Allzweckregister sein. Alternativ dazu können Arbeitsspeicherplätze oder sonstige Speicherplätze gegebenenfalls für einen oder mehrere dieser Operanden verwendet werden.
  • In manchen Ausführungsformen kann das Verfahren 230 durchgeführt werden, während ein RSA-Algorithmus implementiert wird. In manchen Ausführungsformen kann das Verwendung während einer Implementierung eines RSA-Algorithmus durch eine OpenSSL-Bibliothek durchgeführt werden. In manchen Ausführungsformen kann das Verfahren während einer Funktion bn_mul_mont der Implementierung des RSA-Algorithmus durch eine OpenSSL-Bibliothek durchgeführt werden.
  • Das dargestellte Verfahren beinhaltet architektonische Vorgänge (z. B. jene, die aus einer Softwareperspektive sichtbar sind). In weiteren Ausführungsformen kann das Verfahren gegebenenfalls einen oder mehrere mikroarchitektonische Vorgänge umfassen. Beispielsweise kann der Befehl abgerufen, dekodiert, außerhalb der Reihenfolge eingeplant werden, auf Quelloperanden kann zugegriffen werden, eine Ausführeinheit kann mikroarchitektonische Vorgänge durchführen, um den Befehl zu implementieren, usw. In manchen Ausführungsformen können die mikroarchitektonischen Vorgänge zum Implementieren des Befehls gegebenenfalls einen Multiplikationsvorgang und zwei Additionsvorgänge umfassen.
  • 3 ist ein Blockschaltbild eines Ausführungsbeispiels für eine Mikroarchitektur für eine Ausführungsform einer Ausführeinheit 306. Die Ausführeinheit umfasst einen Multiplikator 334. Der Multiplikator kann eine zum Empfangen eines ersten 64-Bit-Werts (z. B. WORD) von einem ersten 64-Bit-Quelloperanden gekoppelte erste 64-Bit-Eingabe und eine zum Empfangen eines zweiten 64-Bit-Werts (z. B. IN) von einem ersten 64-Bit-Quelloperanden gekoppelte zweite 64-Bit-Eingabe aufweisen. Der Multiplikator kann ausgelegt sein, den ersten und den zweiten 64-Bit-Wert zu multiplizieren, um ein 128-Bit-Produkt (z. B. WORD*IN) zu bilden. Der Multiplikator kann eine 128-Bit-Ausgabe zum Ausgeben des Produkts aufweisen.
  • Die Ausführeinheit umfasst auch einen ersten 128-Bit-Addierer 336. Der erste 128-Bit-Addierer weist eine mit der 128-Bit-Ausgabe des Multiplikators gekoppelte 128-Bit-Eingabe zum Empfangen des 128-Bit-Produkts (z. B. WORD*IN) auf. Außerdem weist der erste 128-Bit-Addierer eine zum Empfangen eines dritten 64-Bit-Werts (z. B. CARRY) gekoppelte 64-Bit-Eingabe. Der erste 128-Bit-Addierer kann den dritten 64-Bit-Wert zu dem 128-Bit-Produkt addieren, um eine erste 128-Bit-Summe hervorzubringen (z. B. WORD*IN + CARRY). Der erste 128-Bit-Addierer kann eine 128-Bit-Ausgabe zum Ausgeben der ersten 128-Bit-Summe aufweisen.
  • Die Ausführeinheit umfasst auch einen zweiten 128-Bit-Addierer 338. Der zweite 128-Bit-Addierer weist eine mit der 128-Bit-Ausgabe des ersten Addierers gekoppelte 128-Bit-Eingabe zum Empfangen der ersten 128-Bit-Summe (z. B. WORD*IN + CARRY) auf. Außerdem weist der zweite 128-Bit-Addierer eine zum Empfangen eines vierten 64-Bit-Werts (z. B. OUT) gekoppelte 64-Bit-Eingabe. Der zweite 128-Bit-Addierer kann den vierten 64-Bit-Wert zu der ersten 128-Bit-Summe addieren, um eine zweite 128-Bit-Summe hervorzubringen (z. B. WORD*IN + CARRY + OUT). In manchen Ausführungsformen kann der zweite 128-Bit-Addierer eine erste 64-Bit-Ausgabe zum Ausgeben einer ersten, niederrangigen 64-Bit-Hälfte der zweiten 128-Bit-Summe (z. B. Bits [63:0] des Werts WORD*IN + CARRY + OUT) an einen ersten 64-Bit-Zielortoperanden aufweisen. Der zweite 128-Bit-Addierer kann auch eine zweite 64-Bit-Ausgabe zum Ausgeben einer zweiten, höherrangigen 64-Bit-Hälfte der zweiten 128-Bit-Summe (z. B. Bits [127:64] des Werts WORD*IN + CARRY + OUT) an einen zweiten 64-Bit-Zielortoperanden aufweisen.
  • 4 zeigt Pseudocode, der einen Vorgang eines Ausführungsbeispiels für einen RSA-Beschleunigungsbefehl 402 darstellt. Der RSA-Beschleunigungsbefehl weist das pneumonische RSAFMAA128 auf. Der Befehl RSAFMAA128 weist ein Format auf, bei dem ein 64-Bit-Quell-/Zielortoperand (DEST) explizit angegeben ist, ein 64-Bit-Quelloperand (SRC) explizit angegeben ist, ein 64-Bit-Quell-Allzweckregister RAX implizit ist und ein 64-Bit-Quell-/Zielort-Allzweckregister RDX implizit ist. Die Register RAX und RDX sind in der Befehlskodierung in Klammern dargestellt, um anzuzeigen, dass sie implizit sind. In weiteren Ausführungsformen können weniger oder mehr Operanden explizit angegeben sein und/oder können weniger oder mehr Vorgänge implizit sein.
  • In dem Pseudocode stehen TEMP1, TEMP2 und TEMP3 für vorläufige Register (z. B. mikroarchitektonische Register). Das Symbol ← steht für Speicherung. In weiteren Ausführungsformen können weniger oder mehr vorläufige Register gegebenenfalls verwendet werden. Der Vorgang COMBINE wird zum Kombinieren zweier 64-Bit-Operanden in einen 128-Bit-Operanden verwendet. Beispielsweise ist COMBINE(0x1, 0x2) = 0x10000000000000002. Zu bemerken ist, dass die Additionen an 128-Bit-Operanden vorgenommen werden, was einen höheren Wirkungsgrad und/oder eine höhere Geschwindigkeit bereitstellt, als wenn zwei getrennte Paare der Befehle ADD und ADC durchgeführt werden müssen.
  • DEST wird zunächst als Quelloperand und dann anschließend als Zielortoperand verwendet. DEST kann ein 64-Bit-Allzweckregister oder ein 64-Bit-Arbeitsspeicherplatz sein und verfügt über Lese- und Schreibfähigkeit. In Fällen, in denen der Wert von OUT geerbt ist, kann ein Register gewisse Vorteile bieten, während in Fällen, in denen OUT nicht geerbt ist, Vorteile damit einhergehen können, einen Arbeitsspeicherplatz zu verwenden. In manchen Ausführungsformen kann SRC ein 64-Bit-Allzweckregister oder ein 64-Bit-Arbeitsspeicherplatz sein und verfügt über Lesefähigkeit, aber nicht zwingend auch über Schreibfähigkeit.
  • Vorteilhafterweise kann in manchen Ausführungsformen RAX zum Bereitstellen des Parameters IN verwendet werden. Das kann erhöhte Übereinstimmung mit dem ersten Befehl MOV in Zeile 1 der Tabelle 1 bereitstellen. Alternativ dazu kann ein anderes Register verwendet und/oder ein zusätzlicher Befehl MOV außerhalb des Befehls RSAFMAA128 aufgenommen werden.
  • Vorteilhafterweise kann in manchen Ausführungsformen RDX als Zielortoperand zum Bereitstellen des Parameters CARRY* verwendet werden. Dies kann erhöhte Übereinstimmung mit dem letzten Befehl MOV in Zeile 7 der Tabelle 1 bereitstellen. Alternativ dazu kann kann ein anderes Register verwendet und/oder ein zusätzlicher Befehl MOV außerhalb des Befehls RSAFMAA128 aufgenommen werden. Zu beachten ist auch, dass in manchen Ausführungsformen RDX sowohl anfänglich als Quelloperand zum Bereitstellen eines Parameters (z. B. CARRY) als auch nachfolgend als Zielortoperand verwendet werden kann. Eine solche Wiederverwendung kann dazu beitragen, zu vermeiden, dass ein weiteres Register benötigt wird. Alternativ dazu kann gegebenenfalls ein weiteres Register als Quelloperand verwendet werden, um den Parameter (z. B. CARRY) bereitzustellen. Der Wert von RDX kann während der Iterationen geerbt werden.
  • 5 ist ein Blockschaltbild eines Ausführungsbeispiels für ein geeignetes Befehlsformat 550. Das Befehlsformat umfasst einen Vorgangscode oder Opcode 552. Der Opcode kann eine Vielzahl von Bits oder ein oder mehrere Felder darstellen, die ausgelegt sind, den durchzuführenden Befehl und/oder Vorgang zu identifizieren. In manchen Ausführungsformen kann der Opcode einen RSA-Beschleunigungsvorgang darstellen oder einem solchen zugeordnet sein.
  • Das Befehlsformat umfasst auch eine Quellen-/Zielortangabe 554 und eine Quellenangabe 556. Beispielsweise kann jede dieser Angaben Bits oder ein oder mehrere Felder zum Angeben einer Adresse eines Registers, eines Arbeitsspeicherplatzes oder eines sonstigen Speicherplatzes umfassen. Die Quellen-/Zielortangabe 554 soll einen Speicherplatz angeben, der einen Quelloperanden aufweisen soll, und derselbe angegebene Speicherplatz soll auch als Zielort dienen, an dem ein Ergebnisoperand gespeichert werden soll. Die Quellenangabe 556 soll auch einen Speicherplatz angeben, der einen weiteren Quelloperanden aufweisen soll.
  • In manchen Ausführungsformen weist der Befehl auch eine implizite RAX-Quelle 558 auf. Mit „implizit” ist gemeint, dass das Befehlsformat keine Bits oder ein oder mehrere Felder aufweisen muss, um das RAX-Register anzugeben, sondern dass vielmehr das RAX-Register dem Befehl implizit (z. B. dem Opcode implizit) sein kann. In manchen Ausführungsformen weist der Befehl auch eine(n) implizite(n) RDX-Quelle/-Zielort 560 auf. Das RDX-Register kann anfänglich zum Speichern eines Quelloperanden und nachfolgend zum Speichern eines zu speichernden Zielortoperanden verwendet werden.
  • Es versteht sich, dass dies nur ein Ausführungsbeispiel für ein geeignetes Befehlsformat ist. Dieses Befehlsformat gibt oder zeigt auf sonstige Weise nur zwei Operanden/Speicherplätze an, während die anderen implizit bleiben. In weiteren Ausführungsformen können weniger oder mehr Operanden explizit angegeben sein. In diversen Ausführungsformen kann der Befehl ein Format aufweisen, das einen, zwei, drei oder mehr als drei Operanden explizit angibt, wobei die anderen implizit sind. Darüber hinaus ist die veranschaulichte Ordnung/Anordnung der Felder nicht erforderlich, vielmehr können die Felder umgeordnet werden. Felder müssen keine zusammenhängenden Abfolgen von Bits umfassen, sondern können aus nicht zusammenhängenden oder getrennten Bits zusammengesetzt sein. Gewisse Felder können sich möglicherweise überschneiden. Alternative Ausführungsformen können auch gegebenenfalls zusätzliche Felder hinzufügen. Beispielsweise kann ein Feld oder ein Bit oder können mehrere Bits hinzugefügt werden, um eine Operandengröße anzugeben, einen Vorgang als signiert oder unsigniert zu qualifizieren, anzuzeigen, ob Sättigung verwendet werden soll oder nicht, usw.
  • 6 zeigt ein Ausführungsbeispiel für einen geeigneten 64-Bit-Allzweckregistersatz 608. Der 64-Bit-Registersatz umfasst sechzehn 64-Bit- oder Quadword-Allzweckregister. Diese Register werden als RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14 und R15 bezeichnet. Beispielsweise können unsignierte Quadword-Integer mit 64-Bits in den Registern RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP oder R8–R15 gespeichert werden. Diese Register sind im 32-Bit-Modus auch ausgelegt, 32-Bit-Operanden zu speichern. Die niedrigeren 32-Bits der Register RAX, RBX, RCX, RDX, RSI, RDI, RBP bzw. RSP entsprechen jeweils den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP. Unsignierte Doppelwort-Integer mit 32-Bits können in den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, R8D–R15D gespeichert werden. The niedrigeren 32-Bits der Register R8–R15 sind auch im 32-Bit-Modus adressierbar und werden mit R8D–R15D bezeichnet. Diese 32-Bit-Register sind auch im 16-Bit- und im 8-Bit-Modus adressierbar. Die niedrigeren 16 Bits der Register EAX, EBX, ECX und EDX werden als AX, BX, CX bzw. DX bezeichnet (nicht dargestellt). Beispielsweise können unsignierte Wort-Integer mit 16-Bits in den Registern BX, CX bzw. DX gespeichert werden. Diese Allzweckregister sind in diversen Prozessoren der x86-Architektur erhältlich und eignen sich zur Implementierung einer oder mehrerer Ausführungsformen, wenngleich diese bestimmten Register nicht erforderlich sind. Weitere Prozessoren können weniger oder mehr Register aufweisen, müssen solches Aliasing größerer Register an kleineren Registern nicht anwenden, können Register unterschiedlicher Größen aufweisen usw.
  • Komponenten, Merkmale und optionale Details, die für eine der 3 bis 6 beschrieben sind, können gegebenenfalls auch in einer der 1 und 2 verwendet werden. Darüber hinaus können hierin für eine der hierin beschriebenen Vorrichtungen beschriebene Komponenten, Merkmale und optionale Details gegebenenfalls in einem der hierin beschriebenen Verfahren verwendet werden und/oder für dieses gelten, die in Ausführungsformen durch eine solche Vorrichtung und/oder mit einer solchen Vorrichtung durchgeführt werden können. Des Weiteren können für jeden der hierin beschriebenen Prozessoren beschriebene Komponenten, Merkmale und optionale Details gegebenenfalls in einem der hierin beschriebenen Systeme verwendet werden und/oder für dieses gelten, die in Ausführungsformen solche Prozessoren umfasse können.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf unterschiedliche Arten, zu unterschiedlichen Zwecken und in unterschiedlichen Prozessoren implementiert werden. Beispielsweise können Implementierungen solcher Kerne die folgenden umfassen: 1) einen Allzweck-In-Order-Kern, der für Allzweckcomputerarbeiten vorgesehen ist; 2) einen Hochleistungs-Allzweck-Out-of-Order-Kern, der für Allzweckcomputerarbeiten vorgesehen ist; 3) einen Spezialzweckkern, der in erster Linie für Grafik und/oder wissenschaftliche (Durchsatz-)Computerarbeiten vorgesehen ist. Implementierungen unterschiedlicher Prozessoren können Folgendes umfassen: 1) einen CPU, der einen oder mehrere Allzweck-In-Order-Kerne, die für Allzweckcomputerarbeiten vorgesehen sind, und/oder einen oder mehrere Allzweck-Out-of-Order-Kerne, die für Allzweckcomputerarbeiten vorgesehen sind, umfasst; und 2) einen Koprozessor, der einen oder mehrere Spezialzweckkerne umfasst, die in erster Linie für Grafik und/oder wissenschaftlichen (Durchsatz) vorgesehen sind. Solche unterschiedlichen Prozessoren führen zu unterschiedlichen Computersystemarchitekturen, die die folgenden umfassen können: 1) den Koprozessor auf einem vom CPU gesonderten Chip; 2) den Koprozessor auf einem gesonderten Nacktchip in demselben Gehäuse wie ein CPU; 3) den Koprozessor auf demselben Nacktchip wie ein CPU (wobei in diesem Fall ein solcher Koprozessor manchmal als Allzwecklogik bezeichnet wird, wie z. B. integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik oder als Spezialzweckkerne); und 4) ein Ein-Chip-System, das auf demselben Nacktchip den beschriebenen CPU (der manchmal als Anwendungskern(e) oder Anwendungsprozessor(en) bezeichnet wird), den oben stehend beschriebenen Koprozessor und weitere Funktionen umfassen kann. Beispielhafte Kernarchitekturen sind als nächstes beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen.
  • Beispielhafte Kernarchitekturen
  • Blockschaltbild von In-Order- und Out-of-Order-Kernen
  • 7A ist ein Blockschaltbild, das sowohl eine beispielhafte In-Order-Pipeline als auch eine beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline gemäß Ausführungsformen der Erfindung zeigt. 7B ist ein Blockschaltbild, das sowohl ein Ausführungsbeispiel für einen In-Order-Architekturkern als auch einen beispielhaften Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Architekturkern zum Einbau in einen Prozessor gemäß Ausführungsformen der Erfindung zeigt. Die mit durchgezogenen Linien umrahmten Kästen in den 7A–B zeigen die In-Order-Pipeline und den In-Order-Kern, während der optionale Zusatz der mit gestrichelten Linien umrahmten Kästen die Registerumbenennungs-Out-of-Order-Ausgabe/Ausführungs-Pipeline und den entsprechenden Kern zeigt. Da der In-Order-Aspekt ein Teilsatz des Out-of-Order-Aspektes ist, wird der Out-of-Order-Aspekt beschrieben.
  • In 7A umfasst eine Prozessor-Pipeline 700 eine Abrufstufe 702, eine Längendekodierstufe 704, eine Dekodierstufe 706, eine Zuteilungsstufe 708, eine Umbenennungsstufe 710, eine Einplanungs-(auch als Versende- oder Ausgabe-)Stufe 712, eine Registerlese-/Arbeitsspeicherlesestufe 714, eine Ausführstufe 716, eine Rückschreibe-/Arbeitsspeicherschreibestufe 718, eine Ausnahmenbehandlungsstufe 722 und eine Abschlussstufe 724.
  • 7B zeigt einen Prozessorkern 790, der eine Frontendeinheit 730 gekoppelt mit einer Ausführmaschineneinheit 750 umfasst, und beide sind an eine Arbeitsspeichereinheit 770 gekoppelt. Der Kern 790 kann ein reduzierter Befehlssatzberechnungs-(RISC)Kern, ein komplexer Befehlssatzberechnungs-(CISC-)Kern, ein Sehr-langes-Befehlswort-(VLIW-)Kern oder eine Hybrid- oder alternative Kernart sein. Als noch eine weitere Option kann der Kern 790 ein Spezialzweckkern sein, wie z. B. ein Netzwerk- oder Kommunikationskern, eine Kompressionsmaschine, ein Koprozessorkern, ein Allzweckberechnungsgrafikverarbeitungseinheits-(GPGPU-)Kern, ein Grafikkern oder dergleichen.
  • Die Frontendeinheit 730 umfasst eine Verzweigungsvorhersageeinheit 732 gekoppelt mit einer Befehls-Cache-Einheit 734, die mit einem Befehlsübersetzungspuffer (TLB) 736 gekoppelt ist, der an eine Befehlsabrufeinheit 738 gekoppelt ist, die mit einer Dekodiereinheit 740 gekoppelt ist. Die Dekodiereinheit 740 (oder der Dekodierer) kann Befehle dekodieren und als Ausgabe einen oder mehrere Mikrovorgänge, Mikrocodeeintrittspunkte, Mikrobefehle, sonstige Befehle oder sonstige Steuersignale erzeugen, die aus den ursprünglichen Befehlen dekodiert sind oder diese auf sonstige Weise widerspiegeln oder von diesen abstammen. Die Dekodiereinheit 740 kann unter Anwendung diverser unterschiedlicher Mechanismen implementiert werden. Beispiele für geeignete Mechanismen umfassen, ohne auf diese beschränkt zu sein, Nachschlagtabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLA), Mikrocode-Nur-Lese-Arbeitsspeicher(-ROM) usw. In einer Ausführungsform umfasst der Kern 790 einen Mikrocode-ROM oder ein sonstiges Medium, das Mikrocode für gewisse Makrobefehle (z. B. in der Dekodiereinheit 740 oder ansonsten innerhalb der Frontendeinheit 730) speichert. Die Dekodiereinheit 740 ist mit einer Umbenennungs-/Zuteilungseinheit 752 in der Ausführmaschineneinheit 750 gekoppelt.
  • Die Ausführmaschineneinheit 750 umfasst die Umbenennungs-/Zuteilungseinheit 752 gekoppelt mit einer Rückordnungseinheit 754 und einem Satz einer oder mehrerer Einplanungseinheiten 756. Die eine oder die mehreren Schedulereinheiten 756 stellen jedwede Anzahl unterschiedlicher Scheduler dar, darunter Reservierungsstationen, zentrales Befehlsfenster usw. Die eine oder die mehreren Schedulereinheiten 756 sind mit der einen oder den mehreren physischen Registerdatei(en)einheiten 758 gekoppelt. Jede der physischen Registerdatei(en)einheiten 758 stellt eine oder mehrere unterschiedliche Datenarten dar, z. B. skalaren Integer, skalares Gleitkomma, Vektorinteger, Vektorgleitkomma, Status (z. B. einen Befehlszeiger, der die Adresse des nächsten auszuführenden Befehls ist) usw. In einer Ausführungsform umfasst die physische Registerdatei(en)einheit 758 eine Vektorregistereinheit, eine Schreibmaskenregistereinheit und eine skalare Registereinheit. Diese Registereinheiten können architektonische Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die eine oder die mehreren physischen Registerdatei(en)einheiten 758 sind mit der Rückordnungseinheit 754 überlappt dargestellt, um unterschiedliche Arten zu zeigen, wie Registerumbenennung und Out-of-Order-Ausführung implementiert werden können (z. B. unter Verwendung eines oder mehrerer Umordnungspuffer und einer oder mehrerer Rückordnungsregisterdateien; unter Verwendung einer oder mehrerer Zukunftsdateien, eines oder mehrerer Verlaufspuffer und einer oder mehrerer Rückordnungsregisterdateien; unter Verwendung einer Registerkarte und eines Registerpools; usw.). Die Rückordnungseinheit 754 und die eine oder die mehrerer physischen Registerdatei(en)einheiten 758 sind mit dem einen oder den mehreren Ausführclustern 760 gekoppelt. Der eine oder die mehreren Ausführcluster 760 umfassen einen Satz einer oder mehrerer Ausführeinheiten 762 und einen Satz einer oder mehrerer Arbeitsspeicherzugriffseinheiten 764. Die Ausführeinheiten 762 können diverse Vorgänge (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an diversen Arten von Daten (z. B. skalarem Gleitkomma, verpacktem Integer, verpacktem Gleitkomma, Vektorinteger, Vektorgleitkomma) durchführen. Während manche Ausführungsformen eine Reihe von bestimmten Funktionen oder Gruppen von Funktionen gewidmete Ausführeinheiten umfassen können, können weitere Ausführungsformen nur eine Ausführeinheit oder mehrere Ausführeinheiten umfassen, die alle alle Funktionen ausüben. Die eine oder die mehreren Schedulereinheiten 756, die eine oder die mehreren physischen Registerdatei(en)einheiten 758 und der eine oder die mehreren Ausführcluster 760 sind als möglicherweise in der Mehrzahl angeführt, weil gewisse Ausführungsformen gesonderte Pipelines für gewisse Arten von Daten/Vorgängen erzeugen (z. B. eine Skalarintegerpipeline, eine Pipeline für skalares Gleitkomma/gepackten Integer/gepacktes Gleitkomma/Vektorinteger/Vektorgleitkomma und/oder eine Arbeitsspeicherzugriffspipeline, die jeweils ihre eigene Schedulereinheit, ihre eigene physische Registerdatei(en)einheit und/oder ihren eigenen Ausführclutster aufweisen – und im Falle einer gesonderten Arbeitsspeicherzugriffspipeline sind gewisse Ausführungsformen implementiert, bei denen nur der Ausführcluster dieser Pipeline die eine oder die mehreren Arbeitsspeicherzugriffseinheiten 764 aufweist). Zudem versteht sich, dass dort, wo gesonderte Pipelines verwendet werden, eine oder mehrere dieser Pipeline Out-of-Order-Ausgabe/Ausführung sein kann und die anderen in der Reihenfolge sind.
  • Der Satz an Arbeitsspeicherzugriffseinheiten 764 ist mit der Arbeitsspeichereinheit 770 gekoppelt, die eine Daten-TLB-Einheit 772 umfasst, die mit einer Daten-Cache-Einheit 774 gekoppelt ist, die wiederum mit einer Level-2-(L2-)Cache-Einheit 776 gekoppelt ist. In einem Ausführungsbeispiel können die Speicherzugriffseinheiten 764 eine Lasteinheit, eine Speicheradresseneinheit und eine Speicherdateneinheit umfassen, wobei jede davon mit der Daten-TLB-Einheit 772 in der Arbeitsspeichereinheit 770 gekoppelt ist. Die Befehls-Cache-Einheit 734 ist des Weiteren mit einer Level-2-(L2-)Cache-Einheit 776 in der Arbeitsspeichereinheit 770 gekoppelt. Die L2-Cache-Einheit 776 ist mit einem oder mehreren Cache-Levels und schließlich mit einem Hauptarbeitsspeicher gekoppelt.
  • Beispielsweise kann die beispielhafte Registerumbenennungs-Out-of-Order-Ausgabe-/Ausführungskernarchitektur die Pipeline 700 wie folgt implementieren: 1) der Befehlsabruf 738 führt die Abruf- und Längendekodierstufen 702 und 704 durch; 2) die Dekodiereinheit 740 für die Dekodierstufe 706 durch; 3) die Umbenennungs-/Zuteilungseinheit 752 führt die Zuteilungsstufe 708 und die Umbenennungsstufe 710 durch; 4) die eine oder die mehreren Schedulereinheiten 756 führen die Einplanungsstufe 712 durch 5) die physisiche(n) Registerdatei(en)einheit(en) 758 und die Arbeitsspeichereinheit 770 führen die Registerlese-/Arbeitsspeicherlesestufe 714 durch; der Ausführcluster 760 führt die Ausführstufe 716 durch; 6) die Arbeitsspeichereinheit 770 und die eine oder die mehreren physischen Registerdatei(en)einheiten 758 führen die Rückschreibe-/Arbeitsspeicherschreibestufe 718 durch; 7) diverse Einheiten können an der Ausnahmenbehandlungsstufe 722 beteiligt sein; und 8) die Rückordnungseinheit 754 und die eine oder die mehreren physischen Registerdatei(en)einheiten 758 führen die Abschlussstufe 724 durch.
  • Der Kern 790 kann einen oder mehrere Befehlssätze unterstützen (z. B. den x86-Befehlssatz (mit manchen Erweiterungen, die in neueren Versionen hinzugefügt wurden); den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, USA; den ARM-Befehlssatz (mit optionalen zusätzlichen Erweiterungen, wie z. B. NEON) von ARM Holdings aus Sunnyvale, Kalifornien, USA), darunter den einen oder die mehreren hierin beschriebenen Befehle. In einer Ausführungsform umfasst der Kern 790 Logik zur Unterstützung einer gepackten Datenbefehlssatzerweiterung (z. B. AVX1, AVX2), wodurch es möglich ist, die von vielen multimedialen Anwendungen angewandten Vorgänge unter Verwendung gepackter Daten durchzuführen.
  • Es versteht sich, dass der Kern Multithreading (die Ausführung von zwei oder mehr Sätzen von Vorgängen oder Strängen parallel) unterstützen kann und dies auf vielerlei Arten tun kann, darunter Zeitschicht-Multithreading, gleichzeitiges Multithreading (wobei ein einziger physischer Kern einen logischen Kern für jeden der Stränge, den der physische Kern gleichzeitig multithreadet, bereitstellt) oder eine Kombination daraus (z. B. Zeitschichtabrufen und Dekodieren und gleichzeitiges Multithreading danach, wie z. B. bei der Intel®-Hyperthreading-Technologie).
  • Zwar wird Registerumbenennung im Kontext der Out-of-Order-Ausführung beschrieben, dennoch versteht sich, dass Registerumbenennung auch in einer In-Order-Architektur zum Einsatz kommen kann. Während die veranschaulichte Ausführungsform des Prozessors auch gesonderte Befehls- und Daten-Cache-Einheiten 734/774 und eine gemeinsam genutzte L2-Cache-Einheit 776 umfasst, können alternative Ausführungsformen einen einzigen internen Cache sowohl für Befehle als auch für Daten aufweisen, z. B. einen internen Level-1-(L1-)Cache oder mehrere Levels internen Cache. In manchen Ausführungsformen kann das System eine Kombination eines internen Cache und eines externen Cache umfassen, die außerhalb des Kerns und/oder des Prozessors liegt. Alternativ dazu kann der gesamte Cache außerhalb des Kerns und/oder des Prozessors liegen.
  • Konkrete beispielhafte In-Order-Kernarchitektur
  • Die 8A–B zeigen ein Blockschaltbild einer konkreteren beispielhaften In-Order-Kernarchitektur, wobei dieser Kern einer von mehreren Logikblöcken (zu denen andere Kerne derselben Art und/oder andere Arten gehören) in einem Chip wäre. Die Logikblöcke kommunizieren durch ein Zwischenverbindungsnetzwerk mit hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger Logik mit fester Funktion, Arbeitsspeicher-I/O-Schnittstellen und sonstiger notwendiger I/O-Logik, je nach Anwendung.
  • 8A ist ein Blockschaltbild eines Einzelprozessorkerns zusammen mit dessen Verbindung mit dem auf dem Nacktchip gelegenen Zwischenverbindungsnetzwerk 802 und mit dessen lokalem Teilsatz des Level-2-(L2-)Caches 804 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Befehlsdekodierer 800 den x86-Befehlssatz mit einer Erweiterung eines Befehlssatzes gepackter Daten. Ein L1-Cache-806 ermöglicht Zugriffe auf Cache-Arbeitsspeicher in die skalaren und Vektoreinheiten mit niedriger Latenz. Während in einer Ausführungsform (um den Aufbau zu vereinfachen) eine skalare Einheit 808 und eine Vektoreinheit 810 gesonderte Registersätze verwendet (die skalaren Register 812 bzw. Vektorregister 814) und zwischen diesen übertragene Daten auf Arbeitsspeicher geschrieben und dann in Form eines Level-1-(L1-)Caches 806 zurückgelesen werden, können alternative Ausführungsformen der Erfindung auf einen anderen Ansatz zurückgreifen (z. B. einen einzigen Registersatz verwenden oder einen Kommunikationspfad umfassen, der ein Übertragen von Daten zwischen den beiden Registerdateien ermöglicht, ohne dass diese geschrieben und rückgelesen werden).
  • Der lokale Teilsatz des L2-Caches 804 ist Teil eines globalen L2-Caches, der in gesonderte lokale Teilsätze unterteilt wird, einen pro Prozessorkern. Jeder Prozessorkern weist einen Direktzugriffspfad auf seinen eigenen lokalen Teilsatz des L2-Caches 804 auf. Durch einen Prozessorkern gelesene Daten werden in ihrem L2-Cache-Teilsatz 804 und es kann rasch darauf zugeriffen werden, parallel zu anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden im prozessoreigenen L2-Cache-Teilsatz 804 gespeichert und nötigenfalls aus anderen Teilsätzen ausgesondert. Das Ringnetzwerk gewährleistet Kohärenz für gemeinsam verwendete Daten. Das Ringnetzwerk ist bidirektional, und ermöglicht es Agenten wie Prozessorkernen, L2-Caches und sonstigen Logikblöcken, miteinander innerhalb des Chips zu kommunizieren. Jeder Ringdatenpfad ist pro Richtung 1012 Bits breit.
  • 8B ist eine Vergrößerungsansicht eines Teils des Prozessorkerns in 8A gemäß Ausführungsformen der Erfindung. 8B umfasst einen L1-Daten-Cache 806A als Teil des L1-Caches 804 sowie mehr Details zur Vektoreinheit 810 und zu den Vektorregistern 814. Konkret ist die Vektoreinheit 810 eine 16-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 828), die einen oder mehrere von Integer-, Single-Precision-Gleitkommazahlen- und Double-Precision-Gleitkommazahlen-Befehlen ausführt. Die VPU unterstützt ein Verquirlen der Registereinhaben mit einer Verquirleinheit 820, numerische Umwandlung mit Zahlenumwandlungseinheiten 822A–B und Replikation mit der Replikationseinheit 824 auf der Arbeitsspeichereingabe. Schreibmaskenregister 826 ermöglichen eine Vorhersage der resultierenden Vektorschreibdaten.
  • Prozessor mit integrierter Arbeitsspeichersteuerung und Grafik
  • 9 ein Blockschaltbild eines Prozessors 900, der mehr als einen Kern aufweisen kann, eine integrierte Arbeitsspeichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung. Die mit durchgezogenen Linien umrahmten Kästen in 9 zeigen einen Prozessor 900 mit einem einzigen Kern 902A, einem Systemagenten 910, einem Satz einer oder mehrerer Bussteuerungsseinheiten 916, während der optionale Zusatz der mit gestrichelten Linien umrahmten Kästen einen alternativen Prozessor 900 mit mehreren Kernen 902A–N, einem Satz einer oder mehrerer integrierter Arbeitsspeichersteuerungseinheiten 914 in der Systemagenteneinheit 910 und eine Spezialzwecklogik 908 zeigt.
  • Somit können unterschiedliche Implementierungen des Prozessors 900 Folgendes umfassen: 1) eine CPU, wobei die Spezialzwecklogik 908 integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik ist (wobei das einen oder mehrere Kerne umfassen kann) und die Kerne 902A–N ein oder mehrere Allzweckkerne sind (z. B. Allzweck-In-Order-Kerne, Allzweck-Out-of-Order-Kerne, eine Kombination dieser beiden); 2) einen Koprozessor, wobei die Kerne 902A–N eine große Anzahl Spezialzweckkerne sind, die in erster Linie für Grafik und/oder wissenschaftlichen (Durchsatz) vorgesehen sind; und 3) einen Koprozessor, wobei die Kerne 902A–N eine große Anzahl an Allzweck-In-Order-Kernen sind. Somit kann der Prozessor 900 ein Allzweckprozessor, ein Koprozessor oder ein Spezialzweckprozessor sein, wie z. B. ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU (Allzweckgrafikverarbeitungseinheit), ein Hochdurchsatzkoprozessor mit vielen integrierten Kernen (MIC) (der 30 oder mehr Kerne umfasst), ein eingebetteter Prozessor oder dergleichen. Der Prozessor kann auf einem oder mehreren Chips implementiert werden. Der Prozessor 900 kann Teil von einem oder mehreren Substraten sein und/oder unter Anwendung jedweder aus einer Reihe von Prozesstechnologien, wie z. B. BiCMOS, CMOS oder NMOS, auf einem oder mehreren Substraten implementiert werden.
  • Die Arbeitsspeicherhierarchie umfasst ein oder mehrere Cache-Levels innerhalb der Kerne, einen Satz oder eine oder mehrere gemeinsam verwendete Cache-Einheiten 906 und (nicht dargestellten) externen Arbeitsspeicher gekoppelt mit dem Satz integrierter Speichersteuerungseinheiten 914. Der Satz gemeinsam verwendeter Cache-Einheiten 906 kann einen oder mehrere Caches mittlerer Level, wie z. B. Level 2 (L2), Level 3 (L3), Level 4 (L4) oder sonstige Cache-Levels, einen Last-Level-Cache (LLC) und/oder Kombinationen von diesen umfassen. Während in einer Ausführungsform eine ringbasierte Zwischenverbindungseinheit 912 die integrierte Grafiklogik 908, den Satz gemeinsam verwendeter Cache-Einheiten 906 und die Systemagenteneinheit 910/integrierte Arbeitsspeichersteuerungseinheit(en) 914 verbindet, können alternative Ausführungsformen jedwede Anzahl hinlänglich bekannter Techniken zum Verbinden solcher Einheiten anwenden. In einer Ausführungsform wird ein Zusammenhalt zwischen einer oder mehreren Cache-Einheiten 906 und Kernen 902A–N aufrechterhalten.
  • In manchen Ausführungsformen ist einer oder sind mehrere der Kerne 902A–N zu Multithreading in der Lage. Der Systemagent 910 umfasst jene Komponenten, die die Kerne 902A–N koordinieren und betätigen. Die Systemagenteneinheit 910 kann z. B. eine Leistungssteuerungseinheit (PCU) und eine Anzeigeeinheit umfassen. Die PCU kann Logik und Komponenten sein oder umfassen, die zur Regelung des Energieversorgungszustands der Kerne 902A–N und der integrierten Grafiklogik 908 benötigt werden. Die Anzeigeeinheit dient dem Antrieb einer oder mehrerer extern verbundener Anzeigen.
  • Die Kerne 902A–N können, was ihren Architekturbefehlssatz betrifft, homogen oder heterogen sein; d. h. zwei oder mehr der Kerne 902A–N können zur Ausführung des gleichen Befehlssatzes in der Lage sein, während andere nur in der Lage sein können, einen Teilsatz dieses Befehlssatzes oder einen anderen Befehlssatz auszuführen.
  • Beispielhafte Computerarchitekturen
  • Die 1013 sind Blockschaltbilder beispielhafter Computerarchitekturen. Weitere fachbekannte Auslegungen und Konfigurationen für Laptops, Tischcomputer, Handheld-PCs, personale digitale Assistenten, Technikarbeitsplätze, Server, Netzwerkvorrichtungen, Netzwerk-Hubs, Schalter, eingebettete Prozessoren, Digitalsignalprozessoren (DSP), Grafikvorrichtungen, Videospielvorrichtungen, Set-Top-Boxen, Mikrosteuerungen, Mobiltelefone, tragbare Mediaplayer, Handheld-Vorrichtungen und diverse sonstige elektronische Vorrichtungen sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt an Systemen oder elektronischen Vorrichtungen, die in der Lage sind, einen Prozessor und/oder sonstige Ausführungslogik wie hierin offenbart zu beherbergen, allgemein geeignet.
  • Unter nunmehriger Bezugnahme auf 10 ist ein Blockschaltbild eines Systems 1000 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 1000 kann einen oder mehrere Prozessoren 1010, 1015 umfassen, die mit einem Steuerungs-Hub 1020 gekoppelt sind. In einer Ausführungsform umfasst der Steuerungs-Hub 1020 einen Grafikarbeitsspeichersteuerungs-Hub (GMCH) 1090 und einen Eingabe-/Ausgabe-Hub (IOH) 1050 (die auf gesonderten Chips sein können); der GMCH 1090 umfasst einen Arbeitsspeicher- und eine Grafiksteuerung, mit denen ein Arbeitsspeicher 1040 und ein Koprozessor 1045 gekoppelt sind; der IOH 1050 koppelt Eingabe-/Ausgabe-(I/O-)Vorrichtungen 1060 mit dem GMCH 1090. Alternativ dazu sind eine oder beide von Arbeitsspeicher- und Grafiksteuerung in den Prozessor integriert (wie hierin beschrieben), sind der Arbeitsspeicher 1040 und der Koprozessor 1045 direkt mit dem Prozessor 1010 gekoppelt und der Steuerungs-Hub 1020 mit dem IOH 1050 in einem Einzelchip.
  • Die optionale Natur der zusätzlichen Prozessoren 1015 ist in 10 mit unterbrochenen Linien dargestellt. Jeder Prozessor 1010, 1015 kann einen oder mehrere der hierin beschriebenen Verarbeitungskerne umfassen und die eine oder andere Version des Prozessors 900 sein.
  • Der Arbeitsspeicher 1040 kann z. B. dynamischer Direktzugriffsspeicher (DRAM), Phasenwechselspeicher (PCM) oder eine Kombination der beiden sein. Für zumindest eine Ausführungsform kommuniziert der Steuerungs-Hub 1020 mit dem Prozessor oder den Prozessoren 1010, 1015 über einen Multidropbus, wie z. B. einen Vorderseitenbus (FSB), eine Punkt-zu-Punkt-Schnittstelle, wie z. B. QuickPath Interconnect (QPI) oder eine ähnliche Verbindung 1095.
  • In einer Ausführungsform ist der Koprozessor 1045 ein Spezialzweckprozessor, wie z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungs-Hub 1020 einen integrierten Grafikbeschleuniger umfassen.
  • Es kann eine Vielzahl verschiedener Unterschiede zwischen den physischen Ressourcen 1010, 1015 vorliegen, was ein lohnendes Spektrum an Maßen betrifft, darunter architektonische, mikroarchitektonische, thermische, Energieverbrauchseigenschaften und dergleichen.
  • In einer Ausführungsform führt der Prozessor 1010 Befehle aus, die Datenverarbeitungsvorgänge einer allgemeinen Art steuern. In die Befehle eingebettet können Koprozessorbefehle sein. Der Prozessor 1010 erkennt diese Koprozessorbefehle als von einer Art, die durch den angeschlossenen Koprozessor 1045 ausgeführt werden sollten. Dementsprechend gibt der Prozessor 1010 diese Koprozessorbefehle (oder Steuersignale, die Koprozessorbefehle darstellen) auf einem Koprozessorbus oder einer sonstigen Zwischenverbindung an den Koprozessor 1045 aus. Der eine oder die mehreren Koprozessoren 1045 nehmen die empfangenen Koprozessorbefehle an und führen sie aus.
  • Unter nunmehriger Bezugnahme auf 11 ist ein Blockschaltbild eines ersten konkreteren Beispielsystems 1100 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie aus 11 hervorgeht, ist das Multiprozessorsystem 1100 ein Punkt-zu-Punkt-Zwischenverbindungssystem und umfasst einen ersten Prozessor 1170 und einen zweiten Prozessor 1180, die über eine Punkt-zu-Punkt-Zwischenverbindung 1150 gekoppelt sind. Jeder der Prozessoren 1170 und 1180 kann irgendeine Version des Prozessors 900 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 1170 und 1180 die Prozessoren 1010 bzw. 1015, während der Koprozessor 1138 der Koprozessor 1045 ist. In einer weiteren Ausführungsform sind die Prozessoren 1170 und 1180 der Prozessor 1010 bzw. der Koprozessor 1045.
  • Die Prozessoren 1170 und 1180 sind einschließlich integrierter Arbeitsspeichersteuerungs-(IMC-)Einheiten 1172 bzw. 1182 dargestellt. Der Prozessor 1170 umfasst als Teil seiner Bussteuerungseinheiten auch Punkt-zu-Punkt-(P-P-)Schnittstellen 1176 und 1178; desgleichen umfasst der zweite Prozessor 1180 die P-P-Schnittstellen 1186 und 1188. Die Prozessoren 1170, 1180 können Informationen über eine Punkt-zu-Punkt-(P-P-)Schnittstelle 1150 unter Verwendung der P-P-Schnittstellenschaltungen 1178, 1188 austauschen. Wie in 11 dargestellt, koppeln die IMC 1172 und 1182 die Prozessoren mit jeweiligen Arbeitsspeichern, nämlich einem Arbeitsspeicher 1132 und einem Arbeitsspeicher 1134, die Abschnitte des lokal an die jeweiligen Prozessoren angeschlossenen Hauptarbeitsspeichers sind.
  • Die Prozessoren 1170, 1180 können jeweils Informationen mit einem Chipsatz 1190 über einzelne P-P-Schnittstellen 1152, 1154 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 1176, 1194, 1186, 1198 austauschen. Der Chipsatz 1190 kann gegebenenfalls Informationen mit dem Koprozessor 1138 über eine Hochleistungsschnittstelle 1139 austauschen. In einer Ausführungsform ist der Koprozessor 1138 ein Spezialzweckprozessor, z. B. ein Hochdurchsatz-MIC-Prozessor, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, ein Grafikprozessor, eine GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein (nicht dargestellter) gemeinsam verwendeter Cache kann in einen der Prozessoren aufgenommen oder außerhalb beider Prozessoren, aber mittels P-P-Zwischenverbindung mit den Prozessoren verbunden sein, sodass die Cache-Informationen eines der beiden oder beider Prozessoren in dem gemeinsam verwendeten Cache gespeichert werden kann, falls ein Prozessor in einen Niedrigleistungsmodus versetzt wird.
  • Der Chipsatz 1190 kann über eine Schnittstelle 1196 mit einem ersten Bus 1116 gekoppelt sein. In einer Ausführungsform kann der erste Bus 1116 ein Peripheral-Component-Interconnect-(PCI-)Bus oder ein Bus wie ein PCI-Express-Bus oder ein sonstiger I/O-Zwischenverbindungsbus der dritten Generation sein, wenngleich der Schutzumfang der Erfindung nicht auf diese beschränkt ist.
  • Wie aus 11 hervorgeht, können diverse I/O-Vorrichtungen 1114 mit dem ersten Bus 1116 gekoppelt sein, zusammen mit einer Busbrücke 1118, die den ersten Bus 1116 mit einem zweiten 1120 koppelt. In einer Ausführungsform sind mit dem ersten Bus 1116 ein oder mehrere zusätzliche Prozessoren 1115, z. B. Koprozessoren, Hochdurchsatz-MIC-Prozessoren, GPGPU, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs-(DSP-)Einheiten), feldprogrammierbare Gate-Anordnungen oder jedweder sonstige Prozessor, gekoppelt. In einer Ausführungsform kann der zweite Bus 1120 ein Low-Pin-Count-(LPC-)Bus sein. Diverse Vorrichtungen können mit einem zweiten Bus 1120 gekoppelt sein, darunter z. B. eine Tastatur und/oder eine Maus 1122, Kommunikationsvorrichtungen 1127 und eine Speichereinheit 1128, wie z. B. in einer Ausführungsform ein Plattenlaufwerk oder eine sonstige Massenspeicherungsvorrichtung, die Befehle/Code und Daten 1130 umfassen kann. Des Weiteren kann eine Audio-I/O 1124 mit dem zweiten Bus 1120 gekoppelt sein. Es gilt zu beachten, dass auch andere Architekturen möglich sind. Beispielsweise kann anstelle der Punkt-zu-Punkt-Architektur aus 11 ein System einen Multidropbus oder eine sonstige derartige Architektur implementieren.
  • Unter nunmehriger Bezugnahme auf 12 ist ein Blockschaltbild eines zweiten, konkreteren, beispielhaften Systems 1200 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Gleiche Elemente in den 11 und 12 tragen gleiche Bezugszeichen, und gewisse Aspekte der 11 wurden in 12 weggelassen, um ein Verunklaren anderer Aspekte der 12 zu vermeiden.
  • 12 zeigt, dass die Prozessoren 1170, 1180 integrierte Arbeitsspeicher- und I/O-Steuerlogik („CL”) 1172 bzw. 1182 umfassen können. Somit umfassen die CL 1172, 1182 integrierte Arbeitsspeichersteuerungseinheiten, und sie umfassen I/O-Steuerlogik. 12 zeigt, dass nicht nur die Arbeitsspeicher 1132, 1134 mit den CL 1172, 1182 gekoppelt sind, sondern auch I/O-Vorrichtungen 1214 ebenfalls mit der Steuerlogik 1172, 1182 gekoppelt sind. Alt-I/O-Vorrichtungen 1215 sind mit dem Chipsatz 1190 gekoppelt.
  • Unter nunmehriger Bezugnahme auf 13 ist ein Blockschaltbild eines SoC 1300 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 9 tragen die gleichen Bezugszeichen. Außerdem sind mit gestrichelten Linien umrahmte Kästen optionale Merkmale auf weiter fortgeschrittenen SoC. In 13 ist eine oder sind mehrere Zwischenverbindungseinheiten 1302 mit Folgendem gekoppelt: einem Anwendungsprozessor 1310, der einen Satz eines oder mehrerer Kerne 202A–N und eine oder mehrere gemeinsam verwendete Cache-Einheiten 906 umfasst; einer Systemagenteneinheit 910; einer oder mehreren Bussteuerungseinheiten 916; einer oder mehreren integrierten Arbeitsspeichersteuerungseinheiten 914; einem Satz oder einem oder mehreren Koprozessoren 1320, die integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor umfassen können; einer statischen Direktzugriffsspeicher-(SRAM-)Einheit 1330; einer Direktzugriffsspeicher-(DMA-)Einheit 1332; und einer Anzeigeeinheit 1340 zum Koppeln mit einer oder mehreren externen Anzeigen. In einer Ausführungsform umfasst der eine oder umfassen die mehreren Koprozessoren 1320 einen Spezialzweckprozessor, wie z. B. einen Netzwerk- oder Kommunikationsprozessor, eine Kompressionsmaschine, eine GPGPU, einen Hochdurchsatz-MIC-Prozessor, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination solcher Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode implementiert werden, die auf programmierbaren Systemen ausgeführt werden, die zumindest einen Prozessor, ein Speichersystem (einschließlich flüchtigen und nicht flüchtigen Arbeitsspeicher und/oder von Speicherelementen), zumindest eine Eingabevorrichtung und zumindest eine Ausgabevorrichtung umfasst.
  • Programmcode, wie z. B. der in 11 dargestellte Code 1130, kann auf Eingabebefehle angewandt werden, um die hierin beschriebenen Funktionen auszuüben und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf eine oder mehrere Ausgabevorrichtungen in bekannter Manier angewandt werden. Für die Zwecke dieser Anwendung umfasst ein Verarbeitungssystem jedwedes System, das einen Prozessor aufweist, wie z. B. einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor.
  • Der Programmcode kann in einer hochrangigen verfahrensverlaufs- oder objektorientierten Programmiersprache implementiert werden, um mit einem Verarbeitungssystem zu kommunizieren. Der Programmcode kann auch in Assembler- oder Maschinensprache implementiert werden, falls erwünscht. Die hierin beschriebenen Mechanismen sind tatsächlich in ihrem Schutzumfang auf keine bestimmte Programmiersprache beschränkt. Die Sprache kann sogar eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte zumindest einer Ausführungsform können durch auf einem maschinenlesbaren Medium, das diverse Logik innerhalb des Prozessors darstellt, gespeicherte repräsentative Befehle implementiert werden, die, wenn sie von einer Maschine gelesen werden, die Maschine dazu bringen, Logik zur Anwendung der hiein beschriebenen Techniken herzustellen. Solche Darstellungen, bekannt als „IP-Kerne”, können auf einem greifbaren, maschinenlesbaren Medium gespeichert und zum Laden in die Fertigungsmaschinen, die die Logik oder den Prozessor letztlich herstellen, an diverse Kunden oder Herstellungseinrichtungen geliefert werden.
  • Solche maschinenlesbaren Speichermedien können, ohne auf diese beschränkt zu sein, nicht flüchtige, greifbare Anordnungen von durch eine Maschine oder Vorrichtung hergestellten oder ausgebildeten Artikeln umfassen, darunter Speichermedien, wie z. B. Festplatten, jedwede sonstige Art von Platte, darunter Disketten, optische Platten, Kompaktplatten-Nur-Lese-Arbeitsspeicher (CD-ROM), wiederbeschreibbare Kompaktplatten (CD-RW) und magnetooptische Platten, Halbleitervorrichtungen, wie z. B. Nur-Lese-Arbeitsspeicher (ROM), Direktzugriffsspeicher (RAM), wie z. B. dynamische Direktzugriffsspeicher (DRAM), statische Direktzugriffsspeicher (SRAM), löschbare programmierbare Nur-Lese-Arbeitsspeicher (EPROM), Flash-Arbeitsspeicher, elektrisch löschbare programmierbare Nur-Lese-Arbeitsspeicher (EEPROM), Phasenwechselarbeitsspeicher (PCM), magnetische oder optische Karten oder jedwede sonstige Art von Medien, die zum Speichern elektronischer Befehle geeignet sind.
  • Dementsprechend umfassen Ausführungsformen der Erfindung auch nicht flüchtige, greifbare, maschinenlesbare Medien, die Befehle oder Auslegungsdaten enthalten, wie z. B. Hardware Description Language (HDL), die hierin beschriebene Strukturen, Schaltungen, Vorrichtungen, Prozessoren und/oder Systemmerkmale definiert. Solche Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (darunter binäre Übersetzung, Code-Morphing usw.)
  • In manchen Fällen kann ein Befehlswandler zum Umwandeln eines Befehls von einem Quellbefehlssatz in einen Zielbefehlssatz verwendet werden. Beispielsweise kann der Befehlswandler einen Befehl in einen oder mehrere Befehle zur Verarbeitung durch den Kern übersetzen (z. B. unter Anwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich von dynamischer Kompilierung), morphen, emulieren oder auf sonstige Art und Weise umwandeln. Der Befehlswandler kann in Software, Hardware, Firmware oder einer Kombination von diesen implementiert werden. Der Befehlswandler kann sich auf dem Prozessor, abseits des Prozessors oder zum Teil auf dem Prozessor und zum Teil abseits davon befinden.
  • 14 ist ein Blockschaltbild, das die Verwendung eines Softwarebefehlswandlers zum Umwandeln binärer Befehle in einen Quellbefehlssatz in binäre Befehle in einem Zielbefehlssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der dargestellten Ausführungsform ist der Befehlswandler ein Softwarebefehlswandler, wenngleich der Befehlswandler alternativ in Software, Firmware, Hardware oder diversen Kombinationen daraus implementiert werden kann. 14 zeigt, wie ein Programm in einer hochrangigen Sprache 1402 unter Verwendung eines x86-Kompilierers 1404 kompiliert werden kann, um x86-Binärcode 1406 zu erzeugen, der nativ durch einen Prozessor mit zumindest einem x86-Befehlssatzkern 1416 ausgeführt werden kann. Der Prozessor mit zumindest einem x86-Befehlssatzkern 1416 stellt jedweden Prozessor dar, der im Wesentlichen die gleichen Funktionen ausüben kann wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern, indem er kompatibel (1) einen wesentlichen Anteil des Befehlssatzes des Intel-x86-Befehlssatzkerns oder (2) Objektcodeversionen von Anwendungen oder sonstiger Software, die zum Betrieb auf einem Intel-Prozessor mit zumindest einem x86-Befehlssatzkern vorgesehen ist, ausführt oder auf sonstige Weise verarbeitet, um im Wesentlichen das gleiche Ergebnis zu erzielen wie ein Intel-Prozessor mit zumindest einem x86-Befehlssatzkern. Der x86-Kompilierer 1404 stellt einen Kompilierer dar, der ausgelegt ist, x86-Binärcode 1406 (z. B. Objektcode) zu erzeugen, der mit zusätzlicher Verknüpfungsverarbeitung oder ohne diese auf dem Prozessor mit zumindest einem x86-Befehlssatzkern 1416 ausgeführt werden kann. Desgleichen zeigt 14, wie das Programm in der hochrangigen Sprache 1402 unter Verwendung eines alternativen Befehlssatzkompilierers 1408 kompiliert werden kann, um alternativen Befehlssatzbinärcode 1410 zu erzeugen, der nativ durch einen Prozessor ohne zumindest einen x86-Befehlssatzkern 1414 (z. B. einen Prozessor mit Kernen, die den MIPS-Befehlssatz von MIPS Technologies aus Sunnyvale, Kalifornien, USA ausführen und/oder die den ARM-Befehlssatz von ARM Holdings aus Sunnyvale, Kalifornien, USA ausführen) ausgeführt werden kann. Der Befehlswandler 1412 wird zum Umwandeln des x86-Binärcodes 1406 in den Code verwendet, der durch den Prozessor ohne einen x86-Befehlssatzkern 1414 nativ ausgeführt werden kann. Dieser umgewandelte Code ist wahrscheinlich nicht der gleiche wie der alternative Befehlssatzbinärcode 1410, weil ein hierzu fähiger Befehlswandler schwer herzustellen ist; dennoch schafft der umgewandelte Code den allgemeinen Vorgang und besteht aus Befehlen aus dem alternativen Befehlssatz. Somit stellt der Befehlswandler 1412 Software, Firmware, Hardware oder einer Kombination daraus dar, die durch Emulation, Simulation oder jedweden sonstigen Vorgang ermöglicht, dass ein Prozessor oder eine sonstige elektronische Vorrichtung, die keinen x86-Befehlssatzprozessor oder -kern aufweist, den x86-Binärcode 1406 ausführt.
  • In der Beschreibung und den Patentansprüchen kann es sein, dass die Begriffe „gekoppelt” und/oder „verbunden” zusammen mit ihren Ableitungen verwendet wurden. Diese sind nicht als Synonyme füreinander vorgesehen. Vielmehr kann in Ausführungsformen „verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physikalischen und/oder elektrischen Kontakt miteinander stehen. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physikalischem und/oder elektrischem Kontakt miteinander stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander stehen, aber trotzdem noch immer miteinander zusammenarbeiten oder wechselwirken. Beispielsweise kann die Ausführeinheit durch eine oder mehrere dazwischen liegende Komponenten mit einem oder mehreren Registern und/oder einer Dekodiereinheit gekoppelt sein. In den Figuren dienen Pfeile dazu, Verbindungen und Kopplungen anzuzeigen.
  • Der Begriff „und/oder” kann verwendet worden sein. Hierin verwendet bedeutet der Begriff „und/oder” eines oder das andere oder beide (z. B. A und/oder B bedeutet A oder B oder sowohl A als auch B).
  • In der obigen Beschreibung wurden konkrete Details dargelegt, um ein gründliches Verständnis der Ausführungsformen zu bieten. Es können jedoch andere Ausführungsformen ohne einige dieser spezifischen Details betrieben werden. Der Schutzrahmen der Erfindung ist nicht durch die oben genannten spezifischen Beispiele, sondern nur durch die Ansprüche unten festgelegt. Bei anderen Beispielen wurden wohlbekannte Schaltungen, Strukturen, Vorrichtungen und Vorgänge in Form eines Blockdiagramms und/oder ohne Details gezeigt, um eine Verzerrung des Verständnisses der Beschreibung zu vermeiden. Wo es geeignet erschien, wurden Referenzzahlen oder die letzten Teile der Referenzzahlen zwischen den Figuren wiederholt, um entsprechende oder analoge Elemente anzuzeigen, die optional ähnliche oder die gleichen Eigenschaften haben können, sofern es nicht spezifiziert ist oder anderweitig klar offensichtlich ist.
  • Gewisse Vorgänge können durch Hardware-Komponenten durchgeführt werden oder können in von Maschinen oder Schaltungen ausführbaren Befehlen eingebettet sein, die benutzt werden können, um zu veranlassen und/oder dazu zu führen, dass eine Maschine, Schaltung oder Hardware-Komponente (z. B. ein Prozessor, Teil eines Prozessors, Schaltung etc.), der/die mit den Befehlen programmiert ist, die Vorgänge durchführt. Die Vorgänge können auch gegebenenfalls durch eine Kombination aus Hardware und Software durchgeführt werden. Ein Prozessor, eine Maschine, Schaltung oder Hardware kann spezifische oder bestimmte Schaltungsanordnungen oder andere Logik umfassen (z. B. Hardware gegebenenfalls mit Firmware und/oder Software kombiniert) und ist in der Lage, den Befehl auszuführen und/oder zu bearbeiten und ein Ergebnis als Antwort auf den Befehl zu speichern.
  • Einige Ausführungsformen umfassen einen Produktionsartikel (z. B. ein Computerprogrammprodukt), das ein maschinenlesbares Medium umfasst. Das Medium kann einen Mechanismus umfassen, der Information in einer Form, die von der Maschine lesbar ist, bereitstellt, beispielsweise speichert. Das maschinenlesbare Medium kann eine Befehlsabfolge bereitstellen oder darauf gespeichert haben, die, wenn sie und/oder während sie von einer Maschine ausgeführt wird, ausgelegt ist, die Maschine zu veranlassen, eine oder mehrere hierin beschriebene Vorgänge, Verfahren oder Techniken auszuführen und/oder zur Ausführung durch die Maschine führt. Das maschinenlesbare Medium kann eine oder mehrere der Ausführungsformen der hierin offenbarten Befehle speichern oder anderweitig bereitstellen.
  • In manchen Ausführungsformen kann das maschinenlesbare Medium ein greifbares und/oder nicht-greifbares maschinenlesbares Speichermedium umfassen. Beispielsweise kann das greifbare und/oder nicht greifbare maschinenlesbare Speichermedium eine Diskette, ein optisches Speichermedium, eine optische Speicherplatte, eine optische Datenspeichervorrichtung, eine CD-ROM, eine magnetische Diskette, eine magnetoptische Diskette, einen Nur-Lese-Arbeitsspeicher (ROM), einen programmierbaren Nur-Lese-Arbeitsspeicher (PROM), einen löschbaren programmierbaren Nur-Lese-Arbeitsspeicher (EPROM), einen elektrisch löschbaren programmierbaren Nur-Lese-Arbeitsspeicher (EEPROM), einen Direktzugriffsspeicher (RAM), einen statischen Direktzugriffsspeicher (SRAM), einen dynamischen Direktzugriffsspeicher (DRAM), einen Flash-Speicher, einen Phasenwechselspeicher, ein Phasenwechseldatenspeichermaterial, ein nichtflüchtiger Speicher, eine nichtflüchtige Datenspeichervorrichtung, ein nicht flüchtiger Speicher, eine nicht flüchtige Datenspeichervorrichtung oder dergleichen.
  • Beispiele geeigneter Maschinen umfassen, sind aber nicht darauf beschränkt, einen Allzweckprozessor, einen Sonderprozessor, eine Befehlsverarbeitungsvorrichtung, eine Logikschaltung, eine integrierte Schaltung oder dergleichen. Noch weitere Beispiele geeigneter Maschinen umfassen eine Rechenvorrichtung oder andere elektronische Vorrichtung, die einen Prozessor, Befehlsverarbeitungsvorrichtung, digitale Logikschaltung oder integrierte Schaltung umfasst. Beispiele für solche Rechenvorrichtungen und elektronische Vorrichtungen umfassen, sind aber nicht darauf beschränkt, Desktop-Computer, Laptop-Computer, Notebook-Computer, Tabletcomputer, Netbooks, Smartphones, Mobiltelefone, Server, Netzwerkvorrichtungen (z. B. Router und Switches), mobile Internetvorrichtungen (MID), Medienabspielgeräte, Smart-TVs, Nettops, Set-Top-Boxen und Videospielsteuerungen.
  • Eine Bezugnahme auf beispielsweise „eine Ausführungsform”, „Ausführungsform”, „eine oder mehrere Ausführungsformen”, „einige Ausführungsformen” in dieser gesamten Beschreibung zeigt an, dass eine gewisse Funktion in die Durchführung der Erfindung inkludiert werden kann, das aber nicht notwendigerweise erforderlich ist. Gleichermaßen werden in der Beschreibung verschiedene Funktionen manchmal in einer einzigen Ausführungsform, Figur oder Beschreibung davon zusammengefasst, um die Offenbarung zu vereinfachen und das Verständnis verschiedener Aspekte der Erfindung zu fördern. Dieses Verfahren der Offenbarung soll jedoch nicht so ausgelegt werden, dass es die Intention widerspiegelt, dass die Erfindung mehr Funktionen erfordert, als in jedem Anspruch ausdrücklich erwähnt werden. Wie die folgenden Ansprüche zeigen, liegen Aspekte der Erfindung in weniger als allen Funktionen einer einzelnen offenbarten Ausführungsform. Folglich werden die Ansprüche, die der detaillierten Beschreibung folgen, hierdurch ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch für sich allein als eine separate Ausführungsform der Erfindung steht.
  • AUSFÜHRUNGSBEISPIELE
  • Die nachstehenden Beispiele betreffen weitere Ausführungsformen. Einzelheiten in den Beispielen können überall in einer oder mehreren Ausführungsformen verwendet werden.
  • Beispiel 1 ist ein Prozessor oder eine sonstige Vorrichtung, der/die eine Dekodiereinheit zum Dekodieren eines Befehls umfasst. Der Befehl soll einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen, soll einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen, soll einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen und soll einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen. Eine Ausführeinheit des Prozessors oder der Vorrichtung ist mit der Dekodiereinheit gekoppelt. Die Ausführeinheit ist ausgelegt, als Antwort auf den Befehl ein Ergebnis zu speichern. Das Ergebnis umfasst den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert. Die Ausführeinheit soll eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern und soll eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern.
  • Beispiel 2 umfasst den Prozessor nach Beispiel 1, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der einen RSA-Algorithmusbeschleunigungsbefehl umfasst.
  • Beispiel 3 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Quelloperanden implizit anzeigen soll, der den zweiten 64-Bit-Wert als ein Allzweckregister RAX aufweisen soll.
  • Beispiel 4 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Zielortoperanden implizit anzeigen soll, der die höchstwertige 64-Bit-Hälfte als ein Allzweckregister RDX aufweisen soll.
  • Beispiel 5 umfasst den Prozessor nach Beispiel 1, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Zielortoperanden implizit anzeigen soll, der den zweiten 64-Bit-Wert als ein Allzweckregister RAX aufweisen soll, und der den zweiten 64-Bit-Quelloperanden implizit anzeigen soll, der die höchstwertige 64-Bit-Hälfte als ein Allzweckregister RDX aufweisen soll.
  • Beispiel 6 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der den vierten 64-Bit-Quelloperanden explizit benennen soll, der den vierten 64-Bit-Wert aufweisen soll, der implizit ein gleicher Speicherplatz sein soll wie der erste 64-Bit-Zielortoperand, der die niedrigstwertige 64-Bit-Hälfte des Ergebnisses speichern soll.
  • Beispiel 7 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der den dritten 64-Bit-Quelloperanden implizit anzeigen soll, der den dritten 64-Bit-Wert aufweisen soll, der implizit ein gleicher Speicherplatz sein soll wie der zweite 64-Bit-Zielortoperand, der die höchstwertige 64-Bit-Hälfte des Ergebnisses speichern soll.
  • Beispiel 8 umfasst den Prozessor nach Beispiel 7, worin gegebenenfalls der Speicherplatz ein Allzweckregister umfasst.
  • Beispiel 9 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der ein Format aufweisen soll, das nur zwei Operanden explizit benennen soll.
  • Beispiel 10 umfasst den Prozessor nach Beispiel 9, worin gegebenenfalls die Dekodiereinheit den Befehl dekodieren soll, der Folgendes tun soll: den ersten 64-Bit-Quelloperanden explizit benennen, der den ersten 64-Bit-Wert aufweisen soll; den zweiten 64-Bit-Quelloperanden implizit anzeigen, der den zweiten 64-Bit-Wert aufweisen soll; den dritten 64-Bit-Quelloperanden implizit anzeigen, der den dritten 64-Bit-Wert aufweisen soll; den vierten 64-Bit-Quelloperanden explizit benennen, der den vierten 64-Bit-Wert aufweisen soll; den ersten 64-Bit-Zielortoperanden implizit anzeigen, der die niedrigstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, das ein gleicher Speicherplatz sein soll wie er für den vierten 64-Bit-Quelloperanden verwendet werden soll, der den vierten 64-Bit-Wert aufweisen soll; und den zweiten 64-Bit-Zielortoperanden implizit anzeigen, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, das ein gleicher Speicherplatz sein soll wie er für den dritten 64-Bit-Quelloperanden verwendet werden soll, der den dritten 64-Bit-Wert aufweisen soll.
  • Beispiel 11 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Ausführeinheit einen 128-Bit-Speicherplatz zum Speichern einer Summe des dritten 64-Bit-Werts und eines Produkts des ersten 64-Bit-Werts und des zweiten 64-Bits Werts umfasst.
  • Beispiel 12 umfasst den Prozessor nach einem der vorangegangenen Beispiele, worin gegebenenfalls die Ausführeinheit einen 128-Bit-Addierer zum Addieren eines Werts, der für den dritten 64-Bit-Wert steht, und eines 128-Bit-Produktes der Multiplikation des ersten 64-Bit-Werts und des zweiten 64-Bit-Werts umfasst.
  • Beispiel 13 ist ein Verfahren in einem Prozessor oder einer sonstigen Vorrichtung, das das Erhalten eines Befehls umfasst. Der Befehl zeigt einen ersten 64-Bit-Quelloperanden mit einem ersten 64-Bit-Wert an, zeigt einen zweiten 64-Bit-Quelloperanden mit einem zweiten 64-Bit-Wert an, zeigt einen dritten 64-Bit-Quelloperanden mit einem dritten 64-Bit-Wert an und zeigt einen vierten 64-Bit-Quelloperanden mit einem vierten 64-Bit-Wert an. Das Verfahren umfasst das Speichern eines Ergebnisses als Antwort auf den Befehl. Das Ergebnis umfasst den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert. Das Speichern des Ergebnisses umfasst das Speichern einer niedrigstwertigen 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden und das Speichern einer höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden.
  • Beispiel 14 umfasst das Verfahren nach Beispiel 13, das gegebenenfalls während einer OpenSSL-Bibliotheksimplementierung eines RSA-Algorithmus durchgeführt wird.
  • Beispiel 15 umfasst das Verfahren nach Beispiel 14, das gegebenenfalls während einer Funktion bn_mul_mont der OpenSSL-Bibliotheksimplementierung des RSA-Algorithmus durchgeführt wird.
  • Beispiel 16 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Quelloperanden mit dem zweiten 64-Bit-Wert als ein Allzweckregister RAX anzeigt.
  • Beispiel 17 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Zielortoperanden mit der höchstwertigen 64-Bit-Hälfte des Ergebnisses als ein Allzweckregister RDX anzeigt.
  • Beispiel 18 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Quelloperanden mit dem zweiten 64-Bit-Wert als ein Allzweckregister RAX anzeigt und implizit den zweiten 64-Bit-Zielortoperanden mit der höchstwertigen 64-Bit-Hälfte des Ergebnisses als ein Allzweckregister RDX anzeigt.
  • Beispiel 19 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls umfasst, der explizit den vierten 64-Bit-Quelloperanden mit dem vierten 64-Bit-Wert benennt, der auch implizit ein gleicher Speicherplatz ist wie der erste 64-Bit-Zielortoperand, der zum Speichern der niedrigstwertigen 64-Bit-Hälfte des Ergebnisses verwendet wird.
  • Beispiel 20 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls umfasst, der implizit den dritten 64-Bit-Quelloperanden mit dem dritten 64-Bit-Wert anzeigt, der auch implizit ein gleicher Speicherplatz ist wie der zweite 64-Bit-Zielortoperand, der zum Speichern der höchstwertigen 64-Bit-Hälfte des Ergebnisses verwendet wird.
  • Beispiel 21 umfasst das Verfahren nach einem der vorangegangenen Beispiele, worin gegebenenfalls das Empfangen das Empfangen des Befehls mit einem nur zwei Operanden explizit benennenden Format umfasst.
  • Beispiel 22 ist ein Prozessor oder eine sonstige Vorrichtung, der/die eine Vielzahl von Allzweckregistern und eine Dekodiereinheit zum Dekodieren eines RSA-Algorithmusbeschleunigungsbefehls umfasst. Der RSA-Algorithmusbeschleunigungsbefehl soll einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen, soll das Allzweckregister RAX als zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen, soll einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen und soll einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen. Der Prozessor oder die sonstige Vorrichtung umfasst auch eine mit der Dekodiereinheit und der Vielzahl von Allzweckregistern gekoppelte Ausführeinheit. Die Ausführeinheit ist ausgelegt, als Antwort auf den RSA-Algorithmusbeschleunigungsbefehl ein Ergebnis zu speichern, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll. Die Ausführeinheit soll eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern, der in einem gleichen Speicherplatz ist wie ein 64-Bit-Quelloperand, und soll eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem implizit angezeigten Allzweckregister RDX als durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern.
  • Beispiel 23 umfasst den Prozessor nach Beispiel 22, worin gegebenenfalls das Allzweckregister RDX auch zum Speichern des dritten 64-Bit-Werts verwendet werden soll, worin der zum Speichern der niedrigstwertigen 64-Bit-Hälfte des Ergebnisses verwendete Speicherplatz auch zum Speichern des vierten 64-Bit-Werts verwendet werden soll.
  • Beispiel 24 ist ein System zum Verarbeiten von Befehlen, das eine Zwischenverbindung und einen mit der Zwischenverbindung gekoppelten Prozessor umfasst. Der Prozessor soll einen Befehl empfangen, der einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll. Der Prozessor ist ausgelegt, als Antwort auf den Befehl ein Ergebnis zu speichern, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll. Der Prozessor soll eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern und soll eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern. Das System umfasst auch einen mit der Zwischenverbindung gekoppelten dynamischen Direktzugriffsspeicher (DRAM). Der DRAM soll eine OpenSSL-Implementierung eines RSA-Algorithmus speichern, der den Befehl zum Aktualisieren von Parametern eines Datenfelds verwenden soll.
  • Beispiel 25 umfasst das System nach Beispiel 24, worin gegebenenfalls der Befehl den zweiten 64-Bit-Quelloperanden, der den zweiten 64-Bit-Wert aufweisen soll, als ein erstes Allzweckregister implizit anzeigen soll und den zweiten 64-Bit-Zielortoperanden, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, als ein zweites, anderes Allzweckregister implizit anzeigen soll.
  • Beispiel 26 ist ein Fertigartikel, der ein nicht flüchtiges, maschinenlesbares Speichermedium umfasst. Das nicht flüchtige, maschinenlesbare Speichermedium speichert einen Befehl, der einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll. Der Befehl ist, falls er durch eine Maschine ausgeführt wird, ausgelegt, die Maschine dazu zu bringen, Vorgänge durchzuführen, die das Speichern eines Ergebnisses umfassen. Das Ergebnis soll den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen. Eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses soll in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden gespeichert werden, und eine höchstwertige 64-Bit-Hälfte des Ergebnisses soll in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden gespeichert werden.
  • Beispiel 27 umfasst den Fertigartikel nach Beispiel 26, worin gegebenenfalls der Befehl den zweiten 64-Bit-Quelloperanden, der den zweiten 64-Bit-Wert aufweisen soll, als ein erstes Allzweckregister implizit anzeigen soll und den zweiten 64-Bit-Zielortoperanden, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, als zweites, anderes Allzweckregister implizit anzeigen soll.
  • Beispiel 28 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die ausgelegt ist, das Verfahren nach einem der Beispiele 13 bis 21 anzuwenden.
  • Beispiel 29 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die Mittel zur Anwendung des Verfahrens nach einem der Beispiele 13 bis 21 umfasst.
  • Beispiel 30 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die Module, Einheiten, Logik, eine Schaltungsanordnung, Mittel oder jedwede Kombination aus diesen zur Anwendung des Verfahrens nach einem der Beispiele 13 bis 21 umfasst.
  • Beispiel 31 umfasst ein Computersystem oder eine sonstige elektronische Vorrichtung, das/die eine Zwischenverbindung, einen mit der Zwischenverbindung gekoppelten Prozessor und zumindest ein mit der Zwischenverbindung gekoppeltes Bauteil umfasst, das aus einem DRAM, einem Grafikchip, einem Drahtloskommunikationschip, einem Phasenwechselspeicher und einer Videokamera ausgewählt ist, wobei das Computersystem oder die sonstige elektronische Vorrichtung das Verfahren nach einem der Beispiele 13 bis 21 anwenden soll.
  • Beispiel 32 umfasst ein gegebenenfalls nicht flüchtiges, maschinenlesbares Medium, das einen Befehl gegebenenfalls speichert oder auf sonstige Weise bereitstellt, der, falls und/oder wenn er durch einen Prozessor, ein Computersystem oder eine sonstige Maschine ausgeführt wird, ausgelegt ist, die Maschine dazu zu bringen, das Verfahren nach einem der Ansprüche 13 bis 21 anzuwenden.
  • Beispiel 33 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die ausgelegt ist, einen oder mehrere Vorgänge oder jedwedes Verfahren im Wesentlichen wie hierin beschrieben anzuwenden.
  • Beispiel 34 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die Mittel zur Anwendung eines oder mehrerer Vorgänge oder jedweden Verfahrens im Wesentlichen wie hierin beschrieben umfasst.
  • Beispiel 35 umfasst einen Prozessor oder eine sonstige Vorrichtung zur Anwendung jedweden Befehls im Wesentlichen wie hierin beschrieben.
  • Beispiel 36 umfasst einen Prozessor oder eine sonstige Vorrichtung, der/die Mittel zur Anwendung jedweden Befehls im Wesentlichen wie hierin beschrieben umfasst.

Claims (36)

  1. Prozessor, der Folgendes umfasst: eine Dekodiereinheit zum Dekodieren eines Befehls, wobei der Befehl einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll; und eine mit der Dekodiereinheit gekoppelte Ausführeinheit, die ausgelegt sein soll, als Antwort auf den Befehl ein Ergebnis zu speichern, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll, worin die Ausführeinheit eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern soll und eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern soll.
  2. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der einen RSA-Algorithmusbeschleunigungsbefehl umfasst.
  3. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Quelloperanden implizit anzeigen soll, der den zweiten 64-Bit-Wert als ein Allzweckregister RAX aufweisen soll.
  4. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Zielortoperanden implizit anzeigen soll, der die höchstwertige 64-Bit-Hälfte des Ergebnisses als ein Allzweckregister RDX aufweisen soll.
  5. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der den zweiten 64-Bit-Quelloperanden implizit anzeigen soll, der den zweiten 64-Bit-Wert als Allzweckregister RAX aufweisen soll, und der den zweiten 64-Bit-Zielortoperanden implizit anzeigen soll, der die höchstwertige 64-Bit-Hälfte als Allzweckregister RDX aufweisen soll.
  6. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der den vierten 64-Bit-Quelloperanden explizit benennen soll, der den vierten 64-Bit-Wert aufweisen soll, der implizit ein gleicher Speicherplatz sein soll wie der erste 64-Bit-Zielortoperand, der die niedrigstwertige 64-Bit-Hälfte des Ergebnisses speichern soll.
  7. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der den dritten 64-Bit-Quelloperanden implizit anzeigen soll, der den dritten 64-Bit-Wert aufweisen soll, der implizit ein gleicher Speicherplatz sein soll wie der zweite 64-Bit-Zielortoperand, der die höchstwertige 64-Bit-Hälfte des Ergebnisses speichern soll.
  8. Prozessor nach Anspruch 7, worin der Speicherplatz ein Allzweckregister umfasst.
  9. Prozessor nach Anspruch 1, worin die Dekodiereinheit den Befehl dekodieren soll, der ein Format aufweisen soll, das nur zwei Operanden explizit benennen soll.
  10. Prozessor nach Anspruch 9, worin die Dekodiereinheit den Befehl dekodieren soll, der Folgendes tun soll: den ersten 64-Bit-Quelloperanden explizit benennen, der den ersten 64-Bit-Wert aufweisen soll; den zweiten 64-Bit-Quelloperanden implizit anzeigen, der den zweiten 64-Bit-Wert aufweisen soll; den dritten 64-Bit-Quelloperanden implizit anzeigen, der den dritten 64-Bit-Wert aufweisen soll; den vierten 64-Bit-Quelloperanden explizit benennen, der den vierten 64-Bit-Wert aufweisen soll; den ersten 64-Bit-Zielortoperanden implizit anzeigen, der die niedrigstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, das ein gleicher Speicherplatz sein soll wie er für den vierten 64-Bit-Quelloperanden verwendet werden soll, der den vierten 64-Bit-Wert aufweisen soll; und den zweiten 64-Bit-Zielortoperanden implizit anzeigen, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, das ein gleicher Speicherplatz sein soll, wie er für den dritten 64-Bit-Quelloperanden verwendet werden soll, der den dritten 64-Bit-Wert aufweisen soll.
  11. Prozessor nach Anspruch 1, worin die Ausführeinheit einen 128-Bit-Speicherplatz zum Speichern einer Summe des dritten 64-Bit-Werts und eines Produkts des ersten 64-Bit-Werts und des zweiten 64-Bits Werts umfasst.
  12. Prozessor nach Anspruch 1, worin die Ausführeinheit einen 128-Bit-Addierer zum Addieren eines Werts, der für den dritten 64-Bit-Wert steht, und eines 128-Bit-Produktes der Multiplikation des ersten 64-Bit-Werts und des zweiten 64-Bit-Werts umfasst.
  13. Verfahren in einem Prozessor, wobei das Verfahren Folgendes umfasst: das Erhalten eines Befehls, wobei der Befehl einen ersten 64-Bit-Quelloperanden mit einem ersten 64-Bit-Wert anzeigt, einen zweiten 64-Bit-Quelloperanden mit einem zweiten 64-Bit-Wert anzeigt, einen dritten 64-Bit-Quelloperanden mit einem dritten 64-Bit-Wert anzeigt und einen vierten 64-Bit-Quelloperanden mit einem vierten 64-Bit-Wert anzeigt; und das Speichern eines Ergebnisses als Antwort auf den Befehl, wobei das Ergebnis den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfasst, worin das Speichern des Ergebnisses das Speichern einer niedrigstwertigen 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden und das Speichern einer höchstwertigen 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden umfasst.
  14. Verfahren nach Anspruch 13, das während einer OpenSSL-Bibliotheksimplementierung eines RSA-Algorithmus durchgeführt wird.
  15. Verfahren nach Anspruch 14, das während einer Funktion bn_mul_mont der OpenSSL-Bibliotheksimplementierung des RSA-Algorithmus durchgeführt wird.
  16. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Quelloperanden mit dem zweiten 64-Bit-Wert als ein Allzweckregister RAX anzeigt.
  17. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Zielortoperanden mit der höchstwertigen 64-Bit-Hälfte des Ergebnisses als ein Allzweckregister RDX anzeigt.
  18. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls umfasst, der implizit den zweiten 64-Bit-Quelloperanden mit dem zweiten 64-Bit-Wert als ein Allzweckregister RAX anzeigt und implizit den zweiten 64-Bit-Zielortoperanden mit der höchstwertigen 64-Bit-Hälfte des Ergebnisses als ein Allzweckregister RDX anzeigt.
  19. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls umfasst, der explizit den vierten 64-Bit-Quelloperanden mit dem vierten 64-Bit-Wert benennt, der auch implizit ein gleicher Speicherplatz ist wie der erste 64-Bit-Zielortoperand, der zum Speichern der niedrigstwertigen 64-Bit-Hälfte des Ergebnisses verwendet wird.
  20. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls umfasst, der implizit den dritten 64-Bit-Quelloperanden mit dem dritten 64-Bit-Wert anzeigt, der auch implizit ein gleicher Speicherplatz ist wie der zweite 64-Bit-Zielortoperand, der zum Speichern der höchstwertigen 64-Bit-Hälfte des Ergebnisses verwendet wird.
  21. Verfahren nach Anspruch 13, worin das Empfangen das Empfangen des Befehls mit einem nur zwei Operanden explizit benennenden Format umfasst.
  22. Prozessor, der Folgendes umfasst: eine Vielzahl von Allzweckregistern; eine Dekodiereinheit zum Dekodieren eines RSA-Algorithmusbeschleunigungsbefehls, wobei der RSA-Algorithmusbeschleunigungsbefehl einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, das Allzweckregister RAX als zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, implizit anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll; und eine mit der Dekodiereinheit und der Vielzahl von Allzweckregistern gekoppelte Ausführeinheit, wobei die Ausführeinheit ausgelegt ist, als Antwort auf den RSA-Algorithmusbeschleunigungsbefehl ein Ergebnis zu speichern, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll, worin die Ausführeinheit eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern soll, der in einem gleichen Speicherplatz ist wie ein 64-Bit-Quelloperand, und eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem implizit angezeigten Allzweckregister RDX als durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern soll.
  23. Prozessor nach Anspruch 22, worin das Allzweckregister RDX auch zum Speichern des dritten 64-Bit-Werts verwendet werden soll, worin der zum Speichern der niedrigstwertigen 64-Bit-Hälfte des Ergebnisses verwendete Speicherplatz auch zum Speichern des vierten 64-Bit-Werts verwendet werden soll.
  24. System zum Verarbeiten von Befehlen, das Folgendes umfasst: eine Zwischenverbindung; einen mit der Zwischenverbindung gekoppelten Prozessor, wobei der Prozessor einen Befehl empfangen soll, der einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll, wobei der Prozessor ausgelegt ist, als Antwort auf den Befehl ein Ergebnis zu speichern, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll, worin der Prozessor eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden speichern soll und eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden speichern soll; und einen mit der Zwischenverbindung gekoppelten dynamischen Direktzugriffsspeicher (DRAM), wobei der DRAM eine OpenSSL-Implementierung eines RSA-Algorithmus speichern soll, der den Befehl zum Aktualisieren von Parametern eines Datenfelds verwenden soll.
  25. System nach Anspruch 24, worin der Befehl den zweiten 64-Bit-Quelloperanden, der den zweiten 64-Bit-Wert aufweisen soll, als ein erstes Allzweckregister implizit anzeigen soll und den zweiten 64-Bit-Zielortoperanden, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, als ein zweites, anderes Allzweckregister implizit anzeigen soll.
  26. Fertigartikel, der ein nicht flüchtiges, maschinenlesbares Speichermedium umfasst, wobei das nicht flüchtige, maschinenlesbare Speichermedium einen Befehl speichert, wobei der Befehl einen ersten 64-Bit-Quelloperanden, der einen ersten 64-Bit-Wert aufweisen soll, anzeigen soll, einen zweiten 64-Bit-Quelloperanden, der einen zweiten 64-Bit-Wert aufweisen soll, anzeigen soll, einen dritten 64-Bit-Quelloperanden, der einen dritten 64-Bit-Wert aufweisen soll, anzeigen soll und einen vierten 64-Bit-Quelloperanden, der einen vierten 64-Bit-Wert aufweisen soll, anzeigen soll, wobei der Befehl, falls er durch eine Maschine ausgeführt wird, ausgelegt ist, die Maschine dazu zu bringen, Vorgänge durchzuführen, die Folgendes umfassen: das Speichern eines Ergebnisses, das den ersten 64-Bit-Wert multipliziert mit dem zweiten 64-Bit-Wert addiert zu dem dritten 64-Bit-Wert addiert zu dem vierten 64-Bit-Wert umfassen soll, worin eine niedrigstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten ersten 64-Bit-Zielortoperanden gespeichert werden soll und eine höchstwertige 64-Bit-Hälfte des Ergebnisses in einem durch den Befehl angezeigten zweiten 64-Bit-Zielortoperanden gespeichert werden soll.
  27. Fertigartikel nach Anspruch 26, worin der Befehl den zweiten 64-Bit-Quelloperanden, der den zweiten 64-Bit-Wert aufweisen soll, als ein erstes Allzweckregister implizit anzeigen soll und den zweiten 64-Bit-Zielortoperanden, der die höchstwertige 64-Bit-Hälfte des Ergebnisses aufweisen soll, als ein zweites, anderes Allzweckregister implizit anzeigen soll.
  28. Prozessor oder sonstige Vorrichtung, der/die ausgelegt ist, das Verfahren nach einem der Ansprüche 13 bis 21 anzuwenden.
  29. Prozessor oder sonstige Vorrichtung, der/die Mittel zur Anwendung des Verfahrens nach einem der Ansprüche 13 bis 21 umfasst.
  30. Prozessor oder sonstige Vorrichtung, der/die Module, Einheiten, Logik, eine Schaltungsanordnung, Mittel oder jedwede Kombination aus diesen zur Anwendung des Verfahrens nach einem der Ansprüche 13 bis 21 umfasst.
  31. Fertigartikel, der ein gegebenenfalls nicht flüchtiges, maschinenlesbares Medium umfasst, das einen Befehl gegebenenfalls speichert oder auf sonstige Weise bereitstellt, der, falls und/oder wenn er durch einen Prozessor, ein Computersystem oder eine sonstige Maschine ausgeführt wird, ausgelegt ist, die Maschine dazu zu bringen, das Verfahren nach einem der Ansprüche 13 bis 21 anzuwenden.
  32. Computersystem oder sonstige elektronische Vorrichtung, das/die eine Zwischenverbindung; einen mit der Zwischenverbindung gekoppelten Prozessor; und zumindest ein mit der Zwischenverbindung gekoppeltes Bauteil umfasst, das aus einem DRAM, einem Grafikchip, einem Drahtloskommunikationschip, einem Phasenwechselspeicher und einer Videokamera ausgewählt ist, wobei das Computersystem oder die sonstige elektronische Vorrichtung ausgelegt ist, das Verfahren nach einem der Ansprüche 13 bis 21 anzuwenden.
  33. Prozessor oder sonstige Vorrichtung, der/die ausgelegt ist, einen oder mehrere Vorgänge oder jedwedes Verfahren im Wesentlichen wie hierin beschrieben anzuwenden.
  34. Prozessor oder sonstige Vorrichtung, der/die Mittel zur Anwendung eines oder mehrerer Vorgänge oder jedweden Verfahrens im Wesentlichen wie hierin beschrieben umfasst.
  35. Prozessor oder sonstige Vorrichtung zur Anwendung jedweden Befehls im Wesentlichen wie hierin beschrieben.
  36. Prozessor oder sonstige Vorrichtung, der/die Mittel zur Anwendung jedweden Befehls im Wesentlichen wie hierin beschrieben umfasst.
DE112013007736.1T 2013-12-28 2013-12-28 RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle Pending DE112013007736T5 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2013/090801 WO2015096167A1 (en) 2013-12-28 2013-12-28 Rsa algorithm acceleration processors, methods, systems, and instructions

Publications (1)

Publication Number Publication Date
DE112013007736T5 true DE112013007736T5 (de) 2016-12-22

Family

ID=53477424

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013007736.1T Pending DE112013007736T5 (de) 2013-12-28 2013-12-28 RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle

Country Status (7)

Country Link
US (1) US10187208B2 (de)
EP (1) EP3087470B1 (de)
JP (1) JP2017503232A (de)
KR (1) KR101927858B1 (de)
CN (1) CN105814536A (de)
DE (1) DE112013007736T5 (de)
WO (1) WO2015096167A1 (de)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015096167A1 (en) 2013-12-28 2015-07-02 Intel Corporation Rsa algorithm acceleration processors, methods, systems, and instructions
US10509651B2 (en) * 2016-12-22 2019-12-17 Intel Corporation Montgomery multiplication processors, methods, systems, and instructions
CN107358125B (zh) * 2017-06-14 2020-12-08 北京多思科技工业园股份有限公司 一种处理器
CN109710308B (zh) 2017-10-25 2023-03-31 阿里巴巴集团控股有限公司 任务的处理方法、装置和系统
CN110825436B (zh) * 2018-08-10 2022-04-29 昆仑芯(北京)科技有限公司 应用于人工智能芯片的计算方法和人工智能芯片
CN114095149B (zh) * 2021-11-12 2023-05-30 龙芯中科技术股份有限公司 信息加密方法、装置、设备及存储介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4405829A (en) 1977-12-14 1983-09-20 Massachusetts Institute Of Technology Cryptographic communications system and method
US6412063B1 (en) * 1999-04-02 2002-06-25 Via-Cyrix, Inc. Multiple-operand instruction in a two operand pipeline and processor employing the same
US6714197B1 (en) * 1999-07-30 2004-03-30 Mips Technologies, Inc. Processor having an arithmetic extension of an instruction set architecture
US6427159B1 (en) 1999-08-03 2002-07-30 Koninklijke Philips Electronics N.V. Arithmetic unit, digital signal processor, method of scheduling multiplication in an arithmetic unit, method of selectively delaying adding and method of selectively adding during a first or second clock cycle
DE10061997A1 (de) 2000-12-13 2002-07-18 Infineon Technologies Ag Kryptographieprozessor
DE10260655B3 (de) 2002-12-23 2004-06-24 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen einer Multiplikation mit einer Verschiebung des Multiplikanden, insbesondere bei der kryptographischen Berechnung
JP4408712B2 (ja) 2004-01-26 2010-02-03 富士通マイクロエレクトロニクス株式会社 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
US7720900B2 (en) * 2005-09-09 2010-05-18 International Business Machines Corporation Fused multiply add split for multiple precision arithmetic
CN100518058C (zh) 2005-10-12 2009-07-22 浙江大学 一种用于公钥密码运算加速的方法及其体系结构
US7974409B2 (en) 2007-06-28 2011-07-05 Samsung Electronics Co., Ltd. Changing the order of public key cryptographic computations
JP5097138B2 (ja) 2009-01-15 2012-12-12 シャープ株式会社 モンゴメリ乗算のための演算回路及び暗号回路
US8468191B2 (en) * 2009-09-02 2013-06-18 Advanced Micro Devices, Inc. Method and system for multi-precision computation
US9990201B2 (en) * 2009-12-22 2018-06-05 Intel Corporation Multiplication instruction for which execution completes without writing a carry flag
US8549264B2 (en) 2009-12-22 2013-10-01 Intel Corporation Add instructions to add three source operands
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
CN102662628B (zh) 2012-03-23 2015-03-04 山东大学 Rsa加密算法的指令优化处理器
US9804840B2 (en) * 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
WO2015096167A1 (en) 2013-12-28 2015-07-02 Intel Corporation Rsa algorithm acceleration processors, methods, systems, and instructions

Also Published As

Publication number Publication date
EP3087470B1 (de) 2020-03-25
WO2015096167A1 (en) 2015-07-02
KR101927858B1 (ko) 2018-12-11
CN105814536A (zh) 2016-07-27
KR20160079038A (ko) 2016-07-05
JP2017503232A (ja) 2017-01-26
US10187208B2 (en) 2019-01-22
US20160308676A1 (en) 2016-10-20
EP3087470A4 (de) 2017-08-16
EP3087470A1 (de) 2016-11-02

Similar Documents

Publication Publication Date Title
EP3602277B1 (de) Systeme, verfahren und vorrichtungen für operationen zur dot-erzeugung
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE102014003795A1 (de) Verfahren und Vorrichtungen für Fusionsbefehle zur Bereitstellung der OR-Test- und AND-Test-Funktionalität auf mehreren Testquellen
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112012007058T5 (de) Vektormaskengesteuertes Clock-Gating für Leistungseffizenz eines Prozessors
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE102015002215A1 (de) Sortierbeschleunigungsprozessor, -Verfahren, -Systeme und -Befehle
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE112013005428T5 (de) Befehle, Prozessoren, Verfahren und Systeme zum Verarbeiten sicherer Hash-Algorithmen
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE112013005239T5 (de) Anweisung zur Beschleunigung des drahtlosen SNOW 3G- Sicherheitsalgorithmus
DE112013007736T5 (de) RSA-Algorithmusbeschleunigungsprozessoren, -Verfahren, -Systeme und Befehle
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112013003735B4 (de) Systeme, Vorrichtungen und Verfahren zum Ausführen von Rotation und XOR als Reaktion auf eine einzige Anweisung
DE102015002254A1 (de) Verfahren und Gerät zum wirksamen Ausführen von Hash-Operationen

Legal Events

Date Code Title Description
R012 Request for examination validly filed