Está en la página 1de 83

Teo 2: Plataformas para

programacin paralela
Algoritmos paralelos
Glen Rodrguez
Arquitectura tradicional de una
computadora secuencial
CPU + RAM
conectado por un
bus
Los 3 elementos
pueden ser cuellos
de botella
Mejora: mltiples
elementos
Arquitecturas secuenciales
mejoradas
Si la multiplicidad de elementos es
ocultada al programador: paralelismo
implcito.
Cuando se puede, se debe reescribir
un programa para que aproveche al
mximo el paralelismo implcito, antes
de paralelizar a mano.
La Control Unit coordina todo
Registros
Mini memorias (chica, permanente)
dentro de la CPU, usadas para ciertos
propsitos especiales
Directamente manipuladas por la CU
Funcionalidad especfica
Tamao en bits o bytes (no MB como
la memoria RAM, ni siquiera KB)
Guardan data, direcciones o
instrucciones
Registros
Uso
Acceso rpido 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
Direccin de la siguiente instruccin del programa
Seales de dispositivos externos
Registros de propsito general
Registros visibles al usurio
Guardan resultados intermedio o valores de datos. Ej:
contadores de un loop
Varias docenas en CPUs actuales
Registros de propsito
especial
Program Count Register (PC)
Puntero a una instruccin
Instruction Register (IR)
Guarda la instruccin 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 aritmticas, 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
bsicos (if ?=0 else ; if ?>0 )
Operacin en Memoria
Cada localizacin en memoria tiene una
direccin nica
La direccin de una instruccin se copia al
MAR, el cul ubica la localizacin en
memoria
CPU determina si la operacin es grabar o
leer
Se realiza la transferencia entre el MDR y la
memoria
MDR es un registro que se puede leer y
escribir
Relacin entre MAR,
MDR y la Memoria
Direccin
Data
Ejemplo MAR-MDR
Capacidad de memoria
Determinada por 2 factores
1. Nmero of bits en el MAR
2
K
donde K = cantidad de bits en el registro MAR
2. Tamao del parmetro direccin 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 fbrica.
Ciclo Fetch-Execute
Una instruccin 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 instruccin, cargarla de
memoria al registro y avisar a la ALU
Execute (ejecuta)
Ejecuta la operacin segn lo que dice la instruccin
Mueve/transforma data
Ciclo Fetch/Execute carga
1. PC -> MAR Transferir la direccin del PC
(contador de programa) al MAR
2. MDR -> IR Transferir la instruccin al IR
3. IR(address) -> MAR Cargar el parmetro de direccin
de la instruccin al MAR
4. MDR -> A Copiar la data en el acumulador
5. PC + 1 -> PC

Incrementar el PC (contador de
programa)
Ciclo Fetch/Execute
grabacin
1. PC -> MAR Transferir la direccin del PC al
MAR
2. MDR -> IR Transferir la instruccin al IR
3. IR(address) -> MAR Cargar parmetro de direccin
de la instruccin 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 sumar
1. PC -> MAR Transferir la direccin del PC
al MAR
2. MDR -> IR Transferir la instruccin al IR
3. IR(address) -> MAR Cargar el parmetro de
direccin de la instruccin al
MAR
4. A + MDR -> A Contenido del MDR se suma
al del acumulador
5. PC + 1 -> PC

