Programación en Paralelo con MPI en Clusters Linux



Documentos relacionados
4. Programación Paralela

Preliminares. Tipos de variables y Expresiones

Computacion de Alto Performance

MPI es un estándar de programación en paralelo mediante paso de mensajes que permite crear programas portables y eficientes.

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

Base de datos en Excel

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

CLUSTER FING: PARALELISMO de MEMORIA DISTRIBUIDA

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

Heterogénea y Jerárquica

Novedades en Q-flow 3.02

Resolución de problemas en paralelo

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 19 de junio de 2007

CRM Gestión de Oportunidades Documento de Construcción Bizagi Process Modeler

Capítulo 5. Cliente-Servidor.

1. Manejo de memoria estática 2. Manejo de memoria dinámica

GUIA PARA GENERAR PROSPECTOS Y VENTAS EN WEB

Introducción a la programación orientada a objetos

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

INTRODUCCIÓN. Que es un sistema operativo? - Es un programa. - Funciona como intermediario entre el usuario y los programas y el hardware

SIIGO Pyme. Procesos Gestión de Ventas. Cartilla I

Informàtica i Comunicacions Plaça Prnt. Tarradellas, FIGUERES (Girona) Tel Fax

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Colegio Salesiano Don Bosco Academia Reparación Y Soporte Técnico V Bachillerato Autor: Luis Orozco. Subneteo

Manual de Usuario Comprador. Módulo Administración de Presupuesto. Iconstruy e S.A. Serv icio de Atención Telefónica:

MANUAL DE USUARIO APLICACIÓN SYSACTIVOS

Tutorial de Subneteo Clase A, B, C - Ejercicios de Subnetting CCNA 1

PROBLEMAS CON SU CLAVE? Cliente Nuevo Puedo solicitar acceso a la Banca en Línea (Contrato Uso de Canales de Autoatención) a través del Portal?

Gracias a ese IP único que tiene cada ordenador conectado a la red de internet se pueden identificar y comunicar los ordenadores.

Gestión de Oportunidades

Generalidades Computacionales

Instituto Tecnológico de Celaya

Manual de uso. Manual de uso - citanet 1

Introducción a las redes de computadores

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

Sistemas Operativos Práctica 3

Estructuras de datos: Proyecto 2

Estructura de Computadores I Arquitectura de los MMOFPS

Capitulo 5. Implementación del sistema MDM

Elementos requeridos para crearlos (ejemplo: el compilador)

INTERNET 4º ESO INFORMATICA / DEP. TECNOLOGIA

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

Versión 1.0. BOLETÍN (JUNIO 2009) a2móvil PC. a2 softway C. A.

Modelo de aplicaciones CUDA

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

(PHP y APACHE), y el programa de comunicación Skype, para controlar de manera

Medias Móviles: Señales para invertir en la Bolsa

INFORMÁTICA IE. Términos a conocer y conceptos básicos. World Wide Web (WWW):

Mantenimiento Limpieza

Centro de Capacitación en Informática

UNIVERSIDAD DE SALAMANCA

Qué es el Software Libre? Algunos principios básicos

Tema 3. Medidas de tendencia central Introducción. Contenido

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Aproximación local. Plano tangente. Derivadas parciales.

Curso de PHP con MySQL Gratis

Unidad III El lenguaje de programación C

picojava TM Características

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

SISTEMAS DE COORDENADAS SISTEMA COORDENADO UNIDIMENSIONAL

Manual de Usuario Comprador Presupuesto

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Ecuaciones de primer grado con dos incógnitas

RELACIONES DE RECURRENCIA

28.- Manejo de los Feriados

SIEWEB. La intranet corporativa de SIE

Haciendo pruebas sobre Splinter

LICENCIATURA EN EDUCACION FISICA RECREACION Y DEPORTES

M.T.I. Arturo López Saldiña

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

QUE ES COMLINE MENSAJES? QUE TIPO DE MENSAJES PROCESA COMLINE MENSAJES?

GUIA PARA EL USUARIO

Seven ERP Guía De Referencia - Imágenes

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

