CLMUL
Carry-less Multiplication (CLMUL) è un'estensione del set di istruzioni x86 utilizzato dai microprocessori Intel e AMD, proposto da Intel nel marzo 2008[1] e reso disponibile nei processori Intel Westmere annunciati all'inizio del 2010.
Un uso di queste istruzioni è quello di migliorare la velocità delle applicazioni di cifratura a blocchi in modalità Galois/Counter, che dipende dalla moltiplicazione GF(2k) a campo finito, che può essere implementata in modo più efficiente[2] con le nuove istruzioni CLMUL rispetto al tradizionale set di istruzioni. Un'altra applicazione è il calcolo veloce dei valori CRC,[3] compresi quelli utilizzati per implementare l'algoritmo DEFLATE in zlib e pngcrush della finestra scorrevole LZ77.[4]
Nuove istruzioni
[modifica | modifica wikitesto]L'istruzione calcola il prodotto carry-less a 128 bit di due valori a 64 bit. La destinazione è un registro XMMM a 128 bit. La sorgente può essere un altro registro XMMM o memoria. Un operando immediato specifica quali metà degli operandi a 128 bit vengono moltiplicati. Sono inoltre definite delle mnemoniche che specificano valori specifici dell'operando immediato:
Istruzione | Opcode | Descrizione |
---|---|---|
PCLMULQDQ xmmreg,xmmrm,imm |
[rmi: 66 0f 3a 44 /r ib]
|
Eseguire una moltiplicazione carry-less di due polinomi a 64 bit sul campo finito GF(2k). |
PCLMULLQLQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 00]
|
Moltiplicare le metà basse dei due registri. |
PCLMULHQLQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 01]
|
Moltiplicare la metà alta del registro di destinazione per la metà bassa del registro di origine. |
PCLMULLQHQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 10]
|
Moltiplicare la metà bassa del registro di destinazione per la metà alta del registro di origine. |
PCLMULHQHQDQ xmmreg,xmmrm |
[rm: 66 0f 3a 44 /r 11]
|
Moltiplicare le metà alte dei due registri. |
CPU con CLMUL
[modifica | modifica wikitesto]- Intel
- Westmere
- Sandy Bridge
- Ivy Bridge
- Haswell
- Broadwell (con una maggiore produttività e una minore latenza[5])
- Skylake
- Kaby Lake
- Coffee Lake
- AMD
La presenza del set di istruzioni CLMUL può essere verificata testando uno dei bit delle caratteristiche della CPU.
Note
[modifica | modifica wikitesto]- ^ (EN) Intel AVX, su softwareprojects.intel.com, Intel. URL consultato il 18 ottobre 2018 (archiviato dall'url originale il 7 aprile 2008).
- ^ (EN) Shay Gueron, Intel® Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode - Rev 2.02, su software.intel.com, Intel, 13 aprile 2011. URL consultato il 18 ottobre 2018.
- ^ (EN) Vinodh Gopal, Erdinc Ozturk, Jim Guilford, Gil Wolrich, Wajdi Feghali, Martin Dixon e Deniz Karakoyunlu, Fast CRC Computation for Generic Polynomials Using PCLMULQDQ Instruction (PDF), su intel.com, Intel, dicembre 2009. URL consultato il 18 aprile 2018.
- ^ (EN) Vlad Krasnov, Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code, in The Cloudflare Blog, 8 luglio 2018. URL consultato il 18 ottobre 2018.
- ^ (EN) Johan De Gelas, The Intel Xeon E5 v4 Review: Testing Broadwell-EP With Demanding Server Workloads, in AnandTech, 31 marzo 2016, p. 3. URL consultato il 18 ottobre 2018.
- ^ (EN) Bobcat to jaguar_v2, su Slideshare, AMD, 29 agosto 2012. URL consultato il 18 ottobre 2018.
- ^ (EN) Dave Christie, Striking a Balance, in AMD, 6 maggio 2009. URL consultato il 18 ottobre 2018 (archiviato dall'url originale il 9 novembre 2013).