Incrementar PC
Instrucciones
Instruccin
Comando dado a la computadora
Hace que la seal elctrica sea enviada por ciertos
circuitos para ser procesada
Instruction set
Su diseo define las funciones soportadas por el
procesador
Diferencia las arquitecturas de computadoras por:
Nmero de instrucciones
Complejidad de operaciones ejecutadas por una instruccin
Tipos de data soportados
Formato (layout, longitud fija vs. variable)
Uso de registros
Manejo de Direcciones (tamao, modos)
Elementos de una instruccin
OPCODE: tarea o comando
OPERANDO(s) fuente
OPERANDO resultado
Ubicacin de la data (registro, memoria)
Explcito: incluido en la instruccin
Implcito: se asume por default
OPCODE
OPERANDO
fuente
OPERANDO
resultado
Direcciones
Formato de instrucciones
Formato dependiente del CPU que define:
Longitud del OPCODE
Nmero 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)
Ms comn, ms flexible
Manipula memoria y registros
Definicin de word (palabra) ? 16? 32? 64 bits?
Aritmticas
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
Ms tipos de instrucciones
De manipulacin de bits
Flags para verificar condiciones
Shift (desplazar) y rotar
Control del programa (saltar)
Instrucciones de Stack
Operaciones en data mltiple
Control de I/O y de la mquina
Paralelismo Implcito en las
CPUs
Pipelines y ejecucin superescalar:
sobreponer (hacer a la vez) ms 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.
Prediccin del branch
Paralelismo en las instrucciones:
pipelines
Ejemplo: lavandera 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 20 30 40 20 30 40 20 30 40 20
6 PM 7 8 9 10 11 medianoche
O
r
d
e
n

Tiempo
Lavada con pipelining
Ahora toma 3 horas y media
A
B
C
D
6 PM 7 8 9 10 11 medianoche
O
r
d
e
n
Time
30 40 40 40 40 20
Pipelining
No se acelera el tiempo de ejecucin de una
sola tarea, sino del conjunto de tareas.
Esta limitada por la instruccin ms lenta (en el
ejemplo, la secadora) y su desbalance respecto
a las otras
Muchas tareas se hacen a la vez, cada una en
una instruccin diferente
Potencial de acelerar procesos depende del
nmero de pipes (operaciones simultneas
posibles)
Aparte hay un costo en administrar el paso de
una operacin a otra.
Mejor RISC. Pero tambin CISC, ej: P4
Pipelining en CPU RISC
Reg
A
L
U

DMem Ifetch
Reg
Reg
A
L
U

DMem Ifetch
Reg
Reg
A
L
U

DMem Ifetch
Reg
Reg
A
L
U

DMem Ifetch
Reg
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4 Ciclo 6 Ciclo 7 Ciclo 5
O
R
D
E
N

I
N
S
T
R
.
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
instruccin.
Problemas posibles:
Estructurales: el hardware no puede soportar ciertas
operaciones simultneas
De datos: una operacin depende de los resultados de
otra an no efectuada.
De control o de branch.
Estos problemas disminuyen la mejora de
performance, y crecen si hay ms 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 estn en la RAM
CPU
60%/ao
(2X/1.5 a)
DRAM
9%/a
(2X/10 a) 1
10
100
1000
1
9
8
0

1
9
8
1

1
9
8
3

1
9
8
4

1
9
8
5

1
9
8
6

1
9
8
7

1
9
8
8

1
9
8
9

1
9
9
0

1
9
9
1

1
9
9
2

1
9
9
3

1
9
9
4

1
9
9
5

1
9
9
6

1
9
9
7

1
9
9
8

1
9
9
9

2
0
0
0

DRAM
CPU
1
9
8
2

Performance Gap
entre CPU y memoria
(crece 50% / ao)
P
e
r
f
o
r
m
a
n
c
e

Tiempo
Ley de Moore
Processor-DRAM Memory Gap (latency)
Niveles de la jerarqua de memoria
Registros CPU
100s Bytes
<1s ns
Cache
10s-100s K Bytes
1-10 ns
$10/ MByte
Memoria Pcpal.
MBytes
100ns- 300ns
$1/ MByte
Disco
10s GBytes, 10 ms
(10,000,000 ns)
$0.0031/ MByte
Capacidad,
Tiempo de acceso
Costos
Cinta
infinito
sec-min
$0.0014/ MByte

Registros
Cache
Memoria
Disco
Cinta
Instr. Operandos
Bloques
Pginas
Archivos
Staging
Unidad de transfer.
prog./compilador
1-8 bytes
Control de cache
8-128 bytes
S.O.
512-4K bytes
Usario
Mbytes
Mayor nivel
Menor nivel
Ms
rpido
Ms
grande
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 ms 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 posicin A + i + j*n
por fila (tipo C); A(i,j) en posicin 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
lneas rojas
Matriz por columna en memoria
Intensidad
computacional:
eficiencia de algor.
Balance de
mquina:
eficiencia
de mquina
Modelo simple de memoria a
usar
Asumir que hay solo 2 niveles de memoria, rpida y lenta
Toda la data est al inicio en la memoria lenta
m = nmero de elemento de memoria (words) movidos entre la memoria
rpida y la lenta.
t
m
= tiempo por operacin en memoria lenta
f = nmero de operaciones aritmticas
t
f
= tiempo por operacin aritmtica (memoria rpida) << t
m

