CLMUL

set di istruzioni per x86

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

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

La presenza del set di istruzioni CLMUL può essere verificata testando uno dei bit delle caratteristiche della CPU.

Note modifica

  1. ^ (EN) Intel AVX, su softwareprojects.intel.com, Intel. URL consultato il 18 ottobre 2018 (archiviato dall'url originale il 7 aprile 2008).
  2. ^ (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.
  3. ^ (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.
  4. ^ (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.
  5. ^ (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.
  6. ^ (EN) Bobcat to jaguar_v2, su Slideshare, AMD, 29 agosto 2012. URL consultato il 18 ottobre 2018.
  7. ^ (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 modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica