6.3 Sorting paralelo
6.3.8 Parallel Merge Sort
El Parallel Merge Sort usando el modelo PRAM fue reportado con un mejor tiempo de ejecucion de O(logn) para ordenar n claves usando n procesadores 70]. Consta de dos
fases: una fase local de ordenacion y una de merge. La primera produce claves ordenadas en cada procesador. Luego en la fase de merging, los procesadores las mezclan en logp
pasos en cada paso se mezclan dos subsecuencias, logrando as porciones ordenadas ma- yores. Un problema es que la mitad de los procesadores van quedando ociosos en cada uno de los logp pasos, degradando la eciencia 191].
Una variante posible es reducir los pasos de merging haciendo que un procesador mezcle mas de dos subsecuencias, hasta el caso en el cual un unico procesador realiza el
merge en un solo paso. Esto reduce el costo de comunicacion, un punto importante en el caso de que la plataforma de soporte sea una maquina con memoria distribuida tipo NOW. Por el lado de las desventajas, si el numero de procesadores utilizado crece, el encargado del merge puede convertirse en cuello de botella.
En 191], Jeon presenta el algoritmo Load-Balanced Parallel Merge Sort, que re- distribuye cada una de las listas parcialmente ordenadas de modo que cada procesador almacene un numero aproximadamente igual de claves, y todos tomen parte del proceso de merge durante la ejecucion.
6.3.9 Comentarios
Pueden encontrarse en la literatura numerosos algoritmos de sorting paralelo, y esta fuera del objetivo de esta Tesis la descripcion de todos ellos. A modo de referencia pueden citarse parallel merge-all sort, parallel binary merge sort, LBOS (load balancing optimization sort), LBOS-F (load balancing optimization sort fragmet feature), parallel partitioned sort, partitioned with redistribution sort (todos ellos para ordenacion en sistemas de Bases de Datos multiprocesador), ashsort, parallel radix sort, partitioned parallel radix sort, shearsort, gridsort, periodic balanced sort, columnsort, padded sort, heterosort, LS3-Sort, 4-way Mergesort, rotatesort, 3n-Sort, etc. Asimismo, se han realizado abundantes estudios comparativos de metodos sobre diferentes arquitecturas 242, 377, 134, 13, 226, 352, 213, 295, 24, 43, 122, 224, 243, 218].
Dado el objetivo de esta Tesis, en lo que sigue se tratara en particular el caso de una variante de parallel merge sort o sorting by merging paralelo sobre un cluster de PCs.
Captulo 7
Sorting Paralelo con Balance de
Carga Dinamico
7.1 Introduccion
En el Captulo 5 se trato el tema del balance de carga en sistemas paralelos. Uno de los objetivos que se pretende lograr es una mejora (disminucion) del tiempo de ejecucion mediante una optimizacion del trabajo total a realizar.
Puede observarse que gran parte de los metodos (tanto estaticos como dinamicos) son aplicables a problemas en los que existe alguna forma de conocer cual es la carga. Por ejemplo, en simulaciones utilizando grillas donde la carga esta relacionada con la cantidad de puntos a procesar, o donde la resolucion de la grilla puede cambiar.
En otros casos, el balance se realiza teniendo en cuenta la expresion de la carga en funcion de la cantidad de tareas. Esto no es suciente en los casos en que las tareas no tienen todas la misma carga computacional, sino que son dependientes de los datos. En particular, es complejo encontrar como afecta la distribucion de los datos sobre la carga de trabajo y sobre la performance.
Resulta interesante (y complejo) atacar el problema del balance de la carga de trabajo en aplicaciones con comportamiento dinamico y donde no se conoce a priori el trabajo total a realizarse, ya que depende no solo del tama~no de los datos de entrada sino de determinada caracterstica de los mismos. Gran parte de los algoritmos de sorting, cuya importancia se analizo en el Captulo 6, se encuentran dentro de esta clase.
Algunas tecnicas, como por ejemplo Parallel Sorting by Regular Sampling 233] in- tentan balancear la carga mediante un muestreo inicial de los datos a ordenar y una distribucion de los mismos de acuerdo a los pivots. Otras, como el Load-Balanced Pa-
rallel Merge Sort 191], redistribuyen listas parcialmente ordenadas de modo que cada procesador almacene un numero aproximadamente igual de claves, y todos tomen parte del proceso de merge durante la ejecucion.
Esta Tesis presenta un nuevo metodo que balancea dinamicamente la carga basado en un enfoque diferente, buscando realizar una redistribucion del trabajo utilizando un estimador que permita predecir la carga de trabajo pendiente. La nocion principal es la de distribuir inicialmente entre las tareas un porcentaje del trabajo total a realizar, dejando una parte reservada luego de un perodo de tiempo, conociendo lo realizado por cada tarea, estimar el trabajo restante en cada una y distribuir la porcion reservada entre ellas.
Interesa observar como se comporta el mecanismo en la realidad y no solo respecto de los ordenes de magnitud, ya que en muchos casos las constantes ocultas no permiten tener una idea denitiva de los resultados.
El metodo propuesto es aplicado en particular al problema de ordenacion como una variante de Sorting by Merging Paralelo, esto es, una tecnica de sorting interno y basado en comparacion. Las ordenaciones en los bloques se realizan mediante el metodo de Burbuja o Bubble Sort con centinela.
Se realizaron pruebas con secuencias de datos en las cuales las claves aparecen una unica vez y el valor maximo de clave coincide con la cantidad de datos (secuencias de datos completas). Esto permite conocer estaticamente, mediante un calculo basado en las posiciones iniciales de las claves, la cantidad de trabajo a realizar (en terminos de comparaciones e intercambios). Esta cantidad de trabajo se encuentra afectada por el grado de desorden que presentan los datos. Si bien esta situacion en cuanto a los datos no se presenta como demasiado realista, permitio estudiar la evolucion de la cantidad de trabajo en cada \vuelta" del algoritmo, de modo de establecer una ley de estimacion de trabajo futuro.
Luego se experimento con secuencias de datos al azar. En este caso, el trabajo no puede conocerse estaticamente aunque como en el caso anterior tambien se observo que disminuye en cada vuelta. Esto se utilizo para obtener una estimacion del trabajo restante esperado a partir de una iteracion determinada, y basarse en el mismo para corregir la distribucion de la carga.
Con esta idea, el metodo propuesto no distribuye inicialmente entre las tareas todos los datos a ordenar, sino que se reserva un porcentaje de los mismos. Luego de una determinada cantidad de \vueltas" (en particular, con el 5% de las iteraciones), estima el trabajo restante de cada tarea basado en lo ya realizado, y distribuye dinamicamente la porcion reservada de manera inversamente proporcional al mismo.
El esquema planteado utiliza el paradigma master/slave, y posee buenas propiedades ya que requiere poca comunicacion sobre una arquitectura MIMD con comunicacion por
bus como un cluster de PCs. Tambien puede ejecutarse en maquinas de memoria compar- tida. Las caractersticas principales del metodo son su sencilllez, efectividad, comunicacion limitada, y posibilidad de aplicacion a diferentes problemas. Ademas, en el caso particular del sorting, podra realizarse un analisis similar con otro algoritmo para la ordenacion de las partes (el punto crtico es lograr un buen estimador del trabajo).
El soporte utilizado para la experimentacion fue lenguaje C y librera MPI sobre un cluster de PCs homogeneas (la descripcion de la arquitectura se encuentra en el Apendice B). En el Captulo 8 se presentan resultados que muestran la bondad de las es- timaciones y el metodo balancea la carga de trabajo adecuadamente en un alto porcentaje de los casos.