La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 Computadores Paralelos

Presentaciones similares


Presentación del tema: "proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 Computadores Paralelos"— Transcripción de la presentación:

1 proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 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, …

2 proPar 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

3 proPar Sincronización BARRERA síncrona-3
Muchas aplicaciones presentan sincronismo (75% según Fox, … 1994) MPI_Comm_size (MPI_COMM_WORLD, &numProcesos); // Computar todos paso 1 MPI_Barrier (MPI_COMM_WORLD); // Computar todos paso 2 6 int pvm_barrier( char *group, int count ) PVM

4 proPar Sincronización BARRERA síncrona-4

5 proPar Sincronización BARRERA síncrona-5
Princeton Application Repository for Shared-Memory Computers

6 proPar Sincronización BARRERA (Ejemplo) síncrona-6
ARM A9 Dual Core Epiphany 16 1GB SDRAM primopar load (“primopar”,4,4, …); read (&datos); for (i=1; i<16; i++) total[0] += total[i]; yo = …; // 0..15 datos.total[yo] = misPrimos(yo); if (yo==0) datos.computando = 0; struct { int total[16]; int computando; } datos; datos.computando = 1; while (datos.computando) struct { int total[16]; } datos; yo = …; // 0..15 barrier_init(…); datos.total[yo] = misPrimos(yo); barrier (…); if (yo==0) datos.computando = 0; datos.computando = 1; load (“primopar”,4,4, …); while (datos.computando) read (&datos); for (i=1; i<16; i++) total[0] += total[i]; yo = …; // 0..15 datos.total[yo] = misPrimos(yo); load (“primopar”,4,4, …); read (&datos); for (i=1; i<16; i++) total[0] += total[i]; load (“primopar”,4,4, …); sleep(10);// ¿Funcionará? read (&datos); for (i=1; i<16; i++) total[0] += total[i];

7 proPar Sincronización BARRERA (Escalabilidad) síncrona-7
for (i=0; i< ; i++) MPI_Barrier (MPI_COMM_WORLD); PC #Pi µseg 1 2 3 4 5 6 7 8 10 11 9 12 16 20 24 28 32 36 40 48 80 146 319 395 372 1026 1104 664 661 744 619 Parallella => 16Pi => 0,994 µseg PC9 => 4Pi [104]; 8Pi[385] y 16Pi[1242]

8 proPar BARRERA (Contador) síncrona-8
Idea: Un contador cuenta los procesos que llegan a la barrera ¿Dónde reside? Proceso gestor de grupos ¿Memoria común? //barrier(4) P2 P1 P3 P0 1 2 3 4 5 Pg send(Pg, 4) recv(Pg) send(Pg, 4) recv(Pg) send(Pg, 4) recv(Pg) send(Pg, 4) recv(Pg) 1 X 2 X 3 X ¿Código de Pg? Latencia O(n)

9 proPar BARRERA (Árbol) síncrona-9
Idea: Fases de sincronismo parcial por parejas (Sean 8 Pi) P0 P1 P2 P3 P4 P5 P6 P7 Llegada a la Barrera ? Latencia (2 log n) Salida de la Barrera ¿Código de cada Pi?

