Advanced Vector Extension

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search

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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

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[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

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

Voci correlate[modifica | modifica wikitesto]

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