Advanced Vector Extension: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
aggiunto template
aggiunto paragrafo "Advanced Vector Extensions 2"
Riga 12:
Le istruzioni AVX dovrebbero consentire inoltre di accelerare i calcoli relativi alla [[crittografia|criptazione]] [[Advanced Encryption Standard|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 [[Haswell (hardware)|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
*[[Gather-scatter (indirizzamento vettoriale)|raccogliere]] il supporto, consentendo il caricamento di elementi vettoriali da posizioni di memoria non contigue
*<code>DWORD-</code> e <code>QWORD-</code> 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 (set di istruzioni)|FMA]] a tre operandi (FMA3)
===Nuove istruzioni===
{| class="wikitable"
|-
! Istruzioni
! Descrizione
|-
| <code>VBROADCASTSS</code>, <code>VBROADCASTSD</code>
| 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.
|-
| <code>VPBROADCASTB</code>, <code>VPBROADCASTW</code>, <code>VPBROADCASTD</code>, <code>VPBROADCASTQ</code>
| 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.
|-
| <code>VBROADCASTI128</code>
| Copiare un operando di memoria a 128 bit su tutti gli elementi di un registro vettoriale YMMM.
|-
| <code>VINSERTI128</code>
| 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.
|-
| <code>VEXTRACTI128</code>
| 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.
|-
| <code>VGATHERDPD</code>, <code>VGATHERQPD</code>, <code>VGATHERDPS</code>, <code>VGATHERQPS</code>
|[[Gather-scatter (indirizzamento vettoriale)|Raccoglie]] valori in virgola mobile a singola o doppia precisione utilizzando indici e scale a 32 o 64 bit.
|-
| <code>VPGATHERDD</code>, <code>VPGATHERDQ</code>, <code>VPGATHERQD</code>, <code>VPGATHERQQ</code>
| Raccoglie valori interi a 32 o 64 bit utilizzando indici e scale a 32 o 64 bit.
|-
| <code>VPMASKMOVD</code>, <code>VPMASKMOVQ</code>
| 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.
|-
| <code>VPERMPS</code>, <code>VPERMD</code>
| 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.
|-
| <code>VPERMPD</code>, <code>VPERMQ</code>
| 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.
|-
| <code>VPERM2I128</code>
| 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.
|-
| <code>VPBLENDD</code>
| Versione immediata a doppia parola delle istruzioni PBLEND di SSE4.
|-
| <code>VPSLLVD</code>, <code>VPSLLVQ</code>
| Spostamento logico a sinistra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.
|-
| <code>VPSRLVD</code>, <code>VPSRLVQ</code>
| Spostare logico a destra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.
|-
| <code>VPSRAVD</code>
| Spostare aritmeticamente a destra. Permette spostamenti variabili in cui ogni elemento viene spostato in base all'input confezionato.
|}
== Voci correlate ==
* [[Sandy Bridge]]