pro Par Curso 1920 5 1 Computadores Paralelos

  • Slides: 35
Download presentation
pro. Par Curso 19/20 5 1 Computadores Paralelos 4 2 Programación basada en paso

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

pro. Par Temario síncrona-2 5 Computación Síncrona 1 Sincronización (Barrera y su implementación) •

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

pro. Par Sincronización BARRERA síncrona-3 Muchas aplicaciones presentan sincronismo (75% según Fox, … 1994)

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

pro. Par Sincronización BARRERA síncrona-4

pro. Par Sincronización BARRERA síncrona-4

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

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

pro. Par Sincronización BARRERA (Ejemplo) síncrona-6 Epiphany 16 ARM A 9 Dual Core primopar

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

pro. Par Sincronización BARRERA (Escalabilidad) síncrona-7 for (i=0; i<100. 000; i++) MPI_Barrier (MPI_COMM_WORLD); PC

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

pro. Par BARRERA (Contador) síncrona-8 • Idea: Un contador cuenta los procesos que llegan

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

pro. Par BARRERA (Árbol) síncrona-9 • Idea: Fases de sincronismo parcial por parejas (Sean

pro. Par BARRERA (Árbol) síncrona-9 • Idea: Fases de sincronismo parcial por parejas (Sean 8 Pi) P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 Llegada a la Barrera ? Latencia (2 log n) ¿Código de cada Pi? Salida de la Barrera

pro. Par BARRERA (Árbol) síncrona-10 void barrera (int yo, int dist) { if (((yo/dist)%2)

pro. Par 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 ?

pro. Par BARRERA (Árbol) síncrona-11

pro. Par BARRERA (Árbol) síncrona-11

pro. Par BARRERA (Árbol) síncrona-12

pro. Par BARRERA (Árbol) síncrona-12

pro. Par BARRERA (Butterfly) síncrona-13 • Idea: Barreras parciales por parejas (Enlaces Full Duplex)

pro. Par BARRERA (Butterfly) síncrona-13 • Idea: Barreras parciales por parejas (Enlaces Full Duplex) P 0 P 1 P 2 P 3 P 4 Latencia (log n) ¿Código de cada Pi? P 5 P 6 P 7

pro. Par BARRERA (Butterfly) síncrona-14 P 0 P 1 P 2 P 3 P

pro. Par BARRERA (Butterfly) síncrona-14 P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 1 0 1 0 1 2 2 0 1 2 3 4 4 0 1 2 3 4 5 6 7 8 dist 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); } } ? grupos

pro. Par BARRERA (Problemática de Interbloqueo) síncrona-15 • Ojo en situaciones tipo Butterfly: P

pro. Par BARRERA (Problemática de Interbloqueo) síncrona-15 • Ojo en situaciones tipo Butterfly: P 0 Escritura cuidadosa P 1 P 2 P 3 P 4 P 5 P 6 P 7 Pi Pi+1 ---------- ---------enviar (Pi+1, &msj); enviar (Pi, &msj); recibir(Pi+1, &msj); recibir(Pi, &msj); ---------- ¡ Potencial interbloqueo ! enviar. Recibir Pi Pi+1 ---------- ---------enviar (Pi+1, &msj); recibir(Pi, &msj); recibir(Pi+1, &msj); enviar (Pi, &msj); ----------

pro. Par BARRERA (Problemática de Interbloqueo) síncrona-16 • MPI_Sendrecv ¡ 12 parámetros ! -----env.

pro. Par BARRERA (Problemática de Interbloqueo) síncrona-16 • MPI_Sendrecv ¡ 12 parámetros ! -----env. Rec(Pi+1, &msj. Ida, &msj. Vuelta); ------env. Rec(Pi, &msj. Ida, &msj. Vuelta); ------ • MPI_Sendrecv_replace ------env. Rec. R(Pi+1, &msj); ------- Pi-1 env. Rec. R(Pi-2, …); env. Rec. R(Pi, …); ------ env. Rec. R(Pi, &msj); ------- Pi env. Rec. R(Pi-1, …) env. Rec. R(Pi+1, …); Pi+1 ¡ Ojo ! env. Rec. R(Pi, …); env. Rec. R(Pi+2, …);

pro. Par Cálculos sincronizados (PRAM) síncrona-17 • Modelo Hardware (SIMD) • Los Pi trabajan

pro. Par Cálculos sincronizados (PRAM) síncrona-17 • Modelo Hardware (SIMD) • Los Pi trabajan síncronamente Programa Instrucciones • Los Pi activos ejecutan misma instrucción sobre distintos datos Reloj P 0 P 1 Pn Memoria Común EREW CREW ERCW CRCW • 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 Lectura y escritura Excluyente Lectura Concurrente y escritura Excluyente Lectura Excluyente y escritura Concurrente Lectura y escritura Concurrente

