PROGRAMACIN PARALELA Tema 3 Rutinas bsicas de comunicacin
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 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 0 1 2 . . . . Coste: (p-1)(ts+ntw) 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 Coste: enviar datos a (r-1) mod p en otro caso si r=origen+ (p-1)/2 (ts+ntw) recibir datos de (r-1) mod p En red hay colisiones: en otro caso recibir datos de (r+1) mod p (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 Coste: (p-1)(ts+ntw+ntc) ¿Posible reducir computación? 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 000 3 2 3 1 100 010 001 3 3 6 2 2 2 3 111 si r=0 para i=0, 1, . . . , log p-1 enviar dato a 2 i en otro caso recibir dato s=min { i / 2 i >r} para i=s, s+1, . . . , log p-1 enviar dato r+ 2 i 3 3 4 110 101 011 0 7 3 1 2 3 5 1 Coste: 2 log p (ts+ntw) ¿en red? Programación Paralela Rutinas Básicas de Comunicación 11
Difusión simple. Hipercubo 101 3 2 1 001 111 100 3 6 3 3 2 2 2 3 011 000 110 3 010 0 7 3 4 2 3 1 3 5 1 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 000 1 2 3 100 010 001 1 1 2 110 101 011 1 111 si r=0 para i=log p-1, . . . , 0 recibir dato de 2 i combinar en otro caso s=min { i / 2 i >r} para i=log p-1, . . . , s recibir dato de r+ 2 i combinar enviar dato a r - 2 s-1 Coste: log p (ts+tw +ts) Programación Paralela Rutinas Básicas de Comunicación 13
Difusión múltiple. Hipercubo 3 6 1 3 7 tam=1 2 3 2 pos=r*b 1 2 nodo=r 2 2 4 5 3 para i=0, 1, . . . , log p-1 3 1 bit=nodo mod 2 0 1 1 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 Coste: enviar datos pos a pos+tam*b-1 a nodo r-tam pos=pos-tam*b 2 log p ts+2(p-1)ntw nodo=nodo div 2 tam=tam*2 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 Coste: en otro caso si i<>r-1 recibir datos de i-1, j 2 (√p-1) (ts+ntw ) enviar datos a i+1, j en otro caso recibir datos de r-2, j 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 si i<r/2 y i<j y j=r-1 y i<>0 enviar a 0, 1 recibir de i, j-1 enviar a 1, 0 recibir de i+1, j si i>=r/2 y i>j y j=0 y i=r-1 si i=r-1 y j<>r-1 enviar a i-1, j recibir de i, j+1 enviar a r-1, r-2 si i<r/2 y i<j y j<>r-1 y i=0 recibir de i-1, j enviar a r-2, r-1 recibir de i, j-1 si i>=r/2 y i>j y j=0 y i<>r-1 si i=j y i<r/2 enviar a i, j+1 recibir de i, j+1 enviar a i, j+1 recibir de i+1, j recibir de i-1, j enviar a i-1, j si i<r/2 y i<j y j<>r-1 y i<>0 enviar a i+1, j enviar a i, j-1 recibir de i, j-1 si i>=r/2 y i>j y j<>0 y i=r-1 enviar a i+1, j enviar a i, j+1 recibir de i, j+1 si i=j y i>=r/2 recibir de i+1, j si i>=r/2 y i<j y j=r-1 enviar a i, j-1 enviar a i-1, j recibir de i+1, j recibir de i-1, j enviar a i+1, j si i<r/2 y i>=j y j=0 si i>=r/2 y i>j y j<>0 y i<>r-1 enviar a i-1, j enviar a i, j+1 recibir de i-1, j recibir de i, j-1 recibir de i, j+1 enviar a i-1, j enviar a i+1, j si i>=r/2 y i<j y j<>r-1 enviar a i, j-1 si i<r/2 y i<j y j=r-1 y i=0 recibir de i, j+1 recibir de i+1, j recibir de i-1, j recibir de i, j-1 si i<r/2 y i>=j y j<>0 enviar a i-1, j enviar a i+1, j recibir de i-1, j recibir de i, j-1 enviar a i+1, j enviar a i, j+1 recibir de i, j+1 Programación Paralela Rutinas Básicas de Comunicación 16 enviar a i, j-1
- Slides: 16