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
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
- Intel
- Westmere
- Sandy Bridge
- Ivy Bridge
- Haswell
- Broadwell (con una maggiore produttività e una minore latenza[5])
- Skylake
- Kaby Lake
- Coffee Lake
- AMD
- Jaguar[6]
- Puma
- Processore per "lavori pesanti"
- Bulldozer[7]
- Piledriver
- Steamroller
- Excavator
- Zen
- Zen+
La presenza del set di istruzioni CLMUL può essere verificata testando uno dei bit delle caratteristiche della CPU.
Note
- ^ (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).
Voci correlate
V · D · M | |
---|---|
SIMD (RISC) | Alpha (MVI) · ARM (NEON · SVE) · MIPS (MDMX · MIPS-3D · MXU · MIPS SIMD) · PA-RISC (MAX) · Power ISA (VMX) · SPARC (VIS) |
SIMD (x86) | MMX (1996) · 3DNow! (1998) · SSE (1999) · SSE2 (2001) · SSE3 (2004) · SSSE3 (2006) · SSE4 (2006) · |
Manipolazione dei bit | BMI (ABM: 2007, BMI1: 2012, BMI2: 2013, TBM: 2012) · ADX (2014) |
Istruzioni compresse | Thumb · MIPS16e ASE |
Sicurezza e crittografia | AES-NI (2008); 32 e 64 bit ARMv8 ha anche istruzioni AES · CLMUL (2010) · RdRand (2012) · SHA (2013) · MPX (2015) · SGX (2015) |
Memoria transazionale | TSX (2013) · ASF |
Virtualizzazione | VT-x (2005) · AMD-V (2006) |
Le estensioni non più utilizzate sono |
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Computer_n_screen.svg/24px-Computer_n_screen.svg.png)