Advanced Vector Extension: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
+F
fix
 
(11 versioni intermedie di 8 utenti non mostrate)
Riga 1:
{{F|informaticacomponenti per computer|febbraio 2013}}
 
Con il nome di '''Advanced Vector Extension''' (abbreviate in '''AVX''') viene indicato un [[instruction set di istruzioni]] [[SIMD]] inproposte sviluppoe pressosviluppate i laboratori dida [[Intel]], e annunciatoannunciate durante l'[[Intel Developer Forum]] svoltosi nella primavera del [[2008]], e che succedesegue alle [[SSE4]] grazie all'architettura di decima generazione conosciuta come [[Sandy Bridge]], successiva a [[Nehalem (hardware)|Nehalem]].
 
== Caratteristiche tecniche ==
Queste istruzioni prevedono l'introduzione di vettori a [[256 bit]] (controa 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 <math>a=a+b</math> verrà rimpiazzata da <math>c=a+b</math> in modo che il registro <math>a</math> rimanga inalterato dopo l'esecuzione dell'istruzione.
Line 11 ⟶ 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'',<ref>{{Cita web|url=https://software.intel.com/en-us/blogs/2011/06/13/haswell-new-instruction-descriptions-now-available/|titolo=Haswell New Instruction Descriptions Now Available!|cognome=Buxton|nome=Mark|editore=[[Intel]]|data=13 giugno 2011|lingua=en|accesso=16 novembre 2018}}</ref> è 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.
|}
 
=== CPU con AVX2 ===
* [[Intel]]
** [[Haswell (hardware)|Haswell]], Q2 2013
** [[Haswell (hardware)|Haswell E]], Q3 2014
** [[Broadwell (hardware)|Broadwell]], Q4 2014
** [[Broadwell (hardware)|Broadwell E]], Q3 2016
** [[Skylake]], Q3 2015
** [[Kaby Lake]], Q3 2016 (ULV mobile) / Q1 2017 (desktop/mobile)
** [[Skylake|Skylake-X]], Q2 2017
** [[Coffee Lake]], Q4 2017
** [[Cannonlake|Cannon Lake]], previsto nel 2018
** [[Cascade Lake]], previsto nel 2018
** [[Ice Lake]], previsto nel 2018
* [[Advanced Micro Devices|AMD]]
** [[Excavator]] e successivi, Q2 2015
** [[Zen (microarchitettura)|Zen]], Q1 2017
** [[Zen+]], Q2 2018
 
== Note ==
<references />
 
== Voci correlate ==
* [[Sandy Bridge]]
* [[Streaming SIMD Extensions|SSE]]
* [[SSE2]]
* [[SSE3]]
* [[SSE4]]
 
{{Multimedia extensions}}
{{portale|informatica}}
{{Portale|Informatica}}
 
[[Categoria:MicroprocessoreIstruzioni x86]]
[[Categoria:Calcolo parallelo]]
[[Categoria:Intel]]