Sistema de Facturación de Ventas WhitePaper Enero de 2007

Lenguaje C Funciones. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

LA LOGÍSTICA COMO FUENTE DE VENTAJAS COMPETITIVAS

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Análisis y diseño del sistema CAPÍTULO 3

MODELO DE COSTOS ABC

MANUAL DE AYUDA MODULO TALLAS Y COLORES

MEDICION DEL TRABAJO

NOTA DE APLICACIÓN AN-P002. Programando Wiring con NXProg

6. DESCRIPCIÓN DEL SOFTWARE

Institución Educativa Inem Felipe Pérez de Pereira 2012 Estrategia taller. AREA: Sistemas de información Taller Previsto

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

COMO FUNCIONA INTERNET

3. FUNCIONAMIENTO DE LA FUNCIONES TXD Y RXD 4. EJEMPLO DE ENVÍO DE SMS DESDE EL PLC 5. EJEMPLO DE RECEPCIÓN DE SMS EN EL PLC

Mi Cobertura Móvil. Preguntas frecuentes.

Estimado tutor de WachyWachy,

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS

Capítulo 4. Diseño de un sistema para reconocimiento y consulta de las tarjetas Hu

4 Pruebas y análisis del software

La Pirámide de Solución de TriActive TRICENTER

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Unidad IV: TCP/IP. 4.1 Modelo Cliente-Servidor

Transcripción:

Programación en Paralelo con MPI en Clusters Linux Francisco Javier Rodríguez Arias 13 de marzo de 2006

Problema y Motivación En física se requiere hacer muchos cálculos. Para eso se hacen programas de cálculo, normalmente los hacemos en Fortran ó C/C++. Específicamente en una aplicación que tenía, requería un tiempo de ejecución extremádamente grande. Esto motivó a que buscara una solución a ese problema. La solución fue paralelizarlo. 1

Qué es programación en paralelo? Programación en paralelo es una técnica de programación, que permite ejecutar una misma tarea en distintos procesadores. Se pueden clasificar distintos modelos de programación en paralelo: Paralelizar Data: Conocido como Single Instruction/Multiple Data (SIMD). Un mismo conjunto de instrucciones se aplica simultáneamente sobre distintos datos. Paralelizar Tareas: Conocido como Multiple Instruction/- Multiple Data (MIMD). Distintas instrucciones se aplican sobre datos distintos. 2

Otros modelos Otro modelo es el de SPMD (Single Program/Multiple Data) que en realidad puede reducirse al caso MIMD. Implementaciones El MPI está diseñado para MIMD. Mientras que el HPF u OpenMP están diseñado más para SIMD. 3

Ejemplos de SIMD En SIMD cada proceso se encarga de una parte de la data, aplicándose sobre cada parte las mismas instrucciones. Operaciones aritméticas vectoriales/matriciales. 4

Qué es un Cluster? Un Cluster de computadoras es un conjunto de computadoras conectadas entre sí, que trabajan una tarea relacionada, de tal forma que parecen una gran computadora. Cada procesador de cada computadora se puede considerar un nodo del Cluster. Cuando se habla de programación en paralelo, se entiende que los distintos procesos que se quieren ejecutar en paralelo se distribuirán a través de los distintos nodos de un Cluster. Entonces podemos tener computadoras con multiprocesador, que tendrían varios nodos del Cluster. 5

Utilidad La mayor utilidad de la paralelización es la ganancia en velocidad de la ejecución. Hay que tener en cuenta que no todo problema/algoritmo puede ser paralelizable. Y si lo es, no necesariamente hay una ganancia en velocidad, puesto que debemos considerar el tiempo de comunicación entre los procesos. 6

Un modelo simple de la velocidad de un programa en paralelo es: T = T p p + T s + T c T : Tiempo total. T p : Tiempo de la parte paralelizable. p: Cantidad de procesadores. T s : Tiempo de la parte serial (no paralelizable). T c : Tiempo de comunicación. Es 0 cuando p = 1. 7

