Vai al contenuto

Advanced Vector Extension

Da Wikipedia, l'enciclopedia libera.

Con il nome di Advanced Vector Extension (abbreviate in AVX) viene indicato un set di istruzioni SIMD proposte e sviluppate da Intel, annunciate durante l'Intel Developer Forum del 2008, e che segue alle SSE4 grazie all'architettura di decima generazione conosciuta come Sandy Bridge, successiva a Nehalem.

Caratteristiche tecniche

Queste istruzioni prevedono l'introduzione di vettori a 256 bit (a differenza di quelli a 128 bit usati precedentemente) che consentiranno di ottenere un raddoppio dei calcoli in virgola mobile e migliorare l'organizzazione dei dati, rendendola più efficiente; le istruzioni a 128 bit verranno comunque eseguite sfruttando la metà inferiore dei nuovi registri ed è probabile una futura ulteriore espansione a 512 bit o addirittura 1024 bit.

Inoltre, il limite di istruzioni con al più 2 operandi verrà esteso fino a 3 operandi in maniera non distruttiva qualora il registro di destinazione sia differente dai 2 registri sorgente: ciò significa che ad esempio l'operazione verrà rimpiazzata da in modo che il registro rimanga inalterato dopo l'esecuzione dell'istruzione.

Benefici nelle applicazioni

Le applicazioni che dovrebbero trarre i maggiori benefici dovrebbero essere quelle di tipo multimediale, in particolare quelle di modellazione 3D e di calcolo scientifico, anche in virtù del fatto che la scalabilità in relazione al numero di core del processore dovrebbe essere massima, e questo tipo di applicazioni sono proprio quelle che sono comunque in grado di avvantaggiarsi di un alto numero di core.

Le istruzioni AVX dovrebbero consentire inoltre di accelerare i calcoli relativi alla criptazione AES.

Advanced Vector Extensions 2

Advanced Vector Extensions 2 (AVX2), noto anche come Haswell New Instructions,[1] è un'espansione del set di istruzioni AVX introdotto nella microarchitettura Haswell di Intel. AVX2 apporta le seguenti aggiunte:

  • espansione della maggior parte delle istruzioni SSE e AVX a 256 bit.
  • manipolazione e moltiplicazione dei bit per uso generale a tre operandi
  • raccogliere il supporto, consentendo il caricamento di elementi vettoriali da posizioni di memoria non contigue
  • DWORD- e QWORD- a qualsiasi permanente
  • spostamenti vettoriali

A volte un'altra estensione che utilizza un diverso flag cpuid è considerata parte dell'AVX2; queste istruzioni sono elencate nella propria pagina e non di seguito:

  • supporto FMA a tre operandi (FMA3)

Nuove istruzioni

Istruzioni Descrizione
VBROADCASTSS, VBROADCASTSD Copiare un operando di registro a 32 o 64 bit su tutti gli elementi di un registro vettoriale XMMM o YMMM. Queste sono versioni di registro delle stesse istruzioni nell'AVX1. Non esiste tuttavia una versione a 128 bit, ma lo stesso effetto può essere ottenuto semplicemente utilizzando VINSERTF128.
VPBROADCASTB, VPBROADCASTW, VPBROADCASTD, VPBROADCASTQ Copiare un registro intero a 8, 16, 32 o 64 bit o un operando in memoria su tutti gli elementi di un registro vettoriale XMMM o YMMM.
VBROADCASTI128 Copiare un operando di memoria a 128 bit su tutti gli elementi di un registro vettoriale YMMM.
VINSERTI128 Sostituisce la metà inferiore o superiore di un registro YMMM a 256 bit con il valore di un operando sorgente a 128 bit. L'altra metà della destinazione rimane invariata.
VEXTRACTI128 Estrae la metà inferiore o superiore di un registro YMMM a 256 bit e copia il valore in un operando di destinazione a 128 bit.
VGATHERDPD, VGATHERQPD, VGATHERDPS, VGATHERQPS Raccoglie valori in virgola mobile a singola o doppia precisione utilizzando indici e scale a 32 o 64 bit.
VPGATHERDD, VPGATHERDQ, VPGATHERQD, VPGATHERQQ Raccoglie valori interi a 32 o 64 bit utilizzando indici e scale a 32 o 64 bit.
VPMASKMOVD, VPMASKMOVQ Legge condizionalmente un qualsiasi numero di elementi da un operando di memoria vettoriale SIMD in un registro di destinazione, lasciando i restanti elementi vettoriali non letti e azzerando gli elementi corrispondenti nel registro di destinazione. In alternativa, scrive condizionalmente un qualsiasi numero di elementi da un operando del registro vettoriale SIMD ad un operando a memoria vettoriale, lasciando invariati i restanti elementi dell'operando in memoria.
VPERMPS, VPERMD Mescolare gli otto elementi vettoriali a 32 bit di un operando sorgente a 256 bit in un operando di destinazione a 256 bit, con un registro o un operando di memoria come selettore.
VPERMPD, VPERMQ Mescolare i quattro elementi vettoriali a 64 bit di un operando sorgente a 256 bit in un operando di destinazione a 256 bit, con un registro o un operando di memoria come selettore.
VPERM2I128 Mescolare i quattro elementi vettoriali a 128 bit di due operandi sorgente a 256 bit in un operando di destinazione a 256 bit, con una costante immediata come selettore.
VPBLENDD Versione immediata a doppia parola delle istruzioni PBLEND di SSE4.
VPSLLVD, VPSLLVQ Spostamento logico a sinistra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.
VPSRLVD, VPSRLVQ Spostare logico a destra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.
VPSRAVD Spostare aritmeticamente a destra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.