q = f / m nmero promedio de flops por acceso a memoria lenta
Tiempo mnimo= f* t
f
, si toda la data est en mem. rpida.
Tiempo real
f * t
f
+ m * t
m
= f * t
f
* (1 + t
m
/t
f
* 1/q)

Mayor q es tpo. ms cercano al mnimo f * t
f

q t
m
/t
f
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 rpida}
{read y(1:n) de memoria lenta en memoria rpida}
for i = 1:n
{read fila i de A de memoria lenta en memoria rpida}
for j = 1:n
y(i) = y(i) + A(i,j)*x(j)
{write y(1:n) de memoria rpida a memoria lenta}
m = nmero de ops. en memoria lenta = 3n + n
2
f = nmero de ops. aritmticas = 2n
2

q = f / m ~= 2

Esta multiplicacin esta limitada por la velocidad de la
memoria lenta
Multiplicacin de matrices por
mtodo 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*n
3
= O(n
3
) Flops y opera en 3*n
2

words de memoria
q puede llegar hasta 2*n
3
/ 3*n
2
= O(n)
Multiplicacin de matrices por
mtodo trivial
{implementa C = C + A*B}
for i = 1 to n
{read fila i de A en memoria rpida}
for j = 1 to n
{read C(i,j) en memoria rpida}
{read columna j de B en memoria rpida}
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)
Multiplicacin de matrices por
mtodo trivial
Nmero de accesos a memoria lenta:
m = n
3
para leer cada columna de B n veces
+ n
2
para leer cada fila de A una vez
+ 2n
2
para leer y escribir cada elemento de C una vez
= n
3
+ 3n
2

As, q = f / m = 2n
3
/ (n
3
+ 3n
2
)
~= 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 tamao
del cache (cache line).
Ejemplo: que pasaria si deseo
multiplicar dos vectores de tamao
100 c/u. y en cada cache line solo
entran 20 floats? Y si entran 200
floats?
Una arquitectura paralela
genrica
P
P
P P
Interconnection Network
M M M M
Fsicamente, dnde est la memoria?
Memoria
P = procesador, M = memoria
Modelos de programacin paralela
Control
Cmo se crea el paralelismo?
Qu orden hay entre operaciones?
Cmo los diferentes hilos de control se sincronizan?
Data
Qu data es privada y qu data se comparte?
Cmo se accede o comunica la data compartida en
forma lgica?
Operaciones
Qu operaciones son atmicas (indivisibles)?
Costos
Cmo contabilizar los costos respectivos?
Ejemplo sencillo
Sea la suma :
Descomposicin paralela:
Cada evaluacin y cada suma parcial es una tarea.
Asignar n/p nmeros 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 lgicamente
Los n nmeros originales, la suma global.
Privada lgicamente
Las evaluaciones de las funciones.
Y las sumas parciales individuales?????

