Vai al contenuto

CLMUL

Da Wikipedia, l'enciclopedia libera.

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]

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

  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 | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica