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 pipeline-2
Técnica de pipeline Plataforma para aplicaciones tipo pipeline Suma de números Ordenación de números Generación de números primos Resolución de sistemas de ecuaciones lineales

3 proPar Técnica de pipeline pipeline-3
1776 Adam Smith “La riqueza de las naciones” => Alfileres Fábrica ejemplo: 18 tareas 10 obreros alfDía 4.800 AlfObrero ¿Artesano sólo y una a una? 20AlfDía un reto +Destreza -TiemposMuertos +Máquinas

4 proPar Técnica de pipeline pipeline-4
[8/10/ /10/2013]: 100 años de coches en serie Fábrica Ford T: piezas 84 tareas Se pasó de: 1 coche 12h 1 coche 1,5h 16 coches por minuto 2015

5 proPar Técnica de pipeline pipeline-5
Idea intuitiva => Cadena de montaje de coches Descomposición funcional Secuencia de datos homogéneos de entrada Peluquería Personas Despeinadas (Di) Lavar => Cortar => Marcar Proceso divisible en subtareas secuenciales (filtros) LCM 1Hora 3 Mill. 10:45 (1) D4,D3,D2 11:00 (2) D5,D4,D3 P1 10:30 (1) D3,D2 10:15 (1) D2 10:00 (1) 10:45 (3) (2) (1) D4 11:00 (4) (3) (2) D5 P1 10:40 (3) (2) (1) 10:00 (1) 10:30 (2) (1) D3 10:15 (1) D2 10:20 (2) (1) L C M 20’ 20’ ’ 1,5 M 1,5M ,5M Secuencial => 1P x Hora Vs Pipeline => 1P x 20’ Difícil equilibrar carga (L=C=M) # filtros no muy grande

6 proPar Técnica de pipeline pipeline-6
Ejemplo1: Filtrado de señal f0 fin fout f1 f3 f2 f(t) Señal filtrada f0 f1 f2 f3 t d1 d0 d2 d3 d2 d1 d3 d4 d5 d6 d1 d0 d2 d1 d0 d0 Hay otras dos formas de utilizar pipeline que veremos con ejemplos

7 proPar Plataformas para aplicaciones tipo pipeline pipeline-7
PC + ClearSpeed CSX700 [96+96] #9 TOP500 11/06 SAMBA 1993 128 PC + Placa con Transputers Switch

8 proPar Plataformas para aplicaciones tipo pipeline pipeline-8
pingpong ¿Latencia de Core0 al resto “nseg”? 93 78 72 71 void ping () { int i, dato; volatile canal_t *suCanalPtr; suCanalPtr = dirLocal( &canal, datos.destino); dato = 0; for (i=0; i<datos.numVeces; i++) { enviar (dato, suCanalPtr); dato++; } } 99 100 103 115 121 ¡ MPI => nseg !

9 proPar Suma de números pipeline-9
for (i=1; i<=N; i++) S = S + V[i]; Cada Pi tiene un dato “Vi” del vector ¿Seguro? rec(Pi, &S); env(Pd, S+Vi); P1 P2 P3 Pn V[] Un Maestro tiene el vector P1 P2 P3 Pn V[] V3,V2,V1 maestro V[] rec(Pi, &V); env(Pd, [V1+V2,[V3..Vn]]); ¡ Tantos Pi como números !

10 proPar Suma de números pipeline-10
Un Maestro tiene el vector y hay pocos procesos “P << N” 4 Cada Pi suma una rodaja de tamaño N / P = q M P1 P2 P3 P4 V[] + rec(Pi, &V); env(Pd, [Suma[V0..Vq],[Vq+1..Vn]]); ¿Mejorable? ¡ Sigo sin hacer trabajar en paralelo a los procesos ! Tengo que sumar K vectores de tamaño N “Muchas instancias del mismo problema” Otro uso pipeline

11 proPar Suma de números pipeline-11
Pipeline aplicado a muchas instancias del mismo problema M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 M P1 P2 P3 P4 ¿Equilibrado?

12 proPar Suma de números pipeline-12
Pipeline aplicado a muchas instancias del mismo problema ¡ Ojo con la relación cómputo/comunicación ! Procesos 1 2 4 MismoPC 12:271 6:492 4:334 Uno*PC 11:786 17:002 Dos*PC 9:208 Procesos 1 2 4 PC9 12:191 6:281 3:812 8 2:746 cuentaPar: Números dentro de diez rangos de valores V[ ] en 200 subV[ ]

13 proPar Ordenación de números pipeline-13
2 3 i for i:=2 to n do x := A[i] insertar (x, A[1..i]) Xmin max min maestro P1 P2 Pn 3 ¿Programa paralelo? 2 3 5 2 3 1 2 5 3 4 1 2 3 5

14 proPar Ordenación de números pipeline-14
Xmin max min maestro P1 P2 Pn /* Ordenación básica */ nProcsDer = n-i; rec (Pi-1, &Xmin); for (j=0; j<nProcsDer; j++) { rec (Pi-1, &X); if (X < Xmin) { env (Pi+1, &Xmin); Xmin = X; } else env (Pi+1, &X); } ¡ Queremos array ordenado en el maestro !

15 proPar Ordenación de números pipeline-15
Pn Anillo Array lineal bidireccional P1 M P2 P3 Pn OrdenacionBasica; env (Pi-1, &Xmin); for (j=0; j<nProcsDer; j++) { rec (Pi+1, &X); env (Pi-1, &X); } ¿Mejorable? ¿ Pipeline aplicado a muchas instancias del mismo problema ?

