stringtranslate.com

Extensiones de transmisión SIMD

En informática , Streaming SIMD Extensions ( SSE ) es una extensión del conjunto de instrucciones de instrucción única, múltiples datos ( SIMD ) para la arquitectura x86 , diseñada por Intel e introducida en 1999 en su serie Pentium III de unidades centrales de procesamiento (CPU) poco después de la aparición de 3DNow! de Advanced Micro Devices (AMD) . SSE contiene 70 nuevas instrucciones (65 mnemónicos únicos [1] que utilizan 70 codificaciones), la mayoría de las cuales funcionan en datos de punto flotante de precisión simple . Las instrucciones SIMD pueden aumentar en gran medida 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 esfuerzo de Intel en el campo de las SIMD IA-32 fue el conjunto de instrucciones MMX . MMX tenía dos problemas principales: reutilizaba los registros de punto flotante x87 existentes , lo que hacía que las CPU no pudieran trabajar con datos de punto flotante y SIMD al mismo tiempo, y solo funcionaba con números enteros . Las instrucciones de punto flotante SSE funcionan con un nuevo conjunto de registros independientes, los registros XMM, y añaden algunas instrucciones de números enteros que funcionan con registros MMX.

SSE fue posteriormente ampliado por Intel a SSE2 , SSE3 , SSSE3 y SSE4 . Debido a que admite operaciones matemáticas de punto flotante, tuvo aplicaciones más amplias que MMX y se volvió más popular. La incorporación de compatibilidad con números enteros en SSE2 hizo que MMX fuera en gran medida redundante, aunque se pueden lograr mayores aumentos de rendimiento en algunas situaciones [ ¿cuándo? ] utilizando MMX en paralelo con operaciones SSE.

SSE se llamó originalmente Katmai New Instructions ( KNI ), siendo Katmai el nombre en código de la primera revisión del núcleo Pentium III. Durante el proyecto Katmai, Intel intentó diferenciarlo de su línea de productos anterior, en particular de su buque insignia Pentium II . Más tarde se le cambió el nombre a Internet Streaming SIMD Extensions ( ISSE [2] ), y luego a SSE.

AMD añadió un subconjunto de SSE, 19 de ellos, llamados nuevas instrucciones MMX, [3] y conocidas como varias variantes y combinaciones de SSE y MMX, poco después con el lanzamiento del Athlon original en agosto de 1999, ver extensiones 3DNow!. AMD finalmente agregó soporte completo para instrucciones SSE, comenzando con sus procesadores Athlon XP y Duron ( núcleo Morgan ).

Registros

Originalmente, SSE agregó ocho nuevos registros de 128 bits conocidos como XMM0a través de XMM7. Las extensiones AMD64 de AMD (originalmente llamadas x86-64 ) agregaron otros ocho registros XMM8a través de 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 XMM8a través de XMM15son accesibles solo en el modo operativo de 64 bits.

SSE utilizó solo un único tipo de datos para los registros XMM:

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

Debido a que estos registros de 128 bits son estados de máquina adicionales que el sistema operativo debe preservar en los cambios de tareas , están deshabilitados de manera predeterminada hasta que el sistema operativo los habilite explícitamente. Esto significa que el sistema operativo debe saber cómo usar las instrucciones FXSAVEy FXRSTOR, que es el par extendido de instrucciones que puede guardar todos los estados de registros x86 y SSE a la vez. Esta compatibilidad se agregó rápidamente a todos los principales sistemas operativos IA-32.

La primera CPU que admitió SSE, Pentium III , compartió 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 una al lado de la otra, Pentium III no emitirá una instrucción FPU y una SSE en el mismo ciclo de reloj . Esta limitación reduce la efectividad de la segmentación , pero los registros XMM separados permiten mezclar operaciones escalares de punto flotante y SIMD sin el impacto en el rendimiento que produce el cambio explícito de modo MMX/punto flotante.

Instrucciones SSE

SSE introdujo instrucciones escalares y de punto flotante empaquetadas .

Instrucciones de punto flotante

Instrucciones de números enteros

Otras instrucciones

Ejemplo

El siguiente ejemplo simple demuestra la ventaja de usar SSE. Considere una operación como la suma de vectores, que se usa muy a menudo en aplicaciones de gráficos de 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 otra parte, como muestra el siguiente pseudocódigo, una única instrucción 'packed-add' de 128 bits puede reemplazar las cuatro instrucciones de suma escalar.

 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

Identificación

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

Referencias

  1. ^ "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32, volumen 1: arquitectura básica". Intel. Abril de 2022. págs. 5-16–5-19. Archivado desde el original el 25 de abril de 2022. Consultado el 16 de mayo de 2022 .
  2. ^ ab Diefendorff, Keith (8 de marzo de 1999). «Pentium III = Pentium II + SSE: la arquitectura de Internet SSE aumenta el rendimiento multimedia» (PDF) . Microprocessor Report . 13 (3). Archivado (PDF) del original el 17 de abril de 2018. Consultado 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 desde el original (PDF) el 17 de mayo de 2008 . Consultado el 18 de abril de 2024 .
  4. ^ Vance, Ashlee (3 de agosto de 2007). «AMD planea impulsar el uso de un solo subproceso con extensiones x86». The Register . Archivado desde el original el 27 de abril de 2011. Consultado 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 Manual del programador de la arquitectura AMD64 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). «Intel® Advanced Vector Extensions (Intel® AVX)». Intel . Archivado desde el original el 25 de agosto de 2017 . Consultado el 24 de agosto de 2017 .
  8. ^ "Descargar la utilidad de identificación de procesadores Intel®". Intel. 24 de julio de 2017. Archivado desde el original el 25 de agosto de 2017. Consultado el 24 de agosto de 2017 .

Enlaces externos