PROGRAMACIÓN PARALELA Tema 3: Rutinas básicas de comunicación
description
Transcript of PROGRAMACIÓN PARALELA Tema 3: Rutinas básicas de comunicación
Programación Paralela Rutinas Básicas de Comunicación 1
PROGRAMACIÓN PARALELA
Tema 3: Rutinas básicas de comunicación
• Kumar, Grama, Gupta, Karypis, cap 3
Programación Paralela Rutinas Básicas de Comunicación 2
Rutinas básicas
• Difusión simple: enviar el mismo dato de un procesador origen al resto de procesadores (MPI_Bcast)
• Acumulación simple: combinar datos de todos los procesadores en uno destino (MPI_Reduce)
• Difusión múltiple: enviar datos de cada procesador (el mismo desde cada procesador) a todos los demás (MPI_Alltoall)
• Acumulación múltiple: combinar datos de todos los procesadores en todos ellos (MPI_Reduce_scatter)
• Difusión personalizada: enviar datos diferentes de un procesador origen al resto de procesadores (MPI_Scatter)
• Difusión múltiple personalizada: enviar datos diferentes de cada procesador a todos los demás
• Reducción prefija: acumular en cada procesador i datos del 0 al i-1 MPI_Scan( )
Programación Paralela Rutinas Básicas de Comunicación 3
Rutinas básicas
• Muchas de ellas se encuentran en las librerías de comunicación.
• Pueden no estar implementadas de manera eficiente para el sistema donde nos encontramos.
• Otras pueden no encontrarse o ser necesario programarlas para intercalarlas con computación.
Programación Paralela Rutinas Básicas de Comunicación 4
Modelo de comunicación
• Se considera topología lógica de procesos.
• Tiempo de inicio de comunicación, ts , (start-up time).
• Tiempo de transferencia de un dato, tw , (word-sending time).
• Coste de transferencia de n datos: ts+twn
• Normalmente ts >>> tw >>> tc
En memoria compartida la diferencia es menor,en redes o sistemas distribuidos mayor.
Programación Paralela Rutinas Básicas de Comunicación 5
Topologías más usuales
• Anillo unidireccional o bidireccional simplepipeline
• Malla o toroescalabletrabajo por filas o columnas
diámetro moderado
• Hipercubodiámetro mínimo
• Árbol de distintos gradospipelinediámetro moderado
Programación Paralela Rutinas Básicas de Comunicación 6
Difusión simple. Anillo unidireccionalEn paralelo para r=0,1,...,p-1
En Pr:si r=origen
enviar datos a (r+1) mod pen otro caso si r<>(origen-1) mod p
recibir datos de (r-1) mod penviar datos a (r+1) mod p
en otro casorecibir datos de (r-1) mod p
0 p-121 .......
Coste:
(p-1)(ts+ntw)
Programación Paralela Rutinas Básicas de Comunicación 7
Difusión simple. Anillo bidireccionalEn paralelo para r=0,1,...,p-1
En Pr: si r=origen enviar datos a (r+1) mod p enviar datos a (r-1) mod p
en otro caso si r entre (origen+1) mod p y (origen+ (p-1)/2 - 1 )mod p recibir datos de (r-1) mod p enviar datos a (r+1) mod p
en otro caso si r entre (origen+ (p-1)/2 - 2 )mod p (origen-1) mod p recibir datos de (r+1) mod p enviar datos a (r-1) mod p
en otro caso si r=origen+ (p-1)/2 recibir datos de (r-1) mod p
en otro caso recibir datos de (r+1) mod p
Coste:
(p-1)/2 (ts+ntw)
En red hay colisiones:
(p-1)/2 ts+(p-1)ntw
Programación Paralela Rutinas Básicas de Comunicación 8
Comunicaciones
• Hay que comprobar si puede haber bloqueo: Puede depender el tipo de comunicación que se use.
• El coste de las comunicaciones.Puede depender del tipo de sistema en que estamos.
• Si permite solapar comunicación y computación.Depende del algoritmo donde se use la rutina.
¿En los ejemplos anteriores?
Programación Paralela Rutinas Básicas de Comunicación 9
Acumulación simple. Anillo unidireccionalEn paralelo para r=0,1,...,p-1
En Pr:si r=(destino+1) mod p
enviar datos a (r+1) mod pen otro caso si r<>destino
recibir datos de (r-1) mod pcombinar datosenviar datos a (r+1) mod p
en otro casorecibir datos de (r-1) mod pcombinar datos
¿Posible reducir computación?
Coste:
(p-1)(ts+ntw+ntc)
Programación Paralela Rutinas Básicas de Comunicación 10
Difusión múltiple. Anillo bidireccionalEn paralelo para r=0,1,...,p-1
En Pr: para i=1,2,...,p-1 si r es par recibir dato (r-i) mod p de (r-1) mod p enviar dato (r-i+1) mod p a (r+1) mod p en otro caso enviar dato (r-i+1) mod p a (r+1) mod p recibir dato (r-i) mod p de (r-1) mod p
Coste:
2(p-1)(ts+ntw)
¿en red?
Programación Paralela Rutinas Básicas de Comunicación 11
Difusión simple. Hipercubo
000
011101110
001010100
111
3 2
3 3
3
2
1
0
76
54
32
11
23 3
33
2
Coste:
2 log p (ts+ntw)
¿en red?
si r=0
para i=0,1,...,log p-1
enviar dato a 2i
en otro caso
recibir dato
s=min { i / 2i >r}
para i=s,s+1,...,log p-1
enviar dato r+ 2i
Programación Paralela Rutinas Básicas de Comunicación 12
Difusión simple. Hipercubo
101
110000011
100111001
010
3 2
3 3
3
2
1
0
76
54
32
1
1
2
3 3
33
2
Desde origen distinto de cero, hacer or exclusivo con el nuevo origen
Programación Paralela Rutinas Básicas de Comunicación 13
Acumulación simple. Hipercubo
000
011101110
001010100
111
1 2
1 1
1
2
3
Coste:
log p (ts+tw +ts)
si r=0
para i=log p-1,...,0
recibir dato de 2i
combinar
en otro caso
s=min { i / 2i >r}
para i=log p-1,...,s
recibir dato de r+ 2i
combinar
enviar dato a r - 2s-1
Programación Paralela Rutinas Básicas de Comunicación 14
Difusión múltiple. Hipercubo
0
76
54
32
11
23 3
33
2
Coste:
2 log p ts+2(p-1)ntw
tam=1
pos=r*b
nodo=r
para i=0,1,...,log p-1
bit=nodo mod 2
si bit=0
enviar datos pos a pos+tam*b-1 a nodo r+tam
recibir datos pos+tam*b a pos+2*tam*b-1 de nodo r+tam
en otro caso
recibir datos pos-tam*b a pos-1 de nodo r-tam
enviar datos pos a pos+tam*b-1 a nodo r-tam
pos=pos-tam*b
nodo=nodo div 2
tam=tam*2
1
1
122
Programación Paralela Rutinas Básicas de Comunicación 15
Difusión simple. Malla
Coste:
2 (√p-1) (ts+ntw )
En paralelo para i=0,1,...,r-1;j=0,1,...,r-1; con r*r=p; en cada Pij
si i=0 y j=0
enviar datos a 0,1
enviar datos a 1,0
en otro caso si i=0 y j<>r-1
recibir datos de 0,j-1
enviar datos a 0,j+1
enviar datos a 1,j
en otro caso si i=0
recibir datos de 0,r-2
enviar datos a 1,r-1
en otro caso si i<>r-1
recibir datos de i-1,j
enviar datos a i+1,j
en otro caso
recibir datos de r-2,j
Programación Paralela Rutinas Básicas de Comunicación 16
Difusión de procesadores en la diagonal principal a la fila y columna
si i=0 y j=0
enviar a 0,1
enviar a 1,0
si i=r-1 y j<>r-1
enviar a r-1,r-2
enviar a r-2,r-1
si i=j y i<r/2
enviar a i,j+1
enviar a i-1,j
enviar a i,j-1
enviar a i+1,j
si i=j y i>=r/2
enviar a i,j-1
enviar a i+1,j
enviar a i,j+1
enviar a i-1,j
si i<r/2 y i<j y j=r-1 y i=0
recibir de i,j-1
recibir de i+1,j
si i<r/2 y i<j y j=r-1 y i<>0
recibir de i,j-1
recibir de i+1,j
enviar a i-1,j
si i<r/2 y i<j y j<>r-1 y i=0
recibir de i,j-1
enviar a i,j+1
recibir de i+1,j
si i<r/2 y i<j y j<>r-1 y i<>0
recibir de i,j-1
enviar a i,j+1
recibir de i+1,j
enviar a i-1,j
si i<r/2 y i>=j y j=0
recibir de i-1,j
enviar a i+1,j
recibir de i,j+1
si i<r/2 y i>=j y j<>0
recibir de i-1,j
enviar a i+1,j
recibir de i,j+1
enviar a i,j-1
si i>=r/2 y i>j y j=0 y i=r-1
recibir de i,j+1
recibir de i-1,j
si i>=r/2 y i>j y j=0 y i<>r-1
recibir de i,j+1
recibir de i-1,j
enviar a i+1,j
si i>=r/2 y i>j y j<>0 y i=r-1
recibir de i,j+1
enviar a i,j-1
recibir de i-1,j
si i>=r/2 y i>j y j<>0 y i<>r-1
recibir de i,j+1
enviar a i,j-1
recibir de i-1,j
enviar a i+1,j
si i>=r/2 y i<j y j=r-1
recibir de i+1,j
enviar a i-1,j
recibir de i,j-1
si i>=r/2 y i<j y j<>r-1
recibir de i+1,j
enviar a i-1,j
recibir de i,j-1
enviar a i,j+1