1
0
]) [ (
n
i
i A f
Modelo de prog. 1: Memoria
compartida
Un programa es una coleccin de hilos de control.
Se pueden crear dinmicamente en algunos lenguajes.
Cada hilo tiene variables privadas, ej: variables del stack local.
Tambin hay variables compartidas, ej: variables estticas, de bloques
comunes, del heap global.
Los hilos se comunican implcitamente escribiendo y leyendo
variables compartidas.
Los hilos coordinan sincronizando en variables compartidas.
Pn P1 P0
s
s = ...
y = ..s ...
Memoria compartida
i: 2
i: 5
Memoria
privada
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 podran pasar simultneamente.
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 debera ser 43 al final
Pero puede ser 43, 34, o 36
Las operaciones atmicas son lecturas y escrituras
Ose ve un nmero u otro, no medio nmero
Las sumas se hacen en registros (privados generalmente)
7 9
27 27
34 36
36 34
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 cmputo 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 aadiendo locks o candados (slo 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 tpioc: Symmetric Multiprocessors (SMPs)
SGI, Sun, HP, Intel, IBM (nodos del Millennium, SP)
Chips multicore (haca donde vamos)
Difcil escalar a gran nmero de procesadores
<= 32 procesadores es tpico
Ventaja: uniform memory access (UMA)
Costo: es ms barato acceder data en cache que en memoria
principal.
Modelo de mquina 1a:
Shared Memory
P1
bus
$
memoria
P2
$
Pn
$
Problemas escalando HW de
mem. compartida
Por qu no poner ms 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 grfico) cortesa de Pat Worley del ORNL
Es un ncleo vital en modelos atmosfricos
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
Degradacin de
performance es una
funcin suave del
nmero de procesos.
No data compartida entre
ellos, as que debera
haber perfecto
paralelismo.

(Cdigo corri en 18
niveles z y varios rangos
de niveles xy.)
Modelo 1b: memoria distribuida
compartida
Memoria es compartida en forma lgica, pero distribuida
fsicamente
Cualquier CPU puede acceder cualquier direccin de memoria
Lneas de cache (o pginas) se pasan entre mquinas
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 direccin iguales entre si.
P1
network
$
memory
P2
$
Pn
$
memory memory
Problemas de performance al
compartir
Real compartir
Escrituras frecuentes a la misma variable: cuello de
botella
OK para read-only o para escrituras infrecuentes
Tcnica: hacer copias de un valor, uno por procesador,
si se puede en el algoritmo.
Falso compartir
Bloqueo el cache aade complejidad
Dos diferentes variables en el mismo bloque de cache
Tcnica: 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 coleccin de procesos nombrados.
Se establecen al empezar a correr el programa
Hilo de control y direcciones locales -- NO comparte data fsica.
Data compartida lgica se divide entre procesadores locales.
Los procesos se comunican por pares de send/receive
Coordinacin implcita en cada evento de comunicacin.
MPI (Message Passing Interface) es la librera ms popular
Pn P1 P0
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 podra 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 telfono? Como el correo?
Si hubiera ms de 2 procesadores?
Modelo de mquina 2a:
Memoria distribida
Cray T3E, IBM SP2
Clusters de PC (Berkeley NOW, Beowulf)
IBM SP-3, Millennium, CITRIS son mquinas de
memoria distribuda, 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 comunicacin y sincronizacin
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 ms detalles usar statistics/sublist generator en www.top500.org
Modelo de mquina 2b: Internet/Grid Computing
SETI@Home: corra en 500,000 PCs
~1000 aos de CPU al da
485,821 aos de CPU hasta el 2006
Anlisis sofisticado de seales
Datasets distribuidos desde Radio Telescopio de Arecibo
Sgte. Paso:
Allen Telescope Array
Mod. de progr. 2b: Espacio global de
direcciones
Programa consiste en coleccin 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
Programacin en espacio global de direcciones es punto
medio entre paso de mensajes y mem. compartida.
Pn P1 P0
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 mq. 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 operacin unilateral
(put/get)
No solo un load/store como en mq. de mem.compartida
Continua computando mientras espera a que la operacin en memoria
finalice.
Data remota generalmente no est en cache local.
interconnect
P0
memory
NI
. . .
P1
memory
NI
Pn
memory
NI
Espacio 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.
Comunicacin implcita en los operadores paralelos
Elegante y fcil de entender
Coordinacin implcita: 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
Difcil de mapear en computadoras de grano grueso
A:
fA:
f
sum
A = array de toda la data
fA = f(A)
s = sum(fA)
s:
Modelo de mquina 3a:
Sistema SIMD
Un nmero grande de pequeos procesadores.
Un solo procesador de control emite cada instruccin.
Cada procesador ejecuta la mima instruccin.
Algunos procesadores se pueden apagar en alguna instrucciones
Originalmente esas computadoras se especializaban en cmputo
cientfico, pocas fabricadas (CM2, Maspar)
Modelo de programacin puede ser implementado en el compilador
Mapear paralelismo n-oper. a p procesadores, n >> p, pero es difcil (ej.,
HPF)

interconnect
P1
memory
NI
. . .
control processor
P1
memory
NI P1
memory
NI
P1
memory
NI
P1
memory
NI
Modelo de mq. 3b: Mquinas
vectoriales
Arquitecturas vectoriales se basan en 1 slo procesador
Mltiples unidades funcionales
Todas efectan la misma operacin
Grado de paralelismo posible depende del hardware
Importancia histrica
Desplazada por los MPPs en los 90s
Ha reaparecido ultimamente
A gran escala en el Earth Simulator (NEC SX6) y Cray X1
A pequea 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 difcil 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 operacin 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 mq.4: Clusters de SMPs
SMPs son las computadoras comunes ms rpidas, as
que se usan como bloque bsico para hacer una mquina
mayor en una red
Nombres comunes:
CLUMP = Cluster de SMPs
Mquinas jerrquicas, constelaciones
Muchas mquinas modernas son de este tipo o similar:
Millennium, IBM SPs, ASCI machines
Cual sera el modelo de programacin #4 ???
Tratar a las computadoras como planas, simepre usar
paso de mensajes, aun dentro del SMP (simple, pero
ignora los efectos de la jerarqua de memoria).
Memoria compartida dentro de un SMP, pero paso de
mensajes fuera del SMP.
Organizacin fsica de
plataformas paralelas
Modelo ideal: PRAM (parallel R.A. Machine). Toda
operacin de acceso a memoria se completa en un
perodo de reloj -- no hay jerarqua de memoria (irreal
pero sencillo).
OK para ver si un algoritmo tiene suficiente paralelismo.
Disear una estrategia para el Algoritmo paralelo: primero un
alg. PRAM, luego preocuparse de los tienmpos de
memoria/comunicacin (a veces funciona)
EREW PRAM
CREW PRAM
ERCW PRAM
CRCW PRAM
C: concurrente, E:Exclusiva, R: lectura, W: escritura
Redes de interconexin
Estaticas vs dinmicas
Topologa 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 comunicacin en
computacin 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.:


Topologa se asume irrelevante.
Modelo ab :

Usualmente a >> b >> tiempo por flop.
Un mensaje largo es menos costoso que varios cortos.


Costo de un mensaje puede ser de cientos o miles de flops.
Leccin: Se necesita un ratio computacin-a-
comunicacin grande para ser eficiente.
Tiempo = latencia + n*costo_por_word
= latencia + n/ancho_de_banda
Tiempo = a + n*b
a + n*b << n*(a + 1*b)
Parametros Alfa-Beta en
Mquinas reales
Nmeros obtenidos
empricamente
mquina a b
T3E/Shm 1.2 0.003
T3E/MPI 6.7 0.003
IBM/LAPI 9.4 0.003
IBM/MPI 7.6 0.004
Quadrics/Get 3.267 0.00498
Quadrics/Shm 1.3 0.005
Quadrics/MPI 7.3 0.005
Myrinet/GM 7.7 0.005
Myrinet/MPI 7.2 0.006
Dolphin/MPI 7.767 0.00529
Giganet/VIPL 3.0 0.010
GigE/VIPL 4.6 0.008
GigE/MPI 5.854 0.00872
a es latencia en s
b es ancho de banda
en s por byte
Qu tan bien el modelo
Tiempo = a + n*b
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 segn 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 ms complejos.
Muchos factores: el programador no
controla exactamente en que parte de la
memoria va su programa; consistencia del
cache es casi impredecible; contencin.
Se adapta el mismo modelo simplificado
que para pase de mensajes, pero sabiendo
que a/b es mucho menor en memoria
compartida que en paso de mensajes (a
tiende a cero)
Mapeo proceso-procesador
Nmeros: CPUs
Letras: procesos

(c) Mapeo natural
(d) Mapeo aleatorio
Ej.: Mapeo en hipercubo

También podría gustarte