Articulo de referencia

Extensiones SIMD de transmisión

En informática , Streaming SIMD Extensions ( SSE ) es una extensión del conjunto de instrucciones SIMD (Single Instruction, Multiple Data ) para la arquitectura x86 , diseñada p...

En informática , Streaming SIMD Extensions ( SSE ) es una extensión del conjunto de instrucciones SIMD (Single Instruction, Multiple Data ) para la arquitectura x86 , diseñada por Intel e introducida en 1999 en su serie de unidades centrales de procesamiento (CPU) Pentium III , poco después de la aparición de 3DNow! de Advanced Micro Devices (AMD) . SSE contiene 70 instrucciones nuevas (65 mnemónicos únicos [ 1 ] que utilizan 70 codificaciones), la mayoría de las cuales trabajan con datos de punto flotante de precisión simple . Las instrucciones SIMD pueden aumentar considerablemente el rendimiento cuando se deben realizar exactamente las mismas operaciones en múltiples objetos de datos. Las aplicaciones típicas son el procesamiento de señales digitales y el procesamiento de gráficos .

El primer intento de Intel con SIMD para IA-32 fue el conjunto de instrucciones MMX . MMX tenía dos problemas principales: reutilizaba los registros de punto flotante x87 existentes , lo que impedía que las CPU trabajaran simultáneamente con datos de punto flotante y SIMD, y solo funcionaba con números enteros . Las instrucciones de punto flotante SSE operan en un nuevo conjunto de registros independientes, los registros XMM, y añaden algunas instrucciones para números enteros que funcionan con los registros MMX.

Posteriormente, Intel amplió SSE a SSE2 , SSE3 , SSSE3 y SSE4 . Gracias a su compatibilidad con aritmética de punto flotante, tuvo aplicaciones más amplias que MMX y se popularizó. La incorporación de la compatibilidad con enteros en SSE2 hizo que MMX resultara prácticamente redundante, aunque en algunos casos se puede lograr un mayor rendimiento utilizando MMX en paralelo con operaciones SSE.

SSE se denominó originalmente Katmai New Instructions ( KNI ), siendo Katmai el nombre en clave de la primera revisión del núcleo Pentium III. Durante el proyecto Katmai, Intel buscó diferenciarlo de su línea de productos anterior, en particular de su producto estrella, el Pentium II . Posteriormente, se renombró como Internet Streaming SIMD Extensions ( ISSE [ 2 ] ) y, finalmente, como SSE.

AMD agregó un subconjunto de SSE, 19 de ellos, llamados nuevas instrucciones MMX , [ 3 ] y conocidas como varias variantes y combinaciones de SSE y MMX, o también como Integer SSE ( ISSE , que no debe confundirse con Internet Streaming SIMD Extensions , un nombre anterior para SSE) poco después con el lanzamiento del Athlon original en agosto de 1999 (ver extensiones 3DNow! ). AMD finalmente agregó soporte completo para instrucciones SSE (a veces denominado 3DNow! Professional ) comenzando con sus procesadores Athlon XP ( núcleos Corvette y Palomino ) y Duron ( núcleo Morgan ).

Registros

SSE añadió originalmente ocho nuevos registros de 128 bits conocidos como XMM0hasta XMM7. Las extensiones AMD64 de AMD añadieron otros ocho registros XMM8hasta XMM15, y esta extensión se duplica en la arquitectura Intel 64. También hay un nuevo registro de control/estado de 32 bits, MXCSR. Los registros XMM8hasta XMM15son accesibles solo en modo de operación de 64 bits.

SSE utilizaba un único tipo de datos para los registros XMM:

Posteriormente, SSE2 ampliaría el uso de los registros XMM para incluir:

  • dos números de punto flotante de doble precisión de 64 bits o
  • dos enteros de 64 bits o
  • cuatro enteros de 32 bits o
  • ocho enteros cortos de 16 bits o
  • dieciséis bytes o caracteres de 8 bits.

Debido a que estos registros de 128 bits son estados de máquina adicionales que el sistema operativo debe conservar entre cambios de tarea , están deshabilitados por defecto hasta que el sistema operativo los habilite explícitamente. Esto significa que el sistema operativo debe saber cómo usar las instrucciones `reserve` FXSAVEy FXRSTOR`reserve`, que es el par de instrucciones extendidas que puede guardar todos los estados de los registros x86 y SSE a la vez. Esta compatibilidad se añadió rápidamente a todos los principales sistemas operativos IA-32.