Qué es MPI? MPI = Message Passing Interface Es una librería independiente del lenguaje de programación. Existen implementaciones para Fortran, C y C++. Facilita la comunicación entre procesos distintos. Funciona haciendo un fork del programa. Pudiéndose distribuir los procesos en distintos procesadores, ubicados en una o varias máquinas. 8

Qué ventajas tiene el MPI? El MPI permite distribuir sus nodos tanto en distintas computadoras como en distintos procesadores en una misma computadora. Permite también que se asignen varios procesos a un mismo procesador, así pues si se tiene un Cluster heterogéneo de computadoras, se puede, por ejemplo, asignar más procesos (es decir, más tareas) a los procesadores más rápidos. 9

Implementación usada La implementación del MPI usada fue LAM/MPI, que es una implementación del estándar MPI (implementado el MPI- 1.2 completo, y muchas cosas del MPI-2). Esta implementación está hecha sólo para GNU/Linux, lo que hace una necesidad el usar ese sistema operativo en todas las computadoras que conformen parte del Cluster. 10

Instrucciones básicas del MPI Las instrucciones básicas del MPI cubren 3 aspectos: Inicialización y terminación del MPI. Identificación de quién soy y cuántos somos. Envío y recepción de mensajes entre los procesos. 11

Inicialización y terminación del MPI Todo programa MPI debe comenzar con la instrucción: MPI Init(&argc, &argv); Y debe terminar con: MPI Finalize(); 12

Identificación de quién soy y cuántos somos Con las siguientes instrucciones se puede obtener la información básica de los nodos, es decir, cuántos son, y cuál soy. int myrank; // Numero de proceso. int nprocs; // Numero total de procesos. MPI Comm rank(mpi COMM WORLD, &myrank); MPI Comm size(mpi COMM WORLD, &nprocs); 13

Envío y recepción de mensajes entre los procesos Las instrucciones que soportan el esqueleto de todo programa MPI son: Enviar mensaje: MPI Send(buffer, contador, tipodato, destino, tag, MPI COMM WORLD); Recibir mensaje: MPI Recv(buffer, maxcontador, tipodato, origen, tag, MPI COMM WORLD, &status); 14

Instrucciones colectivas El MPI provee de instrucciones colectivas, que se aplican a todos los procesos al mismo tiempo. Las funciones colectivas básicas son las necesarias para enviar información desde un proceso al mismo tiempo a todos los demás, y recibir, aplicando una operación, la información de todos los procesos en uno solo. Éstas son: MPI Bcast(buffer, contador, tipodato, root, MPI COMM WORLD); MPI Reduce(sendbuf, recvbuf, contador, tipodato, operacion, root, MPI COMM WORLD); 15

Ejemplo básico: cálculo de PI #include "mpi.h" #include <stdio.h> #include <math.h> int main(int argc, char argv[]) { int done = 0, n, myid, numprocs, i; double PI25DT = 3.141592653589793238462643; double mypi, pi, h, sum, x; MPI Init(&argc,&argv); MPI Comm size(mpi COMM WORLD,&numprocs); MPI Comm rank(mpi COMM WORLD,&myid); while (!done) { if (myid == 0) { printf("introduzca la cantidad de intervalos: (0 sale) "); scanf(" %d",&n); 16

} } MPI Bcast(&n, 1, MPI INT, 0, MPI COMM WORLD); if (n == 0) break; h = 1.0 / (double) n; sum = 0.0; for (i = myid + 1; i <= n; i += numprocs) { x = h ((double)i 0.5); sum += 4.0 / (1.0 + x x); } mypi = h sum; MPI Reduce(&mypi, &pi, 1, MPI DOUBLE, MPI SUM, 0, MPI COMM WORLD); if (myid == 0) printf("pi es aproximadamente %.16f, Error %.16f\n", pi, fabs(pi PI25DT)); } MPI Finalize(); return 0; 17

Esquema del ejemplo 18

