Con il nome di Advanced Vector Extension (abbreviate in AVX) viene indicato un instruction set 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, è 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, VGATHERQPSRaccoglie 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 Intel Haswell, Q2 2013 Haswell E, Q3 2014 Broadwell, Q4 2014 Broadwell E, Q3 2016 Skylake, Q3 2015 Kaby Lake, Q3 2016 (ULV mobile) / Q1 2017 (desktop/mobile) Skylake-X, Q2 2017 Coffee Lake, Q4 2017 Cannon Lake, previsto nel 2018 Cascade Lake, previsto nel 2018 Ice Lake, previsto nel 2018 AMD Excavator e successivi, Q2 2015 Zen, Q1 2017 Zen+, Q2 2018
Note
Voci correlate Sandy Bridge Streaming SIMD Extensions SSE2 SSE3 SSE4
Categoria:Istruzioni x86 Categoria:Calcolo parallelo Categoria:Intel