jueves, 3 de mayo de 2012

[DISTRIBUIDOS Y PARALELOS] Procesadores vectoriales y SIMD

Un procesador vectorial es un diseño de CPU capaz de ejecutar operaciones matemáticas sobre múltiples datos de forma simultánea, en contraste con los procesadores escalares, capaces de manejar sólo un dato cada vez.

La gran mayoría de las CPUs de hoy en día son escalares o superescalares. Los procesadores vectoriales son muy comunes en el área de la computación científica, formando la base de la mayor parte de los supercomputadores durante los años 80 y 90. Sin embargo, parece claro que la mejora de la tecnología y de los diseños de procesadores van a acabar con el uso de procesadores vectoriales como procesadores de propósito general. IBM, Toshiba y Sony han anunciado el procesador Cell, que está formado en parte por procesadores vectoriales.

Casi todas las CPUs de hoy en día incluyen algunas instrucciones de procesamiento de tipo vectorial, conocidas como SIMD. En particular, las consolas de videojuegos y las tarjetas gráficas hacen un uso intensivo de este tipo de procesamiento.

Los procesadores vectoriales proporcionan operaciones de alto nivel que trabajan sobre vectores.

Una máquina vectorial consta de una unidad escalar segmentada y una unidad vectorial. La unidad vectorial dispone de M registros vectoriales de N elementos y de unidades funcionales vectoriales (de suma/resta, multiplicación, división, de carga/almacenamiento, etc) que trabajan sobre los registros vectoriales, y un conjunto de registros escalares.

Una operación vectorial equivale a un bucle completo que procesaría los N elementos del registro vectorial.


Elementos de la arquitectura

Regustros vectoriales:
  • contienen los operandos vectoriales en máquinas de registros
  • no existen si la máquina es memoria-memoria
  • valores típicos de componentes son 64 o 128
  • deben tener al menos 2 puertos de lectura y uno de escritura

Unidades funcionales vectoriales:
  • ejecutan las operaciones vectoriales
  • están segmentadas, y suelen tener latencia 1
  • una unidad de control vigila las dependencias
Unidad de carga y almacenamiento:
  • gestiona transferencias de vectores desde/a memoria
  • puede estar segmentada
  • también puede ocuparse de los datos escalares
Registros escalares:
  • contienen los operandos escalares
  • se usan en operaciones vectoriales y para calcular direcciones
  • se necesitan varios puertos de lectura y escritura
Unidades funcionales escalares:
  • pueden existir para operaciones específicamente escalares
  • pueden no existir si para operaciones escalares se usan las unidades vectoriales


Ventajas
  • Proporcionan gran aprovechamiento del paralelismo de datos con un control relativamente sencillo.
  • Una única instrucción específica ejecuta una gran unidad de trabajo, reduciendo la necesidad de ancho de banda de instrucciones.
  • Optimizan el uso de la memoria con accesos predecibles que se pueden solapar.
  • Eliminan dependencias de control e instrucciones de comprobación y contabilidad.

Sistema de memoria

En lasmáquinas vectoriales, los accesos no son a datos individuales, sino a colecciones de ellos.

La distribución de estos datos en memoria sigue una ecuación generalmente sencilla. Por ejemplo, una matriz almacenada por filas:
  • leer un vector-fila es leer posiciones de memoria consecutivas
  • leer un vector-columna es leer posiciones distanciadas en Q, donde Q es el número de elementos de una fila
El sistema de mempria se diseña de forma que:
  • se puedan realizar accesos a varios elementos a la vez
  • el tiempo de inicio del acceso sea sólo para el primer elemento
Se utilizan principalmente dos opciones:
  • memoria entrelazada (generalmente de orden inferior, con factor de entrelazado palabra)
  • bancos de memoria independientes
La memoria entrelazada tiene un diseño más sencillo y menos costoso, pero menos flexible.

La memoria en bancos independientes es más costosa (cada banco necesita su bus), pero más flexible.

Se puede pensar en soluciones intermedias: memoria en bancos independientes con bus compartido por todos los bancos.


Vectorización del código
Hay varios requizitos para poder vectorizar el código:
  1. que no haya dependencias de datos (por ejemplo, las hay en el cálculo de la suma de las componentes de un vector)
  2. que el programa esté expresado de una forma que permita su vectorización (al compilador)
La calidad del compilador tamién es importante. Hay compiladores que son capaces de detectar más fácilmentecódigo vectorizable que otros.


SIMD

En computación, SIMD es una técnica empleada para conseguir paralelismo a nivel de datos.

Los repertorios SIMD consisten en instrucciones que aplican una misma operación sobre un conjunto más o menos grande de datos. Es una organización que influye muchas unidades de procesamiento bajo la supervisión de una unidad de control común. Es decir, una única unidad de control despacha las instrucciones a diferentes unidades de procesamiento. Todos los procesadores reciben la misma instrucción de la unidad de control, pero operan sobre diferentes conjuntos de datos. Es decir la misma instrucción es ejecutada de manera síncrona por todas las unidades de procesamiento.

Las máquinas SIMD plantean otra forma de aprovechar el paralelismo en los datos. 

Ejecutan la misma instrucción sobre datos distintos de forma simultánea.

Constan de un aray de elementos de proceso (ALUs) que son controlados (en cuanto a la operación que realizan y los datos que usan) por un módulo de control del array.

Existe también un procesador escalar, para las operaciones SISD.

Los elementos del proceso están unidos por una red de interconexión.

El módulo de control recibe información (presente en el programa) sobre:

  • la instrucción que hay que ejecutar.
  • el estado de la red de interconexión (por si los datos de los EP no se encuentran en su memoria)
Transmite la operación que hay que realizar y la localización de los operandos a los elementos de proceso.

Configura la red de interconexión según convenga.


En ese momento, los EPs ejecutan la instrucción.

El programa debe:

  • especificar las instrucciones que son para ejecutar en modo SIMD y las que son escalares.
  • especificar la distribución de los datos en las memorias.
  • especificar la configuración de la red en cada instante.
Si la memoria es compartida:
  • los datos no son locales a cada elemento de proceso.
  • el número de módulo de memoria no tiene por qué coincidir con el de elementos de proceso.
  • el resto de las caracteristicas son parecidas.
Es posible combinar las caracteristicas de una máquina vectorial y de una SIMD.

El diseño sería básicamente el de una máquina vectorial que tiene unidades funcionales repetidas.

Las unidades funcionales estarían conectadas como los elementos de proceso de una máquina SIMD, para poder trabajar de forma simultanea.

1 comentario: