SSE4 ( Streaming SIMD Extensions 4 ) es un conjunto de instrucciones de CPU SIMD que se utiliza en la microarquitectura Intel Core y AMD K10 (K8L) . Se anunció el 27 de septiembre de 2006 en el Foro de desarrolladores de Intel de otoño de 2006 , con detalles vagos en un documento técnico ; [1] Los detalles más precisos de 47 instrucciones estuvieron disponibles en el Foro de Desarrolladores Intel de primavera de 2007 en Beijing , en la presentación. [2]SSE4 es totalmente compatible con software escrito para generaciones anteriores de microprocesadores de arquitectura Intel 64 e IA-32. Todo el software existente continúa funcionando correctamente sin modificaciones en los microprocesadores que incorporan SSE4, así como en presencia de aplicaciones nuevas y existentes que incorporan SSE4. [3]
Subconjuntos SSE4
Intel SSE4 consta de 54 instrucciones. Un subconjunto que consta de 47 instrucciones, denominado SSE4.1 en alguna documentación de Intel, está disponible en Penryn . Además, SSE4.2 , un segundo subconjunto que consta de las 7 instrucciones restantes, está disponible por primera vez en Core i7 basado en Nehalem . Intel atribuye a los comentarios de los desarrolladores un papel importante en el desarrollo del conjunto de instrucciones.
Comenzando con los procesadores basados en Barcelona , AMD introdujo el conjunto de instrucciones SSE4a , que tiene 4 instrucciones SSE4 y 4 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 función SSE desalineada, lo que significaba 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 acceden a la memoria. [4] Más tarde, Intel introdujo mejoras de velocidad similares a SSE no alineado en sus procesadores Nehalem, pero no introdujo acceso desalineado por instrucciones SSE sin carga hasta AVX . [5]
Confusión de nombres
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 creó el apodo SSSE3. Apodado internamente Merom New Instructions, Intel originalmente no planeaba 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 próxima extensión de conjunto de instrucciones. [7]
Intel utiliza el término de marketing HD Boost para referirse a SSE4. [8]
Nuevas instrucciones
A diferencia de todas las iteraciones anteriores de SSE, SSE4 contiene instrucciones que ejecutan operaciones que no son específicas de las aplicaciones multimedia. Cuenta con una serie de instrucciones cuya acción está determinada por un campo constante y un conjunto de instrucciones que toman XMM0 como un tercer operando implícito.
Varias de estas instrucciones están habilitadas por el motor de reproducción aleatoria de ciclo único en Penryn. (Las operaciones de orden aleatorio reordenan los bytes dentro de un registro).
SSE4.1
Estas instrucciones se introdujeron con la microarquitectura Penryn , la contracción de 45 nm de la microarquitectura Core de Intel . El soporte se indica mediante el indicador CPUID.01H: ECX.SSE41 [Bit 19].
Instrucción | Descripción |
---|---|
MPSADBW | Calcule 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 bloques de 8 × 8 en menos de siete ciclos. [9] Un bit de un operando inmediato de tres bits indica si y 0 .. y 10 o y 4 .. y 14 deben usarse desde el operando de destino, los otros dos si x 0 ..x 3 , x 4 .. x 7 , x 8 ..x 11 o x 12 ..x 15 deben usarse desde la fuente. |
PHMINPOSUW | Establece la palabra de 16 bits sin signo inferior del destino en la palabra de 16 bits sin signo más pequeña en el origen y el siguiente desde abajo al índice de esa palabra en el origen. |
PMULDQ | Multiplicación "larga" empaquetada de 32 bits con signo, dos (1º y 3º) de cuatro enteros empaquetados multiplicados dando dos resultados empaquetados de 64 bits. |
PMULLD | Multiplicación "baja" empaquetada de 32 bits con signo, cuatro conjuntos empaquetados de enteros multiplicados dando cuatro resultados empaquetados de 32 bits. |
DPPS , DPPD | Producto escalar para datos AOS (matriz de estructuras). Esto requiere un operando inmediato que consta de cuatro (o dos para DPPD) bits para seleccionar cuál de las entradas en la entrada multiplicar y acumular, y otros cuatro (o dos para DPPD) para seleccionar si poner 0 o el producto punto en el campo apropiado de la salida. |
BLENDPS , BLENDPD , BLENDVPS , BLENDVPD , PBLENDVB , PBLENDW | Copia condicional de elementos en 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 ubicación de memoria y lo insertan en un campo en el registro de destino dado por un operando inmediato. EXTRACTPS y PEXTR leen un campo del registro fuente y lo insertan en un registro x86 o en una ubicació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 | Señal empaquetada / extensión cero a tipos más anchos |
PTEST | Esto es similar a la instrucción TEST, ya 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 es equivalente a establecer el indicador Z si no se establece ninguno de los bits enmascarados por SRC, y el indicador C si se establecen todos los bits enmascarados por SRC. |
PCMPEQQ | Comparación de cuatro palabras (64 bits) para la igualdad |
PAQUETEUSDW | Convierta los DWORD firmados en WORD sin firmar con saturación. |
MOVNTDQA | Lectura eficiente desde el área de memoria de combinación de escritura al registro SSE; esto es útil para recuperar resultados de periféricos conectados al bus de memoria. |
SSE4.2
SSE4.2 agregó STTNI (Nuevas instrucciones de cadena y texto), [10] varias instrucciones nuevas que realizan búsquedas de caracteres y comparaciones en dos operandos de 16 bytes a la vez. Estos fueron diseñados (entre otras cosas) para acelerar el análisis de documentos XML . [11] También agregó una instrucción CRC32 para calcular verificaciones de redundancia cíclica como se usa 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. El soporte se indica mediante el indicador CPUID.01H: ECX.SSE42 [Bit 20].
Instrucción | Descripción |
---|---|
CRC32 | Acumule el valor CRC32 C utilizando el polinomio 0x11EDC6F41 (o, sin el bit de orden superior, 0x1EDC6F41). [12] [13] |
PCMPESTRI | Empaquetado Comparar cadenas de longitud explícita, índice de retorno |
PCMPESTRM | Empaquetado Comparar cadenas de longitud explícita, máscara de retorno |
PCMPISTRI | Empaquetado Comparar cadenas de longitud implícita, índice de retorno |
PCMPISTRM | Empaquetado Comparar cadenas de longitud implícita, máscara de retorno |
PCMPGTQ | Compare datos empaquetados firmados de 64 bits por más de |
POPCNT y LZCNT
Estas instrucciones operan en registros enteros en lugar de SSE, porque no son instrucciones SIMD, pero aparecen al mismo tiempo y, aunque AMD las introdujo con el conjunto de instrucciones SSE4a, se cuentan como extensiones separadas con sus propios bits CPUID dedicados para indicar soporte. Intel implementa POPCNT comenzando con la microarquitectura Nehalem y LZCNT comenzando con la microarquitectura Haswell . AMD implementa ambos a partir de la microarquitectura de Barcelona .
AMD llama a este par de instrucciones Advanced Bit Manipulation (ABM) .
Instrucción | Descripción |
---|---|
POPCNT | Recuento de población (número de recuento de bits establecido en 1). El soporte se indica mediante el indicador CPUID.01H: ECX.POPCNT [Bit 23]. [14] |
LZCNT | Cuenta cero líder . El soporte se indica mediante el indicador CPUID.80000001H: ECX.ABM [Bit 5]. [15] |
La codificación de lzcnt es lo suficientemente similar a bsr (escaneo de bits inverso) que si lzcnt se realiza en una CPU que no lo admite, como las CPU de Intel antes de Haswell, realizará la operación bsr en lugar de generar un error de instrucción no válida a pesar del resultado diferente valores de lzcnt y bsr .
Los ceros finales se pueden contar usando las instrucciones bsf (bit scan forward) o tzcnt .
SSE4a
El grupo de instrucción SSE4a se introdujo en la microarquitectura de AMD en Barcelona . Estas instrucciones no están disponibles en procesadores Intel. El soporte se indica mediante el indicador CPUID.80000001H: ECX.SSE4A [Bit 6]. [15]
Instrucción | Descripción |
---|---|
EXTRQ / INSERTQ | Instrucciones combinadas de cambio de máscara. [dieciséis] |
MOVNTSD / MOVNTSS | Instrucciones de la tienda de transmisión escalar. [17] |
CPU de apoyo
- Intel
- Procesadores Silvermont (compatibles con SSE4.1, SSE4.2 y POPCNT)
- Procesadores Goldmont ( compatibles con SSE4.1, SSE4.2 y POPCNT)
- Procesadores Goldmont Plus ( compatibles con SSE4.1, SSE4.2 y POPCNT)
- Procesadores Tremont (compatibles con SSE4.1, SSE4.2 y POPCNT)
- Procesadores Penryn (compatible con SSE4.1, excepto Pentium Dual-Core y Celeron )
- Procesadores Nehalem y procesadores Westmere (compatibles con SSE4.1, SSE4.2 y POPCNT, excepto Pentium y Celeron )
- Procesadores Sandy Bridge y más nuevos (compatibles con SSE4.1, SSE4.2 y POPCNT, incluidos Pentium y Celeron )
- Procesadores Haswell y más nuevos (compatibles con SSE4.1, SSE4.2, POPCNT y LZCNT)
- AMD
- Procesadores basados en K10 (compatibles con SSE4a, POPCNT y LZCNT)
- Procesadores "Cat" de bajo consumo
- Procesadores basados en Bobcat (compatibles con SSE4a, POPCNT y LZCNT)
- Procesadores basados en Jaguar y más nuevos (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- Procesadores basados en Puma y más nuevos (SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT compatibles)
- Procesadores de "equipo pesado" (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- Procesadores basados en bulldozer
- Procesadores basados en Piledriver [18]
- Procesadores basados en apisonadora
- Procesadores basados en excavadoras y más nuevos
- Procesadores basados en Zen (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- Procesadores basados en Zen + (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- Procesadores basados en Zen2 (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- Procesadores basados en Zen3 (compatibles con SSE4a, SSE4.1, SSE4.2, POPCNT y LZCNT)
- VÍA
- Procesadores Nano 3000, X2, QuadCore (compatible con SSE4.1)
- Procesadores de la serie Nano QuadCore C4000 (compatible con SSE4.1, SSE4.2)
- Procesadores Eden X4 (compatible con SSE4.1, SSE4.2)
- Zhaoxin
- Procesadores ZX-C y posteriores (compatible con SSE4.1, SSE4.2)
Referencias
- ^ Innovación del conjunto de instrucciones de Intel Streaming SIMD Extensions 4 (SSE4) , Intel.
- ^ Ajuste de Intel SSE4 para la microarquitectura Intel Core de próxima generación de 45 nm , Intel.
- ^ Referencia de programación Intel SSE4
- ^ " Característica del procesador " Barcelona ": acceso desalineado SSE" . AMD. Archivado desde el original el 9 de agosto de 2016 . Consultado el 3 de marzo de 2015 .
- ^ "Dentro de la microarquitectura Intel Nehalem" . Consultado el 3 de marzo de 2015 .
- ^ Mi experiencia con "Conroe" , DailyTech
- ^ Ampliación de la arquitectura de procesador más popular del mundo Archivado el 24 de noviembre de 2011 en Wayback Machine , Intel
- ^ "Intel - Soluciones para centros de datos, IOT e innovación en PC" . Intel .
- ^ Estimación de movimiento con Intel Streaming SIMD Extensions 4 (Intel SSE4) , Intel.
- ^ "Validación de esquema con Intel® Streaming SIMD Extensions 4 (Intel® SSE4)" .
- ^ "Acelerador de análisis XML con Intel® Streaming SIMD Extensions 4 (Intel® SSE4)" .
- ^ Referencia de programación Intel SSE4 p. 61. Ver también RFC 3385 para una discusión del polinomio CRC32C.
- ^ Cálculo CRC rápido y paralelo usando la instrucción Nehalem CRC32 - Dr. Dobbs, 12 de abril de 2011
- ^ Intel® 64 e IA-32 arquitecturas de software Manual del desarrollador, volumen 2B: conjunto de instrucciones de referencia, N-Z .
- ^ a b Especificación de CPUID de AMD
- ^ Rahul Chaturvedi (17 de septiembre de 2007). " Característica del procesador " Barcelona ": Conjunto de instrucciones SSE4a" . Archivado desde el original el 25 de octubre de 2013.
- ^ Rahul Chaturvedi (2 de octubre de 2007). " Característica del procesador " Barcelona ": SSE4a, parte 2" . Archivado desde el original el 25 de octubre de 2013.
- ^ "AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX" .
enlaces externos
- Referencia de programación SSE4 de Intel
- Calculadora PCMPSTR para las instrucciones de cadena SSE 4.2