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:

  • Paquetes de números dobles en coma flotante de 128 bits.
  • Paquetes de byte de 128 bits
  • Paquetes de palabra de 128 bits
  • Paquetes de doble palabra de 128 bits
  • Paquetes de cuádruple palabra de 128 bits

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.

Principales tipos de instruccionesEditar

SIMD flotantes en precisión dobleEditar

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.

ConversiónEditar

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:

Extensión a 128 bits de MMXEditar

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:

  • Movimiento: MOVDQA (de 16 bits alineados), MOVDQU, MOVDQ2Q y MOVQ2DQ.
  • Aritméticas: PADDQ y PSUBQ
  • Shuffle: PSHUFD, PSHUFHW y PSHUFLW
  • Shift: PSLLDQ y PSRLDQ
  • Desempaquetamiento: PUNPCKHQDQ y PUNPCKLQDQ

CacheabilidadEditar

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:

  • MOVNTPD, MOVNTDQ: si se usan operandos en memoria, estos han de ser de 16 bits alineados.
  • MASKMOVDQU: similar a MASKMOVVQ en SSE pero usa un registro XMM y 128 bits en memoria, no necesariamente sin alineamiento necesario.
  • MOVNTI: mueve el contenido de uno de los registros de propósito general sin "contaminar" la caché.
  • PAUSE: alerta al procesador del subsiguiente bucle de espera para que el procesador pueda reducir el número de cargas especulativas, lo cual reducir la carga de trabajo cuando termina el bucle y además ahorra energía y recursos

ReferenciasEditar

Véase tambiénEditar