La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Procesamiento ParaleloCurso 13/14 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva,

Presentaciones similares


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

1 Procesamiento ParaleloCurso 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 3, 2 4 4

2 Procesamiento ParaleloTemarioordenación-2 5Algoritmos de ordenación 1Introducción 2Comparar e intercambiar 3Burbuja y transposición par-impar 4Ordenación bidimensional 5Ordenación por Mezcla 6QuickSort 7Ordenación y Mezcla bitonic 8Counting, Radix y Sample

3 proParIntroducciónordenación-3 ¿Coste de ordenar (seg:mSeg)? Burbuja SelecDir InserDir quickSort 4:054 1:956 1:444 0:146 1976 Wirth Pascal CDC 6400 V[512] ¿Conclusiones? quickSort más rápido y comparativamente mejor según aumenta V[] ¿Acelaración alcanzable? O(log n) con n procesadores ¡difícil! ¿Ordenación externa? 42.000 3:400 0:745 0:368 0:004 84.000 13:530 2:972 1:477 0:013 168.000 54:064 11:844 5:865 0:025 Burbuja SelecDir InserDir quickSort proPar C Core 2 Quad Q6600 2007 -O3 O(n 2 ) O(nlogn) 40.000.0006:084 80.000.00012:588

4 proParIntroducciónordenación-4 * 20.000 Pentium D 230.000.000 29.000 quickSort * 2.400 5121.200.000 QuadCore 582.000.000 Core i7 3ª generación 1.400.000.000 2012

5 proParIntroducciónordenación-5 http://sortbenchmark.org/ Tesis: Algoritmos de Ordenación Conscientes de la Arquitectura y las Características de los Datos Dani Jiménez González – UPC – Mayo 2004

