stringtranslate.com

Extensiones SIMD de transmisión

En informática , Streaming SIMD Extensions ( SSE ) es una extensión del conjunto de instrucciones de instrucción única y datos múltiples ( 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 su aparición. de Microdispositivos Avanzados (AMD) 3DNow! . SSE contiene 70 instrucciones nuevas (65 mnemónicos únicos [1] que utilizan 70 codificaciones), la mayoría de las cuales funcionan 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 varios objetos de datos. Las aplicaciones típicas son el procesamiento de señales digitales y el procesamiento de gráficos .

El primer esfuerzo SIMD IA-32 de Intel fue el conjunto de instrucciones MMX . MMX tenía dos problemas principales: reutilizaba registros de punto flotante x87 existentes , lo que hacía que las CPU no pudieran funcionar con datos de punto flotante y SIMD al mismo tiempo, 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 agrega algunas instrucciones de números enteros que funcionan en registros MMX.

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

SSE originalmente se llamaba Katmai New Instrucciones ( KNI ), siendo Katmai el nombre en clave de la primera revisión del núcleo Pentium III. Durante el proyecto Katmai, Intel buscó distinguirlo de su línea de productos anterior, particularmente de su buque insignia Pentium II . Más tarde pasó a llamarse Extensiones SIMD de transmisión de Internet ( ISSE [2] ) y luego SSE.

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

Registros

SSE originalmente agregó ocho nuevos registros de 128 bits conocidos XMM0como XMM7. Las extensiones AMD64 de AMD (originalmente llamadas x86-64 ) agregaron ocho registros más XMM8y XMM15esta extensión está duplicada en la arquitectura Intel 64 . También hay un nuevo registro de control/estado de 32 bits, MXCSR. Los registros XMM8a través XMM15son accesibles sólo en modo operativo de 64 bits.

SSE utilizó solo un 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 entre cambios de tareas , están deshabilitados de forma predeterminada hasta que el sistema operativo los habilite explícitamente. Esto significa que el sistema operativo debe saber cómo utilizar las instrucciones FXSAVEy FXRSTOR, que son el par de instrucciones extendidas que pueden guardar todos los estados de registro x86 y SSE a la vez. Este soporte se agregó rápidamente a todos los principales sistemas operativos IA-32.

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

instrucciones SSE

SSE introdujo instrucciones escalares y de punto flotante empaquetado .

Instrucciones de punto flotante

Instrucciones enteras

Otras instrucciones

Ejemplo

El siguiente ejemplo sencillo demuestra la ventaja de utilizar SSE. Considere una operación como la suma de vectores, que se utiliza muy a menudo en aplicaciones de gráficos por computadora. Para sumar dos vectores de cuatro componentes de precisión simple 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 única instrucción 'packed-add' de 128 bits puede reemplazar las cuatro instrucciones de suma escalar.

 movaps xmm0 , [ v1 ] ;xmm0 = v1.w | v1.z | v1.y | v1.x agrega 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

Identificando

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 Internet SSE aumenta el rendimiento multimedia" (PDF) . Informe del microprocesador . 13 (3). Archivado (PDF) desde el original el 17 de abril de 2018 . Consultado el 1 de septiembre de 2017 .
  3. ^ "Extensiones AMD al manual de 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 traza un impulso de un solo subproceso con extensiones x86". El registro . 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) desde el original el 25 de agosto de 2017 . Consultado el 24 de agosto de 2017 .
  6. ^ "Manual del programador de arquitectura AMD64 con tecnología AMD64, volumen 6: instrucciones XOP y FMA4 de 128 y 256 bits" (PDF) . AMD. Noviembre de 2009. Archivado (PDF) desde el 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 Intel® (Intel® AVX)". Intel . Archivado desde el original el 25 de agosto de 2017 . Consultado el 24 de agosto de 2017 .
  8. ^ "Descargue la utilidad de identificación del procesador 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