10 proPar BARRERA (Árbol) síncrona-10
void barrera (int yo, int dist) { if (((yo/dist)%2) == 0) { recibir (yo+dist, &msj); if (dist<N/2) barrera (yo, dist*2); enviar (yo+dist, &msj); } else { enviar (yo-dist, &msj); recibir (yo-dist, &msj); } //barrera (yo, 1); ¿ Sin recursividad ?

11 proPar BARRERA (Árbol) síncrona-11

12 proPar BARRERA (Árbol) síncrona-12

13 proPar BARRERA (Butterfly) síncrona-13
Idea: Barreras parciales por parejas (Enlaces Full Duplex) P0 P1 P2 P3 P4 P5 P6 P7 Latencia (log n) ¿Código de cada Pi?

14 proPar BARRERA (Butterfly) síncrona-14
1 2 3 4 5 6 7 dist grupos 8 ? void barrera (void) { for (dist=1; dist<N; dist*=2) if ( (yo%(dist*2)) < dist) { enviar (yo+dist, &msj); recibir (yo+dist, &msj); } else { recibir (yo-dist, &msj); enviar (yo-dist, &msj); } }

15 proPar BARRERA (Problemática de Interbloqueo) síncrona-15
Ojo en situaciones tipo Butterfly: P0 P1 P2 P3 P4 P5 P6 P7 Pi Pi+1 enviar (Pi+1, &msj); enviar (Pi, &msj); recibir(Pi+1, &msj); recibir(Pi, &msj); ¡ Potencial interbloqueo ! Escritura cuidadosa enviarRecibir Pi Pi+1 enviar (Pi+1, &msj); recibir(Pi, &msj); recibir(Pi+1, &msj); enviar (Pi, &msj);

16 proPar BARRERA (Problemática de Interbloqueo) síncrona-16
MPI_Sendrecv ¡ 12 parámetros ! ------ envRec(Pi+1, &msjIda, &msjVuelta); envRec(Pi, &msjIda, MPI_Sendrecv_replace envRecR(Pi+1, &msj); envRecR(Pi, &msj); Pi-1 Pi Pi+1 envRecR(Pi-2,…); envRecR(Pi-1,…) envRecR(Pi, …); envRecR(Pi, …); envRecR(Pi+1,…); envRecR(Pi+2,…); ¡ Ojo !

17 proPar Cálculos sincronizados (PRAM) síncrona-17
Modelo Hardware (SIMD) 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 Programa P0 P1 Pn Reloj Instrucciones Memoria Común EREW Lectura y escritura Excluyente CREW Lectura Concurrente y escritura Excluyente ERCW Lectura Excluyente y escritura Concurrente CRCW Lectura y escritura Concurrente

18 proPar Cálculos sincronizados (PRAM) síncrona-18
Modelo Software (operador: forall) forall (i=j to k [by delta]) {operaciones ejecutadas por Pi[P0..Pn]} s=0; for (i=0; i<10; i++) s = s + v[i]; forall (i=0; i<4; i++) t[i] = s + v[i]; forall (i=2; i<4; i++) Q(i); fuera del forall secuencial P0 P0, P1, P2 y P3 P2 y P3 Sólo válido si CRCW

19 proPar Cálculos sincronizados (PRAM) síncrona-19
Algunos ejemplos simples (Difusión de un dato): ¿ D = 5, N Pi quieren leerlo y máquina EREW ( N = 2i ) ? 5 P0 P Pn-1 int A[N]; 5 Replicar D 5 P0 P Pn-1 forall (i=0;i<N;i++) if (D==0) ... for (i=0;i<N;i++) A[i] = D; forall (i=0;i<N;i++) if (A[i]==0) ... Muy lento O(N) Puedo hacerlo en paralelo

20 proPar Cálculos sincronizados (PRAM) síncrona-20
Idea: Usar más Pi según se van teniendo copias nuevas en A 5 P0 inicio 5 5 P0 paso 0 P1 5 P0 paso 1 P1 P2 P3 5 P0 paso 2 (con N=8) P1 P2 P3 P4 P5 P6 P7 Complejidad (log N) A[0] = D; // Inicio for (i=0;i< ? ;i++) // Pasos forall (j= ? ;j< ? ;j++) // Difusión A[ ? ] = A[ ? ]; // paralela a=0; b=1; a=b; b<<1; logN 2i 2i+1 j-2i j logN a b j-a j

21 proPar Cálculos sincronizados (PRAM) síncrona-21
Algunos ejemplos simples (Suma de un vector): Restricción: |V| = 2i <= N V0 V1 V2 V3 V4 V5 V6 V7 V01 V23 V45 V67 V V47 V07 1 2 3 4 5 6 7 8 V A P0 P7 3 7 11 15 A P1 P3 P5 P7 10 26 A P3 P7 ¿ Código paralelo ? 36 A P7 Idea: Usar un vector auxiliar (A)

22 proPar Cálculos sincronizados (PRAM) síncrona-22
Algunos ejemplos simples (Suma de un vector): Restricción: |V| = 2i <= N ¿ Código definitivo ? 1 2 3 4 5 6 7 8 V A P0 P7 forall (i=0;i<N;i++) A[i] = V[i]; for (i=1;i<=logN;i++) forall (j=2i-1; j<N; j+=2i) A[j]=A[j]+A[j-2i-1]; 3 7 11 15 A P1 P3 P5 P7 10 26 A P3 P7 36 A P7 ¿ Realista ?

23 proPar Cálculos sincronizados (PRAM) síncrona-23
1 2 3 4 5 6 7 8 9 15 NVIDIA GEFORCE GTX 660 2GB GDDR núcleos 1,03 GHz Tiempo 7: 14.947 GPU 1 core GPU 960 cores |V| = * 512 * 7 PC8 1 core

24 proPar Problema de la distribución del calor síncrona-24
Barra con temperatura en los extremos (1D): ¿Temperatura interior? 20º 100º ¿Modelo de difusión del calor? ¿Calor o Tibieza? Ta Tb Tc Tb se ve influido por Ta y Tc 1 Tb  (Ta + Tc) / 2 2 3 ¿Cuándo terminar?: NumIteraciones cotaError <  N N-1

25 proPar Problema de la distribución del calor síncrona-25
#define N #define P int main (int argc, char *argv[]) { int i, t; float x[P], y[P]; x[0] = y[0] = 20.0; x[P-1] = y[P-1] = 100.0; for (i=1; i<P-1; i++) x[i] = 0.0; for (t=1; t<=N; t+=2) { for (i=1; i<P-1; i++) y[i] = 0.5 * (x[i-1]+x[i+1]); x[i] = 0.5 * (y[i-1]+y[i+1]); } // imprimir los valores de temperaturas exit (0);

26 proPar Problema de la distribución del calor síncrona-26
100 iteraciones iteraciones

27 proPar Problema de la distribución del calor síncrona-27
Placa con temperatura en los bordes (2D): ¿Temperatura interior?

28 proPar Problema de la distribución del calor síncrona-28
Placa con temperatura en los bordes (2D): ¿Temperatura interior? 200 x 200 puntos cambiosColor < 21 iteraciones 457:883 (seg:mseg) ¿ cotaError <  ?

29 proPar Problema de la distribución del calor síncrona-29
Zona con temperatura en los bordes (2D): ¿Puedo pasar? Aguanto hasta 71,5º Aguanto hasta 71º Aguanto hasta 71,25º ¿Seguro? Cambios<6 ¿Código paralelo?

30 proPar Problema de la distribución del calor síncrona-30
for (i=1; i<numIter; 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); } Barrera Local ¿ Terminación por cota de Error ?

31 proPar Problema de la distribución del calor síncrona-31
Particionamiento P0 P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 block strip P9 4 msj de 8 puntos vs 2 msj de 32 puntos Matriz de 32x32 ¡ Comunicación con 4 vecinos ! ¡ Comunicación con 2 vecinos !

32 proPar Problema de la distribución del calor síncrona-32
Particionamiento

33 proPar Problema de la distribución del calor síncrona-33
¡ Ojo al partir ! (Fila de puntos fantasma) Proceso Pi Puntos fantasmas Proceso Pi+1

34 proPar Problema de la distribución del calor síncrona-34
8 1 9 16 17 24 25 32 33 esclavo 1 esclavo 2 esclavo 3 esclavo 4 ¿ Cómo de bueno ?

35 proPar Problema de la distribución del calor síncrona-35
386x386, dibujarCada 300 iteraciones, Cambios <= 20 de 0,0001 1 2 3 4 5 6 7 8 97:910 65:611 57:813 54:434 62:929 68:140 0,75 0,57 0,45 0,26 0,18 P Tiempo En PC9 1 2 3 4 5 6 7 8 131:860 81:109 67:914 72:952 80:066 76:599 0,81 0,65 0,45 0,26 0,22 P Tiempo En PC1 [PC2 PC3] FIN ? 1_PC1 + 4_PC2 3_PC1 + 4_PC2 5_PC1 + 4_PC2 ? 8 164:432 0,10 4_PC1 + 3_PC2 + 2PC3 8 188:184 0,09 1_PC1 + 4_PC2 + 4PC3 12 157:314 0,07 5_PC1 + 4_PC2 + 4PC3


Descargar ppt "proPar Curso 18/19 5 4 2, 3, 2 2, 4 3 Computadores Paralelos"

Presentaciones similares


Anuncios Google