Universidad Nacional de Asunción.

Slides:



Advertisements
Presentaciones similares
Procesadores Superescalares
Advertisements

IMPLEMENTACIÓN DE AGENTE DE REFLEJO SIMPLE Y AGENTE DE MEMORIA INTERNA
III - Gestión de memoria
PROGRAMACIÓN PARALELA Tema 3: Rutinas básicas de comunicación
PROGRAMACIÓN PARALELA Tema 5: Análisis de algoritmos paralelos
Complejidad Algorítmica: Análisis de algoritmos
Virtual PC.
La maquina de Turing La máquina de Turing es una caja negra (tan simple como una máquina de escribir y tan compleja como un ser humano) capaz no sólo de.
Introducción a los Algoritmos
Microprocesadores.
¿ Que es la complejidad de un algoritmo ?
TRANSFORMACIONES GEOMÉTRICAS
MÓDULO DE BÚSQUEDA DE PERSONAS DENTRO DE UNA BASE DE DATOS DE ROSTROS
Sistema de Agrupamiento y Búsqueda de Contenidos de la Blogosfera de la ESPOL, Utilizando Hadoop como Plataforma de Procesamiento Masivo y Escalable de.
MATRICES Y DETERMINANTES
APLICACIÓN DE PROCESAMIENTO EN PARALELO BASADO EN OPENMP EN EL MANEJO MATRICIAL USADO EN EL ANÁLISIS DE SISTEMAS ELÉCTRICOS Antonio Ramos Paz 1, Eustaquio.
Un Algoritmo Genético Mejorado para la Calibración de Modelos Hidrológicos CI71F – MODELACIÓN HIDROLÓGICA JAIME VERGARA A.
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Análisis y Diseño de Algoritmos
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Tema 10: Gestión de Memoria
PLANIFICACIÓN DINÁMICA DE INSTRUCCIONES
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Algoritmos Distribuidos Semana 1. Parte 2 Comunicación por Pase de Mensajes Claudia León Universidad Central de Venezuela Facultad de Ciencias Escuela.
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación

Sistema de Información
1 Paralelización del algoritmo de segmentación CM Martíno García Hernández UAM-I Noviembre 2007.
INSTITUTO TECNOLÓGICO DE CD. GUZMÁN
Memoria Cachés. Universidad de SonoraArquitectura de Computadoras2 Introducción Caché es el nivel de memoria situada entre el procesador y la memoria.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Overview Sistemas Computacionales
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Asignación de Espacio No Contiguo
Material de apoyo Unidad 4 Estructura de datos
Juan Zarria Carlos Cevallos  ESTUDIO DE LA TECNOLOGÍA IPTV SOBRE LOS MODOS DE TRANSMISION UNICAST, MULTICAST Y BROADCAST SOBRE UN SERVIDOR LINUX COMO.
Capítulo 7 Gestión de memoria.
SISTEMAS OPERATIVOS.
Arquitecturas Paralelas
Teo. 4: Operaciones básicas de comunicación
Arquitectura de Von Neumann
Parte I. Estructuras de Datos.
PROGRAMACIÓN PARALELA Modelos de programación paralela Modelos computacionales Paradigmas de programación paralela Programación en memoria compartida:
Multiplicación de matrices
Gestión de Memoria.
Introducción al Biclustering
Mejora de la localidad en operaciones de E/S colectivas no contiguas XVIII Jornadas de Paralelismo, JP’2007 Rosa Filgueira, David E. Singh, Florin Isaila,
Parte I. Estructuras de Datos.
Estructura de los Sistemas Operativos
Programación Básica con NQC Patricio A. Castillo 10/05/2008.
Integrantes: Germán Hüttemann Marcelo Rodas
Rendimiento de la CPU y sus factores
INTRODUCCIÓN Para comenzar les hablaremos de lo que significa Windows server 2003, el cual es un sistema operativo de la familia Windows de la marca Microsoft.
Hilos Capítulo 5 Silberschatz Galvin. Copyright © 2006, Intel Corporation. All rights reserved. Intel and the Intel logo are trademarks or registered.
Matrices rango de una matriz
UTFSM - Sistemas Operativos
“Instalación de TuneUp Utilities” Para empezar la instalación de TuneUp Utilities, haga doble clic en el ejecutable del programa: Se le abrirá el asistente.
INTRODUCCIÓN A MICROSOFT WINDOWS XP LIC. SAIDYS JIMÉNEZ QUIROZ ÁREA DE TECNOLOGÍA E INFORMÁTICA CESCOJ2011.
ALGORITMOS PARALELOS DE MULTIPLICACIÓN DE MATRICES
Paralelización de Análisis de Reglas de Asociación Andrés Villavicencio T.
Vicente Boluda Grau – G.I.M – P.A.T.G
Análisis y Diseño de Algoritmos Programa #1 Samuel Garrido Daniel.