6 proParIntroducciónordenación-6 Rank Sort: Dificultad de alcanzar O(log n) con n procesadores Idea: Ubicar cada elemento de A[] en su hueco en B[] 1015433825402 A B 1015 433825402 for (i=0; i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/7/1714722/slides/slide_6.jpg", "name": "proParIntroducciónordenación-6 Rank Sort: Dificultad de alcanzar O(log n) con n procesadores Idea: Ubicar cada elemento de A[] en su hueco en B[] 1015433825402 A B 1015 433825402 for (i=0; i

7 proParIntroducciónordenación-7 Rank Sort: ¿Alcanzable O(log n) con más de n procesadores? 1015433825402 A B 10 forall (i=0; i { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.es/7/1714722/slides/slide_7.jpg", "name": "proParIntroducciónordenación-7 Rank Sort: ¿Alcanzable O(log n) con más de n procesadores.", "description": "1015433825402 A B 10 forall (i=0; i

8 proParIntroducciónordenación-8 Rank Sort: Alcanzable O(log n) con n 2 procesadores 101543382540 0/1 0/1/2 0/1/2/3/4 ¡ Eficiencia por los suelos y modelo memoria común ! 0 10 1 0 0 1 1 0 2 0 2

9 proParComparar e intercambiarordenación-9 Evita tener array auxiliar ---------- if (A[i] > A[j]) { tmp = A[j]; A[j] = A[i]; A[i] = tmp; } ---------- Código básico 1015433825402 A ij 4151033825402 A ¿Paralelizar con paso mensajes? 1015433825402 A Supongamos número por Pi B ¿Cómo sería el código básico? 410840 104840 4108401533225

10 A B Versión 1 proParComparar e intercambiar (dos versiones)ordenación-10 AB env (P b, &A); rec (P b, &A); rec (P a, &A); if (A > B) { env (P a, &B); B = A; } else env (P a, &A); > A B Versión 2 >> env (P b, &A); rec (P b, &B); if (A>B) A = B; rec (P a, &A); env (P a, &B); if (A>B) B = A; ¿ (A>B) igual resultado en P a y P b ?

11 Versión 1 88 50 28 25 98 80 43 42 Números originales Números originales proParComparar e intercambiar (agrupar)ordenación-11 V[N] y P procesadores => N/P números por Pi 88 50 28 25 98 88 80 50 43 42 28 25 Mezcla 43 42 28 25 Números finales Números finales Devolver los menores 512 1284 Cada Pi mantiene su grupo ordenado ¿Necesidades de memoria?

12 Versión 2 88 50 28 25 98 80 43 42 Números originales Números originales proParComparar e intercambiar (agrupar)ordenación-12 V[N] y P procesadores => N/P números por Pi 88 50 28 25 98 80 43 42 98 88 80 50 43 42 28 25 Mezcla 98 88 80 50 43 42 28 25 512 1284 Guardar los mayores Guardar los menores

13 proParBurbuja y...............ordenación-13 Idea: Pasadas y en cada una intercambios => Mayores colocándose for (i=n-1; i>0; i--) for (j=0; j A[j+1]) swap(A[j], A[j+1]); 42185736241857362148573621485736 21458736 21457836 21457386 21457368 En la primera pasada, el mayor en su sitio 12457368 12457368 Segunda pasada ¿ Paralelizable ?

14 proParBurbuja y...............ordenación-14 Idea: Solapar pasadas pipeline 421857362418573621485736 Puedo iniciar pasada 2 1 1 12 12485736 12458736 12457836 12457386 12453768 21 213 213 2134 ¿ Código paralelo ?

15 proPar Burbuja y Transposición par-impar ordenación-15 Idea: Pasadas de dos fases (intercambio par + intercambio impar) 2418573621458376 42185736 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 Par P i pares con P i+1 (derecha) Impar P i impares con P i+1 (derecha) 12453867 12435687 12345678 12345678 ¿ Código paralelo ? ¿Cuándo parar? n-1 caso peor O(n) Pasada 1 Pasada 2

16 proPar Burbuja y Transposición par-impar ordenación-16 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 // Fase Par recibir(Pder, vOtro); enviar (Pder, vMio ); mezclar(vMio, vOtro, vAux); menores(vAux, vMio); // Fase Impar if (yo > 0) recibir(Pizq, vOtro); enviar (Pizq, vMio ); mezclar(vMio, vOtro, vAux); mayores(vAux, vMio); } Proceso Par // Fase Par enviar (Pizq, vMio ); recibir(Pizq, vOtro ); mezclar(vMio, vOtro, vAux); mayores(vAux, vMio); // Fase Impar if (Pder < numProcesos) enviar (Pder, vOtro); recibir(Pder, vMio ); mezclar(vMio, vOtro, vAux); menores(vAux, vMio); } Proceso Impar P 0 => Reparte (scatter) vector,...................., recoge (gather) P i =>..... Ordena burbuja su trozo y transposición..... ?

17 proPar Burbuja y Transposición par-impar ordenación-17 0:856 ¿Cada vez mejor? ¿Truco? 0:0040:0130:025quickSort Sin embargo ¿Cuáles son los tiempos esperados? 42.000 3:400 84.000 13:530 168.000 54:064burbuSec burbuPar 2 4 6 8 0:224 0:113 0:074 3:421 0:865 0:407 13:693 3:434 1:557 0:2350:897 Eficiencia 1,97 3,94 5,79 7,53

18 proPar Ordenación bidimensional ordenación-18 Si disponemos de una malla 2D ¿Cómo ordenar? Como si fuese un array linealserpenteante y con transposición par-impar O(n) No se aprovecha la malla ¿Límite inferior en ordenación malla 2D => n * n ? 2( n –1) => O( n) Scherson, Sen y Shamir (1986) shearsort esquilar n (log n + 1)

19 proPar Ordenación bidimensional shearsort ordenación-19 4148 10313 7151 2 16 5 126119 Fases 1,2,3,4,..., M Impares: 1,3,5,... => Por filas tipo serpenteante Pares: 2,4,6,... => Por columnas menores arriba 248 161310 157 14 3 15 121196 1 Filas min max max min 2 Cols 147 258 12119 3 6 14 16131015 min max 134 865 91112 2 7 10 16151314 4 Cols 123 876 91011 4 5 12 16151413 5 Filas log n + 1 134 865 91112 7 2 14 16151310 3 Filas ¿ Código paralelo ?

20 proPar Ordenación bidimensional shearsort ordenación-20 4148 10313 7151 2 16 5 126119 Fases 1,2,3,4,..., M Impares: 1,3,5,... => Por filas tipo serpenteante Pares: 2,4,6,... => Por columnas menores arriba 248 161310 157 14 3 15 121196 1 Filas min max max min 2 Cols 147 258 12119 3 6 14 16131015 min max log n + 1 134 865 91112 7 2 14 16151310 3 Filas ¿Cuáles son los tiempos esperados? 42.025 [205x205] 3:410 84.100 [290x290] 13:610 168.100 [410x410] 54:250burbuSec shearSec 0:2860:6701:8860:0060:0130:022quickSec

21 proPar Ordenación bidimensional transponer ordenación-21 Idea: Haciendo transposición, podemos trabajar sólo por filas CFCFF 248 161310 157 14 3 15 121196 2161 4135 8107 12 11 9 143156 T 1212 4511 789 16 13 10 361415 FcFc T TFTFcFc FTFcFc TF Asignación de una fila por Procesador Transposición eficiente con MPI_ALL_TO_ALL

22 proPar Ordenación por Mezcla ordenación-22 ¿ Código ? P0P0 P1P1 P0P0 P3P3 P2P2 P5P5 P4P4 P7P7 P6P6 P0P0 P4P4 P0P0 P2P2 P4P4 P6P6 P0P0 P2P2 P4P4 P6P6 P0P0 P4P4 P0P0 Idea: Dividir y mezclar las partes (Similar a divide y vencerás) 10113578142615163111249 dividir 10113578142615163111249 10113578142615163111249 13511121011427816361549 mezclar 13512111011428716315694 13105114872161563121194 75211413108964316151211 43218765121110916151413 Muy ineficiente

23 proPar Ordenación por Mezcla ordenación-23 Mejora: Dividir en trozos grandes y mezclar las partes 800.000 100.000 Ordeno partes (rankSort) Proceso de mezcla ¿ Cómo afectará el número de trozos? ¿Paralelo? ¿Secuencial?

24 proPar Ordenación por Mezcla ordenación-24 quickSort en 0,013 rankPar 2:209 0:561 0:261 0:159 0:107 0:082 0:067 0:061 0:046 Medida de tiempos variando el número de trozos rankSec 84.000 TrozosTiempo 1 2 4 6 8 10 12 14 16 20 100 200 300 500 1000 2000 8:822 4:414 2:214 1:479 1:110 0:888 0:744 0:638 0:560 0:451 0:112 0:081 0:108 0:189 0:368

25 proPar Quicksort Paralelo ordenación-25 Divide y vencerás tipo Árbol 42785136 pivote 4 21347856 27 12347856 756 P0P0 P0P0 P4P4 P0P0 P2P2 P4P4 P6P6 P4P4 P5P5 Componer las sublistas ordenadas ¿Paralelización?

26 proPar Quicksort Paralelo ordenación-26 Ubicando pivotes en su destino final 2785136 pivote 4 213785627 1 3 856 6 4 27 1358 6 Puede que muy desequilibrado

27 proPar Quicksort Paralelo ordenación-27 Reparto de trabajo modelo Granja de Procesadores ¿ Mejor con hipercubo ?

28 P0P0 P1P1 P2P2 P3P3 Una fase quickSort proPar Quicksort Paralelo ordenación-28 Otra idea más adaptada a modelo cluster: El array repartido entre todos los nodos (antes y después) P0P0 P1P1 P2P2 P3P3 pivote > > > > P0P0 P1P1 P2P2 P3P3 Un intercambio > ¡ Repetir a las partes !

29 proPar Quicksort Paralelo ordenación-29 Otra idea más adaptada a modelo cluster (Bis): El array repartido entre todos los nodos (antes y después) P0P0 P1P1 P2P2 P3P3 > P0P0 P1P1 P2P2 P3P3 Una fase quickSort > > > > P0P0 P1P1 P2P2 P3P3 Más grandes Un intercambio Mayores Menores Más pequeños ¡ Ordenar cada trozo ! ¿ Sublistas equilibradas?

30 proPar Quicksort Paralelo ordenación-30 Medida de tiempos variando #muestras para elegir el pivote [PC9] mpirun –np 8 quickPar 40.000.000 #muestras #muestras TiempoOcupación Min.. Max% 10 1:4173.004.488.. 7.579.69451,6% 100 1:2114.313.335.. 6.344.51926,9% 1.000 1:0264.652.843.. 5.186.3496,9% 4.000 0:9994.917.253.. 5.084.6561,7% Escalabilidad: quickPar 40.000.000 4.000 Cluster 6:027 3:235 1:981 1:995 1:558 1:360 1 2 4 8 16 32 Núcleos TiempoEfici. 0,93 0,76 0,38 0,24 0,14 PC9 6:236 3:238 1:863 0:999 TiempoEfici. 0,96 0,84 0,78

31 proPar Ordenación y Mezcla bitonic ordenación-31 Secuencia bitónica estricta (dos sublistas: una crece y otra decrece) A = {a 0, a 1, a 2, a 3,..., a n-2, a n-1 } tal que: a 0 a i+1 > a i+2 >... > a n-2 > a n-1 Ejemplo: 0156791213151411108432 Compara y swap a i a i+n/2 2 secuencias bitónicas 0156743215141110891213 ¿Recursivo?

32 proPar Ordenación y Mezcla bitonic ordenación-32 Ejemplos visuales:

33 proPar Ordenación y Mezcla bitonic ordenación-33 Mezcla bitónica ejemplo completo 0156791213151411108432 015674321514111089121301327456891110151412130132547689111012131514 0123456789101112131415 ¿Código paralelo?

34 proPar Ordenación y Mezcla bitonic ordenación-34 Obtener secuencia bitónica a partir de secuencia desordenada SecBitónicas de 2 elementos ?

35 proPar Ordenación y Mezcla bitonic ordenación-35 Construcción de secuencia bitónica a partir del desorden 7161309125158310211414 1713609125815103211144 sort 1671312950381015141142 1613712905831015141124 sort 0156791213151411108432 1650129713141110153842 1056791213141510114832 sort salto 1 2 1 4 2 1

36 proPar Ordenación y Mezcla bitonic ordenación-36 Código secuencial sin optimizar

37 proPar Ordenación y Mezcla bitonic ordenación-37 Tiempos de ejecución CardinalidadquickSort 262.144 1.048.576 8.388.608 33.554.432 0:031 0:129 1:170 5:048 bitonic 0:225 1:028 12:464 60:635 rankSec* 0:435 shearSec 3:883 5:420 160:891 60:014

38 proPar Counting sort (secuencial) ordenación-38 Idea: Ranksort O(n 2 ) puede convertirse en O(n) con ciertas condiciones 0<=a i <2 P A[] 17025375140106322574111256142310 031 ¿Cuántas veces aparece cada número? 00000000 C[] 0 7 ++ 35843243 201712432292723 Sumas prefijo C[] Ubicar A[] en B[] B[] 031 ¿Código paralelo?O (n+p+n) ¡Estable! 201712 332292723 0 -- 11 1 191622 3 42 10 1 00022225335511111154477 6 67 17124 029272320

39 proPar Ordenación y Mezcla bitonic ordenación-39 Tiempos de ejecución bitonic 0:225 1:028 12:464 60:635 CardinalidadquickSort 262.144 1.048.576 8.388.608 33.554.432 0:031 0:129 1:170 5:048 counting1 0:015 0:117 1:547 7:059 Counting1 Cardinalidad C[] = A[] counting2 0:007 0:034 0:456 2:061 Counting2 Cardinalidad C[] = A[] / 4

40 proPar Radix sort ordenación-40 Idea: Claves numéricas con una base => ordenar por dígitos 315 219 649 479 100 922 863 632 219649479315863922632100219649479315863922632100 ¿Counting sort? 479 863 649 632 922 219 315 100 Counting sort 922 863 649 632 479 315 219 100 Counting sort Vector C[] pequeño Estabilidad fundamental

41 proPar Radix sort ordenación-41 Jugar con más de un bit por pasada 101001 100001 111010 101011 011011 001101 101110 110011 011111 011010 110010 110111 110001 100101 100111 000101 101011 011011 110011 011111 110111 100111 111010 101110 011010 110010 101001 100001 001101 110001 100101 000101 011111 101110 001101 101011 011011 111010 011010 101001 110111 100111 100101 000101 110011 110010 100001 110001 111010 110111 110011 110010 110001 101110 101011 101001 100111 100101 100001 011111 011011 011010 001101 000101

42 0 10.000 19.999 0 9.999 90.000 99.999 M-1 P0P0 P1P1 P9P9 proPar Sample sort ordenación-42 Ordenar mi cubeta Recolectar en mi cubeta Para todo Pi Problemática de la ordenación mediante cubetas: Puede que muy desequilibrado Meter en cada cubeta misma cantidad de números ¡ Elegir 9 elementos frontera equiespaciados !

43 proPar Sample sort ordenación-43 10 10.000.000 1.000.000 100 1000 9 Mezcla

44 proPar Sample sort ordenación-44 FIN Datos antiguos


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

Presentaciones similares


Anuncios Google