Desventajas de ese esquema El esquema utilizado en el ejemplo, es considerado un esquema de paralelización eficiente, pues divide en forma simple y equitativa la tarea. La desventaja que puede tener es que el tiempo de la parte paralelizada, será lo que se demore el proceso más lento. Esto es especialmente fastidioso si el cluster es muy heterogéneo y cuenta con procesadores de distintas velocidades. Dependerá el problema a resolver el esquema de paralelización a usar. 19

Maestro/Esclavo En el esquema maestro/esclavo, se tiene un proceso principal (maestro) que se encarga de asignarle tareas a los demás procesos (esclavos). 20

Aplicación Real: Especificaciones del problema Para un proyecto de un curso, que luego formó parte de un proyecto de la DAI, necesitaba hacer unos cálculos ligeramente complejos. Esa parte se titulaba Aspectos Fenomenológicos de la Física de Neutrinos Masivos. Necesitaba calcular un espectro (una especie de histograma), que era resultado de la convolución de una integral (es decir, una doble integral), en que para cada punto de la curva sobre la que se integraba, se necesitaba resolver una sumatoria doble, y en la cual, en cada elemento se necesitaba la solución de una ecuación diferencial matricial (3x3 de números complejos, que se resolvía usando Runge Kutta de orden 4). (Tiempo aproximado por cálculo 1 2 min). 21

Además, ese espectro se necesitaba obtener para ciertos parámetros dados (6 parámetros), que se variaban en una malla de puntos (de 6 dimensiones). Por simplicidad, se fijaban cortes de estos parámetros, y se dejaban dos parámetros, que serían los que se variarían. Entonces para cada par de valores de estos parámetros se realizaba el cálculo mencionado. Para cada corte, se necesitaban en un primer cálculo, unos 10000 puntos para obtener resultados razonables. Considerando 1 min por punto, se necesitarían 166 horas para obtener el resultado final de un corte. 22

Aplicación Real: Herramientas usadas Para resolver ese problema, se trabajó en un entorno Red Hat. Se usaron los siguientes compiladores: g++, gcc, g77. La implementación de MPI usada fue LAM/MPI. Para la generación de los gráficos se usó: GNUPlot, PAW y Root. El conjunto de programas desarrollados consta de más de 13000 líneas de código. 23

Aplicación Real: Atacando el problema En este problema, muchas fases del cálculo podían ser paralelizables. Las integrales, las sumatorias, las ecuación diferencial. Pero para simplificarlo, reduje la paralelización, a nivel del cálculo de un punto de la malla. Atacaría el problema usando un esquema maestro/esclavo, en el cual la tarea nuclear sería el cálculo de un punto de la malla. Bajo este esquema, se tiene un proceso maestro, que es el que tiene en su espacio de memoria, toda la malla, y manda a cada proceso esclavo la tarea de calcular el espectro correspondiente para un punto de esa malla. 24

Detallando esquema Para detallar mejor el esquema, aquí está el pseudocódigo de la parte paralelizada: Inicializar MPI Identificarse como proceso Si soy maestro (proceso 0), generar lista (malla) y hacer la Tarea Maestro. Si no soy maestro, soy esclavo, entonces hacer la Tarea Esclavo. 25

Tarea Maestro Inicializar seguir como la cantidad de procesos más la cantidad de puntos. Inicializar n = 0 Mientras seguir > 0 Recibir cualquier mensaje de cualquier proceso. Si identificador de mensaje es Estoy Libre entonces Si n < cantidad de tareas (es decir, falta tareas por hacer) entonces Enviar mensaje al proceso del que se recibió (desde ahora source) informando que se le mandará una tarea. Enviar a source el número de tarea. Enviar a source la información de la tarea. Incrementar n. 26

Si no hay más tareas Enviar mensaje a source informando que no hay más tareas, que ya pare su ejecución. Decrementar seguir. Si identificador de mensaje es Mando Solución de Tarea, entonces Recibir número de tarea de source. Recibir el objeto con la data de la tarea. Decrementar seguir. 27

Tarea Esclavo Mientras seguir Enviar mensaje a maestro con identificador Estoy Libre Recibir mensaje de maestro, que le dirá si quedan o no tareas, es decir si va a seguir o no Si seguir, entonces Recibir de maestro el número de tarea. Recibir de maestro la data de la tarea. Calcular el resultado de la tarea pedida. Enviar mensaje a maestro con identificador Mando Solución de Tarea Mandar número de tarea Mandar data de la tarea, incluyendo resultados. 28

