This article may be too technical for most readers to understand.(July 2019) |
SSE4 ( Streaming SIMD Extensions 4 ) es un conjunto de instrucciones SIMD para CPU utilizado en la microarquitectura Intel Core y AMD K10 (K8L) . Se anunció el 27 de septiembre de 2006, en el Intel Developer Forum de otoño de 2006 , con detalles vagos en un documento técnico ; [1] se pusieron a disposición detalles más precisos de 47 instrucciones en el Intel Developer Forum de primavera de 2007 en Pekín , en la presentación. [2] SSE4 amplió el conjunto de instrucciones SSE3 que se lanzó a principios de 2004. Todo el software que utiliza instrucciones SIMD de Intel anteriores (por ejemplo, SSE3) es compatible con los microprocesadores modernos que admiten instrucciones SSE4. Todo el software existente continúa ejecutándose correctamente sin modificaciones en microprocesadores que incorporan SSE4, así como en presencia de aplicaciones existentes y nuevas que incorporan SSE4. [3]
Al igual que otros conjuntos de instrucciones SIMD de CPU de generaciones anteriores, SSE4 admite hasta 16 registros, cada uno de 128 bits de ancho, que pueden cargar cuatro números enteros de 32 bits, cuatro números de punto flotante de precisión simple de 32 bits o dos números de punto flotante de precisión doble de 64 bits. [1] Las operaciones SIMD, como la suma/multiplicación de elementos vectoriales y la suma/multiplicación escalar vectorial, procesan múltiples bytes de datos en una sola instrucción de CPU. La operación paralela incluye mejoras notables en el rendimiento. SSE4.2 introdujo nuevas operaciones de cadena SIMD, incluida una instrucción para comparar dos fragmentos de cadena de hasta 16 bytes cada uno. [1] SSE4.2 es un subconjunto de SSE4 y se lanzó unos años después del lanzamiento inicial de SSE4.
Intel SSE4 consta de 54 instrucciones. Un subconjunto de 47 instrucciones, denominado SSE4.1 en algunos documentos de Intel, está disponible en Penryn . Además, SSE4.2 , un segundo subconjunto que consta de las siete instrucciones restantes, está disponible por primera vez en el Core i7 basado en Nehalem . Intel atribuye el papel importante que han desempeñado los comentarios de los desarrolladores en el desarrollo del conjunto de instrucciones.
A partir de los procesadores basados en Barcelona , AMD introdujo el conjunto de instrucciones SSE4a , que tiene cuatro instrucciones SSE4 y cuatro nuevas instrucciones SSE. Estas instrucciones no se encuentran en los procesadores de Intel que admiten SSE4.1 y los procesadores AMD solo comenzaron a admitir SSE4.1 y SSE4.2 de Intel (el conjunto completo de instrucciones SSE4) en los procesadores FX basados en Bulldozer . Con SSE4a también se introdujo la característica SSE desalineada, lo que significa que las instrucciones de carga no alineadas eran tan rápidas como las versiones alineadas en direcciones alineadas. También permitió deshabilitar la verificación de alineación en operaciones SSE sin carga que accedieran a la memoria. [4] Intel introdujo más tarde mejoras de velocidad similares para SSE no alineado en sus procesadores Nehalem, pero no introdujo el acceso desalineado por instrucciones SSE sin carga hasta AVX . [5]
Lo que ahora se conoce como SSSE3 (Supplemental Streaming SIMD Extensions 3), introducido en la línea de procesadores Intel Core 2 , fue denominado SSE4 por algunos medios hasta que Intel ideó el nombre SSSE3. Apodadas internamente Merom New Instructions, Intel originalmente no planeó asignarles un nombre especial, lo que fue criticado por algunos periodistas. [6] Intel finalmente aclaró la confusión y reservó el nombre SSE4 para su siguiente extensión del conjunto de instrucciones. [7]
Intel utiliza el término de marketing HD Boost para referirse a SSE4. [8]
A diferencia de todas las iteraciones anteriores de SSE, SSE4 contiene instrucciones que ejecutan operaciones que no son específicas de las aplicaciones multimedia. Incluye una serie de instrucciones cuya acción está determinada por un campo constante y un conjunto de instrucciones que toman XMM0 como tercer operando implícito.
Varias de estas instrucciones son posibles gracias al motor de mezcla de ciclo único de Penryn. (Las operaciones de mezcla reordenan los bytes dentro de un registro).
Estas instrucciones se introdujeron con la microarquitectura Penryn , la reducción de 45 nm de la microarquitectura Core de Intel . La compatibilidad se indica mediante el indicador CPUID.01H:ECX.SSE41[Bit 19].
Instrucción | Descripción |
---|---|
MPSADBW | Calcular ocho sumas de compensación de diferencias absolutas, cuatro a la vez (es decir, |x 0 −y 0 |+|x 1 −y 1 |+|x 2 −y 2 |+|x 3 −y 3 |, |x 0 −y 1 |+|x 1 −y 2 |+|x 2 −y 3 |+|x 3 −y 4 |, ..., |x 0 −y 7 |+|x 1 −y 8 |+|x 2 −y 9 |+|x 3 −y 10 |); esta operación es importante para algunos códecs HD y permite calcular una diferencia de bloque de 8×8 en menos de siete ciclos. [9] Un bit de un operando inmediato de tres bits indica si se debe utilizar y 0 .. y 10 o y 4 .. y 14 desde el operando de destino, los otros dos indican si se debe utilizar x 0 ..x 3 , x 4 ..x 7 , x 8 ..x 11 o x 12 ..x 15 desde la fuente. |
PHMINPOSUW | Establece la última palabra sin signo de 16 bits del destino en la palabra sin signo de 16 bits más pequeña del origen, y la siguiente desde abajo en el índice de esa palabra en el origen. |
PMULDQ | Multiplicación "larga" con signo de 32 bits empaquetada, dos (1.º y 3.º) de cuatro números enteros empaquetados multiplicados dan dos resultados empaquetados de 64 bits. |
PMULLD | Multiplicación "baja" con signo de 32 bits empaquetada, cuatro conjuntos empaquetados de números enteros multiplicados dan cuatro resultados empaquetados de 32 bits. |
DPPS ,DPPD | Producto escalar para datos AOS (Array of Structs). Esto requiere un operando inmediato que consta de cuatro bits (o dos para DPPD) para seleccionar cuáles de las entradas de la entrada se multiplicarán y acumularán, y otros cuatro bits (o dos para DPPD) para seleccionar si se debe colocar 0 o el producto escalar en el campo apropiado de la salida. |
BLENDPS , BLENDPD , BLENDVPS , BLENDVPD , PBLENDVB ,PBLENDW | Copia condicional de elementos de una ubicación con otra, basada (para la forma no V) en los bits de un operando inmediato y (para la forma V) en los bits del registro XMM0. |
PMINSB , PMAXSB , PMINUW , PMAXUW , PMINUD , PMAXUD , PMINSD ,PMAXSD | Mínimo/máximo empaquetado para diferentes tipos de operandos enteros |
ROUNDPS , ROUNDSS , ROUNDPD ,ROUNDSD | Redondear valores en un registro de punto flotante a números enteros, utilizando uno de los cuatro modos de redondeo especificados por un operando inmediato |
INSERTPS , PINSRB , PINSRD / ,PINSRQ EXTRACTPS PEXTRB PEXTRD/PEXTRQ | Las instrucciones INSERTPS y PINSR leen 8, 16 o 32 bits de un registro x86 o de una posición de memoria y los insertan en un campo del registro de destino dado por un operando inmediato. EXTRACTPS y PEXTR leen un campo del registro de origen y lo insertan en un registro x86 o en una posición de memoria. Por ejemplo, PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 almacena el primer campo de xmm1 en la dirección dada por el primer campo de xmm0. |
PMOVSXBW , PMOVZXBW , PMOVSXBD , PMOVZXBD , PMOVSXBQ , PMOVZXBQ , PMOVSXWD , PMOVZXWD , PMOVSXWQ , PMOVZXWQ , PMOVSXDQ ,PMOVZXDQ | Extensión de signo/cero empaquetado a tipos más amplios |
PTEST | Esto es similar a la TEST instrucción , en el sentido de que establece el indicador Z en el resultado de un AND entre sus operandos: ZF se establece si DEST AND SRC es igual a 0. Además, establece el indicador C si (NOT DEST) AND SRC es igual a cero.Esto equivale a configurar el indicador Z si ninguno de los bits enmascarados por SRC está configurado, y el indicador C si todos los bits enmascarados por SRC están configurados. |
PCMPEQQ | Comparación de palabras cuádruples (64 bits) para determinar la igualdad |
PACKUSDW | Convierte DWORD con signo en PALABRAS sin signo con saturación. |
MOVNTDQA | Lectura eficiente desde el área de memoria de combinación de escritura en el registro SSE; esto es útil para recuperar resultados de los periféricos conectados al bus de memoria. |
SSE4.2 agregó STTNI (String and Text New Instructions), [10] varias instrucciones nuevas que realizan búsquedas de caracteres y comparaciones en dos operandos de 16 bytes a la vez. Estas fueron diseñadas (entre otras cosas) para acelerar el análisis de documentos XML . [11] También agregó una CRC32
instrucción para calcular verificaciones de redundancia cíclica como las que se usan en ciertos protocolos de transferencia de datos. Estas instrucciones se implementaron por primera vez en la línea de productos Intel Core i7 basada en Nehalem y completan el conjunto de instrucciones SSE4. Por otro lado, AMD agregó soporte por primera vez a partir de la microarquitectura Bulldozer . El soporte se indica a través del indicador CPUID.01H:ECX.SSE42[Bit 20].
Windows 11 24H2 requiere que la CPU admita SSE4.2; de lo contrario, el kernel de Windows no podrá iniciarse. [12]
Instrucción | Descripción |
---|---|
CRC32 | Acumule el valor CRC32 C utilizando el polinomio 0x11EDC6F41 (o, sin el bit de orden superior, 0x1EDC6F41). [13] [14] |
PCMPESTRI | Comparación de cadenas de longitud explícita empaquetadas, índice de retorno |
PCMPESTRM | Comparación de cadenas de longitud explícita empaquetadas, máscara de retorno |
PCMPISTRI | Comparación de cadenas de longitud implícita empaquetadas, índice de retorno |
PCMPISTRM | Comparación de cadenas de longitud implícita empaquetadas, máscara de retorno |
PCMPGTQ | Comparar datos de 64 bits con signo empaquetado para mayor que |
POPCNT
yLZCNT
Estas instrucciones operan sobre registros enteros en lugar de registros SSE, porque no son instrucciones SIMD, sino que aparecen al mismo tiempo y, aunque fueron introducidas por AMD con el conjunto de instrucciones SSE4a, se cuentan como extensiones separadas con sus propios bits de CPUID dedicados para indicar compatibilidad. Intel implementa POPCNT
comenzando con la microarquitectura Nehalem y LZCNT
comenzando con la microarquitectura Haswell . AMD implementa ambas, comenzando con la microarquitectura Barcelona .
AMD llama a este par de instrucciones Manipulación avanzada de bits (ABM) .
La codificación de LZCNT
toma la misma ruta de codificación que la codificación de la BSR
instrucción (inversión de escaneo de bits). Esto genera un problema cuando LZCNT
se invoca en algunas CPU que no la admiten, como las CPU Intel anteriores a Haswell, y puede ejecutar la BSR
operación de forma incorrecta en lugar de generar una excepción de instrucción no válida . Esto es un problema ya que los valores de resultado de LZCNT
y BSR
son diferentes.
Los ceros finales se pueden contar utilizando las instrucciones BSF
(escaneo de bits hacia adelante) o TZCNT
.
Windows 11 24H2 requiere que la CPU sea compatible POPCNT
, de lo contrario, el kernel de Windows no podrá iniciarse. [15]
Instrucción | Descripción |
---|---|
POPCNT | Recuento de población (número de bits establecido en 1). La compatibilidad se indica mediante el indicador CPUID.01H:ECX.POPCNT[Bit 23]. [16] |
LZCNT | Recuento de ceros a la izquierda . La compatibilidad se indica mediante el indicador CPUID.80000001H:ECX.ABM[Bit 5]. [17] |
El grupo de instrucciones SSE4a se introdujo en la microarquitectura Barcelona de AMD . Estas instrucciones no están disponibles en los procesadores Intel. La compatibilidad se indica mediante el indicador CPUID.80000001H:ECX.SSE4A[Bit 6]. [17]
Instrucción | Descripción |
---|---|
EXTRQ INSERTQ | Instrucciones combinadas de cambio de máscara. [18] |
MOVNTSD MOVNTSS | Instrucciones de almacenamiento de transmisión escalar. [19] |
POPCNT
(SSE4.1, SSE4.2 y compatibles)POPCNT
compatibles)POPCNT
compatibles)POPCNT
(SSE4.1, SSE4.2 y compatibles)POPCNT
compatibles, excepto Pentium y Celeron )POPCNT
compatibles, incluidos Pentium y Celeron )POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
(SSE4a, SSE4.1, SSE4.2 y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)POPCNT
(SSE4a, SSE4.1, SSE4.2 y LZCNT
compatibles)POPCNT
y LZCNT
compatibles)