Paper Mmulfpuna Mpi Cparra Fmancia

download Paper Mmulfpuna Mpi Cparra Fmancia

If you can't read please download the document

Transcript of Paper Mmulfpuna Mpi Cparra Fmancia

  • 1. Rendimiento de Algoritmos Paralelos de Multiplicacin deMatrices implementados con MPICristhian Parra1, Fernando Manca11Facultad Politcnica de la Universidad Nacional de AsuncinEstudiantes del 9no Semestre de Ingeniera Informtica {cparra,fmancia}@cnc.una.pyResumen: El problema de la multiplicacin de matrices, ha sido ampliamente estudiado en el mbito acadmico, y sus soluciones han encontrado aplicaciones en diversos campos del mundo cientfico. La facilidad para dividir este problema en diferentes partes independientes, ha causado el surgimiento de numerosos algoritmos paralelos que lo resuelven eficientemente. En este trabajo, se presentan los detalles de implementacin de 4 algoritmos bien conocidos, aplicados a matrices cuadradas densas. Tambin se presentan los resultados de algunas pruebas llevadas a cabo para analizar el rendimiento de cada algoritmo.Palabras Clave: matrices, algoritmos de multiplicacin de matrices, particionamiento de datos, algoritmos paralelos, MPI, Cannon, DNS, particionamiento por bloque cclico, 2D diagonal.