El primer procesador compatible con SSE, el Pentium III , compartía recursos de ejecución entre SSE y la unidad de punto flotante (FPU). [ 2 ] Si bien una aplicación compilada puede intercalar instrucciones FPU y SSE en paralelo, el Pentium III no emite una instrucción FPU y una instrucción SSE en el mismo ciclo de reloj . Esta limitación reduce la efectividad del procesamiento en paralelo , pero los registros XMM separados permiten combinar operaciones SIMD y de punto flotante escalar sin la pérdida de rendimiento que supone el cambio explícito entre el modo MMX y el modo de punto flotante.

Instrucciones SSE

SSE introdujo instrucciones tanto escalares como de punto flotante empaquetadas .

Instrucciones de punto flotante

Las operaciones flotantes cumplen con la norma IEEE 754-1985, con la excepción de RSQRTSS, que no está especificada en la norma.

  • Movimiento de datos de memoria a registro/de registro a memoria/de registro a registro
    • Escalar –MOVSS
    • Lleno –MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS, MOVMSKPS
  • Aritmética
    • Escalar –ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
    • Lleno –ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
  • Comparar
    • Escalar –CMPSS, COMISS, UCOMISS
    • Lleno –CMPPS
  • Reorganización y desempaquetado de datos
    • Lleno –SHUFPS, UNPCKHPS, UNPCKLPS
  • Conversión de tipo de datos
    • Escalar –CVTSI2SS, CVTSS2SI, CVTTSS2SI
    • Lleno –CVTPI2PS, CVTPS2PI, CVTTPS2PI
  • operaciones lógicas bit a bit
    • Lleno –ANDPS, ORPS, XORPS, ANDNPS

Instrucciones para números enteros

  • Aritmética
    • PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
  • Movimiento de datos
    • PEXTRW, PINSRW
  • Otro
    • PMOVMSKB, PSHUFW

Otras instrucciones

  • MXCSRgestión
    • LDMXCSR, STMXCSR
  • Gestión de caché y memoria
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

Ejemplo

El siguiente ejemplo sencillo demuestra la ventaja de usar SSE. Consideremos una operación como la suma de vectores, que se usa con mucha frecuencia en aplicaciones de gráficos por computadora. Para sumar dos vectores de precisión simple y cuatro componentes usando x86 se requieren cuatro instrucciones de suma de punto flotante.

vec_res . x = v1 . x + v2 . x ; vec_res . y = v1 . y + v2 . y ; vec_res . z = v1 . z + v2 . z ; vec_res . w = v1 . w + v2 . w ;

Esto corresponde a cuatro instrucciones FADD x86 en el código objeto. Por otro lado, como muestra el siguiente pseudocódigo, una sola instrucción de "suma empaquetada" de 128 bits puede reemplazar las cuatro instrucciones de suma escalar.

movaps xmm0 , [ v1 ] ;xmm0 = v1.w | v1.z | v1.y | v1.x addps xmm0 , [ v2 ] ;xmm0 = v1.w+v2.w | v1.z+v2.z | v1.y+v2.y | v1.x+v2.x movaps [ vec_res ], xmm0 ;xmm0

