# SSE2

SSE2 (Streaming SIMD Extensions 2) és un dels conjunts d'instruccions complementàries del processador Intel SIMD (Single Instruction, Multiple Data) introduïts per primera vegada per Intel amb la versió inicial del Pentium 4 l'any 2000. Estén el conjunt d'instruccions SSE anterior i està pensat per substituir completament MMX. Intel va ampliar SSE2 per crear SSE3 el 2004. SSE2 va afegir 144 instruccions noves a SSE, que té 70 instruccions. El fabricant de xips AMD va afegir suport per a SSE2 amb la introducció de les seves gammes Opteron i Athlon 64 de CPU AMD64 de 64 bits el 2003.

## Característiques

La majoria de les instruccions SSE2 implementen les operacions de vectors enters que també es troben a MMX. En lloc dels registres MMX utilitzen els registres XMM, que són més amplis i permeten millores significatives de rendiment en aplicacions especialitzades. Un altre avantatge de substituir MMX per SSE2 és evitar la penalització de canvi de mode per emetre instruccions x87 presents a MMX perquè està compartint espai de registre amb la FPU x87. L'SSE2 també complementa les operacions vectorials de coma flotant del conjunt d'instruccions SSE afegint suport per al tipus de dades de doble precisió.
Altres extensions SSE2 inclouen un conjunt d'instruccions de control de memòria cau destinades principalment a minimitzar la contaminació de la memòria cau quan es processen fluxos infinits d'informació i un complement sofisticat d'instruccions de conversió de format numèric.
La implementació d'AMD de SSE2 a la plataforma AMD64 (x86-64) inclou vuit registres addicionals, duplicant el nombre total fins a 16 (XMM0 a XMM15). Aquests registres addicionals només són visibles quan s'executen en mode de 64 bits. Intel va adoptar aquests registres addicionals com a part del seu suport per a l'arquitectura x86-64 (o en el llenguatge d'Intel, "Intel 64") el 2004.

## Diferències entre x87 FPU i SSE2

Les instruccions FPU (x87) proporcionen una precisió més alta calculant resultats intermedis amb 80 bits de precisió, per defecte, per minimitzar l'error d'arrodoniment en algorismes numèricament inestables (vegeu la justificació del disseny IEEE 754 i les referències que hi ha). Tanmateix, la FPU x87 només és una unitat escalar, mentre que SSE2 pot processar un petit vector d'operands en paral·lel.

## Diferències entre MMX i SSE2

SSE2 amplia les instruccions MMX per operar en registres XMM. Per tant, és possible convertir tot el codi MMX existent a un equivalent SSE2. Com que un registre SSE2 és el doble de llarg que un registre MMX, és possible que s'hagin de canviar els comptadors de bucles i l'accés a la memòria per acomodar-ho. Tanmateix, hi ha disponibles càrregues i emmagatzematges de 8 bytes a XMM, de manera que això no és estrictament obligatori.

## Suport de CPU

SSE2 és una extensió de l'arquitectura IA-32, basada en el conjunt d'instruccions x86. Per tant, només els processadors x86 poden incloure SSE2. L'arquitectura AMD64 admet l'IA-32 com a mode de compatibilitat i inclou l'SSE2 a la seva especificació. També duplica el nombre de registres XMM, permetent un millor rendiment. SSE2 també és un requisit per instal·lar Windows 8 (i posterior) o Microsoft Office 2013 (i posterior) "per millorar la fiabilitat d'aplicacions i controladors de tercers que s'executen a Windows 8".
Les CPU IA-32 següents admeten SSE2:
* CPU basades en Intel NetBurst (Pentium 4, Xeon, Celeron, Pentium D, Celeron D)
* Intel Pentium M i Celeron M
* Intel Atom
* AMD Athlon 64
* Transmeta Efficeon
* VIA C7

## Referències

* ↑ «SSE2 for Dummies (who know C/C++)» (en anglès). https://www.gamedev.net.+[Consulta: 9 setembre 2023].
* ↑ Fog, Agner. «Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms» (en anglès). Arxivat de l'original el April 8, 2013. [Consulta: April 26, 2013].
* ↑ «DirectXMath Programming Guide/Library Internals» (en anglès). Arxivat de l'original el July 2, 2019. [Consulta: July 2, 2019].
* ↑ Microsoft Corporation. «What is PAE, NX, and SSE2 and why does my PC need to support them to run Windows 8 ?» (en anglès). Arxivat de l'original el April 11, 2013. [Consulta: March 19, 2013].