Title: Procesamiento ParaleloCurso 0809
1Procesamiento Paralelo Curso 08/09
- Computadores Paralelos
- Programación basada en paso de mensajes
- Técnicas básicas de programación paralela
- Compulsiva, Divide y Vencerás, Pipeline,
- Síncrona, Equilibrado de carga y Terminación
- Programación basada en memoria común
- Algoritmos y aplicaciones
- Ordenación,
2Procesamiento Paralelo Temario síncrona-2
- Computación Síncrona
- Sincronización (Barrera y su implementación)
- Contador
- Árbol
- Mariposa Butterfly
- Problemática de interbloqueo
- Cálculos sincronizados (PRAM)
- Modelo Hardware / Software
- Algunos ejemplos simples
- Ejemplo adaptado a CLUSTER
- Problema de la distribución del calor
3proPar Sincronización BARRERA síncrona-3
(75 según Fox, 1994)
Muchas aplicaciones presentan sincronismo
---------- MPI_Comm_size (MPI_COMM_WORLD,
numProcesos) ---------- // Computar todos paso
1 MPI_Barrier (MPI_COMM_WORLD) // Computar
todos paso 2
4proPar Sincronización BARRERA síncrona-4
5proPar BARRERA (Contador) síncrona-5
- Idea Un contador cuenta los procesos que
llegan a la barrera
Código de Pg?
6proPar BARRERA (Árbol) síncrona-6
- Idea Fases de sincronismo parcial por parejas
(Sean 8 Pi)
Código de cada Pi?
7proPar BARRERA (Árbol) síncrona-7
void barrera (int yo, int dist) if
((yo/dist)2) 0) recibir (yodist,
msj) if (distltN/2) barrera (yo, dist2)
enviar (yodist, msj) else
enviar (yo-dist, msj) recibir (yo-dist,
msj) //barrera (yo, 1)
8proPar BARRERA (Butterfly) síncrona-8
- Idea Barreras parciales por parejas (Enlaces
Full Duplex)
Código de cada Pi?
9proPar BARRERA (Butterfly) síncrona-9
void barrera (void) for (dist1 distltN
dist2) if ( (yo(dist2)) lt dist)
enviar (yodist, msj) recibir
(yodist, msj) else recibir
(yo-dist, msj) enviar (yo-dist,
msj)
10proPar BARRERA (Problemática de
Interbloqueo) síncrona-10
- Ojo en situaciones tipo Butterfly
Pi
Pi1 -------------------
------------------ enviar (Pi1, msj)
enviar (Pi, msj) recibir(Pi1, msj)
recibir(Pi, msj) -------------------
------------------
Pi
Pi1 -------------------
------------------ enviar (Pi1, msj)
recibir(Pi, msj) recibir(Pi1, msj)
enviar (Pi, msj) -------------------
------------------
11proPar BARRERA (Problemática de
Interbloqueo) síncrona-11
Ojo !
12proPar Cálculos sincronizados (PRAM) síncrona-12
- Los Pi trabajan síncronamente
- Los Pi activos ejecutan misma
- instrucción sobre distintos datos
- La instrucción move, add, función
- La propia inst. dice qué Pi activo
- No se pasa a siguiente instrucción
- hasta que todos acaban
EREW Lectura y escritura Excluyente CREW Lectura
Concurrente y escritura Excluyente ERCW Lectura
Excluyente y escritura Concurrente CRCW Lectura
y escritura Concurrente
13proPar Cálculos sincronizados (PRAM) síncrona-13
- Modelo Software (operador forall)
forall (ij to k by delta) operaciones
ejecutadas por Pi?P0..Pn
s0 for (i0 ilt10 i) s s vi forall
(i0 ilt4 i) ti s vi forall (i2
ilt4 i) Q(i) forall (i0 ilt4 i) s s
vi
fuera del forall secuencial P0
14proPar Cálculos sincronizados (PRAM) síncrona-14
- Algunos ejemplos simples (Difusión de un dato)
D 5, N Pi quieren leerlo y máquina EREW ( N
2i ) ?
forall (i0iltNi) if (D0) ...
for (i0iltNi) Ai D forall
(i0iltNi) if (Ai0) ...
15proPar Cálculos sincronizados (PRAM) síncrona-15
- Idea Usar más Pi según se van teniendo copias
nuevas en A
A0 D // Inicio for (i0ilt ?
i) // Pasos forall (j ? jlt ? j) //
Difusión A ? A ? // paralela
16proPar Cálculos sincronizados (PRAM) síncrona-16
Código paralelo ?
Idea Usar un vector auxiliar (A)
17proPar Cálculos sincronizados (PRAM) síncrona-17
Código definitivo ?
forall (i0iltNi) Ai Vi for
(i1iltlogNi) forall (j2i-1
jltN j2i) AjAjAj-2i-1
18proPar Cálculos sincronizados (PRAM) síncrona-18
- Cómo simular el forall con modelo de paso de
mensajes?
---------- ---------- forall (P0..Pn)
Q(i) ---------- ----------
19proPar Problema de la distribución del
calor síncrona-19
- Barra con temperatura en los extremos (1D)
Temperatura interior?
Modelo de difusión del calor?
Tb ? (Ta Tc) / 2
- Cuándo terminar?
- NumIteraciones
- cotaError lt ?
20proPar Problema de la distribución del
calor síncrona-20
define N 100000 define P 100 int main (int
argc, char argv) int i, t float xP,
yP x0 y0 20.0 xP-1
yP-1 100.0 for (i1 iltP-1 i) xi
0.0 for (t1 tltN t2) for (i1
iltP-1 i) yi 0.5 (xi-1xi1)
for (i1 iltP-1 i) xi 0.5
(yi-1yi1) // imprimir los valores de
temperaturas exit (0)
21proPar Problema de la distribución del
calor síncrona-21
22proPar Problema de la distribución del
calor síncrona-22
- Placa con temperatura en los bordes (2D)
Temperatura interior?
23proPar Problema de la distribución del
calor síncrona-23
- Placa con temperatura en los bordes (2D)
Temperatura interior?
- 200 x 200 puntos
- cambiosColor lt 21
- 164.000 iteraciones
- 457883 (segmseg)
24proPar Problema de la distribución del
calor síncrona-24
- Zona con temperatura en los bordes (2D)
Puedo pasar?
Seguro?
Código paralelo?
25proPar Problema de la distribución del
calor síncrona-25
for (i1 iltnumIter i) T (TN TS TE
TO) 0.25 send (PN, T) // send (PS, T)
// Envios no send (PE, T) // bloqueantes
send (PO, T) // recv (PN, TN) recv (PS,
TS) recv (PE, TE) recv (PO, TO)
Terminación por cota de Error ?
26proPar Problema de la distribución del
calor síncrona-26
27proPar Problema de la distribución del
calor síncrona-27
28proPar Problema de la distribución del
calor síncrona-28
- Ojo al partir ! (Fila de puntos fantasma)
Proceso Pi
Proceso Pi1
FIN