Versiones posteriores

  • SSE2 , Willamette New Instructions (WNI), introducido con el Pentium 4 , es una mejora importante de SSE. SSE2 añade dos características principales: coma flotante de doble precisión (64 bits) para todas las operaciones SSE y operaciones con enteros MMX en registros XMM de 128 bits. En el conjunto de instrucciones SSE original, la conversión a y desde enteros colocaba los datos enteros en los registros MMX de 64 bits. SSE2 permite al programador realizar operaciones matemáticas SIMD en cualquier tipo de dato (desde enteros de 8 bits hasta coma flotante de 64 bits) completamente con el archivo de registros vectoriales XMM, sin necesidad de utilizar los registros MMX o FPU heredados. Ofrece un conjunto de instrucciones ortogonales para trabajar con tipos de datos comunes.
  • SSE3 , también conocido como Prescott New Instructions (PNI), es una actualización incremental de SSE2 que incorpora algunas instrucciones matemáticas orientadas al DSP y algunas instrucciones de gestión de procesos (hilos). Además, permitía la suma o multiplicación de dos números almacenados en el mismo registro, algo que no era posible en SSE2 ni en versiones anteriores. Esta capacidad, denominada horizontal en la terminología de Intel, fue la principal novedad del conjunto de instrucciones SSE3. La extensión 3DNow! de AMD también permitía realizar esta última operación.
  • SSSE3 , Merom New Instructions (MNI), es una actualización de SSE3 que añade 16 nuevas instrucciones, entre las que se incluyen la permutación de bytes en una palabra, la multiplicación de números de punto fijo de 16 bits con redondeo correcto y las instrucciones de acumulación dentro de la palabra. SSSE3 se confunde a menudo con SSE4, ya que este término se utilizó durante el desarrollo de la microarquitectura Core .
  • SSE4 , Penryn New Instructions (PNI), es otra mejora importante que añade una instrucción de producto escalar , instrucciones enteras adicionales, una popcntinstrucción ( recuento de población : cuenta el número de bits establecidos en 1, utilizada ampliamente, por ejemplo, en criptografía ) y más.
  • XOP , FMA4 y CVT16 son nuevas iteraciones anunciadas por AMD en agosto de 2007 [ 4 ] [ 5 ] y revisadas en mayo de 2009. [ 6 ]
  • Las Extensiones Vectoriales Avanzadas (AVX), también conocidas como Nuevas Instrucciones de Gesher (GNI), son una versión avanzada de SSE anunciada por Intel que presenta una ruta de datos ampliada de 128 bits a 256 bits e instrucciones de 3 operandos (en lugar de 2). Intel lanzó procesadores con soporte para AVX a principios de 2011. [ 7 ]
  • AVX2 es una ampliación del conjunto de instrucciones AVX.
  • AVX-512 (3.1 y 3.2) son extensiones de 512 bits para las instrucciones SIMD de extensiones vectoriales avanzadas de 256 bits para la arquitectura del conjunto de instrucciones x86.

Identificación

Los siguientes programas pueden utilizarse para determinar qué versiones de SSE, si las hay, son compatibles con un sistema.

  • Utilidad de identificación de procesadores Intel [ 8 ]
  • CPU-Z : utilidad para identificar la CPU, la placa base y la memoria.
  • lscpu : proporcionado por el paquete util-linux en la mayoría de las distribuciones de Linux.

Véase también

Referencias

  1. ↑ "Manual del desarrollador de software para arquitecturas Intel® 64 e IA -32, Volumen 1: Arquitectura básica". Intel. Abril de 2022. págs. 5-16–5-19. Archivado del original  el 25 de abril de 2022. Consultado el 16 de mayo de 2022 .
  2. 1 2 Diefendorff, Keith (8 de marzo de 1999). "Pentium III = Pentium II + SSE: la arquitectura SSE de Internet impulsa el rendimiento multimedia" (PDF) . Microprocessor Report . 13 (3). Archivado (PDF) del original el 17 de abril de 2018. Recuperado el 1 de septiembre de 2017 .
  3. "Manual de extensiones de AMD para los conjuntos de instrucciones 3DNow y MMX" (PDF) . Advanced Micro Devices, Inc. Marzo de 2000. Archivado del original (PDF) el 17 de mayo de 2008. Consultado el 18 de abril de 2024 .
  4. Vance, Ashlee (3 de agosto de 2007). "AMD traza un impulso de un solo hilo con extensiones x86" . The Register . Archivado del original el 27 de abril de 2011. Recuperado el 24 de agosto de 2017 .
  5. "Tecnología AMD64: Conjunto de instrucciones SSE5 de 128 bits" (PDF) . AMD . Agosto de 2007. Archivado (PDF) del original el 25 de agosto de 2017. Consultado el 24 de agosto de 2017 .
  6. "Tecnología AMD64 Arquitectura AMD64 Manual del programador Volumen 6: Instrucciones XOP y FMA4 de 128 bits y 256 bits" (PDF) . AMD. Noviembre de 2009. Archivado (PDF) del original el 31 de enero de 2017. Consultado el 24 de agosto de 2017 .
  7. Girkar, Milind (1 de octubre de 2013). "Extensiones vectoriales avanzadas de Intel® (Intel® AVX)" . Intel . Archivado del original el 25 de agosto de 2017. Recuperado el 24 de agosto de 2017 .
  8. "Descargar la utilidad de identificación de procesadores Intel®" . Intel. 24 de julio de 2017. Archivado del original el 25 de agosto de 2017. Consultado el 24 de agosto de 2017 .
  • Guía de Intel Intrinsics

Obtenido de " https://en.wikipedia.org/w/index.php?title=Streaming_SIMD_Extensions&oldid=1359148043 "