pro. Par Cálculos sincronizados (PRAM) síncrona-18 • Modelo Software (operador: forall) forall (i=j to

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

pro. Par Cálculos sincronizados (PRAM) síncrona-19 • Algunos ejemplos simples (Difusión de un dato):

pro. Par 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 = 2 i ) ? 5 P 0 P 1 5 Replicar D 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). . . int A[N]; 5 5 P 0 P 1 5 Pn-1 Muy lento O(N) Puedo hacerlo en paralelo

pro. Par Cálculos sincronizados (PRAM) síncrona-20 • Idea: Usar más Pi según se van

pro. Par Cálculos sincronizados (PRAM) síncrona-20 • Idea: Usar más Pi según se van teniendo copias nuevas en A 5 5 5 5 P 0 inicio P 0 P 1 paso 0 P 1 P 2 P 3 paso 1 P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 paso 2 (con N=8) Complejidad (log N) A[0] = D; a=0; b=1; log. N for (i=0; i< ? ; i++) log. N a=b; b<<1; 2 ai 2 bi+1 forall (j= ? ; j< ? ; j++) A[ ? ] = A[ ? ]; jj j-2 j-ai // Inicio // Pasos // Difusión // paralel

pro. Par Cálculos sincronizados (PRAM) síncrona-21 • Algunos ejemplos simples (Suma de un vector):

pro. Par Cálculos sincronizados (PRAM) síncrona-21 • 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 ¿ Código paralelo ? Idea: Usar un vector auxiliar (A) 1 2 3 4 5 6 7 8 V P 0 P 7 1 2 3 4 5 6 7 8 A P 1 P 3 P 5 P 7 3 7 11 15 A P 3 P 7 10 26 A P 7 36 A

pro. Par Cálculos sincronizados (PRAM) síncrona-22 • Algunos ejemplos simples (Suma de un vector):

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

pro. Par Cálculos sincronizados (PRAM) A 32 0 1 2 3 4 5 6

pro. Par Cálculos sincronizados (PRAM) A 32 0 1 2 3 4 5 6 7 síncrona-23 8 9 ------- 15 NVIDIA GEFORCE GTX 660 2 GB GDDR 5 960 núcleos 1, 03 GHz |V| = 30. 000. 128 GPU 1 core GPU 960 cores PC 8 1 core Tiempo 7: 653. 659 14. 947 106. 600 * 512 *7

pro. Par Problema de la distribución del calor síncrona-24 • Barra con temperatura en

pro. Par Problema de la distribución del calor síncrona-24 • Barra con temperatura en los extremos (1 D): ¿Temperatura interior? 20º 100º ¿Calor o Tibieza? 0 1 ¿Modelo de difusión del calor? Ta Tb Tc Tb se ve influido por Ta y Tc Tb (Ta + Tc) / 2 2 3 ¿Cuándo terminar? : • Num. Iteraciones N-1 N • cota. Error <

pro. Par Problema de la distribución del calor síncrona-25 #define N 100000 #define P

pro. Par Problema de la distribución del calor síncrona-25 #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); }

pro. Par Problema de la distribución del calor síncrona-26 100 iteraciones 20. 0000000 18.

pro. Par Problema de la distribución del calor síncrona-26 100 iteraciones 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. 000 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

pro. Par Problema de la distribución del calor síncrona-27 • Placa con temperatura en

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

pro. Par Problema de la distribución del calor síncrona-28 • Placa con temperatura en

pro. Par Problema de la distribución del calor síncrona-28 • Placa con temperatura en los bordes (2 D): ¿Temperatura interior? ¿ cota. Error < ? • • 200 x 200 puntos cambios. Color < 21 164. 000 iteraciones 457: 883 (seg: mseg)

pro. Par Problema de la distribución del calor síncrona-29 • Zona con temperatura en

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

pro. Par Problema de la distribución del calor síncrona-30 for (i=1; i<num. Iter; i++){

pro. Par Problema de la distribución del calor síncrona-30 for (i=1; i<num. Iter; 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 ¿ Terminación por cota de Error ? Local

pro. Par Problema de la distribución del calor síncrona-31 • Particionamiento block P 0

pro. Par Problema de la distribución del calor síncrona-31 • Particionamiento block P 0 P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P 10 P 11 P 0 P 15 strip P 12 P 13 P 14 P 15 P 9 Matriz de 32 x 32 4 msj de 8 puntos vs 2 msj de 32 puntos ¡ Comunicación con 4 vecinos ! ¡ Comunicación con 2 vecinos !

pro. Par Problema de la distribución del calor síncrona-32 • Particionamiento

pro. Par Problema de la distribución del calor síncrona-32 • Particionamiento

pro. Par Problema de la distribución del calor síncrona-33 • ¡ Ojo al partir

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

pro. Par Problema de la distribución del calor síncrona-34 0 1 esclavo 1 8

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

pro. Par Problema de la distribución del calor síncrona-35 • 386 x 386, dibujar.

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