75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
UPC DETERMINANTES TÓPICOS DE MÁTEMATICA 1 MA112 EPE Tema :
Marco de Trabajo para Indexación, Clasificación y Recopilación Automática de Documentos Digitales Javier Caicedo Espinoza Gonzalo Parra Chico.
Agenda  Historia  Características  Mecanismos de concurrencia  Ejemplos  Desventajas  Accesibilidad  Conclusiones  Bibliografía.
Arquitectura de Computadoras (Taller) Semestre II de 2008.
Sistemas de Comunicación Magistral Nro. 6 Capa 3: Red La Capa de Red provee principalmente los servicios de envío, enrutamiento (routing) y control de.
Transcripción de la presentación:

Universidad Nacional de Asunción. Facultad Politécnica. Implementación de Algoritmos de Multiplicación de Matrices Densas Cuadradas utilizando MPI Germán Hüttemann ghuttemann@gmail.com y Marcelo D. Rodas rodas.marcelo@gmail.com

Introducción Este trabajo plantea la solución del problema de la multiplicación de matrices densas cuadradas, con los algoritmos: DNS. 2D-Diagonal. Cannon. 2D-Cíclico.

Algoritmo 2D-cíclico

Algoritmo 2D-cíclico procesoMaestro(A, B, C, N, P) inicio ... blkSize = sqrt(N) desde i=0 hasta N-1 incremento blkSize desde j=0 hasta N-1 incremento blkSize T[k] = Guardar posición inicial i,j de tarea k fin-desde /* Enviar primer grupo de tareas a procesos desde 1, 2, ..., P-1 */ tareas_disponibles = N tareas_por_recibir = 0 desde procRank = 1 hasta P-1 M = Construir mensaje con blkSize filas de A y blkSize columnas de B MPI_Send(M, blkSize * N * 2, MPI_FLOAT, procRank, tag, MPI_COMM_WORLD) tareas_por_recibir = tareas_por_recibir + 1 tareas_disponibles = tareas_disponibles – 1 /* Recibir resultados calculados, enviar nueva tareas, guardar resultado */ procRank = 1 mientras (tareas_por_recibir > 0)

Algoritmo 2D-cíclico ... MPI_Recv(R, N, MPI_FLOAT, procRank, tag, MPI_COMM_WORLD, &status) tareas_por_recibir = tareas_por_recibir – 1 si (tareas_disponibles > 0) M = Construir mensaje con blkSize filas de A y blkSize columnas de B MPI_Send(M, blkSize * N * 2, MPI_FLOAT, procRank, tag, MPI_COMM_WORLD) tareas_por_recibir = tareas_por_recibir + 1 tareas_disponibles = tareas_disponibles – 1 fin-si Guardar resultado R en correspondiente posición de C Incrementar circularmente procRank entre 1 y P-1 fin-mientras Fin

Algoritmo 2D-cíclico procesoEsclavo(N, P, rank) inicio tareas_a_recibir = N / (P–1) /* * Los primeros N % (P-1) procesos deben * recibir una tarea más. */ si (rank <= N % (P-1)) tareas_a_recibir = tareas_a_recibir + 1 fin-si desde k = 0 hasta tareas_a_recibir MPI_Recv(M, blkSize * N * 2, MPI_FLOAT, 0, tag, MPI_COMM_WORLD, &status) R = Multiplicar filas de A y columnas de B recibidas en M MPI_Send(R, N, MPI_FLOAT, 0, tag, MPI_COMM_WORLD) fin-desde Fin

Algoritmo 2D-cíclico Costo

Algoritmo de Cannon