16 proPar Generación de números primos pipeline-16
Calcular los N primeros números primos (sean 10) Criba de Eratóstenes ¿ Programa paralelo ? ¿Con memoria común? rec (Pi-1, &primo); while (masNumeros) { rec (Pi-1, &n); if ((n%primo) != 0) env (Pi+1, &n); } ¿ Cuándo terminar ? ¿ Hace falta seguir ? ¿Pipeline? ,4,3,2 P1 M P2 Pn ,7,5,3 ...13,11,7,5 2 3 ¿ Con menos núcleos ?

17 proPar Generación de números primos pipeline-17
Calcular los números primos < N Criba de Eratóstenes i<N mejorable for (i=2; i<N; i++) primo[i] = TRUE; if (primo[i]) for (j=i+i;j<N;j+=i) primo[j] = FALSE; ¿ Programa paralelo ?

18 proPar Generación de números primos pipeline-18
Primera aproximación 0,N, … ,29,25,23,19,17,13,11,7,5 3 5 7 3 5 7,11,13,17,19,23,29, … ,N,0 7 11 ¿ Código paralelo ? ¡ Interbloqueo ! ¡ Ineficiente !

19 proPar Generación de números primos pipeline-19
if (yo == 0) { nPrimos = 1; // El 2 for (i=3; i<N; i+=2) env (Pder, &i); env (Pder, &cero); } rec (Pizq, &primo); while (primo != 0) { nPrimos++; // Imprimirlo? rec (Pizq, &num); while (num != 0) { if ((num%primo) != 0) env (Pder, &num); env (Pder, &num); // Cero env (Pder, &primo); // Cero reduce (+, &numPrimos, &totPrimos);

20 proPar Generación de números primos pipeline-20
Segunda aproximación: Dos fases y tablas de primos generadores FASE 1: Tabla de primos generadores N = 100 => => <10 ¿ Código paralelo ? 0,7,5 3 5 7 0,97, … ,29,25,23,19,17,13,11 FASE 2: Cálculo del resto de primos 3 5 7 7,0 ¿ Interbloqueo ? ¿ Ineficiente ?

21 proPar Generación de números primos pipeline-21
Tercera aproximación: Tabla de primos generadores conocida primosec [ ]720 … 5.453, 5.451 Números < … 5.477, 5.471 Primos calculados

22 proPar Generación de números primos pipeline-22
Tercera aproximación: Tabla de primos generadores conocida primosec [ ]720 … 5.453, 5.451 Números < … 5.477, 5.471 Primos calculados siguiente = primosConocidos[numPrimosConocidos-1]+2; cotaSerie = siguiente * siguiente; while (siguiente < cotaSerie) { if (esPrimo(siguiente)) { printf ("%9i", siguiente); total++; if ((total%10) == 0) printf ("\n"); } siguiente = siguiente + 2; ¡ 16:714 en PC1 ! ¿ Código paralelo ?

23 ? proPar Generación de números primos pipeline-23
Tercera aproximación paralelo: Reparto de la tabla de primos F0 [ ]360 … 5.451 … 5.471 F1 [ ]360 0, … … 5.479, 5.477, 5.471 ? F0 [...]180 F1 F2 F3 ¿ Código paralelo ?

24 ? proPar Generación de números primos pipeline-24 1 2 4 8 16 16:714
recibir (miIzquierda, &unNumero); while (unNumero != 0) { if (noDivisible(unNumero)) { if (soyElUltimo) { printf ("%9i", siguiente); total++; if ((total%10) == 0) printf ("\n"); } else enviar (miDerecha, &unNumero); } Procesos 1 2 4 8 16 primopar1 16:714 PC1  Con 720 primos conocidos Procesos 1 2 4 8 16 primopar2 220:454 Parallella  Con 720 primos An 1,68 0,84 En 2,72 0,68 4,35 0,54 6,84 0,43 18:892 ? 131:604 49:902 69:791 86:679 81:198 50:624 32:237

25 ? proPar Generación de números primos pipeline-25 18:892 49:902 69:791
86:679 Procesos 1 2 4 8 16 primopar1 16:714 PC1  Con 720 primos conocidos ? 131:604 81:198 50:624 32:237 An 1,68 0,84 En 2,72 0,68 4,35 0,54 6,84 0,43 primopar2 220:454 Parallella  Con 720 primos PC1 .. Con 720 primos conocidos ¡ Y buffer para 400 números ! Procesos 1 2 4 8 16 primopar2 16:714 An 1,63 0,81 En 2,59 0,65 3,85 0,48 5,55 0,35 10:257 ¡ En la práctica mejor ! 6:465 4:342 3:010

26 proPar Resolución de sistemas de ecuaciones lineales pipeline-26
an-1,0x0+an-1,1x1+an-1,2x an-1,n-1xn-1 = bn-1 . a2,0 x0+a2,1 x1+a2,2 x = b2 a1,0 x0+a1,1 x = b1 a0,0 x = b0 x0 x1 xi-1 b0 X0 = a0,0 b1-a1,0x0 X1 = a1,1 b2-a2,0x0-a2,1x1 X2 = a2,2 i-1 bi-ai,jxj j=0 Xi = ai,i ¿ Programa paralelo ?

27 proPar Resolución de sistemas de ecuaciones lineales pipeline-27
bi-ai,jxj j=0 Xi = ai,i x0 x1 xi-1 suma = 0; for (j=0; j<i; j++) { rec (Pi-1, &x[j]); env (Pi+1, &x[j]); suma+=a[i][j]*x[j]; } x[i]=(b[i]-suma)/a[i][i]; env (Pi+1, &x[i]); Pi P0 P1 P2 P3 P4 P5 FIN “Paso al siguiente antes de terminar anterior” Otro uso pipeline


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

Presentaciones similares


Anuncios Google