160 likes | 325 Views
PROGRAMACIÓN PARALELA Tema 3: Rutinas básicas de comunicación. Kumar, Grama, Gupta, Karypis, cap 3. Rutinas básicas. Difusión simple: enviar el mismo dato de un procesador origen al resto de procesadores (MPI_Bcast)
E N D
PROGRAMACIÓN PARALELATema 3: Rutinas básicas de comunicación • Kumar, Grama, Gupta, Karypis, cap 3 Programación Paralela Rutinas Básicas de Comunicación 1
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 2
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 3
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 4
Topologías más usuales • Anillo unidireccional o bidireccional • simple • pipeline • Malla o toro • escalable • trabajo por filas o columnas • diámetro moderado • Hipercubo • diámetro mínimo • Árbol de distintos grados • pipeline • diámetro moderado Programación Paralela Rutinas Básicas de Comunicación 5
Difusión simple. Anillo unidireccional En paralelo para r=0,1,...,p-1 En Pr: si r=origen enviar datos a (r+1) mod p en otro caso si r<>(origen-1) mod p recibir datos de (r-1) mod p enviar datos a (r+1) mod p en otro caso recibir datos de (r-1) mod p Coste: (p-1)(ts+ntw) ....... 0 1 2 p-1 Programación Paralela Rutinas Básicas de Comunicación 6
Difusión simple. Anillo bidireccional En 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 7
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 8
Acumulación simple. Anillo unidireccional En paralelo para r=0,1,...,p-1 En Pr: si r=(destino+1) mod p enviar datos a (r+1) mod p en otro caso si r<>destino recibir datos de (r-1) mod p combinar datos enviar datos a (r+1) mod p en otro caso recibir datos de (r-1) mod p combinar datos ¿Posible reducir computación? Coste: (p-1)(ts+ntw+ntc) Programación Paralela Rutinas Básicas de Comunicación 9
Difusión múltiple. Anillo bidireccional En 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 10
Difusión simple. Hipercubo 6 7 3 3 000 1 2 3 3 2 100 010 001 3 3 2 2 2 4 5 3 110 101 011 3 3 0 1 1 111 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 Coste: 2 log p (ts+ntw) ¿en red? Programación Paralela Rutinas Básicas de Comunicación 11
Difusión simple. Hipercubo 6 7 3 3 101 1 2 2 3 2 3 2 001 111 100 3 3 2 4 5 3 1 011 000 110 3 3 0 1 010 Desde origen distinto de cero, hacer or exclusivo con el nuevo origen Programación Paralela Rutinas Básicas de Comunicación 12
Acumulación simple. Hipercubo 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 000 3 1 2 100 010 001 1 1 2 110 101 011 1 111 Coste: log p (ts+tw +ts) Programación Paralela Rutinas Básicas de Comunicación 13
Difusión múltiple. Hipercubo 1 6 7 3 3 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 2 3 2 1 2 2 2 4 5 3 3 1 0 1 1 Coste: 2 log p ts+2(p-1)ntw Programación Paralela Rutinas Básicas de Comunicación 14
Difusión simple. Malla 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 Coste: 2 (√p-1) (ts+ntw ) Programación Paralela Rutinas Básicas de Comunicación 15
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 Programación Paralela Rutinas Básicas de Comunicación 16