La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,

Presentaciones similares


Presentación del tema: "ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,"— Transcripción de la presentación:

1 proParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás, Pipeline, Síncrona, Equilibrado de carga y Terminación 4Programación basada en memoria común 5Algoritmos y aplicaciones Ordenación, … 4 4 2, 3, 2 2, 2 5 4

2 proParTemariosíncrona-2 5Computación Síncrona 1Sincronización (Barrera y su implementación) Contador Árbol Mariposa Butterfly Problemática de interbloqueo 2Cálculos sincronizados (PRAM) Modelo Hardware / Software Algunos ejemplos simples 3Ejemplo adaptado a CLUSTER Problema de la distribución del calor

3 proParSincronización BARRERAsíncrona-3 Muchas aplicaciones presentan sincronismo ---------- 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 (75% según Fox, … 1994)

4 proParSincronización BARRERAsíncrona-4

5 proParSincronización BARRERAsíncrona-5 Princeton Application Repository for Shared-Memory Computers

6 proParBARRERA (Contador)síncrona-6 Idea: Un contador cuenta los procesos que llegan a la barrera //barrier(4) P2P2 P1P1 P3P3 P0P0 0 1 2345 0 Pg ¿Dónde reside? Proceso gestor de grupos send(Pg, 4) recv(Pg) 3 X send(Pg, 4) recv(Pg) 2 X send(Pg, 4) recv(Pg) 1 X send(Pg, 4) recv(Pg) 0 ¿Código de Pg? Latencia O(n)

7 proParBARRERA (Árbol)síncrona-7 Idea: Fases de sincronismo parcial por parejas (Sean 8 Pi) P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 Llegada a la Barrera Salida de la Barrera ¿Código de cada Pi? Latencia (2 log n)

8 proParBARRERA (Árbol)síncrona-8 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 ?

9 proParBARRERA (Árbol)síncrona-9

10 proParBARRERA (Butterfly)síncrona-10 Idea: Barreras parciales por parejas (Enlaces Full Duplex) P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 Latencia (log n) ¿Código de cada Pi?

11 proParBARRERA (Butterfly)síncrona-11 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); } ? P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 01230123 01234567 01010101 dist 1 2 4 grupos 2 4 8

12 proParBARRERA (Problemática de Interbloqueo)síncrona-12 Ojo en situaciones tipo Butterfly: P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 P i P i+1 ------------------- ------------------ enviar (P i+1, &msj); enviar (P i, &msj); recibir(P i+1, &msj); recibir(P i, &msj); ------------------- ------------------ ¡ Potencial interbloqueo ! P i P i+1 ------------------- ------------------ enviar (P i+1, &msj); recibir(P i, &msj); recibir(P i+1, &msj); enviar (P i, &msj); ------------------- ------------------ Escritura cuidadosa enviarRecibir

13 proParBARRERA (Problemática de Interbloqueo)síncrona-13 MPI_Sendrecv ------ envRec(P i+1, &msjIda, &msjVuelta); ------ envRec(P i, &msjIda, &msjVuelta); ------ ¡ 12 parámetros ! MPI_Sendrecv_replace ------- envRecR(P i+1, &msj); ------- envRecR(P i, &msj); ------- P i-1 PiPi P i+1 envRecR(P i-2,…);envRecR(P i-1,…)envRecR(P i, …); envRecR(P i, …);envRecR(P i+1,…);envRecR(P i+2,…); ¡ Ojo !

14 proParCálculos sincronizados (PRAM)síncrona-14 Modelo Hardware (SIMD) Programa P0P0 P1P1 PnPn Reloj Instrucciones Memoria Común 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 EREWLectura y escritura Excluyente CREWLectura Concurrente y escritura Excluyente ERCWLectura Excluyente y escritura Concurrente CRCWLectura y escritura Concurrente

15 proParCálculos sincronizados (PRAM)síncrona-15 Modelo Software (operador: forall) forall (i=j to k [by delta]) {operaciones ejecutadas por P i [P 0..P n ]} 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); forall (i=0; i<4; i++) s = s + v[i]; fuera del forall secuencial P 0 P 0, P 1, P 2 y P 3 P 2 y P 3 Sólo válido si CRCW

16 proParCálculos sincronizados (PRAM)síncrona-16 Algunos ejemplos simples (Difusión de un dato): ¿ D = 5, N Pi quieren leerlo y máquina EREW ( N = 2 i ) ? 5 P 0 P 1 P n-1 int A[N]; 5 Replicar D 555 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

17 proParCálculos sincronizados (PRAM)síncrona-17 Idea: Usar más Pi según se van teniendo copias nuevas en A 5 P0P0 inicio 55 P0P0 paso 0 5 P1P1 555 P0P0 paso 1 5 P1P1 P2P2 P3P3 555 P0P0 paso 2 (con N=8) 5 P1P1 P2P2 P3P3 5555 P4P4 P5P5 P6P6 P7P7 A[0] = D;// Inicio for (i=0;i< ? ;i++)// Pasos forall (j= ? ;j< ? ;j++)// Difusión A[ ? ] = A[ ? ];// paralela logN 2i2i 2 i+1 j-2 i j Complejidad (log N)

18 proParCálculos sincronizados (PRAM)síncrona-18 Algunos ejemplos simples (Suma de un vector):Restricción: |V| = 2 i <= N V 0 V 1 V 2 V 3 V 4 V 5 V 6 V 7 V 01 V 23 V 45 V 67 V 03 V 47 V 07 Idea: Usar un vector auxiliar (A) ¿ Código paralelo ? 12345678 V 12345678 A P0P0 P7P7 3 711 15 A P1P1 P3P3 P5P5 P7P7 10 26 A P3P3 P7P7 36 A P7P7

