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 la programació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:
y Basados en comparación.
Se basan en la operación comparar-intercambiar. Límite inferior de complejidad: O(n * log n).

y No basados en comparación.
Basado en la representación de los números. Límite inferior de complejidad: O(n).

Ordenación
€

En ordenación secuencial los mejores algoritmos son O (n*log n).
y 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.

€

Características de la ordenación en paralelo
€

Distribución de los datos (al principio / al final):
y Todos los elementos en el mismo procesador. y 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:
y Cada procesador tiene un único elemento. y 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.

Comparaciones: 1 elementos en cada procesador

Segundo caso: ambos procesadores realizan la ordenación.

Ejemplo 2 :

Segundo caso: ambos procesadores realizan la ordenación.

CLASIFICACION POR INTERCAMBIO DIRECTO O BURBUJA

CLASIFICACIÓN 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

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 1 INICIO //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 desde FIN

PRUEBA DE PAPEL
1 9
3

2 3
9 4

3 4

4 5 6 -6 -8 15

N 6

I 1

J 1 2

X [J] X [J+1] 9 3 9 4 9 -6 9 -8 9 3 9 4 9 -6 9 -8 9 15

AUXI 9 9 9 9

9 -6 9 -8 9 9 15 5 3 4

3

4

-6

-8

PRUEBA DE PAPEL
1 3
3

2 4
4 -6

3 4 -6 -8

5 6 9 15

N 6

I 2

J 1 2

X [J] X [J+1] 3 4 -6 4 -8 4 9 4 -6 4 -8 4 9 15

AUXI

4 -8 4 4 9 9 15 5 3 4

4 4

3

-6 -8

4

PRUEBA DE PAPEL
1 3
-6

2 3 -6 -8
3 -8 3 3

4 4

5 6 9 15

N 6

I 3

J 1 2

X [J] X [J+1] 3 -6 3 -8 3 4 9 -6 3 -8 3 4 9 15

AUXI 3 3

4 4 9 9 15

3 4 5

-6

-8

3

4

PRUEBA DE PAPEL
1 2 -6 -8
-8 -6 -6 3 3 4 4 -8 -6 3 4 9 9 15 5 9 15 3 4 3 4 4 9

3 3

4 4

5 6 9 15

N 6

I 4

J 1 2

X [J] X [J+1] -6 -8 -6 -8 -6 3

AUXI -6

PRUEBA DE PAPEL
1 2 -6 -8
-8 -6 -6 3 3 4 4 -8 -6 3 4 9 9 15 5 Lista Ordenada 9 15 3 4 3 4 4 9

3 3

4 4

5 6 9 15

N 6

I 5

J 1 2

X [J] X [J+1] -8 -6 -6 3

AUXI

¿Observación?
El método de la burbuja es difícil de paralelizar, paralelizar, debido concretamente al los dos FOR interno. interno. Este hecho se entiende mejor observando la operación comparación-intercambio en cada fase del comparaciónalgoritmo. algoritmo. La burbuja compara todos los pares adyacentes en orden, con lo que el algoritmo es intrínsecamente secuencial. secuencial. Por tanto, una paralelizarían de este algoritmo en esta forma, además de difícil resultará inadecuada..

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.

ÉTODO 2 (Pseudocódigo) Algoritmo burbuja2 INICIO 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 desde FIN

PRUEBA DE PAPEL
1 9
3

2 3
9 4

3 4

4 5 6 -6 -8 15

N 6

I 1

J 1 2

X [J] X [J+1] 9 3 9 4 9 -6 9 -8 9 3 9 4 9 -6 9 -8 9 15

AUXI 9 9 9 9

9 -6 9 -8 9 9 15 5 3 4

3

4

-6

-8

PRUEBA DE PAPEL
1 3
3

2 4
4 -6

3 4 -6 -8

5 6 9 15

N 6

I 2

J 1 2

X [J] X [J+1] 3 4 -6 4 -8 4 4 -6 4 -8 4 9

AUXI

4 -8 4 4 9 15 3 4

4 4

3

-6 -8

PRUEBA DE PAPEL
1 3
-6

2 3 -6 -8
3 -8 3 3

4 4

5 6 9 15

N 6

I 3

J 1 2

X [J] X [J+1] 3 -6 3 -8 3 -6 3 -8 3 4

AUXI 3 3

