CLMUL Befehlssatz - CLMUL instruction set
Carry-less Multiplication ( CLMUL ) ist eine Erweiterung des x86- Befehlssatzes, der von Mikroprozessoren von Intel und AMD verwendet wird und von Intel im März 2008 vorgeschlagen und in den Anfang 2010 angekündigten Intel Westmere-Prozessoren verfügbar gemacht wurde . Mathematisch implementiert der Befehl die Multiplikation von Polynome über dem endlichen Feld GF (2), wobei der Bitstring das Polynom darstellt . Der CLMUL-Befehl ermöglicht auch eine effizientere Implementierung der eng verwandten Multiplikation größerer endlicher Felder GF (2 k ) als der herkömmliche Befehlssatz.
Eine Verwendung dieser Anweisungen besteht darin, die Geschwindigkeit von Anwendungen zu verbessern, die eine Blockverschlüsselung im Galois / Counter-Modus durchführen , was von der GF (2 k ) -Multiplikation mit endlichem Feld abhängt . Eine weitere Anwendung ist die schnelle Berechnung von CRC-Werten , einschließlich derer, die zur Implementierung des DEFLATE- Algorithmus für das LZ77- Schiebefenster in zlib und pngcrush verwendet werden .
ARMv8 hat auch eine Version von CLMUL. SPARC nennt ihre Version XMULX für "XOR-Multiplikation".
Neue Anweisungen
Der Befehl berechnet das 128-Bit- Carry-Less-Produkt aus zwei 64-Bit-Werten. Das Ziel ist ein 128-Bit-XMM-Register . Die Quelle kann ein anderes XMM-Register oder ein anderer Speicher sein. Ein Sofortoperand gibt an, welche Hälften der 128-Bit-Operanden multipliziert werden. Mnemonics, die bestimmte Werte des unmittelbaren Operanden angeben, sind ebenfalls definiert:
Anweisung | Opcode | Beschreibung |
---|---|---|
PCLMULQDQ xmmreg,xmmrm,imm |
[rmi: 66 0f 3a 44 /r ib]
|
Führen Sie eine Carry-Less-Multiplikation von zwei 64-Bit-Polynomen über das endliche Feld GF (2 k ) durch. |
PCLMULLQLQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 00]
|
Multiplizieren Sie die unteren Hälften der beiden Register. |
PCLMULHQLQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 01]
|
Multiplizieren Sie die obere Hälfte des Zielregisters mit der unteren Hälfte des Quellregisters. |
PCLMULLQHQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 10]
|
Multiplizieren Sie die untere Hälfte des Zielregisters mit der oberen Hälfte des Quellregisters. |
PCLMULHQHQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 11]
|
Multiplizieren Sie die hohen Hälften der beiden Register. |
Eine vektorisierte EVEX-Version (VPCLMULQDQ) ist in AVX-512 zu sehen .
CPUs mit CLMUL-Befehlssatz
-
Intel
- Westmere- Prozessor (März 2010).
- Sandy Bridge Prozessor
- Ivy Bridge Prozessor
- Haswell- Prozessor
- Broadwell- Prozessor (mit erhöhtem Durchsatz und geringerer Latenz)
- Skylake (und später) Prozessor
- Goldmont- Prozessor
-
AMD :
- Jaguar-basierte Prozessoren und neuere
- Puma-basierte Prozessoren und neuere
- "Heavy Equipment" -Prozessoren
- Bulldozer-basierte Prozessoren
- Piledriver-basierte Prozessoren
- Steamroller-basierte Prozessoren
- Baggerbasierte Prozessoren und neuere
- Zen- Prozessoren
- Zen + Prozessoren
- Zen2 (und spätere) Prozessoren
Das Vorhandensein des CLMUL-Befehlssatzes kann durch Testen eines der CPU-Merkmalsbits überprüft werden .