Streaming SIMD Extensions
SSE (Streaming SIMD Extensions) è un instruction set SIMD progettato dalla Intel ed utilizzato nel suo processore Pentium III come risposta al 3DNow! prodotto da AMD, che era presente sul mercato da circa un anno. Era originariamente conosciuto con la sigla KNI, da Katamai New Instructions (Katamai era il nome in codice per il Pentium III). Durante il progetto Katamai Intel cercava di distinguerlo dalla sua precedente linea di prodotti, in particolare il Pentium II. AMD aggiunse successivamente il supporto per le istruzioni SSE nel suo processore Athlon XP.
Il primo tentativo di SIMD da parte della Intel, la tecnologia MMX fu una delusione. MMX ha principalmente due problemi: riutilizza i registri a virgola mobile rendendo impossibile per la CPU lavorare contemporaneamente sui dati in virgola mobile e i dati SIMD contemporaneamente, ma può operare solo sugli interi.
SSE aggiunge otto nuovi registri a 128 bit con nomi che vanno da XMM0 a XMM7. Ogni registro raggruppa quattro numeri a virgola mobile a 32 bit (precisione singola).
Poichè questi registri a 128 bit rappresentano stati aggiuntivi che il sistema operativo deve preservare durante il cambio di contesto dei task, sono disabilitati finchè il sistema operativo non li abilita esplicitamente. Questo significa che il SO deve essere programmato per utilizzare le istruzioni FXSAVE e FXRSTR, che sono la coppia di istruzioni introdotte da SSE per salvare in un'unica operazione i registri x86, MMX, 3DNow! e SSE. Il supporto per queste istruzioni fu velocemente aggiunto a tutti i principali sistemi operativi a 32 bit.
Poiché SSE aggiunge il supporto per la virgola mobile, fu molto più utilizzato di MMX dato che tutte le schede video gestiscono internamente i calcoli sui numeri interi. Con l'introduzione di SSE2 anche gli interi possono essere utilizzati con i nuovi registri XMM, perciò l'instruction set MMX adesso è ridondante.
Sul Pentium III, comunque, SSE è implementato utilizzando gli stessi circuiti della FPU, il che significa che la CPU non può inviare nella pipeline contemporaneamente le istruzioni SSE e quelle riguardanti la virgola mobile. I registri separati permettono di mischiare le operazioni SIMD e a virgola mobile, ma senza le prestazioni raggiunte passando esplicitamente dalla mobdalità a virgola mobile a quella MMX.
Il Pentium 4 della Intel implementa SSE2, un estensione all'instruction set 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.