-6

-8

4

9

15 N 6 I 4

3 J 1 2

1 2 -6 -8
-8 -8 -6 -6

3 3

4 4

5 6 9 15

X [J] X [J+1] -6 -8 -6 -8 -6 3

AUXI -6

3

4

9

15

PRUEBA DE PAPEL

N 6

I 5

J 1

X [J] X [J+1] -8 -6

AUXI

1 2 -8 -6
-8 -6

3 3
3

4 4
4

5 6 9 15
9 15

Lista Ordenada

¿Observación?
Este método es sencillo de paralelizar ya que durante cada fase, las operaciones de comparación-intercambio se comparaciónpueden realizar simultáneamente. simultáneamente. Supóngase que se dispone de n procesadores, es decir, tantos como elementos a ordenar, y que se conectan en un anillo. 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. derecha.

CLASIFICACION SHELL

CLASIFICACION SHELL
Algoritmo Secuencia1
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 3 El 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 3 Luego 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 3 Una 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.

CLASIFICACION SHELL
2 3 7 4 1 ¦ 15 8 9 10 5 2 3 5 4 1 ¦ 15 8 9 10 7 Una vez realizado este procedimiento, se procede nuevamente a subdividir las particiones. 2 3 ¦ 5 4 1 ¦ 15 8 ¦ 9 10 7 Nuevamente 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 ¦ 15 Luego, 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

ORDENACION SHELL (Pseudocódigo) 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

si no x(k) x(j) x(j) auxi fin si j j - salto fin mientras fin para salto salto \ 2 fin mientras FIN

salto

PRUEBA DE PAPEL
salto 3 i 4 j 1 -2 2 -1 3 0 -3 k 4 X(j) X(k) auxi 9 -6 5 5 3 -8 6 6 4 -6 9 -6

n\2 si no mientras salto > 0 hacer x(k) x(j) para i (salto + 1) hasta n x(j) auxi j i - salto fin si mientras j > 0 j j - salto fin mientras k j + salto fin para auxi x(k) salto salto \ 2 si x(j) <= x(k) entonces fin mientras j 0
FIN

1 9

2 3

3 4

4 -6

5 -8

6 15

-8 3 15

-8

-6

-8

4

9

3

15

15

salto

salto i 1 2

j 1 0 2 0 3 0 4 3

k X (j) X (k) auxi 2 -6 -8 -8 -8 -6 3 4 5 4 3 6 -6 4 9 3 4 3 -6 9 4 9 3 9 3 4 3 15 4 9 3 3 3 15

n\2 si no mientras salto > 0 hacer x(k) x(j) x(j) auxi para i (salto + 1) hasta n fin si j i - salto j j - salto mientras j > 0 fin mientras k j + salto fin para auxi x(k) salto salto \ 2 si x(j) <= x(k) entonces fin mientras j 0 FIN

3 4 5

1 -6

2 -8

3 4

4 9

5 3

6 15

-8

-6

3

4

9

15

2 0 6 5 0 0

Paralelización del algoritmo Shell en un hipercubo
Seguidamente se presenta hipercubo conectado. la paralelización del método Shell para un 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

CLASIFICACION QUICKSORT
Algoritmo Secuencia1
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.

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 si FIN

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:
y 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:
y Elegir un pivote y enviarlo por broadcast a los demás. y Particionar el bloque local usando ese pivote. y 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:
y 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. y Análogamente, todo procesador del hipercubo (virtual) de dimensión (d1) 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.
y Al final, los elementos están ordenados con respecto al orden

impuesto por los procesadores. y 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 hipercubo
PROCEDURE Quicksort_hipercubo(B,n,id) BEGIN FOR i:=1 TO d DO BEGIN 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; ELSE Enviar 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.
y Tiempo1 = O(1).

€

Tiempo inicial de ordenación local:
y Tiempoinicial = O( (n / p) * log (n / p) ).

€

Broadcast de la iésima iteración:
y Tiempoiésima = O(d ± (i ± 1)).

€

Broadcast en las (log p) iteraciones:
y Tiempo2 = ™(i=1 hasta d) i = (d * (d + 1)) / 2 = O(log2 p).

€

Particionar la secuencia:
y Tiempo3 = O( log (n / p) ) + O ( n / p ) + O ( n / p ).

€

Tiempo de ejecución paralela: y 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«