SSE2 es el acrónimo de Streaming "Single Instruction Multiple Data" Extensions 2 es uno de los conjuntos de instrucciones de la arquitectura IA-32 SIMD. Fue utilizada por primera vez en la primera versión del Pentium 4 en 2001. Estas extensiones están diseñadas para el trabajo avanzado con gráficos 3D, codificación y decodificación de vídeo, reconocimiento de voz, comercio electrónico, Internet, aplicaciones de ingeniería y científicas, etc.
Las extensiones SSE2 siguen el mismo modelo que las utilizadas en los predecesores SSE y MMX manteniendo compatibilidad con esas extensiones, pero amplía su modelo con soporte para paquetes de valores flotantes de precisión doble y para paquetes de enteros de 128 bits.
Se diferencian entre los tipos de datos:
Las nuevas instrucciones se pueden dividir según operaciones de paquetes y escalares de precisión doble, conversiones, extensión a 128 bits de instrucciones MMX, y mejoras de las instrucciones de almacenamiento en la memoria intermedia.
Para cada introducción SSE de doble en precisión simple, existe la correspondiente en precisión doble en SSE2, excepto para funciones recíprocas RCPPS, RCPSS, RSQRTPS y RSQRTSS.
Además de los tipos previamente existentes, SSE2 añade los escalares en precisión doble y los paquetes en precisión doble, por lo que se añaden instrucciones de conversión para conectar estos nuevos tipos, como son: CVTPS2PD, CVTPD2PS.
En el siguiente gráfico se muestra el esquema de conversiones posibles:
Cada instrucción MMX, excepto las EMMS, es ampliada a 128 bits implementando la misma funcionalidad en un tipo de dato mayor. Y lo mismo sucede con las instrucciones de SSE.
Como ejemplos de estas instrucciones:
SSE2 introduce varias instrucciones de control de caché. SLFLUSH escribe e invalida la línea de caché asociada a una dirección lineal especificada. Esta instrucción, puede ser usada en todos los niveles privilegiados.
La instrucción SFENCE de SSE se ve suplementada por LFENCE y MFENCE en SSE2 LFENCE garantiza que cada carga con esta instrucción tras ella será globalmente visible antes de la siguiente instrucción. MFENCE es similar excepto por que carga y almacenamiento se consideran unidos.
Otras instrucciones de movimiento no temporales son: