lunes, 24 de noviembre de 2008

Programando con las extensiones Streaming SIMD

Las extensiones Streaming SIMD de Intel son un conjunto de extensiones de la IA diseñados para aumentar el rendimiento de las aplicaciones avanzadas de comunicaciones o de multimedia (especialmente adecuadas para la decodificación de MPEG2, gráficas tridimensionales y reconocimiento de voz). Estas extensiones completan la tecnología MMX que ya expliqué.
Las extensiones Streaming SIMD definen un modelo de software simple y flexible. Este nuevo modelo introduce un nuevo estado visible del sistema operativo y para ello se dispone de un nuevo conjunto de registros de 128 bits añadidos. Cualquier software no hace falta que sea modificado para funcionar en un procesador con extensiones Streaming SIMD.
Estas extensiones permiten al programador desarrollar algoritmos que pueden mezclar datos en punto flotante compactados y enteros compactados, con precisión simple, usando las extensiones Streaming SIMD y las instrucciones MMX. Adicionalmente a esas instrucciones, las extensiones Streaming SIMD proporcionan otras nuevas para el control de la cacheability de la tecnología MMX y los tipos de datos de 32 bits. Estas instrucciones nuevas permiten guardar muchos datos en memoria sin tener que contaminar la cache, o también permiten precargar los datos antes de usarlos. Además de las instrucciones también proporciona 8 registros SIMD en punto flotante (de XMM0 a XMM7) a los que se puede direccionar directamente, tipos de datos compactados SIMD de 128 bits en punto flotante, y el conjunto de extensiones Streaming SIMD.
Los nuevos registros requieren soporte del sistema operativo para poder usarlos, y contienen datos compactados de 128 bits. Los registros se pueden usar para mejorar el rendimiento a la hora de calcular sobre los datos, pero no se pueden usar para direccionar a memoria. Para eso están los registros de enteros, los modos estándar de direccionamiento y los registros de propósito general. Los registros MMX están mapeados dentro de los registros de punto flotante. Para hacer la transición de operaciones MMX a operaciones en punto flotante es necesario ejecutar la instrucción EMMS. A partir de que los registros SIMD en punto flotante estén en registros separados, las instrucciones MMX y las de punto flotante se pueden mezclar con las extensiones Streaming SIMD sin excepciones de instrucción especial (como EMMS). Los valores en los registros tienen el mismo formato que una cuantía de 128 bits en memoria, y tienen 2 modos de acceso: modo de acceso de 128 bits y modo de acceso de 32 bits.
El tipo de datos principal de las extensiones Streaming SIMD es un operando compactado, en precisión simple, y en punto flotante. Son 4 doublewords (1 doubleword = 32 bits) compactados en 128 bits. También puede trabajar como 8 words, o como 16 bytes. Los bits de la derecha son los menos significativos. Las extensiones mueven desde y hacia la memoria estos tipos de datos compactados en bloques de 64 o 128 bits.
Las extensiones Streaming SIMD pueden generar 2 tipos de excepciones; no numéricas, y numéricas. Pueden generar los mismos tipos de excepciones de acceso a memoria que las instrucciones IA.
El registro de control/estado es usado para activar excepciones numéricas enmascaradas/desenmascaradas, para establecer modos de redondeo (4 métodos: hacia el más próximo, hacia abajo, hacia arriba, o truncar), para establecer el modo flush-to-zero (activando este modo, los resultados que den cero tendrán el verdadero signo de la operación, y las excepciones de precisión y underflow se activan), y para ver las banderas de estado. Los contenidos de estos registros se pueden guardar en memoria con STMXCSR (guarda el contenido del registro de estado/control SIMD en punto flotante) y FXSAVE (guarda el estado de la FPU y el estado de punto flotante SIMD) y se pueden cargar con las instrucciones LDMXCSR y FXRSTOR.
Las extensiones Streaming SIMD consisten en 70 instrucciones, agrupadas en las siguientes categorías: instrucciones de movimiento de datos, instrucciones aritméticas, instrucciones de comparación, instrucciones de conversión, instrucciones lógicas, instrucciones adicionales de enteros SIMD, instrucciones Shuffle, instrucciones de manejo de estado, y instrucciones de control de la cacheability.
Las extensiones introducen un nuevo estado en la arquitectura, y no están reñidas con los registros en punto flotante (como lo estaban las instrucciones originales MMX). Las nuevas instrucciones deben de ser usadas para guardar/restablecer el estado de un Pentium III. Se puede programar sin problemas usando a la vez las extensiones y la FPU (una aplicación puede usar la FPU para operaciones con precisión doble o extendida), o las extensiones y la MMX también sin problemas. Pero los problemas siguen si se utiliza a la vez la FPU y la MMX, porque siguen compartiendo los mismos registros.

No hay comentarios: