T EMA 14: C OMPUTADORES SIMD 1. Organizaciones básicas. 2. Estructura interna de cada elemento de proceso. 3. Programación de los computadores SIMD. Bibliografı́a: K. Hwang, F.A. Briggs, Computer Architecture and Parallel Procesing, McGrawHill, 1984. Versión en castellano (1987): Arquitectura de Computadoras y Procesamiento Paralelo, McGraw-Hill, 1987. K. Hwang, Advanced Computer Architecture: Parallelism, Scalability, Programmability, McGraw-Hill, 1993. Departamento de Informática de Sistemas y Computadores (DISCA) Facultad de Informática de Valencia 14-1 1 ORGANIZACIONES BÁSICAS. 1. Organizaciones básicas. Concepto de computador SIMD Arquitectura del juego de instrucciones vectorial. Ejecución rápida de las instrucciones vectoriales: Múltiples UAL’s bajo el dominio de una sola unidad de control → Single Instruction Multiple Data. Todas las UAL ejecutan la misma instrucción sobre distintos datos. Diagrama de bloques Memoria de programa UC EP0 EP1 EPn-1 M0 M1 Mn-1 Red de interconexion La memoria de programa es única y accesible sólo por la unidad de control. La unidad de control decodifica las instrucciones, ejecutando directamente las escalares. Cuando decodifica una instrucción vectorial, difunde la misma operación a todas las UAL, que la ejecutan simultáneamente. Ese funcionamiento sı́ncrono limita la frecuencia de funcionamiento. Los módulos de memoria almacenan los datos vectoriales. Pueden estar asignados estática o dinámicamente a las UAL. Una red de interconexión permite que las UAL se comuniquen entre sı́ o establece la correspondencia entre las UAL y los módulos de memoria. El sistema completo se gobierna desde un computador externo “convencional” que da acceso a los periféricos y realiza la administración del sistema. 14-2 1 ORGANIZACIONES BÁSICAS. Organizaciones básicas En función de la interconexión entre las UAL y los módulos de memoria. 1. Computadores SIMD de memoria distribuida. Host Bus de datos Memoria de programa Unidad de Control Bus de control EP0 EP1 EPn-1 M0 M1 Mn-1 Red de interconexion Cada UAL tiene su propio módulo de memoria local, accesible sin conflicto. Las UAL pueden intercambiar datos entre sı́ a través de la red de interconexión, gobernada por la unidad de control → no hay conflictos de acceso a la red de interconexión. Las transferencias, como una instrucción mas, se realizan por parte de todas las UAL. El contenido de los módulos de memoria de datos se prepara/recupera antes/después del procesamiento por parte del host → los módulos de memoria de datos suelen formar parte del espacio de direccionamiento del host. 14-3 1 ORGANIZACIONES BÁSICAS. 2. Computadores SIMD de memoria compartida. Host Bus de datos Memoria de programa Unidad de Control Bus de control EP0 EP1 EPn-1 Red de interconexion M0 M1 Mm-1 Los módulos de memoria son globales. Cualquier UAL puede acceder a cualquier módulo. ⇒ Más flexible. La red de interconexión establece la correspondencia entre las UAL y los módulos de memoria. Está gobernada por la unidad de control → no hay conflictos de acceso a la red de interconexi ón, ni a los módulos de memoria. La red de interconexión debe permitir tanto que una UAL pueda conectarse con cualquier módulo de memoria, como que todas las UAL puedan estar conectadas simultáneamente con un módulo de memoria distinto. ⇒ Red de interconexión cara. El tiempo de acceso a memoria aumenta, disminuyendo el ancho de banda de la memoria. 14-4 1 ORGANIZACIONES BÁSICAS. El número de módulos de memoria (M ) se elije de manera que sea un número primo, para facilitar el acceso simultáneo a cualquier estructuras matricial definida por una dirección inicial D y una distancia de salto d, siempre que d no sea múltiplo de M (estrategias de almacenamiento “oblicuo”). Ejemplo: P = 4 y M = 5. La matriz 4×4: a00 a10 a20 a30 a01 a11 a21 a31 a02 a12 a22 a32 a03 a13 a23 a33 se puede almacenar: M0 M1 a00 a01 a11 a12 a22 a23 a33 M2 M3 M4 a02 a03 a13 a10 a20 a21 a30 a31 a32 Fila, d = 1 Columna, d = 4 El contenido de los módulos de memoria de datos se prepara/recupera antes/después del procesamiento por parte del host → los módulos de memoria de datos suelen formar parte del espacio de direccionamiento del host. ⇒ Solamente una máquina, el Burroughs Scientific Processor ha empleado esta configuración. 14-5 2 ESTRUCTURA INTERNA DE CADA ELEMENTO DE PROCESO. 2. Estructura interna de cada elemento de proceso. (Illiac IV) D I R S UAL Registros de uso general: A, B, C . . . La unión de todos los registros del mismo nombre (A, B, C,. . . ) constituye algo equivalente a un registro vectorial. Registro de dirección propia D. Registro que contiene el identificador del elemento de proceso. Es de solo lectura. Registro de ı́ndice local I. Cuando la instrucción vectorial a ejecutar requiere operar con vectores en memoria, la unidad de control difunde la misma dirección a todos los elementos de proceso. El registro I permite modificar esta dirección: Dir. efectiva en la memoria local = Dir. base (unidad de control) + I Registro de interconexión R. Constituye el puerto de entrada/salida a la red de interconexión. Registro de máscara S. Si está a “0”, enmascara la operación difundida por la unidad de control. La unión de todos los registros de máscara forma algo equivalente al registro de máscara vectorial (VM) de los computadores vectoriales segmentados. Módulo de memoria local asociado a cada elemento de proceso. 14-6 2 ESTRUCTURA INTERNA DE CADA ELEMENTO DE PROCESO. Ejemplos de instrucciones: 1. Carga vectorial (≈LV Va,Ra): Cada elemento de proceso carga en el registro de uso general A el dato presente en su posición de memoria local Ra . 2. Suma vectorial (≈ADDV Va,Vb,Vc): Cada elemento de proceso suma los registros B y C, depositando el resultado en A. 3. Creación de vector de ı́ndices (≈CVI): Cada elemento de proceso calcula un ı́ndice, en función de su registro de dirección propia D, y lo almacena en el registro de ı́ndice I. 4. Carga vectorial indexada (≈LVI Va,(Ra+Vi)): Cada elemento de proceso carga en el registro de uso general A el dato presente en su posici ón de memoria local (Ra + I). 5. Comparación vectorial (≈SxxV Va,Vb): Cada elemento de proceso eval úa la condición xx, depositando el resultado sobre el registro S. 6. Puesta a “1” del vector de mascara vectorial (≈ CVM): Cada elemento de proceso escribe un “1” en el registro S. 7. Preparación de operación de salida: Cada elemento de proceso copia un registro de uso general sobre el registro R. 8. Operación de salida por el enlace x: Cada elemento de proceso transmite el contenido del registro R a través del enlace x, copiándose sobre el registro R del elemento de proceso vecino. 9. Obtención del resultado de una operación de entrada: Cada elemento de proceso copia el contenido del registro R en un registro de uso general. 14-7 3 PROGRAMACIÓN DE LOS COMPUTADORES SIMD. 3. Programación de los computadores SIMD. Ejemplo Computador SIMD, con n elementos de proceso conectados seg ún una red de interconexión “hipercubo”. Matriz A, de tamaño n × n. Cada módulo de memoria tiene una columna de la matriz. ⇒ Escribir un algoritmo para sumar la diagonal principal, depositando el resultado en la memoria del elemento de proceso 0. Hipercubo de 8 nodos: P6 P4 P7 c2 P5 c1 c0 P2 P0 P1 EP0 A: a00 a10 .. a,n-10 M0 P3 EP1 A: a01 a11 ... an-11 M1 EPn-1 A: a’n-1 a1n-1 ... an-1n-1 Mn-1 14-8 3 PROGRAMACIÓN DE LOS COMPUTADORES SIMD. P0 P1 P2 P3 P4 P5 P6 P7 a00 a11 a22 a33 a44 a55 a66 a77 Algoritmo: S[i] := 1, i = 0..7 I[i] := D[i] RegA[i] := M[A+I[i]] S[i] := 1, i = 1,3,5,7 S[i] := 0, i = 0,2,4,6 R[i] := RegA[i] Transferir segun c0 S[i] := 1, i = 0,2,4,6 S[i] := 0, i = 1,3,5,7 RegA[i] := RegA[i] + R[i] S[i] := 1, i = 2,6 S[i] := 0, i = 0,1,3,4,5,7 R[i] := RegA[i] Transferir segun c1 S[i] := 1, i = 0,4 S[i] := 0, i = 0,1,2,3,5,6,7 RegA[i] := RegA[i] + R[i] S[i] := 1, i = 4 S[i] := 0, i = 0,1,2,3,5,6,7 R[i] := RegA[i] Transferir segun c2 S[i] := 1, i = 0 S[i] := 0, i = 1,2,3,4,5,6,7 RegA[i] := RegA[i] + R[i] 14-9 3 PROGRAMACIÓN DE LOS COMPUTADORES SIMD. Algoritmo para n procesadores: ParFor i := 0 to n-1 do S[i] := 1; ParFor i := 0 to n-1 do I[i] := D[i]; ParFor i := 0 to n-1 do RegA[i] := M[A+I[i]] etapas := log2(n); for j := 0 to etapas-1 do begin ParFor i := 0 to n-1 do If ((D[i] MOD 2ˆ(j+1))=2ˆj) then S[i] := 1 else S[i] := 0; ParFor i := 0 to n-1 do R[i] := RegA[i]; ParFor i := 0 to n-1 do Transferir(enlace_j); ParFor i := 0 to n-1 do If ((D[i] MOD 2ˆ(j+1))=0) then S[i] := 1 else S[i] := 0; ParFor i := 0 to n-1 do RegA[i] := RegA[i]+R[i]; end; 14-10