2. 1 Introduccin Los algoritmos de matrices densas, y entre ellos los de multiplicacin de matrices, han encontrado numerosas aplicaciones en la resolucin de problemas tanto numricos, como aquellos que no son numricos.En ciencias de la computacin, la multiplicacin de matrices ha encontrado usos importantes en campos como la Criptografa o la Computacin y Diseo Grfico [3]. Todas estas aplicaciones han motivado el estudio y optimizacin de algoritmos que resuelvan este problema. Adems, las matrices y sus operaciones son una parte muy importante del lgebra Lineal, cuyas aplicaciones en el mundo cientfico y de la computacin son innumerables.La facilidad con que se puede particionar el problema de multiplicar dos matrices cuadradas y densas, lo convierten en un candidato ideal para estudiar los conceptos de computacin paralela, y permiten que sea fcil formular algoritmos que aprovechen los recursos de un entorno paralelo.En este trabajo, se describen 4 algoritmos paralelos para multiplicar matrices cuadradas y densas, incluyendo la explicacin de los detalles de implementacin. Se presentan los resultados de diversas pruebas realizadas, y las conclusiones extradas a partir del anlisis de estas pruebas.El objetivo del trabajo es llevar a la prctica conceptos de computacin paralela, analizar algoritmos paralelos para multiplicacin de matrices, realizar las implementaciones y ejecutar pruebas que nos permitan extender el anlisis preliminar. 2 Descripcin general. En primer lugar, es importante definir el problema que queremos resolver y sus parmetros correspondientes.Dada dos matrices densas de tamao NxN, se necesita obtener el resultado de la multiplicacin de estas dos matrices, que es otra matriz NxN igualmente densa, en un tiempo razonable. Una Matriz es Densa cuando existe un bajo porcentaje de ceros en la misma.El parmetro fundamental del problema es el tamao de la matriz, cuantificada por N. En un entorno de ejecucin paralelo, existen dos parmetros ms que se tienen en cuenta para nuestros anlisis: la cantidad de procesos y la cantidad de procesadores fsicos.Para resolver el problema, se implementan los siguientes 4 algoritmos: Algoritmo 2D con particionamiento por bloques y distribucin cclica, basada en el particionamiento propuesto en el captulo 3 de [1], que se llamar en adelante 2D cclico. Algoritmo DNS, explicado en [1] y extendido en [4] y [5]. Algoritmo de Cannon, explicado en [1] y generalizado en [4]. Algoritmo 2D-Diagonal, presentado en [5]. El trabajo est organizado de la siguiente manera:1. Las secciones 1 y 2 proporcionan una visin global del trabajo realizado.2/27 3. 2. La seccin 3 proporciona una explicacin detallada de cada algoritmo y suimplementacin. 3. En la seccin 4 se describen las pruebas realizadas. 4. La seccin 5 alberga la descripcin de las mtricas obtenidas, los resultados en formade grficos, acompaados de algunos comentarios que forman parte del anlisis dedichos resultados. 5. La seccin 6 proporciona algunas reflexiones de conclusin a las que llegamos alfinalizar el trabajo. 6. La seccin 7 propone algunas problemticas y trabajos futuros. 7. La seccin 8 presenta nuestras fuentes de informacin. 8. La seccin 9, presenta en forma de anexo, las tablas resumidas de resultados.2.1 Preliminares2.1.1 Detalles de implementacin comunes a todos los algoritmos:La implementacin fue hecha usando el lenguaje de programacin C (Ansi C) y la implementacin del estndar MPI conocido como OpenMPI. Todo el desarrollo y las pruebas realizadas, fueron llevadas a cabo en el Sistema Operativo Linux Fedora 9, con distintas versiones menores del kernel 2.6.25.Las matrices se generan en tiempo de ejecucin, ya que esto era ms prctico para realizar las pruebas de rendimiento, aunque est disponible la posibilidad de leer las matrices de archivos en formatos de MatrixMarket, como se hacen [6].Las matrices son representadas en forma lineal, por lo que para saber el elemento Mat[i,j] se debe acceder de la siguiente manera: Mat[(i*cant_columas) + j]La implementacin MPI utilizada, OpenMPI, est disponible para su descarga gratuita en [7] y es Open Source.Para las pruebas realizadas, establecimos cantidades de procesos fijos: 4, 9 y 16 procesos. Solo en el caso de DNS utilizamos cantidades de proceso de 8 y 27, ya que en este algoritmo se requera una cantidad cbica. Ejecutamos los algoritmos en un entorno de cuatro computadoras conectadas mediante una red ethernet de 10/100 Mbps.De las cuatro mquinas que utilizamos para pruebas, tres contaban con procesadores doble ncleo. Detalles ms precisos sobre el ambiente de prueba se presentan en la seccin 4.2.1.2 Disponibilidad del cdigo fuente:Todo el proyecto est disponible a travs de Subversion en el repositorio de Google Code, http://mmulfpuna.googlecode.com/svn/trunk/srcmpi. Personas que no son miembros del proyecto pueden acceder al mismo y descargar los fuentes de la siguiente manera:svn checkout http://mmulfpuna.googlecode.com/svn/trunk/srcmpi mmulfpuna- read-only3/27 4. 3 Algoritmos Implementados3.1 Algoritmo 2D Cclico En realidad, no existe un algoritmo 2D con particionamiento por Bloque Cclico. Solo existe el concepto sobre el particionamiento por bloque y la distribucin cclica de los bloques, que se presenta y explica en [1].3.1.1 Particionamiento por Bloques cclico:Cuando se debe particionar un determinado problema, para distribuirlo entre distintos procesos, dos objetivos igualmente importante, suelen entrar en conflicto: Balancear correctamente la carga. Minimizar el tiempo de ociosidad (Idling) de los procesos.En trminos de la multiplicacin de matrices, el primer objetivo implica distribuir las tareas de multiplicacin en los procesos, de manera que todos los procesos computen matrices igualmente densas. El segundo objetivo implica solapamiento de comunicaciones con cmputo.Adems de estos objetivos, existe la realidad de que normalmente existen menos procesadores fsicos disponibles, que la cantidad de procesos en los que queremos dividir nuestro problema.Para dar solucin a este ltimo problema, y al mismo tiempo encontrar una optimizacin equilibrada de los dos objetivos presentados, el particionamiento por Bloques cclicos establece lo siguiente: Dividir el problema en ms tareas que procesos. Asignar las tareas a los procesos de manera cclica, de manera tal a que se solapen adecuadamente las comunicaciones con las tareas de cmputo. Agrupar los procesos en bloque, de manera tal a que cada proceso, se encargue de zonas distintas de la matriz y no asuma el cmputo de largos bloques consecutivos que pueden tener un patrn de carga mayor que otras partes de la matriz. Figura 1. Particionamiento por Bloque con distribucin o mapeamiento Cclico. La imagen (a) muestra la versin 1D y la imagen (b) la versin 2D. La Figura 1 muestra un ejemplo de este tipo de particionamiento y mapeamiento1.1 Las figuras fueron extradas directamente de [1] para extender y clarificar las explicaciones. 4/27 5. Ntese que si la matriz es densa, el agrupamiento de bloques de las matrices hace que al final, a cada proceso le haya tocado una bloque de tarea de cada zona distinta de la matriz, haciendo que el balance general de la carga sea equilibrado.3.1.2 Algoritmo implementado:El algoritmo implementado, utiliza el particionamiento descrito en la seccin anterior, y lo aplica a la matriz de salida. De esta manera, cada proceso calcula un bloque de la salida.Se sigue exactamente la idea del particionamiento, y se utiliza un esquema maestro-esclavo para paralelizar el trabajo.Lo primero que realiza el algoritmo es dividir la matriz de salida, de tamao N, en N tareas diferentes, lo que implica hacer una divisin en N N bloques. La eleccin de la cantidad de tareas, corresponde a que es el nmero ptimo que permite tener tamaos de bloque balanceados.Luego, se recorren los ndices de la matriz resultado en bloques P P tareas, y se asignan estas a los procesos P i de manera cclica, segn se muestra en la siguiente ecuacin. i=0 k P i=k mod P Elegido el proceso al cual asignar una tarea, se empaquetan los datos que requerir este (filas y columnas de las matrices de entrada), y se le enva este paquete en un solo Mensaje a travs de MPI_Send.En cunto al esquema maestro-esclavo, existen dos posibilidades: La existencia de un proceso dedicado exclusivamente a la asignacin ydistribucin de tareas. El proceso 0 es el maestro, y adems procesa localmente algunos bloques.La segunda opcin es atractiva por su simpleza, y sera recomendable en redes de mucha latencia, sin embargo, cuando estamos en redes de alto rendimiento, puede ocurrir que el proceso maestro se convierta en un cuello de botella.La implementacin probada en este trabajo corresponde a la segunda opcin, por su simplicidad. La estructura principal del algoritmo es la siguiente:int SP = sqrt(P); int ST = sqrt(N); int k = 0;for (i=0; i < N; i += SP) { for (j=0; j < N; j += SP) { for (x=i; x < (i+SP); x += ST) { for (y=j; y < (j+SP); y += ST) { ... int Pdest = P%k; ... if (Pdestino != 0) {Bloque