# AltiVec

AltiVec es un conjunto de instrucciones SIMD en coma flotante y enteros diseñado y en propiedad de Apple Computer, IBM y Motorola (la alianza AIM), y puesto en ejecución en las versiones de PowerPC incluyendo el G4 de Motorola y los procesadores G5 de IBM. AltiVec es una marca registrada en propiedad de Motorola, así que el sistema también es nombrado Velocity Engine por Apple y VMX por IBM.
AltiVec era el sistema SIMD más potente en una Unidad de Procesamiento Central de un ordenador de sobremesa cuando fue introducido al final de los años 90. Comparado con sus contemporáneos (MMX de sólo números enteros de Intel, SSE en coma flotante, y los diversos sistemas de otros fabricantes RISC), AltiVec ofrecía más registros que se podían utilizar de más formas y funcionar mediante un conjunto de instrucciones mucho más flexible. Sin embargo, el sistema SIMD de cuarta generación de Intel, SSE2, introducido con el Pentium 4, tiene muchas funciones similares a las de AltiVec.
Tanto Altivec como los registros de vector de 128-bit de SSE2 pueden representar dieciséis caracteres de 8-bit con signo o sin él, ocho enteros cortos con signo o sin signo de 16-bit, cuatro enteros de 32-bit o cuatro variables en coma flotante en formato 32-bit. Ambos proporcionan instrucciones de control de la caché CPU previstas para reducir al mínimo la contaminación de la caché al trabajar con flujos de datos.
También muestran diferencias importantes. Al contrario que SSE2, AltiVec soporta un tipo de datos especial de "píxel" RGB, pero no opera con floats de doble precisión, y no hay manera de mover datos directamente entre los registros escalares y los de vectores. En armonía con el modelo de "cargar/almacenar" del diseño RISC del PowerPC, los registros del vector, como los registros escalares, sólo se pueden cargar desde la memoria, y almacenar en ella. Sin embargo, AltiVec proporciona un sistema mucho más completo de operaciones "horizontales" que trabajan a través de todos los elementos de un vector; las combinaciones permitidas de los tipos de datos y de las operaciones con éstos son mucho más completas. Se proporcionan 32 registros de vectores de 128-bit, comparado con los 8 de SSE y SSE2, y la mayoría de las instrucciones de Altivec toman tres operandos de registro, comparado con sólo dos operandos registro/registro o registro/memoria en un IA-32.
Las versiones recientes de GCC, Compilador Visual Age IBM y otros compiladores proporcionan intrínsecos para acceder a las instrucciones de AltiVec directamente desde programas en C y C++. La clase dedicada al almacenamiento "vector" aparece para permitir la declaración de los tipos nativos del vector, por ejemplo, "vector unsigned char foo;" declara una variable de 128-bit llamada "foo" que contiene dieciséis caracteres sin signo de 8-bit. Las funciones intrínsecas sobrecargadas tales como "vec_add" emiten el código op apropiado basado en el tipo de los elementos del vector, y se obliga a cumplir un fuerte tipado. En contraste, los tipos de datos definidos por Intel para los registros SIMD de IA-32 declaran solamente el tamaño del registro del vector (128 o 64 bits) y en el caso de un registro de 128-bit, sí contiene números enteros o valores en la coma flotante. El programador debe seleccionar el intrínseco apropiado para los tipos de datos empleados, por ejemplo, _mm_add_epi16(x, y) para añadir dos vectores que contienen ocho números enteros de 16-bit.
Apple es el principal cliente de AltiVec, y lo usa para acelerar aplicaciones multimedia como QuickTime y iTunes y programas de procesamiento de imágenes tales como Adobe Photoshop. AltiVec también ha trabajado en partes clave del Mac OS X de Apple, incluido el compositor de gráficos Quartz. Motorola ha provisto las unidades de AltiVec en todos sus ordenadores de sobremesa PowerPC desde el G4. AltiVec también se utiliza en algunos sistemas embebidos para proporcionar un proceso de la señal digital con un extremadamente alto rendimiento.
IBM ha dejado a VMX constantemente fuera de sus sistemas propietarios POWER, que están pensados para ser empleados como aplicaciones de servidor donde no lo considera suficientemente necesario. Sin embargo, el ordenador de escritorio más reciente PowerPC 970 (apodado G5 por Apple) de IBM, incluye una unidad de alto rendimiento de AltiVec. Incluye dos unidades funcionales para permitir efectos superescalares; un VMX completo en una unidad, y un multiplicador/sumador en la otra.