SIMD (Single Instruction Multiple Data) es un método usado para obtener paralelismo a nivel de datos; esto es, un modo de realizar varios cálculos simultáneamente. Esta característica se encuentra fundamentada en el principio de distribuir los problemas de gran tamaño en otros más chicos, para así solucionarlos de forma combinada. En esta nueva entrega de Técnico PC, describiremos tres conjuntos des instrucciones en particular.
Los inventarios SIMD constituyen una serie de instrucciones que emplean una misma ejecución sobre un conjunto de datos grandes. En esta organización intervienen unidades de procesamiento bajo la inspección de una unidad de control común. Esto quiere decir que una sola unidad de control envía las instrucciones a diferentes unidades de procesamiento. Todos los procesadores obtienen la misma instrucción de la unidad de control, pero trabajan sobre diferentes conjuntos de datos.
Algunos ejemplos que veremos son MMX, 3DNow! de AMD y la extensa familia SSE de Intel.
MMX
Multi Media eXtensions fue el primer vestigio de instrucciones SIMD, desarrollado por Intel. En la actualidad, todos los procesadores tienen estas instrucciones, que suman 57. Al procesador se le incorpora una unidad de MMX, la cual puede trabajar de manera simultánea con la unidad aritmético-lógica, pero no con la de coma flotante, con el fin de no aumentar el tamaño del núcleo del procesador. La unidad de MMX tiene ocho registros de 64 bits, cada uno de los cuales puede subdividirse en paquetes de uno, dos, cuatro u ocho. En efecto, las instrucciones MMX únicamente tratan números enteros.
3DNOW!
En el microprocesador K6-2, AMD incluyó sus propias instrucciones SIMD. Si bien no han sido aceptadas por la mayoría, como las de Intel, en la actualidad, los procesadores AMD las soportan. Hay 21 instrucciones destinadas a punto flotante, a las cuales luego se sumaron otras 24 denominadas Advanced 3DNow!, designadas para todo lo relacionado con la recopilación de audio, video, procesamiento de voz y funciones del procesador digital de señal. Podría decirse que lo importante de estas instrucciones es que fueron el primer sistema superescalar: esto significa que este tipo de microarquitectura puede ejecutar más de una instrucción por ciclo de reloj, de modo que sus registros de 64 bits pueden ejecutar hasta 128 bits de datos simultáneamente.
SSE
Streaming SIMD Extensions abarca una extensión de instrucciones que surge como contrapartida de las de MMX, pero para Pentium III. Fueron creadas e introducidas en el mercado por Intel a partir de 1999. En el presente, además de estar en todos los procesadores Intel, se encuentran tambien en los de AMD. Esto es así porque fueron creadas para saldar las deficiencias de las MMX, que incluyen 70 instrucciones nuevas, de las cuales 50 están destinadas a los cálculos numéricos de punto flotante. De todos modos, lo más relevante es que usan ocho registros nuevos, independientemente de la unidad de coma flotante, con una capacidad de 128 bits. Estos se pueden separar hasta en paquetes de elementos de enteros de 8 bits. Asimismo, Intel agregó un sumador y multiplicador adicional, para que se pueda trabajar con dos corrientes de datos de 64 bits paralelos, a los que se les adaptan operaciones diferentes; evidentemente, son la suma y la multiplicación.
SSE: un poco de historia
Las instrucciones SSE fueron originalmente conocidas como KNI, y son un grupo extensivo de instrucciones MMX para los procesadores Pentium III de Intel. Estas instrucciones han sufrido sus revisiones a lo largo del tiempo:
1999: Intel lanzó el Pentium III, que incluía una actualización de las instrucciones MMX. SSE traía entonces 70 nuevas instrucciones para procesamiento de sonido y también de gráficos.
2000: SSE2 incorporaba 144 nuevas instrucciones SIMD. Incluye las MMX y las SSE.
2004: SSE3 se lanzó con los procesadores Pentium 4 Prescott, y agrega 13 nuevas instrucciones SIMD. Incluye las MMX, las SSE y las SSE2.
2006: SSE4 incorpora 47 nuevas instrucciones.
Tipos de instrucciones
A su vez, existen diversos tipos de instrucciones, entre las cuales se encuentran:
Instrucciones SSE de transferencia de datos: son las de entrada o lectura, y de salida o escritura. En el ejemplo de las instrucciones de entrada o lectura, se transfiere el dato de entrada desde la unidad de entrada de la memoria, y si esta es una instrucción de salida o escritura, se lleva el dato desde la memoria a la unidad de salida
Instrucciones SSE aritméticas: son utilizadas para realizar cálculos aritméticos. Implican la transferencia de datos antes o después. Efectúan operaciones aritméticas de las que se ocupa la unidad aritmético-lógica.
Instrucciones SSE lógicas: igual que en el caso anterior, la unidad aritmético-lógica se encarga de hacer las operaciones de carácter lógico.
Instrucciones SSE de conversión: son semejantes a las aritméticas y lógicas, pero conllevan una lógica especial para efectuar la conversión.
Extraído de la colección “Técnico PC”