Algoritmo de Cannon algoritmoCannon(N, A, B, C, P, comm_2d) inicio ... nlocal = N / sqrt(P) /* FASE 1: Realizamos el alineamiento inicial de la matriz A */ MPI_Cart_shift(comm_2d, 1, -myCoords[0], &origen, &destino) MPI_Sendrecv_replace(A, nlocal*nlocal, MPI_FLOAT, destino, tag, origen, tag, comm_2d, &status) /* FASE 1: Realizamos el alineamiento inicial de la matriz B */ MPI_Cart_shift(comm_2d, 0, -myCoords[1], &origen, &destino) MPI_Sendrecv_replace(B, nlocal*nlocal, MPI_FLOAT, destino, tag, origen, tag, comm_2d, &status) /* FASE 2: Calculamos los ranks de los corrimientos hacia la izquierda y hacia arriba */ MPI_Cart_shift(comm_2d, 1, -1, &derecha, &izquierda) MPI_Cart_shift(comm_2d, 0, -1, &abajo, &arriba) /* FASE 2: Ciclo multiplicación-corrimiento */ desde k = 0 hasta sqrt(P)-1 multiplicar(A, B, C, nlocal) MPI_Sendrecv_replace(A, nlocal*nlocal, MPI_FLOAT, izquierda, tag, derecha, ...) MPI_Sendrecv_replace(B, nlocal*nlocal, MPI_ELEMENT_T, arriba, tag, abajo, ...) fin-desde /* FASE 3: Restauramos la distribución original de las matrices A y B */ MPI_Cart_shift(comm_2d, 1, +myCoords[0], &origen, &destino) MPI_Sendrecv_replace(A, nlocal*nlocal, MPI_FLOAT, destino, tag, origen, ...) MPI_Cart_shift(comm_2d, 0, +myCoords[1], &origen, &destino) MPI_Sendrecv_replace(B, nlocal*nlocal, MPI_FLOAT, destino, tag, origen, ...); Fin

Algoritmo de Cannon Costo

Algoritmo 2D-Diagonal

Algoritmo 2D-Diagonal algoritmo2D-Diagonal(N, A, B, C, P, comm2_d) inicio nlocal = N / sqrt(P) /* * PASO 1.1: * Broadcast de A*,j desde pj,j a todos los procesos p*,j */ MPI_Bcast(A, N*nlocal, MPI_FLOAT, Pjj, comm_col) * PASO 1.2: * Scatter de Bi,* desde pj,j a todos los procesos p*,j. En este proceso, Bi,* * se divide proporcionalmente a la cantidad de procesos que se encargan * de procesar el conjunto j de columnas. Antes del envío del mensaje * deben copiarse los datos a memoria contigua en el buffer Baux. MPI_Scatter(Baux, nlocal*nlocal, MPI_FLOAT, B, nlocal*nlocal,MPI_FLOAT, Pjj, comm_col) * PASO 2: * Multiplicación: Calcular el producto M*,j = A*,j x Bi,p Multiplicar(A, B, M, N, nlocal) * PASO 3: * Reducción en Ci,i (ubicado en Pi,i), de todos los M*,j (ubicados en Pi,*) MPI_Reduce(M, C, nlocal*N, MPI_FLOAT, MPI_SUM, Pii, comm_row); Fin

Algoritmo 2D-Diagonal Costo

Algoritmo DNS

Algoritmo DNS

Algoritmo DNS algoritmoDNS(N, A, B, C, R, P, comm_3d) inicio ... nlocal = N / cbrt(P) /* * FASE 1.1: * Los procesos Pij0 (plano 0) deben transmitir * A a los procesos Pijj (j > 0). */ MPI_Send(A, nlocal*nlocal, MPI_FLOAT, Pijj, tag, comm_3d) * FASE 1.2: * Los procesos Pijk (k > 0 && j=k) deben recibir A de Pij0. MPI_Recv(A, nlocal*nlocal, MPI_FLOAT, Pij0, tag, comm_3d, &status) * FASE 1.3: * B a los procesos Piji (i > 0). MPI_Send(B, nlocal*nlocal, MPI_FLOAT, Piji, tag, comm_3d);

