AltiVec

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 24 de diciembre de 2013; las comprobaciones requieren 8 ediciones .

AltiVec  es un conjunto de instrucciones SIMD (vector) para trabajar con números de coma flotante de precisión simple y aritmética de enteros, desarrollado y propiedad de Apple Computer , IBM y Motorola (conocido como AIM ). AltiVec está implementado en varias versiones de procesadores PowerPC , tanto fabricados por Motorola ( G4 ) como por IBM ( G5 ).

El nombre AltiVec en sí es una marca registrada de Motorola, razón por la cual Apple usa el nombre Velocity Engine e IBM usa VMX .

Cuando se introdujo AltiVec a fines de la década de 1990, era el conjunto de instrucciones vectoriales más poderoso en los procesadores de escritorio . AltiVec ofrece más registros y la capacidad de trabajar con ellos debido a un conjunto de instrucciones mucho más flexible que sus contrapartes ( MMX , desarrollado por Intel para trabajar con aritmética de enteros, el conjunto de instrucciones de punto flotante SSE y una serie de desarrollos de otros fabricantes de procesadores RISC ).

La tercera y cuarta generación de conjuntos de instrucciones SIMD de Intel ( SSE2 y SSE3 , originalmente disponibles en el Pentium 4 y luego implementados por AMD en la arquitectura AMD64 ) tienen un conjunto de instrucciones mucho más grande que AltiVec.

Tanto AltiVec como SSE operan en registros vectoriales de 128 bits, que se pueden usar como dieciséis bytes de 8 bits, ocho palabras de 16 bits, cuatro números enteros de 32 bits o cuatro números de coma flotante. Ambos proporcionan un mecanismo para trabajar con la memoria caché , por lo que el programador puede reducir la cantidad de errores al trabajar con el flujo de datos.

Existen diferencias significativas entre AltiVec y SSE. Solo AltiVec admite el tipo de datos de píxeles RGB , pero no puede manejar números enteros de doble precisión de 64 bits y no existe un mecanismo para la transferencia directa de datos entre registros escalares y vectoriales . De acuerdo con el modelo de carga/almacenamiento de la arquitectura RISC del procesador PowerPC, los registros vectoriales, así como los registros escalares, solo pueden cargarse y almacenarse en la memoria. Sin embargo, AltiVec ofrece un conjunto mucho más amplio de instrucciones "horizontales" que operan en todos los elementos del vector; Hay muchas más combinaciones válidas de tipos de datos y operaciones. A diferencia de los ocho registros vectoriales de 128 bits en SSE y SSE2, AltiVec ofrece 32 registros de este tipo y la mayoría de sus instrucciones funcionan con tres registros a la vez ("poner el resultado de la suma de A y B en C"), en lugar de dos. -operando (registro/registro, registro/memoria: "añadir a A el contenido de B") instrucciones en IA-32 . Esto puede reducir en gran medida la cantidad de trabajo de memoria.

Las versiones modernas de GCC , IBM Visual Age Compiler proporcionan un conjunto de funciones para trabajar directamente con instrucciones AltiVec directamente desde C y C++ .

Existe un modificador de vector especial para especificar el tipo de una variable (por ejemplo, vector unsigned char foo;  es un vector de dieciséis bytes). Las funciones sobrecargadas , como vec_add , operan en registros vectoriales en función de su contenido, mientras escriben muy bien. Las instrucciones vectoriales de Intel no realizan ningún tipo de control y operan únicamente sobre el tamaño del vector, sin distinguir entre bytes y palabras. Tal negligencia puede llevar al hecho de que el vector de palabras es complejo con el vector de bytes, destruyendo completamente los datos. Para evitar que esto suceda, para la arquitectura Intel existe toda una serie de instrucciones que se duplican entre sí de la forma: _mm_add_epi16 (x, y) para sumar dos vectores de palabras, _mm_add_epi32 (x, y) para sumar dos vectores de números enteros, etc.

AltiVec fue desarrollado entre 1996 y 1998 por Keith Diefendorf , un renombrado científico y jefe de arquitectura de microprocesadores en Apple Computer .

Apple ha sido un importante cliente de AltiVec y lo ha utilizado para acelerar aplicaciones multimedia como QuickTime o iTunes . AltiVec también juega un papel muy importante en los motores del sistema Mac OS X de Apple, como el subsistema de representación de imágenes Quartz . Terceros como Adobe también utilizan AltiVec para acelerar sus programas como Adobe Photoshop . Motorola fue el primero en vender AltiVec, integrado en los procesadores de la serie G4 (AltiVec ahora está a cargo de Freescale , un derivado de Motorola). AltiVec también se utiliza en algunos sistemas integrados para proporcionar convertidores A/D rápidos .

IBM excluyó VMX (otro nombre para AltiVec) de su serie POWER , ya que estos procesadores se usaban en mainframes y servidores, donde la computación vectorial no es muy necesaria. Sin embargo, en el PowerPC G5, diseñado para computadoras de escritorio, IBM está incorporando un módulo AltiVec de alto rendimiento. El núcleo contiene el módulo de suma/multiplicación y una implementación completa de VMX.

IBM también afirma que una parte de las instrucciones VMX están incluidas en el procesador utilizado en la consola de juegos Microsoft Xbox 360 , que se basa en PowerPC. El procesador Cell también incluye un módulo VMX.

Según la documentación de Apple [1] , AltiVec en la implementación G4 y G5 puede realizar ocho FLOPS de 32 bits por ciclo, mientras que SSE en las implementaciones Intel y AMD solo puede realizar cuatro FLOPS de 32 bits por ciclo (cabe señalar que SSE -2 permite dos operaciones de 64 bits por ciclo, lo que AltiVec no puede). Sería lógico suponer que al duplicar la frecuencia, SSE podría alcanzar a AltiVec. Sin embargo, los procesadores Pentium no funcionan al doble de la frecuencia de PowerPC, por lo que AltiVec puede realizar muchas más operaciones por segundo. La velocidad real del programa dependerá de muchos más factores, como la velocidad y la cantidad de memoria, la arquitectura del subsistema de E/S, los compiladores , el sistema operativo y simplemente la arquitectura del programa en sí.

A pesar de que Apple afirma que el PowerPC es más rápido que el Pentium cuando se trabaja con aplicaciones multimedia, es mejor abstenerse de tales evaluaciones, ya que no hay datos inequívocos sobre la superioridad de SSE o AltiVec, a pesar de la velocidad teóricamente más alta de AltiVec. .

Notas

  1. ^ Hardware-Resumen ejecutivo de SIMD . Consultado el 28 de septiembre de 2017. Archivado desde el original el 11 de noviembre de 2004.

Enlaces