19 proParCálculos sincronizados (PRAM)síncrona-19 Algunos ejemplos simples (Suma de un vector):Restricción: |V| = 2 i <= N 12345678 V 12345678 A P0P0 P7P7 3 711 15 A P1P1 P3P3 P5P5 P7P7 10 26 A P3P3 P7P7 36 A P7P7 forall (i=0;i<N;i++) A[i] = V[i]; for (i=1;i<=logN;i++) forall (j=2 i -1; j<N; j+=2 i ) A[j]=A[j]+A[j-2 i-1 ]; ¿ Código definitivo ?

20 proParCálculos sincronizados (PRAM)síncrona-20 ¿Cómo simular el forall con modelo de paso de mensajes? ---------- forall (P 0..P n ) Q(i); ---------- //forall (P 0..P n ) Bcast(… 0, grupo); Q(i); Barrier(grupo); ---------- PiPi ?

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

22 proParProblema de la distribución del calorsíncrona-22 #define N 100000 #define P 100 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]); for (i=1; i<P-1; i++) x[i] = 0.5 * (y[i-1]+y[i+1]); } // imprimir los valores de temperaturas exit (0); }

23 proParProblema de la distribución del calorsíncrona-23 20.0000000 18.4082146 16.8476410 15.2870674 13.8165274 12.3459873 11.0141773 9.6823673 8.5232000 7.3640323 6.3945465 5.4250607 4.6460094 3.8669584 3.2655854 2.6642127 2.2183673 1.7725219 1.4551404 1.1377589 0.9208815 0.7040040 0.5617894 0.4195748 0.3301172 0.2406595 0.1867010 0.1327424 0.1015476 0.0703528 0.0530757 0.0357986 0.0266365 0.0174744 0.0128250 0.0081755 0.0059192 0.0036629 0.0026165 0.0015701 0.0011067 0.0006435 0.0004478 0.0002526 0.0001743 0.0000974 0.0000691 0.0000452 0.0000404 0.0000485 0.0000638 0.0001152 0.0001691 0.0003191 0.0004700 0.0008639 0.0012581 0.0022370 0.0032161 0.0055331 0.0078502 0.0130822 0.0183143 0.0295960 0.0408777 0.0641248 0.0873720 0.1331825 0.1789930 0.2653786 0.3517642 0.5077381 0.6637121 0.9335048 1.2032976 1.6505858 2.0978739 2.8089471 3.5200205 4.6044073 5.6887941 7.2757010 8.8626080 11.0918350 13.3210621 16.3279266 19.3347893 23.2300453 27.1253014 31.9727325 36.8201637 42.6160049 48.4118423 55.0708923 61.7299461 69.0826492 76.4353485 84.2382126 92.0410767 100.0000000 100 iteraciones 20.0000000 20.8079491 21.6158981 22.4238491 23.2318001 24.0397530 24.8477058 25.6556606 26.4636154 27.2715721 28.0795307 28.8874893 29.6954498 30.5034122 31.3113747 32.1193390 32.9273071 33.7352791 34.5432510 35.3512268 36.1592064 36.9671860 37.7751694 38.5831566 39.3911438 40.1991348 41.0071297 41.8151245 42.6231232 43.4311256 44.2391281 45.0471344 45.8551445 46.6631546 47.4711685 48.2791862 49.0872040 49.8952255 50.7032509 51.5112762 52.3193054 53.1273384 53.9353714 54.7434082 55.5514488 56.3594894 57.1675339 57.9755821 58.7836304 59.5916824 60.3997383 61.2077942 62.0158539 62.8239174 63.6319809 64.4400482 65.2481232 66.0562057 66.8642883 67.6723785 68.4804764 69.2885742 70.0966797 70.9047928 71.7129059 72.5210266 73.3291550 74.1372833 74.9454193 75.7535553 76.5616989 77.3698425 78.1779938 78.9861526 79.7943115 80.6024780 81.4106522 82.2188263 83.0270081 83.8351974 84.6433868 85.4515839 86.2597885 87.0679932 87.8762054 88.6844254 89.4926453 90.3008728 91.1091080 91.9173431 92.7255859 93.5338364 94.3420868 95.1503448 95.9586105 96.7668762 97.5751495 98.3834305 99.1917114 100.0000000 100.000 iteraciones

24 proParProblema de la distribución del calorsíncrona-24 Placa con temperatura en los bordes (2D): ¿Temperatura interior?

25 proParProblema de la distribución del calorsíncrona-25 Placa con temperatura en los bordes (2D): ¿Temperatura interior? 200 x 200 puntos cambiosColor < 21 164.000 iteraciones 457:883 (seg:mseg)

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

27 proParProblema de la distribución del calorsíncrona-27 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 ?

28 proParProblema de la distribución del calorsíncrona-28 Particionamiento P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 P8P8 P9P9 P 10 P 11 P 12 P 13 P 14 P 15 P0P0 P9P9 ¡ Comunicación con 4 vecinos !¡ Comunicación con 2 vecinos !

29 proParProblema de la distribución del calorsíncrona-29 Particionamiento

30 proParProblema de la distribución del calorsíncrona-30 ¡ Ojo al partir ! (Fila de puntos fantasma) Proceso P i Proceso P i+1 Puntos fantasmas FIN


Descargar ppt "ProParCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,"

Presentaciones similares


Anuncios Google