Streaming SIMD Extensions: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Kormoran (discussione | contributi)
aggiunta roba da en.wiki
Riga 12:
 
Il [[Pentium 4]] della [[Intel]] implementa [[SSE2]], un'estensione del set di istruzioni SSE. Le caratteristiche principali di SSE2 sono il supporto per i numeri a virgola mobile a doppia precisione (64 bit) e il supporto per gli interi nel vettore di registri a 128 bit introdotti con SSE, il che permette al programmatore di utilizzare i registri MMX. Lo stesso SSE2 è stato esteso da [[SSE3]] introdotto con in core [[Prescott]] delle ultime generazioni di Pentium 4.
 
== Istruzioni SSE ==
SSE introduce sia operazioni su scalari singoli sia su gruppi di numeri in virgola mobile (packed).
 
====Istruzioni floating point====
 
* Movimenti memoria-registro / registro-memoria / registro-registro
** Scalari – MOVSS
** Packed – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
* Aritmetiche
** Scalari – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
** Packed – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
* Confronti
** Scalari – CMPSS, COMISS, UCOMISS
** Packed – CMPPS
* Impaccamento/spacchettamento dati
** Packed – SHUFPS, UNPCKHPS, UNPCKLPS
* Conversioni di tipo
** Scalari – CVTSI2SS, CVTSS2SI, CVTTSS2SI
** Packed – CVTPI2PS, CVTPS2PI, CVTTPS2PI
* Operazioni logiche sui bit
** Packed – ANDPS, ORPS, XORPS, ANDNPS
 
====Istruzioni su interi====
 
* Aritmetiche
** PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
* Movimenti dati
** PEXTRW, PINSRW
* Altre
** PMOVMSKB, PSHUFW
 
====Altre istruzioni====
 
* Gestione dell'MXCSR
** LDMXCSR, STMXCSR
* Gestione di memoria e cache
** MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
 
==Esempi==
Gli esempi che seguono dimostrano il vantyaggio di usare le istruzioni SSE. Consideriamo una operazione come la somma di vettori, che si usa molto spesso nella computer grafica; sommare due vettori a precisine singola con 4 componenti ciascuno richiede quattro istruzioni di somma floating point in un normale processore x86:
 
<code>
'''vec_res.x = v1.x + v2.x''';
'''vec_res.y = v1.y + v2.y''';
'''vec_res.z = v1.z + v2.z''';
'''vec_res.w = v1.w + v2.w''';
</code>
 
Queste quattro righe diventano altrettante istruzioni FADD nel codice oggetto compilato. Con le istruzioni SSE invece, come si vede dal codice che segue, basta una sola istruzione 'packed-add' a 128 bit per eseguire il calcolo.
 
<code>
'''movaps xmm0,address-of-v1''' ;'''xmm0=v1.w | v1.z | v1.y | v1.x''' <br />
'''addps xmm0,address-of-v2''' ;'''xmm0=v1.w+v2.w | v1.z+v2.z | v1.y+v2.y | v1.x+v2.x'''
</code>
 
== Voci correlate ==