Post on 19-Jun-2015
description
PARALELIZACIÓN DE
ALGORITMOS DE
CLASIFICACIÓN
PALACIN PALACIOS, Pajuelo Daniel OSORIO TELLO, Jonathan Gustavo
Cerro de Pasco, Enero de 2010
.
Paralelización de Algoritmos de Clasificación
El problema de clasificación es un modelo en el ámbito de laprogramación. Esto se debe fundamentalmente a dos razones.
La primera es que en la práctica en una de las tareas más demandada en cualquier aplicación informática. Tanto es así que, el término ordenador hace referencia a este hecho.
La segundo, la ordenación de los datos es tan importante debido a que es la forma de organizar la información que permite la búsqueda y recuperación de la misma.
Operaciones básicas de la clasificación Paralela
En general los algoritmos de clasificación se basan en la operación de comparación, se conoce como comparación-intercambio. Al paralelizar un algoritmo secuencial es necesario decidir cómo se distribuyen los datos entre los procesadores.
Sistema Secuencial tanto los datos como el resultado se almacenan en la memoria del sistema.
Sistema Paralelo se pueden almacenar en la memoria de un único procesador o repartirlos entre la propia de cada uno de ellos.
Ordenación
Algoritmo ampliamente utilizado en programación paralela para distribuir datos.
Dos tipos de algoritmos:
Basados en comparación.○ Se basan en la operación comparar-intercambiar. ○ Límite inferior de complejidad: O(n * log n).
No basados en comparación.○ Basado en la representación de los números.○ Límite inferior de complejidad: O(n).
En ordenación secuencial los mejores algoritmos son O (n*log n). Ejemplo: Quicksort , Mergesort.
Con N procesadores, se desea O(log n).
Demostrado por Leighton 84, aunque con una elevada constante oculta en la demostración.
Ordenación
Características de la ordenación en paralelo Distribución de los datos (al principio / al final):
Todos los elementos en el mismo procesador.Cada procesador contiene un bloque de elementos.
○ Todos los elementos de Pi son menores que los de Pj si i < j.
Cómo se realizan las comparaciones:Cada procesador tiene un único elemento.Cada procesador posee un bloque de elementos.
Comparaciones: 1 elemento por procesador
Primer caso: sólo un procesador ordena las secuencias.
Ejemplo 1 :
Primer caso: sólo un procesador ordena las secuencias.
Iniciando
Nros designados a comprar
Comparaciones: 1 elementos en cada procesador
Segundo caso: ambos procesadores realizan la ordenación.
Ejemplo 2 :
Segundo caso: ambos procesadores realizan la ordenación.
Designados por la el usuario
Resultado Final OrdenadoNros designados a comprar
CLASIFICACION POR
INTERCAMBIO DIRECTO O BURBUJA
Este tipo de ordenamiento se basa fundamentalmente en un ordenamiento de tipo ascendente. Como su nombre lo indica, todo el ordenamiento es basado en una especie de inserción y el comportamiento interno del vector es como el de una burbuja.
El algoritmo se basa en el principio de comparar pares de elementos adyacentes eh intercambiarlos entre si hasta que estén todos ordenados
CLASIFICACIÓN POR INTERCAMBIO DIRECTO O
BURBUJA
1.1 Algoritmo secuencial La idea básica de este algoritmo es comparar parejas de elementos contiguos e intercambiarlos si es necesario
- Comparar pares de elementos contiguos.- Intercambiarlos si están desordenados.
MÉTODO 1 (Pseudocódigo)
Algoritmo Burbuja 1INICIO //Ingresa la cantidad de números leer N //Lectura del vector Desde i ← 1 hasta N hacer leer (X [i]) Fin desde //clasificación del vector Desde i ← 1 hasta N-1 hacer desde j ← 1 hasta N-1 hacer si X [j] > X [j+1] entonces //intercambiar
AUXI ← X [j] X [j] ← X [j+1] X [j+1] ← AUXI
fin si fin desde Fin desde //imprimir lista ordenada Desde j ← 1 hasta N hacer escribir (X [j]) Fin desdeFIN
PRUEBA DE PAPELN I J X [J] X [J+1] AUXI
111 2 3 4 5 6
9 3 4 -6 -8 15 9 3
993
2
3
3
99 4
9944
9 -6
99-6-6
4 9 -8
99-8
-8
5 9 15
6
15
9
9
9
9-8-63 4
N I J X [J] X [J+1] AUXI
121 2 3 4 5 6
3 4 -6 -8 9 15 3 4
2
3
3
44 -6
44-6-6
4 -8
44-8-8
4 4 94
5 9 15
6
15
4
4
9
94-83 -6
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
131 2 3 4 5 6
3 -6 -8 4 9 15 3 -6
33-6
2
3
-6
-83 -8
33-83
3 43
4 4 94
5 9 15
6
15
3
4
9
943-6 -8
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
141 2 3 4 5 6
-6 -8 3 4 9 15 -6 -8
-6-6-8
2
3
-8
-6-6 3
3
3 43
4 4 94
5 9 15
6
15
-6
4
9
943-8 -6
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
151 2 3 4 5 6
-6 -8 3 4 9 15 -8 -6
2
3
-8
-6-6 3
3
3 43
4 4 94
5 9 15
6
15
-6
4
9
943-8 -6
Lista Ordenada
15
PRUEBA DE PAPEL
El método de la burbuja es difícil de paralelizar, debido concretamente al los dos ‘FOR’ interno.
Este hecho se entiende mejor observando la operación comparación-intercambio en cada fase del algoritmo.
La burbuja compara todos los pares adyacentes en orden, con lo que el algoritmo es intrínsecamente secuencial. Por tanto, una paralelizarían de este algoritmo en esta forma, además de difícil resultará inadecuada.
¿Observación?
1.2 Transposición Impar - Par
Este método ordena N elementos en N fases (siendo N impar), y en cada fase se necesitan n/2 operaciones de comparación-intercambio, alternándose dos fases, la fase impar y la par. En la impar, los elementos en posiciones impares se comparan con sus vecinos de la derecha, y si no están ordenados se intercambian.
MÉTODO 2 (Pseudocódigo)
Algoritmo burbuja2INICIO leer N Desde i ← 1 hasta N hacer leer (X [i]) Fin desde Desde i ← 1 hasta N-1 hacer desde j ← 1 hasta N- i hacer si X [j] > X [j+1] entonces //intercambiar
AUXI ← X [j] X [j] ← X [j+1] X [j+1] ← AUXI
fin si fin desde Fin desde
//imprimir lista ordenada Desde j ← 1 hasta N hacer escribir (X [j]) Fin desdeFIN
N I J X [J] X [J+1] AUXI
111 2 3 4 5 6
9 3 4 -6 -8 15 9 3
993
2
3
3
99 4
9944
9 -6
99-6-6
4 9 -8
99-8
-8
5 9 15
6
15
9
9
9
9-8-63 4
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
121 2 3 4 5 6
3 4 -6 -8 9 15 3 4
2
3
3
44 -6
44-6-6
4 -8
44-8-8
4 4 94
6
15
4
4
9-83 -6
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
13
1 2 3 4 5 6
3 -6 -8 4 9 15 3 -6
33-6
2
3
-6
-83 -8
33-83
3 43
6
15
3
4 9-6 -8
N I J X [J] X [J+1] AUXI
14
1 2 3 4 5 6
-6 -8 3 4 9 15 -6 -8
-6-6-8
2-8
-6-6 3
3
6
15
-6
4 9-8
PRUEBA DE PAPEL
N I J X [J] X [J+1] AUXI
15
1 2 3 4 5 6
-8 -6 3 4 9 15
-8 -6
-8 3
6
15-6 4 9
Lista Ordenada
PRUEBA DE PAPEL
Este método es sencillo de paralelizar ya que durante cada fase, las operaciones de comparación-intercambio se pueden realizar simultáneamente.
Supóngase que se dispone de n procesadores, es decir, tantos como elementos a ordenar, y que se conectan en un anillo. Durante la fase impar los procesadores con etiqueta impar comparan e intercambian su elemento con el elemento del procesador vecino situado a su derecha, y a lo largo la fase par cada procesador con etiqueta par compara e intercambia su elemento con su vecino de la derecha.
¿Observación?
CLASIFICACION SHELL
CLASIFICACION SHELL
El ordenamiento shell, recibe este nombre en honor a su creador. Es un método de ordenamiento rápido y es de los más utilizados en la programación. Supongamos que se tiene un vector de 10 posiciones : 15 5 7 4 1 2 8 9 10 3El método shell busca primero la mitad del vector y hace una partición imaginaria así: 15 5 7 4 1 ¦ 2 8 9 10 3Luego empieza una serie de comparaciones. Primero compara el primero de la parte izquierda con el primero de la parte derecha. Si el de la derecha es menor, los cambia de posición, luego sigue las comparaciones con el resto de los datos de la derecha. 2 5 7 4 1 ¦ 15 8 9 10 3Una vez ha terminado la comparación pasa al siguiente término y repite la operación, y así hasta que termina con todos los datos que se encuentran a la izquierda.
Algoritmo Secuencia1
2 3 7 4 1 ¦ 15 8 9 10 5 2 3 5 4 1 ¦ 15 8 9 10 7Una vez realizado este procedimiento, se procede nuevamente a subdividir las particiones. 2 3 ¦ 5 4 1 ¦ 15 8 ¦ 9 10 7Nuevamente a cada una de las subpartes se le realiza el procedimiento anterior. 1 3 ¦ 5 4 2 ¦ 7 8 ¦ 15 10 9 1 2 ¦ 5 4 3 ¦ 7 8 ¦ 15 10 9 1 ¦ 2 ¦ 5 ¦ 4 3 ¦ 7 ¦ 8 ¦ 15 ¦ 10 9 1 ¦ 2 ¦ 3 ¦ 5 4 ¦ 7 ¦ 8 ¦ 9 ¦ 15 10 1 ¦ 2 ¦ 3 ¦ 5 ¦ 4 ¦ 7 ¦ 8 ¦ 9 ¦ 15 ¦ 10 1 ¦ 2 ¦ 3 ¦ 4 ¦ 5 ¦ 7 ¦ 8 ¦ 9 ¦ 10 ¦ 15Luego, al final quedarán comparándose casillas de un solo dato y al final el vector quedará ordenado así: 1 2 3 4 5 7 8 9 10 15
CLASIFICACION SHELL
INICIO leer N Desde i= 1 hasta N hacer leer x [i] Fin desde salto ← n \ 2 mientras salto > 0 hacer para i ← (salto + 1) hasta n j ← i - salto mientras j > 0 k ← j + salto auxi ← x(k) si x(j) <= x(k) entonces j ← 0
ORDENACION SHELL (Pseudocódigo)
si no x(k) ← x(j) x(j) ← auxi fin si j ← j - salto fin mientras fin para salto ← salto \ 2 fin mientrasFIN
salto i j k X(j) X(k) auxi
41 2 3 4 5 6
9 3 4 -6 -8 15
9 34-6 -8 15
3 1 94
5
-6
3
-6
9-6
-2
52 -8 -8
-8 3
-1
6 63 4 15 15
0
-3
PRUEBA DE PAPELsalto ← n \ 2 mientras salto > 0 hacer para i ← (salto + 1) hasta n j ← i - salto mientras j > 0 k ← j + salto auxi ← x(k) si x(j) <= x(k) entonces j ← 0
si no x(k) ← x(j) x(j) ← auxi fin si j ← j - salto fin mientras fin para salto ← salto \ 2 fin mientrasFIN
salto i j k X (j) X (k) auxi
1 2 3 4 5 6
-6 -8 4 9 3 15
93 4
1
-8 15-6
2 1 2 -6 -8 -8-8 -6
0
3 2 3 -6 4 40
4 3 4 4 9 90
5 4 5 9 3 33 9
3 4 4 3 3
3 42 3 3 3-60
6 5 6 9 15 15
00
si no x(k) ← x(j) x(j) ← auxi fin si j ← j - salto fin mientras fin para salto ← salto \ 2 fin mientrasFIN
salto ← n \ 2 mientras salto > 0 hacer para i ← (salto + 1) hasta n j ← i - salto mientras j > 0 k ← j + salto auxi ← x(k) si x(j) <= x(k) entonces j ← 0
Paralelización del algoritmo Shell en un hipercubo
Seguidamente se presenta la paralelización del método Shell para un hipercubo conectado.
Supóngase que n es el número de elementos a ordenar, d la dimensión del hipercubo y p = 2d el número de procesadores. Se asigna a cada procesador un bloque de n/p elementos. Mediante un anillo aplicado sobre un hipercubo se define el orden global de la secuencia ordenada. El algoritmo consta de dos fases:
1) En la primera, los procesadores que están lejos entre sí en el anillo clasifican sus elementos mediante operaciones de comparación-split.
2) Durante la segunda fase el algoritmo cambia a una clasificación por transposición impar-par. Como la primera fase del algoritmo mueve elementos cercanos a su posición final, el número de fases impares y pares realizadas en la segunda fase puede ser significativamente menor que p.
CLASIFICACION QUICKSORT
El ordenamiento de QuickSort es actualmente el más eficiente y veloz de los métodos de ordenamiento interno. Es también conocido con el nombre de rápido y de ordenamiento por partición en el mundo de habla hispana Su autor C.A. Hoare lo bautizó así.
Algoritmo de ordenamiento por el método de QuickSort Rápidorecursivo (A,N)
El algoritmo ordena los elementos del arreglo utilizando el método rápido de manera recursiva.
A es un arreglo de n elementos}Llamar al algoritmo REDUCERECURSIVO con 1 y N.
CLASIFICACION QUICKSORT
Algoritmo Secuencia1
INICIO leer N Desde i= 1 hasta N hacer leer x [i] Fin desde izquierdo ←alto derecha ← bajo a ← x (1) mientras izquierdo <= derecha hacer mientras x(izquierdo) < a y izquierdo < bajo izquierdo ← izquierdo +1 fin mientras mientras x(derecha) > a derecha ← derecha – 1 fin mientras
si esquierdo <= derecha entonces auxi ← x(izquierdo) x(izquierdo) ← x(derecha) x(derecha) ← auxi izquierdo ← izquierdo + 1 derecha ← derecha – 1 fin si fin mientras si izquierdo < bajo + 1 entonces auxi ← x (derecha) x (derecha) ← x (1) x (1) ← auxi si no auxi ← x (bajo) x (bajo) ← x (1) x (1) ← auxi fin siFIN
Paralelización del algoritmo Quisksort en un hipercubo
La formulación paralela del algoritmo quicksort sobre un hipercubo aprovecha las propiedades topológicas del hipercubo. Recuérdese que un hipercubo &dimensional puede dividirse en dos subcubos de dimensión (d-1) tal que cada procesador de un subcubo está conectado a un procesador del otro. Esta propiedad permite dividir el arreglo en dos mediante el pivote haciendo que cada partición esté en cada uno de los procesadores conectados de los subcubos.
Propiedad:
Un hipercubo de dimensión “d” puede dividirse en 2 hipercubos de dimensión (d-1) donde cada procesador de un subcubo está conectado a otro procesador del otro subcubo.
Formulación para hipercubo Paso del algoritmo:
Elegir un pivote y enviarlo por broadcast a los demás. Particionar el bloque local usando ese pivote. Los procesadores conectados a través del d-ésimo enlace
intercambian sus bloques de forma que uno de ellos se queda con los elementos menores que el pivote y el otro con los demás.
Resultado del paso:
Después de esto, cada procesador del hipercubo (virtual) de dimensión (d-1) cuyo d-ésimo bit de mayor peso sea cero tendrá los elementos menores que el pivote.
Análogamente, todo procesador del hipercubo (virtual) de dimensión (d-1) cuyo d-ésimo bit de mayor peso sea uno tendrá los elementos mayores que el pivote.
Formulación para hipercubo
Este procedimiento se aplica recursivamente en las d dimensiones.
Al final, los elementos están ordenados con respecto al orden impuesto por los procesadores.
Pero los elementos dentro de cada procesador no están ordenados.
Por eso, se aplica entonces una ordenación local por quicksort.
Algoritmo: Formulación para hipercuboPROCEDURE Quicksort_hipercubo(B,n,id)BEGIN
FOR i:=1 TO d DOBEGIN
x:=pivot;particionar(B, x, B1, B2); // Tal que se cumple B1 <= x
<= B2
IF (nesimo_bit(i)=0)Enviar B2 al procesador a través del iésimo
enlace.C:=subsecuencia recibida a través de ese mismo
enlace.B:=B1 U C;
ELSEEnviar B1 al procesador a través del iésimo
enlace.C:=subsecuencia recibida a través de ese mismo
enlace.B:=B2 U C;
END;END;
Análisis de la complejidad
Elegir el pivote: algoritmo de la mediana. Tiempo1 = O(1).
Tiempo inicial de ordenación local: Tiempoinicial = O( (n / p) * log (n / p) ).
Broadcast de la iésima iteración: Tiempoiésima = O(d – (i – 1)).
Broadcast en las (log p) iteraciones: Tiempo2 = ∑(i=1 hasta d) i = (d * (d + 1)) / 2 = O(log2 p).
Particionar la secuencia: Tiempo3 = O( log (n / p) ) + O ( n / p ) + O ( n / p ).
Tiempo de ejecución paralela: Tp = O ( (n / p) * log (n / p) ) + O( (n / p) * log p ) + O( log2 p ).
CONCLUSIONES
Se han presentado algunos aspectos de la programación en otros sistemas paralelos, considerando el problema de la clasificación En primer lugar se han indicado las operaciones básicas de la clasificación paralela: la comparación-intercambio y la comparación-split. Seguidamente se analizaron tres algoritmos clásicos: el método de burbuja, la clasificación Shell y la quicksort, estos dos últimos en un hipercubo.
Como puede observarse en este Capítulo, para realizar la paralelización de un algoritmo secuencial es imprescindible considerar el sistema paralelo sobre el que se realiza. Por ejemplo, si la arquitectura hubiera sido tipo mesh en lugar de hipercubo, tanto para la clasificación Shell como para la quicksort, el algoritmo paralelo sería diferente. Evidentemente, la sistematización de la metodología de programación debe tener en cuenta todos estos factores, por lo que es un área amplia que queda fuera del alcance de este texto.
Por último, resaltar la necesidad de realizar el análisis del coste de los algoritmos paralelizados, ya que es el mejor medio para determinar su rendimiento y la mejora que significa respecto al secuencia1 y/o en relación con otros algoritmos paralelos.
Gracias…