CPU con AVX2

Note

  1. ^ (EN) Mark Buxton, Haswell New Instruction Descriptions Now Available!, su software.intel.com, Intel, 13 giugno 2011. URL consultato il 16 novembre 2018.

189 |  4B |    1178 | Apply bit flip properties                               |        65321688 |    0s          

    190 |  4B |    1179 | Apply Sum property. Sum(a0) = 160                       |        64166496 |    0s          

    190 |  4B |    1179 | Starting brute force...                                 |        64166496 |    0s          

    190 |  4B |    1179 | Brute force phase completed. Key found: 434d917b08bb    |               0 |    0s          

Checking for key reuse...

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: b0b1b2b3b4b5] -> [xxxxx]

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: 6d8015e13dec] -> [xxxxx]

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: 52bae33d49b5] -> [xxxxx]

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: 0c16c1f7dac1] -> [xxxxx]

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: 434d917b08bb] -> [xxxxx]

[Key: ffffffffffff] -> [xxxxx]

[Key: a0a1a2a3a4a5] -> [xxxxx]

[Key: d3f7d3f7d3f7] -> [xxxxx]

[Key: 000000000000] -> [xxxxx]

[Key: b0b1b2b3b4b5] -> [xxxxx]

[Key: 4d3a99c351dd] -> [xxxxx]

[Key: 1a982c7e459a] -> [xxxxx]

[Key: aabbccddeeff] -> [xxxxx]

[Key: 714c5c886e97] -> [xxxxx]

[Key: 587ee5f9350f] -> [xxxxx]

[Key: a0478cc39091] -> [xxxxx]

[Key: 533cb6c723f6] -> [xxxxx]

[Key: 8fd0a4f256e9] -> [xxxxx]

Sector 00 - Found   Key A: a0a1a2a3a4a5 Found   Key B: b0b1b2b3b4b5

Sector 01 - Found   Key A: a0a1a2a3a4a5 Found   Key B: 6d8015e13dec

Sector 02 - Found   Key A: a0a1a2a3a4a5 Found   Key B: 52bae33d49b5

Sector 03 - Found   Key A: a0a1a2a3a4a5 Found   Key B: 0c16c1f7dac1

Sector 04 - Found   Key A: a0a1a2a3a4a5 Found   Key B: 434d917b08bb

We have all sectors encrypted with the default keys..

Auth with all sectors succeeded, dumping keys to a file!

Block 18, type A, key a0a1a2a3a4a5 :fd  01  0c  fe  0e  f4  f8  05  00  00  00  00  4d  49  43  00  

Block 17, type B, key 434d917b08bb :dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  

Block 16, type B, key 434d917b08bb :dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  

Block 15, type A, key a0a1a2a3a4a5 :00  00  00  00  00  00  0f  00  ff  d8  00  00  00  00  00  00  

Block 14, type B, key 0c16c1f7dac1 :dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  

Block 13, type B, key 0c16c1f7dac1 :dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  

Block 12, type B, key 0c16c1f7dac1 :dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  dd  

Block 11, type A, key a0a1a2a3a4a5 :00  00  00  00  00  00  0f  00  ff  db  00  00  00  00  00  00  

Block 10, type B, key 52bae33d49b5 :00  00  00  00  00  00  00  00  dd  dd  dd  dd  dd  dd  dd  dd  

Block 09, type B, key 52bae33d49b5 :00  00  00  02  00  00  00  00  00  00  00  00  00  00  00  00  

Block 08, type B, key 52bae33d49b5 :00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  

Block 07, type A, key a0a1a2a3a4a5 :00  00  00  00  00  00  1e  11  ee  5a  00  00  00  00  00  00  

Block 06, type B, key 6d8015e13dec :00  00  00  01  6a  68  00  01  00  00  00  00  00  00  00  00  

Block 05, type B, key 6d8015e13dec :01  01  01  0e  02  08  08  08  00  00  00  00  00  00  00  00  

Block 04, type A, key a0a1a2a3a4a5 :88  05  d8  82  00  04  24  27  00  00  03  00  01  00  00  b7  

Block 03, type A, key a0a1a2a3a4a5 :00  00  00  00  00  00  61  e7  89  c1  00  00  00  00  00  00  

Block 02, type A, key a0a1a2a3a4a5 :00  05  00  05  00  05  00  05  00  05  00  05  00  05  00  05  

Block 01, type A, key a0a1a2a3a4a5 :a5  00  09  38  09  38  09  38  09  38  00  05  00  05  00  05  

Block 00, type A, key a0a1a2a3a4a5 :5b  98  9d  c8  96  89  04  00  c2  12  00  00  00  00  00  14  

Voci correlate

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