Algoritmo DNS /* FASE 1.4: * Los procesos Pijk (k > 0 && i=k) deben recibir B de Pij0. */ MPI_Recv(B, nlocal*nlocal, MPI_FLOAT, Pij0, tag, comm_3d, &status); /* FASE 2.1: * Broadcast de Aij por el proceso Pijj a los procesos Pi*j MPI_Bcast(A, nlocal*nlocal, MPI_FLOAT, Pijj, comm_cols) /* FASE 2.2: * Broadcast de Bij por el proceso Piji a los procesos P*ji MPI_Bcast(B, nlocal*nlocal, MPI_FLOAT, Piji, comm_rows) /* * FASE 2.3: * Multiplicación de bloques Aik y Bkj Multiplicar(A, B, C, nlocal) * FASE 3: * Cada proceso Pijk (k > 0) debe realizar una operación * all-to-one reduction hacia el proceso Pij0 en la matriz R (resultado) MPI_Reduce(C, R, nlocal*nlocal, MPI_FLOAT, MPI_SUM, Pij0, comm_reduction) Fin

Algoritmo DNS Costo

Ambiente de Prueba Las pruebas fueron realizadas sobre 9 computadores con las siguientes características: Sistema operativo: Windows XP Professional Service Pack 2 Procesador: Intel Pentium D (dual core) 3.00 GHz Memoria: 1 GB Compilador: GCC 3.4.4 (Cygwin) Distribución MPI: MPICH NT 1.2.5

Métricas Las métricas utilizadas para realizar el análisis de rendimiento de los algoritmos son las siguientes: Tiempo de ejecución secuencial (TS): medido a partir del algoritmo secuencial, ejecutado en una computadora de las mismas características mencionadas más arriba. Tiempo de ejecución paralelo (TP): medido desde el momento en que inicia el cómputo paralelo hasta el momento en que el último proceso termina su ejecución. Aceleración (A): medida como la razón entre el tiempo del algoritmo secuencial ejecutado en un proceso y el tiempo de cada algoritmo paralelo. Eficiencia (E): medido como la razón entre la aceleración obtenida por cada algoritmo y la cantidad de procesos utilizados para las ejecuciones de los mismos.

Tiempo paralelo de los algoritmos para P = 8 ó 9

Aceleración de los algoritmos para P = 8 ó 9

Eficiencia de los algoritmos para P = 8 ó 9

Tiempo paralelo de los algoritmos para P = 25 ó 27

Aceleración de los algoritmos para P = 25 ó 27

Eficiencia de los algoritmos para P = 25 ó 27

Conclusiones A partir de las aceleraciones obtenidas con 8 ó 9 procesos y con 25 ó 27 procesos, se puede observar que el nivel de paralelización hardware soportado es un factor importante para el desempeño de los algoritmos paralelos. Como es de esperar, las grandes aceleraciones para 8 ó 9 procesos, induce un comportamiento similar para las eficiencias. Para 25 ó 27 procesos, es un tanto más complicado explicar las eficiencias A pesar de las dos anomalías presentadas, se cumplió aproximadamente el rendimiento teórico que se esperaba de los algoritmos implementados. En general, el 2D Cíclico queda en último lugar por tener mucha mayor cantidad de operaciones de comunicación, todas ellas dirigidas a un solo proceso, ocasionando el problema que se conoce como contención [1]. En el caso de Cannon, que en general se mantiene tercero, también se tiene bastante interacción entre procesos. En cada una de ellas los procesos deben sincronizarse, probablemente ocasionando esperas innecesarias.

Trabajos Futuros. Realizar mayor cantidad de pruebas con mayor cantidad de valores para cada uno de los parámetros (tamaño de matriz, cantidad de procesos, cantidad de procesadores). Además, se podría plantear un método, para cada algoritmo, que permita la multiplicación de matrices cuadradas de tamaños arbitrarios. Otro punto interesante sería probar los algoritmos con mayor cantidad de procesadores, al menos 64 o en su defecto 32 con doble núcleo. Solucionar el problema de la memoria disponible para la carga de las matrices en el espacio de direccionamiento del programa.

Referencias Ananth Grama, Anshul Gupta, George Karypis, Vipin Kumar, Introduction to Parallel Computing, Segunda Edición. Addison-Wesley. Enero 2003. Himanshu Gupta y P. Sadayappan, Communication efficient matriz multiplication on hypercubes, SPAA ’94: Proceedings of the sixth annual ACM symposium on Parallel algorithms and architectures, 1994, ISBN 0-89791-671-9, págs. 320—329, ACM, New York, NY, USA. Hyuk-Jae Lee, James P. Robertson y José A. B. Fortes, Generalized Cannon’s algorithm for parallel matrix multiplication, ICS ’97: Proceedings of the 11th international conference on Supercomputing, 1997, ISBN 0-89791-902-5, págs. 44—51, ACM, New York, NY, USA. Documentación en línea de MPI: http://www-unix.mcs.anl.gov/mpi/www/

Gracias Por la Atención ¿Preguntas?