Código Aquí están las partes importantes del código. Este primer método es ejecutado en todos los procesos: int kamland::generalistatodoa(const setdata estadoinicial, const setdata estadofinal, const setdata cantidades, const setdata tipocambio, int baseusada) { int indice, i, j, k, ini, nuevoselementos; / Variables sobre la malla / kamlandtest anterior; elementosultimatarea = 0; 29

int quiensoy, cuantossomos; tiempoultimatarea = MPI Wtime(); MPI Comm size ( MPI COMM WORLD, &cuantossomos ); MPI Comm rank ( MPI COMM WORLD, &quiensoy ); if ((cuantossomos > 1) && (quiensoy!= 0)) return esclavogeneralistatodo(quiensoy); / / aqui esta el codigo para generar la malla obviado por ser varias paginas que no vienen al caso. if (cuantossomos > 1) return maestrogeneralistatodo(ini, ini + nuevoselementos, cuantossomos); for(i = 0; i < nuevoselementos; i++) { indice = ini + i; 30

} generaelemento(indice); // Calculo de LA TAREA } tiempoultimatarea = MPI Wtime() tiempoultimatarea; return 0; 31

Código: Tarea Maestro int kamland::maestrogeneralistatodo(int inicial, int final, int cuantos) { int seguir, n, siseguir, noseguir; MPI Status status; siseguir = 1; noseguir = 0; seguir = cuantos 1 + final inicial; n = inicial; while(seguir) { MPI Recv(0, 0, MPI INT, MPI ANY SOURCE, MPI ANY TAG, MPI COMM WORLD, &status); if (status.mpi TAG == KTAGLIBRE) { if (n < final) { 32

MPI Send(&siseguir, 1, MPI INT, status.mpi SOURCE, KTAGLIBRE, MPI COMM WORLD); MPI Send(&n, 1, MPI INT, status.mpi SOURCE, KTAGINFO, MPI COMM WORLD); lista[n].enviarme(status.mpi SOURCE, KTAGINFO, 2); n++; } else { MPI Send(&noseguir, 1, MPI INT, status.mpi SOURCE, KTAGLIBRE, MPI COMM WORLD); seguir ; } } else if (status.mpi TAG == KTAGMANDO) { int i; MPI Recv(&i, 1, MPI INT, status.mpi SOURCE, KTAGINFO, MPI COMM WORLD, &status); lista[i].recibirme(status.mpi SOURCE, KTAGINFO, 1); 33

} lista[i].kcurva.datax = testbase.kcurva.datax; lista[i].kcurva.externodatax = 1; seguir ; } } tiempoultimatarea = MPI Wtime() tiempoultimatarea; return 0; 34

Código: Tarea Esclavo int kamland::esclavogeneralistatodo(int numeroesclavo) { int seguir, n; MPI Status status; lista = new kamlandtest[1]; while (seguir) { MPI Send(0, 0, MPI INT, 0, KTAGLIBRE, MPI COMM WORLD); MPI Recv(&seguir, 1, MPI INT, 0, KTAGLIBRE, MPI COMM WORLD, &status); if (seguir) { MPI Recv(&n, 1, MPI INT, 0, KTAGINFO, MPI COMM WORLD, &status); lista[0].recibirme(0, KTAGINFO, 2); generaelemento(0); // Calculo de LA TAREA elementosultimatarea++; MPI Send(0, 0, MPI INT, 0, KTAGMANDO, MPI COMM WORLD); 35

} MPI Send(&n, 1, MPI INT, 0, KTAGINFO, MPI COMM WORLD); lista[0].enviarme(0, KTAGINFO, 1); } } tiempoultimatarea = MPI Wtime() tiempoultimatarea; return numeroesclavo; 36

Referencias http://www.lam-mpi.com http://www.cecalc.ula.ve/hpclc/sitio html/i program.html 37