teo 2: plataformas para programación paralela
Post on 04-Jan-2016
80 Views
Preview:
DESCRIPTION
TRANSCRIPT
Teo 2: Plataformas para programación paralela
Algoritmos paralelos
Glen Rodríguez
Arquitectura tradicional de una computadora secuencial
CPU + RAM conectado por un bus
Los 3 elementos pueden ser cuellos de botella
Mejora: múltiples elementos
Arquitecturas secuenciales mejoradas
Si la multiplicidad de elementos es ocultada al programador: paralelismo implícito.
Cuando se puede, se debe reescribir un programa para que aproveche al máximo el paralelismo implícito, antes de paralelizar “a mano”.
La Control Unit coordina todo
Registros
Mini memorias (chica, permanente) dentro de la CPU, usadas para ciertos propósitos especiales
Directamente manipuladas por la CU Funcionalidad específica Tamaño en bits o bytes (no MB como la
memoria RAM, ni siquiera KB) Guardan data, direcciones o
instrucciones
Registros Uso
Acceso rápido para el programa que se está ejecutando en un momento dado Guarda data necesitada de inmediato o repetidamente.
Guarda info sobre el estatus de la CPU y del programa corriendo Dirección de la siguiente instrucción del programa Señales de dispositivos externos
Registros de propósito general Registros visibles al usurio Guardan resultados intermedio o valores de datos. Ej:
contadores de un loop Varias docenas en CPUs actuales
Registros de propósito especial
Program Count Register (PC) Puntero a una instrucción
Instruction Register (IR) Guarda la instrucción cargada desde memoria
Memory Address Register (MAR) Memory Data Register (MDR) Status Registers
Estatus de la CPU y del programa corriendo Flags (variable booleana de 1 bit) que hacen
seguimiento de condiciones como el carry y el overflow de operaciones aritméticas, errores de la computadora, etc.
Operaciones en los registros
Guardan valores de otras localizaciones (registros y memoria)
Sumas y restas Shift (desplazar) o rotar data Contenidos de los tests condicionales
básicos (if ?=0 else …; if ?>0 …)
Operación en Memoria
Cada localización en memoria tiene una dirección única
La dirección de una instrucción se copia al MAR, el cuál ubica la localización en memoria
CPU determina si la operación es grabar o leer
Se realiza la transferencia entre el MDR y la memoria
MDR es un registro que se puede leer y escribir
Relación entre MAR, MDR y la Memoria
Dirección Data
Ejemplo MAR-MDR
Capacidad de memoria Determinada por 2 factores
1. Número of bits en el MAR 2K donde K = cantidad de bits en el registro MAR
2. Tamaño del parámetro “dirección” en las instrucciones 4 bits permite 16 lugares de memoria 8 bits permite 256 lugares 32 bits permite 4,294,967,296 ó 4 GB
Importante para la performance Memoria insuficiente puede causar que el
procesador trabaje a menos de 50% de su performance de fábrica.
Ciclo Fetch-Execute Una instrucción no se puede ejecutar en un solo
ciclo de reloj, por que tiene que cargar tanto las instrucciones como la data desde memoria.
Fetch (carga) Decodificar o encontrar la instrucción, cargarla de
memoria al registro y avisar a la ALU Execute (ejecuta)
Ejecuta la operación según lo que dice la instrucción Mueve/transforma data
Ciclo Fetch/Execute –carga
1. PC -> MAR Transferir la dirección del PC (contador de programa) al MAR
2. MDR -> IR Transferir la instrucción al IR
3. IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR
4. MDR -> A Copiar la data en el acumulador
5. PC + 1 -> PC Incrementar el PC (contador de programa)
Ciclo Fetch/Execute –grabación
1. PC -> MAR Transferir la dirección del PC al MAR
2. MDR -> IR Transferir la instrucción al IR
3. IR(address) -> MAR Cargar parámetro de dirección de la instrucción en el MAR
4. A -> MDR* Copiar la data del cumulador al MDR
5. PC + 1 -> PC Incrementar contador del programa
*Note la diferencia en el paso #4
Ciclo Fetch/Execute – sumar1. PC -> MAR Transferir la dirección del PC
al MAR
2. MDR -> IR Transferir la instrucción al IR
3. IR(address) -> MAR Cargar el parámetro de dirección de la instrucción al MAR
4. A + MDR -> A Contenido del MDR se suma al del acumulador
5. PC + 1 -> PC Incrementar PC
Instrucciones Instrucción
Comando dado a la computadora Hace que la señal eléctrica sea enviada por ciertos
circuitos para ser procesada “Instruction set”
Su diseño define las funciones soportadas por el procesador
Diferencia las arquitecturas de computadoras por: Número de instrucciones Complejidad de operaciones ejecutadas por una instrucción Tipos de data soportados Formato (layout, longitud fija vs. variable) Uso de registros Manejo de Direcciones (tamaño, modos)
Elementos de una instrucción OPCODE: tarea o comando OPERANDO(s) fuente OPERANDO resultado
Ubicación de la data (registro, memoria) Explícito: incluido en la instrucción Implícito: se asume por default
OPCODEOPERANDOfuente
OPERANDOresultado
Direcciones
Formato de instrucciones
Formato dependiente del CPU que define: Longitud del OPCODE Número de operandos Longitud de los operandos
Ej.: Formato
de 32-bit
Formato de instrucciones: CISC
Formato de instrucciones: RISC
Tipos de Instrucciones Transferir data (cargar, guardar)
Más común, más flexible Manipula memoria y registros Definición de word (palabra) ? 16? 32? 64 bits?
Aritméticas Operadores + - / * ^ Enteros y punto flotante
Logical or Boolean Operadores relacionales: > < = Operadores boolenaos AND, OR, XOR, NOR, y NOT
Operaciones de un solo operando Negar, decremento, incremento
Más tipos de instrucciones
De manipulación de bits Flags para verificar condiciones
Shift (desplazar) y rotar Control del programa (saltar) Instrucciones de Stack Operaciones en data múltiple Control de I/O y de la máquina
Paralelismo Implícito en las CPUs
Pipelines y ejecución superescalar: sobreponer (hacer a la vez) más de una fase del ciclo fetch-execute.
Idea similar a una linea de montaje fabril.
Ejemplo: el pentium 4 tenia un pipeline de 20 fases.
Predicción del “branch”
Paralelismo en las instrucciones: pipelines
Ejemplo: lavandería comunal Ana, Beto, Carla y David
tienen cada uno una carga de ropa sucia para lavar, secar y planchar
Lavadora toma 30 minutes Secadora: 40 minutes Planchar: 20 minutes Una sola lavadora, una sola
secadora, una sola plancha
A B C D
Lavada secuencial
Lavada secuencial toma 6 hours para 4 cargas
A
B
C
D
30 40 2030 40 2030 40 2030 40 20
6 PM 7 8 9 10 11medianoche
Orden
Tiempo
Lavada con pipelining
Ahora toma 3 horas y media
A
B
C
D
6 PM 7 8 9 10 11medianoche
Orden
Time
30 40 40 40 40 20
Pipelining No se acelera el tiempo de ejecución de una
sola tarea, sino del conjunto de tareas. Esta limitada por la “instrucción” más lenta (en el
ejemplo, la secadora) y su desbalance respecto a las otras
Muchas tareas se hacen a la vez, cada una en una instrucción diferente
Potencial de acelerar procesos depende del número de “pipes” (operaciones simultáneas posibles)
Aparte hay un costo en administrar el paso de una operación a otra.
Mejor RISC. Pero también CISC, ej: P4
Pipelining en CPU RISC
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 6 Ciclo 7Ciclo 5
ORDEN
INSTR.
Pipelining En la vida real, cada paso no necesariamente es
de 1 ciclo. Algunos son de 2 ciclos, y otros pueden demorarse 4 o 5 ciclos, dependiendo de la instrucción.
Problemas posibles: Estructurales: el hardware no puede soportar ciertas
operaciones simultáneas De datos: una operación depende de los resultados de
otra aún no efectuada. De control o de branch.
Estos problemas disminuyen la mejora de performance, y crecen si hay más pipes.
Velocidad de CPU versus velocidad de acceso a memoria
La memoria puede ser cuello de botella Latencia: tiempo desde que el CPU pide un
dato en memoria hasta que lo obtiene efectivamente.
Bandwidth: tasa a la que se puede leer la data (bits/s ó bytes/s)
Ej.: tengo una CPU de 1GHz (clock 1 ns) conectada a una RAM de 100 ns. Multiplique 2 vectores de 10 elementos c/u., que están en la RAM
CPU60%/año(2X/1.5 a)
DRAM9%/aó(2X/10 a)1
10
100
1000
198
0198
1 198
3198
4198
5 198
6198
7198
8198
9199
0199
1 199
2199
3199
4199
5199
6199
7199
8 199
9200
0
DRAM
CPU198
2
Performance Gapentre CPU y memoria(crece 50% / año)
Perf
orm
an
ce
Tiempo
“Ley de Moore”
Processor-DRAM Memory Gap (latency)
Niveles de la jerarquía de memoria
Registros CPU100s Bytes<1s ns
Cache10s-100s K Bytes1-10 ns$10/ MByte
Memoria Pcpal.MBytes100ns- 300ns$1/ MByte
Disco10s GBytes, 10 ms (10,000,000 ns)$0.0031/ MByte
Capacidad,Tiempo de accesoCostos
Cintainfinitosec-min$0.0014/ MByte
Registros
Cache
Memoria
Disco
Cinta
Instr. Operandos
Bloques
Páginas
Archivos
StagingUnidad de transfer.
prog./compilador1-8 bytes
Control de cache 8-128 bytes
S.O.512-4K bytes
UsarioMbytes
Mayor nivel
Menor nivel
Más rápido
Másgrande
Mejor latencia usando caches
En vez de leer de 2 en 2 los elementos de los vectores, los leo una sola vez y los guardo en el cache más cercano a la CPU
Conviene acceder a la memoria y computar en el orden que minimize las lecturas de RAM y aproveche mejor el cache.
Ejemplo: multiplicar 2 matrices
Notas en almacenamiento de la matriz
Una matriz es un array 2-D de elementos, pero en la memoria todo es “1-D”
Convenciones para almacenamiento de matrices por columna (tipo Fortran); A(i,j) en posición A + i + j*n por fila (tipo C); A(i,j) en posición A + i*n + j recursivo
Usaremos por columna
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
0
4
8
12
16
1
5
9
13
17
2
6
10
14
18
3
7
11
15
19
Por Columna Por fila
Cache lines
Fuente: Larry Carter, UCSD
La fila azul en la matriz está guardada en las líneas rojas
Matriz por columna en memoria
Intensidad computacional: eficiencia de algor.
Balance de máquina: eficiencia de máquina
Modelo simple de memoria a usar
Asumir que hay solo 2 niveles de memoria, rápida y lenta Toda la data está al inicio en la memoria lenta
m = número de elemento de memoria (words) movidos entre la memoria rápida y la lenta.
tm = tiempo por operación en memoria lenta f = número de operaciones aritméticas tf = tiempo por operación aritmética (memoria rápida) << tm
q = f / m número promedio de flops por acceso a memoria lenta
Tiempo mínimo= f* tf, si toda la data está en mem. rápida. Tiempo real
f * tf + m * tm = f * tf * (1 + tm/tf * 1/q)
Mayor q es tpo. más cercano al mínimo f * tf q tm/tf necesario para obtener al menos 50% de velocidad pico
Multiplicando Matriz y vector
{implementa y = y + A*x}
for i = 1:n
for j = 1:n
y(i) = y(i) + A(i,j)*x(j)
= + *
y(i) y(i)
A(i,:)
x(:)
Multiplicando Matriz y vector
{read x(1:n) de memoria lenta en memoria rápida}
{read y(1:n) de memoria lenta en memoria rápida}
for i = 1:n
{read fila i de A de memoria lenta en memoria rápida}
for j = 1:n
y(i) = y(i) + A(i,j)*x(j)
{write y(1:n) de memoria rápida a memoria lenta}
• m = número de ops. en memoria lenta = 3n + n2
• f = número de ops. aritméticas = 2n2
• q = f / m ~= 2
• Esta multiplicación esta limitada por la velocidad de la memoria lenta
Multiplicación de matrices por método trivial
{implementa C = C + A*B}
for i = 1 to n
for j = 1 to n
for k = 1 to n
C(i,j) = C(i,j) + A(i,k) * B(k,j)
= + *
C(i,j) C(i,j) A(i,:)
B(:,j)
Algoritmo tiene 2*n3 = O(n3) Flops y opera en 3*n2 words de memoria
q puede llegar hasta 2*n3 / 3*n2 = O(n)
Multiplicación de matrices por método trivial
{implementa C = C + A*B}for i = 1 to n
{read fila i de A en memoria rápida}
for j = 1 to n
{read C(i,j) en memoria rápida}
{read columna j de B en memoria rápida}
for k = 1 to n
C(i,j) = C(i,j) + A(i,k) * B(k,j)
{write C(i,j) a memoria lenta}
= + *
C(i,j) A(i,:)
B(:,j)C(i,j)
Multiplicación de matrices por método trivial
Número de accesos a memoria lenta:
m = n3 para leer cada columna de B n veces
+ n2 para leer cada fila de A una vez
+ 2n2 para leer y escribir cada elemento de C una vez
= n3 + 3n2
Así, q = f / m = 2n3 / (n3 + 3n2)
~= 2 para n grande, no hay mejora respecto a mult. matriz por vector
= + *
C(i,j) C(i,j) A(i,:)
B(:,j)
Impacto del bandwidth
Para mejorarlo: Aumentar el tamaño del cache (cache line).
Ejemplo: que pasaria si deseo multiplicar dos vectores de tamaño 100 c/u. y en cada cache line solo entran 20 floats? Y si entran 200 floats?
Una arquitectura paralela genérica
P P P P
Interconnection Network
M M MM
° Físicamente, dónde está la memoria?
Memoria
P = procesador, M = memoria
Modelos de programación paralela Control
Cómo se crea el paralelismo? Qué orden hay entre operaciones? Cómo los diferentes hilos de control se sincronizan?
Data Qué data es privada y qué data se comparte? Cómo se accede o comunica la data compartida en
forma lógica? Operaciones
Qué operaciones son atómicas (indivisibles)? Costos
Cómo contabilizar los costos respectivos?
Ejemplo sencillo
Sea la suma : Descomposición paralela:
Cada evaluación y cada suma parcial es una tarea.
Asignar n/p números a cada procesador (1 al p) Cada uno computa independientemente sus resultados
“privados” y la suma parcial. Uno (o todos) recolectan las p sumas parciales y computa la
suma global.
Dos clases de data: Compartida lógicamente
Los n números originales, la suma global.
Privada lógicamente Las evaluaciones de las funciones. Y las sumas parciales individuales?????
1
0
])[(n
i
iAf
Modelo de prog. 1: Memoria compartida
Un programa es una colección de hilos de control. Se pueden crear dinámicamente en algunos lenguajes.
Cada hilo tiene variables privadas, ej: variables del stack local. También hay variables compartidas, ej: variables estáticas, de bloques
comunes, del heap global. Los hilos se comunican implícitamente escribiendo y leyendo
variables compartidas. Los hilos coordinan sincronizando en variables compartidas.
PnP1P0
s s = ...y = ..s ...
Memoria compartida
i: 2 i: 5 Memoriaprivada
i: 8
Sumando con memoria compartida
HILO 1
for i = 0, n/2-1 s = s + f(A[i])
HILO 2
for i = n/2, n-1 s = s + f(A[i])
static int s = 0;
• Problema: “race condition” en la variables s• Una “race condition” o carrera por la data ocurre cuando:
- Dos procesadores (o 2 hilos) acceden a la misma variable, y por lo meno uno la escribe.
- Los accesos son concurrentes (no sincronizados) así que podrían pasar simultáneamente.
Sumando con memoria compartida
HILO 1 …. computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 …
HILO 2 … computa f([A[i]) y put en reg0 reg1 = s reg1 = reg1 + reg0 s = reg1 …
static int s = 0;…(s = 27)
• Sea s=27, f(A[i])=7 en Hilo 1, y f(A[i])=9 en Hilo 2• Si el programa está bien, s debería ser 43 al final
• Pero puede ser 43, 34, o 36
• Las operaciones atómicas son lecturas y escrituras• Ose ve un número u otro, no medio número• Las sumas se hacen en registros (privados generalmente)
7 927 2734 36
3634
Sumando con memoria compartida (mejorado)
HILO 1
local_s1= 0 for i = 0, n/2-1 local_s1 = local_s1 + f(A[i]) s = s + local_s1
HILO 2
local_s2 = 0 for i = n/2, n-1 local_s2= local_s2 + f(A[i]) s = s +local_s2
static int s = 0;
• Como la suma es asociativa, se puede reordenar• La mayor parte de cómputo es en variables privadas
- La frecuencia de uso de mem. compartida baja, lo que puede mejorar la velocidad.
- Pero hay un “race condition” en el update de la v.compartida s- Se puede solucionar añadiendo locks o candados (sólo un hilo
puede usar el lock a la vez; los otros deben esperar)
static lock lk;
lock(lk);
unlock(lk);
lock(lk);
unlock(lk);
Todos los procesadores se conectan a una memoria compartida grande. Nombre típioc: Symmetric Multiprocessors (SMPs) SGI, Sun, HP, Intel, IBM (nodos del Millennium, SP) Chips multicore (hacía donde vamos)
Difícil escalar a gran número de procesadores <= 32 procesadores es típico
Ventaja: uniform memory access (UMA) Costo: es más barato acceder data en cache que en memoria
principal.
Modelo de máquina 1a: Shared Memory
P1
bus
$
memoria
P2
$
Pn
$
Problemas escalando HW de mem. compartida
Por qué no poner más procesadores (con mayor memoria?) El bus de memoria se vuelve cuello de botella
Ej. del problema: Parallel Spectral Transform Shallow Water Model (PSTSWM) Resultados (y gráfico) cortesía de Pat Worley del ORNL Es un núcleo vital en modelos atmosféricos 99% de ops. punto flotante son multiplicaciones o
sumas, que generalmente corren bien en toda CPU. Pero se barre toda la memoria con poco reuso de
operandos se usa mucho bus y memoria compartida El experimento muestra performance serial, con una
“copia” del ejecutable corriendo independientemente en varios procesadores. Es el mejor caso para mem.compartida: no comparte Pero la data no cabe en los registros/cache
From Pat Worley, ORNL
Ejemplo
• Degradación de performance es una función “suave” del número de procesos.
• No data compartida entre ellos, así que debería haber perfecto paralelismo.
• (Código corrió en 18 niveles z y varios rangos de niveles xy.)
Modelo 1b: memoria distribuida compartida
Memoria es compartida en forma lógica, pero distribuida físicamente Cualquier CPU puede acceder cualquier dirección de memoria Líneas de cache (o páginas) se pasan entre máquinas
Ejemplo: SGI Origin Escala a 512 (SGI Altix (Columbia) en NASA/Ames) Limitada por la coherencia del cache– como mantener las copias en
cache de la misma dirección iguales entre si.
P1
network
$
memory
P2
$
Pn
$
memory memory
Problemas de performance al compartir
Real compartirEscrituras frecuentes a la misma variable: cuello de
botellaOK para read-only o para escrituras infrecuentes Técnica: hacer copias de un valor, uno por procesador,
si se puede en el algoritmo.Falso compartir
Bloqueo el cache añade complejidadDos diferentes variables en el mismo bloque de cacheTécnica: colocar la data usada por cada procesador en
forma contigua, o por lo menos evitar intercalado en memoria
Modelo de program. 2: Paso de mensajes
Programa consiste en colección de procesos nombrados. Se establecen al empezar a correr el programa Hilo de control y direcciones locales -- NO comparte data física. Data compartida lógica se divide entre procesadores locales.
Los procesos se comunican por pares de send/receive Coordinación implícita en cada evento de comunicación. MPI (Message Passing Interface) es la librería más popular
PnP1P0
y = ..s ...
s: 12
i: 2
Memoria privada
s: 14
i: 3
s: 11
i: 1
send P1,s
Red
receive Pn,s
Computar s = A[1]+A[2] en cada procesador
° 1er intento – qué podría salir mal?
Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote
Procesador 2 xlocal = A[2] receive xremote, proc1 send xlocal, proc1 s = xlocal + xremote
° 2do intento
Procesador 1 xlocal = A[1] send xlocal, proc2 receive xremote, proc2 s = xlocal + xremote
Procesador 2 xlocal = A[2] send xlocal, proc1 receive xremote, proc1 s = xlocal + xremote
° Si send/receive funcionara como el teléfono? Como el correo?
° Si hubiera más de 2 procesadores?
Modelo de máquina 2a: Memoria distribida
Cray T3E, IBM SP2 Clusters de PC (Berkeley NOW, Beowulf) IBM SP-3, Millennium, CITRIS son máquinas de
memoria distribuída, pero los nodos son SMPs. Cada procesador tiene su propia memoria y cache
pero no puede acceder directamente a la memoria de otro procesador.
Cada “nodo” tiene una “Network Interface” (NI, tarjeta de red o similar) para comunicación y sincronización
interconnect
P0
memory
NI
. . .
P1
memory
NI Pn
memory
NI
Clusters de Tflop/s
He aquí algunos ejemplos de clusters configurados de procesadores y redes separadas
72% del Top 500 (Nov 2005), 2 en el top 10 Dell cluster en Sandia (Thunderbird) era #4 en Top 500
8000 Intel Xeons @ 3.6GHz 64 TFlops pico, 38 TFlops en Linpack Infiniband connection network
Walt Disney Feature Animation (The Hive) era #96 1110 Intel Xeons @ 3 GHz Gigabit Ethernet
Saudi Oil Company era #107 Credit Suisse/First Boston era #108 Para más detalles usar “statistics/sublist generator” en www.top500.org
Modelo de máquina 2b: Internet/Grid Computing SETI@Home: corría en 500,000 PCs
~1000 años de CPU al día 485,821 años de CPU hasta el 2006
Análisis sofisticado de señales Datasets distribuidos desde Radio Telescopio de Arecibo
Sgte. Paso:Allen Telescope Array
Mod. de progr. 2b: Espacio global de direcciones
Programa consiste en colección de hilos nombrados. Se definen al inicio de la corrida. Data local y compartida, como en modelo de mem.compt. Pero la data compartida está dividida entre procesos. Aparentemente, data remota es cara computacionalmente
Ejs: UPC, Titanium, Co-Array Fortran Programación en espacio global de direcciones es punto
medio entre paso de mensajes y mem. compartida.
PnP1P0 s[myThread] = ...
y = ..s[i] ...i: 2 i: 5 Private
memory
Shared memory
i: 8
s[0]: 27 s[1]: 27 s[n]: 27
Modelo de máq. 2c: Espacio global de direcs.
Cray T3D, T3E, X1, y cluster HP Alphaserver Clusters construidos con Quadrics, Myrinet, o Infiniband La NI soporta RDMA (Remote Direct Memory Access)
NI puede acceder directamente a la memoria sin interrumpir a la CPU Un proces. puede hacer read/write a memoria como operación unilateral
(put/get) No solo un load/store como en máq. de mem.compartida
Continua computando mientras espera a que la operación en memoria finalice.
Data remota generalmente no está en cache local.
interconnect
P0
memory
NI
. . .
P1
memory
NI Pn
memory
NIEspacio global de dirs. puede ser soportado en varios grados
Modelo de prog. 3: Paralelismo de data
Un solo hilo de control que maneja operaciones paralelas.Esas operaciones paralelas se aplican a toda (o a parte
determinada) de un array. Comunicación implícita en los operadores paralelos Elegante y fácil de entender Coordinación implícita: instrucciones se ejecutan sincronizadas Similar a la forma de trabajo de Matlab en operaciones con
arrays
Desventajas: No todos los problemas encajan en este modelo Difícil de mapear en computadoras de grano gruesoA:
fA:f
sum
A = array de toda la datafA = f(A)s = sum(fA)
s:
Modelo de máquina 3a: Sistema SIMD
Un número grande de “pequeños” procesadores. Un solo “procesador de control” emite cada instrucción. Cada procesador ejecuta la mima instrucción. Algunos procesadores se pueden “apagar” en alguna instrucciones
Originalmente esas computadoras se especializaban en cómputo científico, pocas fabricadas (CM2, Maspar)
Modelo de programación puede ser implementado en el compilador Mapear paralelismo n-oper. a p procesadores, n >> p, pero es difícil (ej.,
HPF)
interconnect
P1
memory
NI. . .
control processor
P1
memory
NI P1
memory
NI P1
memory
NI P1
memory
NI
Modelo de máq. 3b: Máquinas vectoriales
Arquitecturas vectoriales se basan en 1 sólo procesador Múltiples unidades funcionales Todas efectúan la misma operación Grado de paralelismo posible depende del hardware
Importancia histórica Desplazada por los MPPs en los 90s
Ha reaparecido ultimamente A gran escala en el Earth Simulator (NEC SX6) y Cray X1 A pequeña escala en extenciones SIMD de procesadores
SSE, SSE2 (Intel: Pentium/IA64) Altivec (IBM/Motorola/Apple: PowerPC) VIS (Sun: Sparc)
Idea clave: compilador hace parte del trabajo difícil de encontrar el paralelismo, así el HW no tiene que hacerlo.
Procesadores Vectoriales Instrucciones Vectoriales operan en un array o vector
Operaciones en registros vectoriales
Un registro vectorial de una superc. ~32-64 elementos El no. de elementos es mayor que la cantidad de HW paralelo,
llamados pipes o lanes, entre 2 y 4
El HW hace una operación vectorial completa en #elementos-por-reg-vectorial / #pipes
r1 r2
r3
+ +
… vr2 … vr1
… vr3
(logicamente, hace #elem sumas en paralelo)
… vr2 … vr1 (en realidad, hace #`pipes sumas en paralelo)
++ ++ ++
Modelo de máq.4: Clusters de SMPs SMPs son las computadoras comunes más rápidas, así
que se usan como bloque básico para hacer una máquina mayor en una red
Nombres comunes: CLUMP = Cluster de SMPs Máquinas jerárquicas, constelaciones
Muchas máquinas modernas son de este tipo o similar: Millennium, IBM SPs, ASCI machines
Cual sería el modelo de programación #4 ??? Tratar a las computadoras como “planas”, simepre usar
paso de mensajes, aun dentro del SMP (simple, pero ignora los efectos de la jerarquía de memoria).
Memoria compartida dentro de un SMP, pero paso de mensajes fuera del SMP.
Organización física de plataformas paralelas
Modelo ideal: PRAM (parallel R.A. Machine). Toda operación de acceso a memoria se completa en un período de reloj -- no hay jerarquía de memoria (irreal pero sencillo). OK para ver si un algoritmo tiene suficiente paralelismo. Diseñar una estrategia para el Algoritmo paralelo: primero un
alg. PRAM, luego preocuparse de los tienmpos de memoria/comunicación (a veces funciona)
EREW PRAM CREW PRAM ERCW PRAM CRCW PRAM C: concurrente, E:Exclusiva, R: lectura, W: escritura
Redes de interconexión
Estaticas vs dinámicas
Topología Bus
Sin cache local vs con cache local
Redes de crossbar
Redes de switch en cascada
Completamente conectada, y en estrella
Meshes e hipercubos
Redes basadas en árboles
Costos de comunicación en computación paralela
Costos del pase de mensajes Usaremos modelo con CREW PRAM
Costos en memoria compartida
Modelo de Latencia y Ancho de banda (pase de mensajes)
Tiempo para mandar mensaje de longitud n es aprox.:
Topología se asume irrelevante. Modelo “” :
Usualmente >> >> tiempo por flop. Un mensaje largo es menos costoso que varios cortos.
Costo de un mensaje puede ser de cientos o miles de flops.
Lección: Se necesita un ratio computación-a-comunicación grande para ser eficiente.
Tiempo = latencia + n*costo_por_word = latencia + n/ancho_de_banda
Tiempo = + n*
nn
Parametros Alfa-Beta en Máquinas reales
Números obtenidos empíricamentemáquina
T3E/Shm 1.2 0.003T3E/MPI 6.7 0.003IBM/LAPI 9.4 0.003IBM/MPI 7.6 0.004Quadrics/Get 3.267 0.00498Quadrics/Shm 1.3 0.005Quadrics/MPI 7.3 0.005Myrinet/GM 7.7 0.005Myrinet/MPI 7.2 0.006Dolphin/MPI 7.767 0.00529Giganet/VIPL 3.0 0.010GigE/VIPL 4.6 0.008GigE/MPI 5.854 0.00872
es latencia en μs es ancho de banda en μs por byte
Qué tan bien el modelo αβ Tiempo = + n*predice la performance real?
1
10
100
1000
10000
8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072
T3E/Shm
T3E/MPI
IBM/LAPI
IBM/MPI
Quadrics/Shm
Quadrics/MPI
Myrinet/GM
Myrinet/MPI
GigE/VIPL
GigE/MPI
Drop Page Fields Here
Sum of model
size
machine
Tiempo según el modelo para varios n
1
10
100
1000
10000
8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072
T3E/Shm
T3E/MPI
IBM/LAPI
IBM/MPI
Quadrics/Shm
Quadrics/MPI
Myrinet/GM
Myrinet/MPI
GigE/VIPL
GigE/MPI
Drop Page Fields Here
Sum of gap
size
machine
Tiempo medido experimentalmente
Caso memoria compartida
Modelos mucho más complejos. Muchos factores: el programador no
controla exactamente en que parte de la memoria va su programa; consistencia del cache es casi impredecible; contención.
Se adapta el mismo modelo simplificado que para pase de mensajes, pero sabiendo que es mucho menor en memoria compartida que en paso de mensajes ( tiende a cero)
Mapeo proceso-procesador
Números: CPUsLetras: procesos
(c) Mapeo natural(d) Mapeo aleatorio
Ej.: Mapeo en hipercubo
top related