Brevísimo tutorial de MPI (Message Passing Interface) MC. Miguel Vargas Félix
|
|
- Daniel Aguirre Torres
- hace 5 años
- Vistas:
Transcripción
1 Brevísimo tutorial de MPI (Message Passing Interface) MC. Miguel Vargas Félix 19/10/10 1/34
2 Contenido Contenido Clusters Beowulf MPI (Message Passing Interface) Comunicación entre procesos Un programa simple con MPI Comunicación con bloqueo Comunicación sin bloqueo Ejecución en un cluster Depuración de programas MPI Algunos resultados MPI + OpenMP Sistemas grandes Preguntas? Bibliografía 2/34
3 Clusters Beowulf Clusters Beowulf Computadoras nodos escalvo Computadora nodo maestro Red externa Switch de red Características: Tecnología estandar Fáciles de instalar Costo reducido 3/34
4 Clusters Beowulf Existen sistemas operativos open source preparados para este tipo de arquitectura Rocks Clusters: PelicanHPC: Scientific Linux: También es posible utilizar Windows Windows HPC Server 2008: 4/34
5 Clusters Beowulf Cluster del CIMAT El Insurgente 5/34
6 MPI (Message Passing Interface) MPI (Message Passing Interface) Es una colección de funciones y programas para: Facilitar la comunicación entre procesos Ejecutar multiples veces un programa en un cluster compute-0-0.local compute-0-1.local master.local Procesador Procesador Procesador Procesador Procesador Procesador Memoria Memoria Memoria Tarjeta de red Tarjeta de red Tarjeta de red Tarjeta de red Switch de red Tarjeta de red Tarjeta de red Memoria Memoria Procesador Procesador Procesador Procesador compute-0-2.local compute-0-3.local Red externa Usualmente se ejecuta un proceso por core. Tiene soporte para threads y además es posible combinarlo con OpenMP 6/34
7 MPI (Message Passing Interface) La comunicación entre procesos se realiza por medio de: Mensajes de red entre nodos (via ethernet, Myrinet, InfiniBand) Memoria compartida (polling) entre procesos en una misma computadora Mensajes por sockets locales entre procesos en una misma computadora Funciona con: C C++ Fortran 77/90/95 Es el estandard de facto para comunicaciones en clusters con aplicaciones al cómputo matemático. Implementaciones open source: MPICH2: OpenMPI: 7/34
8 Comunicación entre procesos Comunicación entre procesos Cada proceso se identifica por un número llamado rango. Desde el punto de vista del software un proceso puede enviar y recibir mensajes de/y hacia cualquier otro proceso: rango 1 rango 0 rango 2 rango N-1 rango 3 rango 4 8/34
9 Comunicación entre procesos El programador no se tiene que preocupar por el medio de comunicación. Cada nodo reserva memoria independientemente, MPI proporciona las funciones para copiar esa información a otros nodos y para recibir esa información. MPI tiene funciones para: Enviar datos nodo a nodo Recibir datos nodo a nodo Enviar datos a muchos nodos (broadcasting) Recibir datos de muchos nodos (reduction) Sincronización de procesos Lectura/escritura de datos en paralelo Manejo de threads Vamos a revisar brevemente 10 funciones básicas 4 de control y 6 de comunicación. 9/34
10 Un programa simple con MPI Un programa simple con MPI El ejemplo siguiente muestra el programa mínimo con MPI. #include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { int size, rank; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("hola mundo (size = %i, rank = %i)\n", size, rank); MPI_Finalize(); return 0; } 10/34
11 Un programa simple con MPI Compilación En Windows con GCC y MPICH2 gcc -o hola hola.cpp -l mpi En Linux con GCC y OpenMPI o MPICH2 mpicc -o hola hola.cpp Para programas en C++ mpicxx -o hola hola.cpp 11/34
12 Un programa simple con MPI Ejecución El comando para ejecutar es mpiexec, hay que especificar el número de procesos y el path al programa mpiexec -n 3 hola.exe hola.exe hola.exe hola.exe #include <stdio.h> #include <mpi.h> #include <stdio.h> #include <mpi.h> #include <stdio.h> #include <mpi.h> int main(int argc, char** argv) { int size, rank; int main(int argc, char** argv) { int size, rank; int main(int argc, char** argv) { int size, rank; MPI_Init(&argc, &argv); MPI_Init(&argc, &argv); MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("hola mundo (size = %i, rank = %i)\n", size, rank); printf("hola mundo (size = %i, rank = %i)\n", size, rank); printf("hola mundo (size = %i, rank = %i)\n", size, rank); MPI_Finalize(); MPI_Finalize(); MPI_Finalize(); return 0; return 0; } return 0; } } Hola mundo (size = 3, rank = 0) Hola mundo (size = 3, rank = 1) Hola mundo (size = 3, rank = 2) 12/34
13 Un programa simple con MPI Funciones básicas MPI_Init(<pointer_to_int>, <pointer_to_char*>) Inicializa el proceso en MPI, bloquea la ejecución hasta que todos los procesos hayan sido inicializados. MPI_Comm_size(MPI_COMM_WORLD, <pointer_to_int>) Obtiene el número de procesos ejecutados en el grupo MPI_COMM_WORLD, éste es el grupo por default. Se pueden crear subgrupos de procesos. MPI_Comm_rank(MPI_COMM_WORLD, <pointer_to_int>) Obtiene el número de rango del proceso actual, los rangos van de 0 a size 1. MPI_Finalize() Termina la conección MPI, bloquea la ejecución hasta que todos los procesos terminen. 13/34
14 Comunicación con bloqueo Comunicación con bloqueo MPI_Send(<pointer_to_data>, <length>, <type>, <target>, <tag>, MPI_COMM_WORLD) Envia los datos en <pointer_to_data> de tamaño <length> y tipo <type> al proceso <target>. El identificador del mensaje es <tag> (un entero). MPI_Recv(<pointer_to_data>, <length>, <type>, <source>, <tag>, MPI_COMM_WORLD, MPI_STATUS_IGNORE) Recibe <length> datos de tipo <type> del proceso <source> y lo almacena en <pointer_to_data>. El identificador del mensaje es <tag> (un entero). La comunicación con bloqueo significa que la ejecución del proceso se para hasta que se envíe o reciba el mensaje. Los nombres predefinidos para los tipos de datos más comunes son: MPI_CHAR MPI_INT MPI_UNSIGNED MPI_LONG MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE char int unsigned int long unsigned long float double 14/34
15 Comunicación con bloqueo El siguiente es un ejemplo de comunicación con bloqueo en el que el nodo con rango 0 actuará como maestro y los nodos con rangos 1 a N-1 actuarán como esclavos. El nodo maestro enviará un vector a cada nodo esclavo. rango 1 rango 0 rango 2 rango N-1 rango 3 rango 4 Cada esclavo tendrá que reservar memoria para el vector a recibir. 15/34
16 Comunicación con bloqueo #include <stdio.h> #include <stdlib.h> #include <mpi.h> #define TAG_LENGTH #define TAG_DATA 2 else // Esclavos { int length; printf("slave (rank = %i)\n", rank); 1 MPI_Recv(&length, 1, MPI_INT, 0, TAG_LENGTH, MPI_COMM_WORLD, MPI_STATUS_IGNORE); int main(int argc, char** argv) { int size; int rank; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); double* data = (double*)malloc(sizeof(double)*length); MPI_Recv(data, length, MPI_DOUBLE, 0, TAG_DATA, MPI_COMM_WORLD, MPI_STATUS_IGNORE); free(data); } if (rank == 0) // Maestro MPI_Finalize(); { return 0; printf("master (size = %i)\n", size); } int length = 20; double* data = (double*)malloc(sizeof(double)*length); for (int r = 1; r < size; ++r) { MPI_Send(&length, 1, MPI_INT, r, TAG_LENGTH, MPI_COMM_WORLD); MPI_Send(data, length, MPI_DOUBLE, r, TAG_DATA, MPI_COMM_WORLD); } free(data); } 16/34
17 Comunicación sin bloqueo Comunicación sin bloqueo En el ejemplo siguiente es un esquema peer-to-peer. Cada nodo envía un mensaje al nodo con el siguiente rango. La comunicación no puede hacerse con bloqueo. Por qué? rango 1 rango 0 rango 2 rango N-1 rango 3 rango 4 17/34
18 Comunicación sin bloqueo En el siguiente código muestra la implementación de este ejemplo: #include <stdio.h> #include <stdlib.h> #include <mpi.h> int send_data; int recv_data; MPI_Request send_request; MPI_Request recv_request; #define TAG_MESSAGE 1 int main(int argc, char** argv) { int size; int rank; send_data = rank; MPI_Isend(&send_data, 1, MPI_INT, (rank + 1) % size, TAG_MESSAGE, MPI_COMM_WORLD, &send_request); MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Irecv(&recv_data, 1, MPI_INT, (rank + size - 1) % size, TAG_MESSAGE, MPI_COMM_WORLD, &recv_request); MPI_Waitall(1, &recv_request, MPI_STATUSES_IGNORE); printf("%2i recibio mensaje %i\n", rank, recv_data); MPI_Finalize(); return 0; } Introducimos el tipo de dato MPI_Request que es un identificador de solicitud. Sirve tanto para identificar solicitudes de envio o de recepción. 18/34
19 Comunicación sin bloqueo Las nuevas funciones utilizadas son: MPI_Isend(<pointer_to_data>, <length>, <type>, <target>, <tag>, MPI_COMM_WORLD, <pointer_to_request>) Solicita enviar <pointer_to_data> a <target>, con mensaje <tag>. La solicitud se almacena en <pointer_to_request> MPI_Irecv(<pointer_to_data>, <length>, <type>, <source>, <tag>, MPI_COMM_WORLD, <pointer_to_request>) Solicita recibir de <source> el mensaje <tag>, los datos se almacenarán en <pointer_to_data>. La solicitud se almacena en <pointer_to_request> MPI_Waitall(<request_count>, <pointer_to_requests>, MPI_STATUSES_IGNORE) Espera a que se completen todo un arreglo de solicitudes. 19/34
20 Comunicación sin bloqueo El siguiente es un ejemplo de una comunicación donde todos los nodos envian mensajes a todos los demás nodos. rango 1 rango 0 rango 2 rango N-1 rango 3 rango 4 Ahora necesitaremos arreglos de solicitudes (MPI_Request) para manejar las comunicaciones sin bloqueo. A continuación el código de este ejemplo: 20/34
21 Comunicación sin bloqueo #include <stdio.h> #include <mpi.h> else { send_request[r] = MPI_REQUEST_NULL; recv_request[r] = MPI_REQUEST_NULL; } #define TAG_MESSAGE 1 int main(int argc, char** argv) { int size; int rank; } int received = 0; do { int r; MPI_Waitany(size, recv_request, &r, MPI_STATUS_IGNORE); printf("%i recibio mensaje '%i' desde %i\n", rank, recv_data[r], r); ++received; } while (received < size - 1); MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); int* send_data = new int[size]; int* recv_data = new int[size]; delete [] recv_request; delete [] send_request; delete [] recv_data; delete [] send_data; MPI_Request* send_request = new MPI_Request[size]; MPI_Request* recv_request =new MPI_Request[size]; for (int r = 0; r < size; ++r) { if (r!= rank) { send_data[r] = rank* r; MPI_Isend(&send_data[r], 1, MPI_INT, r, TAG_MESSAGE, MPI_COMM_WORLD, &send_request[r]); MPI_Irecv(&recv_data[r], 1, MPI_INT, r, TAG_MESSAGE, MPI_COMM_WORLD, &recv_request[r]); } MPI_Finalize(); return 0; } 21/34
22 Comunicación sin bloqueo La nueva función utilizada es: MPI_Waitany(<request_count>, <pointer_to_requests>, <pointer_to_int>, MPI_STATUS_IGNORE) Espera a que se complete una solicitud de un arreglo de solicitudes. El número de solicitud cumplida se almacena en <pointer_to_int>. 22/34
23 Ejecución en un cluster Ejecución en un cluster Necesitamos un archivo hosts compute-0-0.local compute-0-1.local compute-0-2.local compute-0-3.local Ejemplo de archivo de hosts La ejecución sería en la computadora master.local con: mpiexe -n 4 -hostfile hosts <ejecutable> De esta forma se ejecutaría una instancia del programa (proceso) en cada computadora esclavo. compute-0-0.local compute-0-1.local master.local Procesador Procesador Procesador Procesador Procesador Procesador Memoria Memoria Memoria Tarjeta de red Tarjeta de red Tarjeta de red Tarjeta de red Switch de red Tarjeta de red Tarjeta de red Memoria Memoria Procesador Procesador Procesador Procesador compute-0-2.local compute-0-3.local Red externa 23/34
24 Ejecución en un cluster Multiples procesos por nodo Es posible ejecutar varios procesos por nodo. Usando MPICH2 necesitamos un archivo machines master.local:1 compute-0-0.local:2 compute-0-1.local:2 compute-0-2.local:2 compute-0-3.local:2 La ejecución sería: mpiexe -n 9 -machinefile machines <ejecutable> Usando OpenMPI se usa el archivo hosts con el formato: master.local slots=1 compute-0-0.local slots=2 compute-0-1.local slots=2 compute-0-2.local slots=2 compute-0-3.local slots=2 La ejecución sería: mpiexe -n 9 -hostfile hosts <ejecutable> 24/34
25 Ejecución en un cluster El estado del cluster 25/34
26 Depuración de programas MPI Depuración de programas MPI Depurar programas con MPI puede ser difícil, procesos ejecutándose en varias computadoras al mismo tiempo, muchos gigabytes de información, problemas de sincronización, etc. La forma más simple de hacer esto es hacer que los programas impriman mensajes. Hay debugers comerciales: TotalView (GNU-Linux/Unix) Microsoft Visual Studio Professional Edition (Windows) También puede hacerse con herramientas gratuítas/libres como el GNU Debugger (GDB) y el Microsoft Visual Studio Express Edition. A continuación vamos a mostrar varios trucos para depurar programas con MPI. Estos trucos solo funcionarán con unos pocos procesos (probablemente menos de cinco) ejecutándose en le misma computadora. Esto puede ser suficiente para pruebas conceptuales del código. 26/34
27 Depuración de programas MPI GNU-Linux/Unix Tenemos que ejecutar el GDB de tal manera que sea éste el que llame nuestro programa. Para hacer esto visualmente más cómodo, vamos a ejecutar cada instacia del GDB en una ventana diferente. Primero hay que crear un archivo con los comandos para inicializar el GDB. Por ejemplo, el archivo gdb.txt pone breakpoints en las funciones Master y Slave, además ejecutará el programa utilizando in.dat y out.dat como argumentos. b Master b Slave r in.dat out.dat Para correr tres instancias de un programa llamando al GDB tres veces, cada una en una terminal diferente: mpiexec -n 3 xterm -e gdb -q -tui -x gdb.txt./programa 27/34
28 Depuración de programas MPI La siguiente imagen muestra la ejecución de este ejemplo: 28/34
29 Depuración de programas MPI Windows Tenemos que ejecutar el Visual Studio varias veces, una vez por cada instancia del programa. Para depurar es necesario que el código fuente del programa esté ubicado en el directorio donde se compilo el programa. Hay que crear un archivo batch que contenga los parametros, la ruta del ejecutable, off set MPI = "c:\program Files\MPICH2\bin\mpiexec.exe" set IDE = "c:\program Files\Visual Studio\Common7\IDE\VCExpress.exe" set EXE = "c:\development\program.exe" set IN = "c:\development\test\in.dat" set OUT= "c:\development\test\out.dat" %MPI% -n 3 %IDE% /SafeMode /debugexe %EXE% %IN% %OUT% La base de datos de símbolos del programa (archivo.pdb) debe estar en el mismo directorio que el ejecutable. 29/34
30 Depuración de programas MPI La siguiente imagen muestra la ejecución de este ejemplo: 30/34
31 Algunos resultados MPI + OpenMP Algunos resultados MPI + OpenMP Number of threads Total time [s] Edificio 3 264, , ,684 69,255,522 1e Parallel cholesky Total iterations Iteration time [s] Time [s] Problem: Dimension: Elements: Nodes: Variables: nnz(a): Global tolerance Partitions Overlapping Solver La memoria total: 13,438,244,806 [bytes] Memoria nodo maestro: 308,703,548 [bytes] Memoria en nodos esclavo: 486,279,305 [bytes] Threads 31/34
32 Sistemas grandes Sistemas grandes Ecuaciones 3,970,662 14,400,246 32,399,048 41,256,528 63,487,290 78,370,466 82,033,206 Tiempo [h] Memoria [GB] Procesadores PCs Tiempo [horas] ,970,662 14,400,246 32,399,048 41,256,528 63,487,290 78,370,466 82,033,206 Número de ecuaciones 32/34
33 Preguntas? Preguntas? 33/34
34 Bibliografía Bibliografía [Ster95]T. Sterling, D. J. Becker, D. Savarese, J. E. Dorband, U. A. Ranawake, C. V. Packer. BEOWULF: A Parallel Workstation For Scientific Computation. Proceedings of the 24th International Conference on Parallel Processing, [MPIF08]Message Passing Interface Forum. MPI: A Message-Passing Interface Standard, Version 2.1. University of Tennessee, /34
Brevísimo tutorial de MPI (Message Passing Interface) Miguel Vargas
Brevísimo tutorial de MPI (Message Passing Interface) Miguel Vargas 19/10/10 1/33 Contenido Contenido Clusters Beowulf MPI (Message Passing Interface) Comunicación entre procesos Un programa simple con
Cómputo en paralelo con MPI
Cómputo en paralelo con MPI Miguel Vargas-Félix miguelvargas@cimat.mx CIMAT, October 9, 2015 1/35 Clusters Beowulf Master node External network Slave nodes Network switch Características: Tecnología estandar
INTRODUCCIÓN A LA PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI SISTEMAS PARALELOS Y DISTRIBUIDOS
INTRODUCCIÓN A LA PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI 1 Y DISTRIBUIDOS GRADO EN INGENIERÍA INFORMÁTICA INGENIERÍA DE COMPUTADORES ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA
SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla
SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GIC. PRÁCTICA 9 Departamento de Arquitectura y Tecnología de Computadores Universidad de Sevilla PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI. PREPARACIÓN
Programación en Entornos Paralelos: MPI
1-11 Marzo de 2017 FACET -UNT Programación en Entornos Paralelos: MPI Graciela Molina mgracielamolina@gmailcom TRADICIONALMENTE Procesamiento secuencial 2 TRADICIONALMENTE Procesamiento secuencial Si ya
MPI es un estándar de programación en paralelo mediante paso de mensajes que permite crear programas portables y eficientes.
Programación paralela en MPI MPI es un estándar de programación en paralelo mediante paso de mensajes que permite crear programas portables y eficientes. Introducción a MPI MPI fue creado en 1993 como
Message Passing Interface (MPI)
Message Passing Interface (MPI) INTRODUCCIÓN MPI (Message Passing Interface) como es un interfaz estandarizada para la realización de aplicaciones paralelas basadas en pasaje de mensajes. El modelo de
Programación Paralela: Memoria Distribuida
Programación Paralela: Memoria Distriuida MPI: Un caso de estudio Introducción Estas máquinas surgen de forma natural al conectar distintas máquinas en red y ponerlas a cooperar. La red será clave. Arquitectura
TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (segunda parte)
TEMA 5: PARALELISMO A NIVEL DE HILOS, TAREAS Y PETICIONES (TLP, RLP) (segunda parte) SISTEMAS PARALELOS Y DISTRIBUIDOS www.atc.us.es Dpto. de Arquitectura y Tecnología de Computadores. Universidad de Sevilla
MPI Introducción Procesos Envío y recepción simple Envío y recepción no tan simple Comunicación colectiva. Herramientas de depuración y evaluación
Tutorial sobre MPI Temario 1 MPI Introducción Procesos Envío y recepción simple Envío y recepción no tan simple Comunicación colectiva Herramientas de depuración y evaluación arqavapar MPI (Introducción)
Interfaz de Paso de Mensajes MPI. Christian Chinchilla Brizuela
Interfaz de Paso de Mensajes MPI Christian Chinchilla Brizuela Agenda Definición Objetivo principal MPI Historia Ventajas Desventajas Estructura MPI Programa MPI Llamadas de MPI Funciones Principales MPI
Procesamiento Paralelo
Procesamiento Paralelo Introducción a MPI Javier Iparraguirre Universidad Tecnológica Nacional, Facultad Regional Bahía Blanca 11 de Abril 461, Bahía Blanca, Argentina jiparraguirre@frbb.utn.edu.ar http://www.frbb.utn.edu.ar/hpc/
Sistemas Complejos en Máquinas Paralelas
Sistemas Complejos en Máquinas Paralelas Clase 1: OpenMP Francisco García Eijó Departamento de Computación - FCEyN UBA 15 de Mayo del 2012 Memoria compartida Las mas conocidas son las máquinas tipo Symmetric
Presentación de Open MPI
Presentación de Open MPI Qué es Open MPI? Se trata de una API de código abierto desarrollada para facilitar la programación paralela y/o distribuida que: Implementa el estándar MPI. Permite la distribución
Bioingeniería I Algoritmos Genéticos en paralelo
Bioingeniería I Algoritmos Genéticos en paralelo Ing. Leandro D. Vignolo, Ing. E. Marcelo Albornoz 2 de mayo de 2007 1. Cálculo distribuido y paso de mensajes El cálculo paralelo es el uso de múltiples
Paradigma de paso de mensajes
Paradigma de paso de mensajes Curso 2011-2012 Índice Visión lógica del paradigma de paso de mensajes. Operaciones básicas en paso de mensajes. Operaciones bloqueantes. Operaciones no bloqueantes. MPI:
Implementación de un Cluster de Computadoras con software libre para Computación Científica en Jicamarca
Implementación de un Cluster de Computadoras con software libre para Computación Científica en Jicamarca A.Zamudio M. Milla Contenido de la Presentación 1 Radio Observatorio de Jicamarca 2 3 4 5 6 Índice
Herramientas Visuales de Compilación en C. LUIS MENGUAL (c)
Herramientas Visuales de Compilación en C Visual Studio 2005 (I) Herramienta para implementar, ejecutar y compilar código fuente en distintos lenguajes Entorno visual amigable y flexible Entorno de Depuración
Práctica 1. Primera experiencia con MPI
Práctica 1 Primera experiencia con MPI Septiembre-Diciembre 2008 ÍNDICE 1 VISIÓN GLOBAL DE MPI... 2 2 PRIMITIVAS BÁSICAS DE MPI PARA CREAR PROCESOS Y COMUNICACIÓN... 3 2.1 CONTROL DE PROCESOS... 4 2.2
Herramientas Visuales de Compilación en C. LUIS MENGUAL (c)
Herramientas Visuales de Compilación en C Visual Studio 2010 (I) Herramienta para implementar, ejecutar y compilar código fuente en distintos lenguajes Entorno visual amigable y flexible Entorno de Depuración
Herramient tas Vi Visuales de l d Compilación en C LUIS MENGUAL (c)
Herramientas Visuales de Compilación en C Visual Studio 2005 (I) Herramienta para implementar, ejecutar y compilar código fuente en distintos lenguajes Entorno visual amigable y flexible Entorno de Depuración
Master SIA. Programación de Sistemas Paralelos. MPI: Ejercicios prácticos. Ejercicio 1. Facultad de Informática
Master SIA Facultad de Informática Programación de Sistemas Paralelos MPI: Ejercicios prácticos Te proponemos realizar estos cuatro ejercicios. Al final, y junto con los ejercicios sobre OpenMP, hay que
COMPUTACIÓN DE ALTA PERFORMANCE
COMPUTACIÓN DE ALTA PERFORMANCE 2011 1 MPI-I COMPUTACIÓN DE ALTA PERFORMANCE Curso 2011 Sergio Nesmachnow (sergion@fing.edu.uy) Santiago Iturriaga (siturria@fing.edu.uy) Gerardo Ares (gares@fing.edu.uy)
Es una API (Aplication Program Interface) que se usa para paralelismo basado en hilos múltiples en entornos de memoria compartida
Algo de OPENMP Memoria Compartida Threads O hilos, se definen como flujos de instrucciones independientes, que se ejecutan separadamente del programa principal. Con estos hilos se aprovecha mucho una máquina
Programación Paralela en MPI. Xavier Andrade V.
Programación Paralela en MPI Xavier Andrade V. Introducción A pesar del aumento exponencial de la capacidad de los procesadores, esta no es suficiente para el estudio de muchos sistemas. Es necesario entonces
1 Primitivas básicas de OpenMP
1 Primitivas básicas de OpenMP Consultar la página oficial de la plataforma OpenMP http://www.openmp.org/drupal/ Pragmas Es una directiva para el compilador que permite la definición de nuevas directivas
Sistemas distribuidos Message Passing Interface
Sistemas Operativos, primer cuatrimestre de 2013 Sistemas distribuidos N procesos corriendo en M equipos físicamente separados. Se acabó la memoria compartida en el caso general. Podría haberla en ciertos
Computacion de Alto Performance
Computacion de Alto Performance Abraham Zamudio Abraham Zamudio Computacion de Alto Performance 1/47 Indice 1 Algunos Aspectos Teoricos 2 Paralelismo Computacional 3 Linux Cluster Hardware Software 4 MPICH
2º curso / 2º cuatr. Arquitectura de Computadores. Grado en Ing. Informática. Seminario 0. Entorno de programación: atcgrid y gestor TORQUE
2º curso / 2º cuatr. 2º curso / 2º cuatr. Grado en Ing. Informática Arquitectura de Computadores Seminario 0. Entorno de programación: atcgrid y gestor TORQUE 2 Contenidos Cluster de prácticas (atcgrid)
Programación en Paralelo con MPI en Clusters Linux
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
EVALUACIÓN DEL DESEMPEÑO DE UN CLUSTER DE ALTO RENDIMIENTO SOBRE UNA INFRAESTRUCTURA DE NUBE.
Universidad de las Fuerzas Armadas- ESPE. 1 EVALUACIÓN DEL DESEMPEÑO DE UN CLUSTER DE ALTO RENDIMIENTO SOBRE UNA INFRAESTRUCTURA DE NUBE. Arellano García Alexis Israel, Fernández Molina José Eduardo. Ingeniería
Paralelismo. MPI Paso de mensajes. Francisco García Sánchez Departamento de Informática y Sistemas
Paralelismo MPI Paso de mensajes Francisco García Sánchez Departamento de Informática y Sistemas Contenido Introducción 1) Uso de MPI 2) Multiplicación de matrices 3) Ordenación por mezcla 4) Programación
Multiprocesamiento en lenguaje C Introducción a MPI
Multiprocesamiento en lenguaje C Introducción a MPI Message Passing Interface Pertinencia de la enseñanza del cómputo paralelo en el currículo de las ingenierías MPI MPI es un estándar de programación
Cómputo paralelo con openmp y C
Cómputo paralelo con openmp y C Sergio Ivvan Valdez Peña Guanajuato, México. 13 de Marzo de 2012 Sergio Ivvan Valdez Peña Cómputo Guanajuato, paralelo conméxico. openmp y () C 13 de Marzo de 2012 1 / 27
TP N 14 Compilando C/C++ bajo GNU/Linux
Taller de GNU/Linux 2003- TP14 - hoja 1/5 Universidad Nacional de La Matanza Ingeniería en Informática-Taller de GNU/Linux 2003 TP N 14 Compilando C/C++ bajo GNU/Linux Objetivos: Utilizar en forma básica
Modelo de paso de mensajes
Modelo de paso de mensajes Miguel Alfonso Castro García mcas@xanum.uam.mx Universidad Autónoma Metropolitana - Izt 17 de noviembre de 2016 Contenido 1 Comunicación punto a punto 2 3 Comunicación punto
Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III
República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados
Computación Matricial y Paralela
Computación Matricial y Paralela Programación híbrida Javier Cuenca Dpto. de Ingeniería y Tecnología de Computadores Domingo Giménez Dpto. de Informática y Sistemas Universidad de Murcia http://dis.um.es/~domingo
Taller de Sistemas Operativos Introducción
Taller de Sistemas Operativos Introducción Escuela de Ingeniería Civil en Informática Universidad de Valparaíso, Chile http:// Conceptos generales 2 Proceso stdin Descriptor Flujo (FILE*) 0 stdout 1 Proceso
Qué es y qué no es un sistema distribuido? M.C. Juan Carlos Olivares Rojas
Qué es y qué no es un sistema distribuido? M.C. Juan Carlos Olivares Rojas Distribuir Según el diccionario: dividir una cosa entre varios designando lo que a cada uno corresponde Problemática: muchas tecnologías
Gradiente conjugado con MPI
Gradiente conjugado con MPI Miguel Vargas-Félix miguelvargas@cimat.mx http://www.cimat.mx/~miguelvargas CIMAT, October 9, 2015 1/27 Gradiente conjugado con memoria distribuida Vamos a partir del algoritmo
Práctica 3. Generación de números primos
Práctica 3 Generación de números primos Septiembre-Diciembre 2007 1 Algoritmo secuencial (primosec) En esta práctica vamos a trabajar con la generación de números primos basado en el método conocido como
Práctica 1: (Tema 2) Instalación de MaRTE OS
Práctica 1: (Tema 2) Instalación de Objetivos: Instalar practicar el uso del entorno de de ción Concurrente oct-13 1 Acceso a los puestos del laboratorio Elegir la primera de las opciones de arranque:
FARMER en C y C++ bajo MPICH Antonio Carrillo Ledesma
FARMER en C y C++ bajo MPICH Antonio Carrillo Ledesma http://www.mmc.igeofcu.unam.mx/acl Objetivo El presente proyecto es sobre la implementación de un Maestro-Esclavo (farmer) en el lenguaje de programación
Instalación de un Super-Servidor de procesamiento paralelo basado en MPI
LABORATORIO: Simulación y Mecánica Computacional TRABAJO: Instalación de un Super-Servidor de procesamiento paralelo basado en MPI Idioma: Español Plataforma de Hardware: AMD64 Sistema Operativo: Debian
Toma de contacto con MPI
Toma de contacto con MPI Práctica 0: Toma de contacto con MPI Página - 0 ÍNDICE 1 Visión global de MPI...2 2 Primitivas básicas de MPI para crear procesos y comunicarse entre ellos...3 2.1 Control de procesos...3
1.El objetivo de un depurador
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA ELO320 Estructuras de Datos y Algoritmos 28/8/2008 Información Sobre gdb Tomás Arredondo Vidal gdb es un depurador desarrollado por
PROGRAMACIÓN PARALELA. Modelos de programación paralela Paradigmas de programación paralela
PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida Paradigmas de programación paralela
Procesamiento Paralelo
Procesamiento Paralelo MPI - Tipos y Topologías Javier Iparraguirre Universidad Tecnológica Nacional, Facultad Regional Bahía Blanca 11 de Abril 461, Bahía Blanca, Argentina jiparraguirre@frbb.utn.edu.ar
Elementos básicos de cómputo paralelo
Elementos básicos de cómputo paralelo Grandes paradigmas Máquinas de memoria compartida Todos los procesadores ven toda la memoria al mismo tiempo. La filosofía es básicamente dividir las tareas. EL estándar
Apellidos: Nombre: Matrícula: Examen Programación para Sistemas Grado en Ingeniería Informática (2009)
Examen 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad Politécnica de Madrid
Examen Teórico (1/3 de la nota final)
Examen Teórico (1/3 de la nota final) 105000016 - Programación para Sistemas Grado en Ingeniería Informática (2009) Lenguajes y Sistemas Informáticos e Ingeniería de Software Facultad de Informática Universidad
MPI y sus aplicaciones en infraestructuras Grid
MPI y sus aplicaciones en infraestructuras Grid Dr. Isabel Campos Plasencia Instituto de Física de Cantabria-IFCA Santander, Spain Grids y e-ciencia 2008, IFIC, Valencia Esquema Introducción a MPI MPI
José Matías Cutillas Lozano PROGRAMACIÓN PARALELA Y COMPUTACIÓN DE ALTAS PRESTACIONES
José Matías Cutillas Lozano PROGRAMACIÓN PARALELA Y COMPUTACIÓN DE ALTAS PRESTACIONES MÁSTER EN NUEVAS TECNOLOGÍAS EN INFORMÁTICA Diciembre 2010 Introducción Por qué utilizar Matlab paralelo? MATLAB es
PROGRAMACION MODULAR FUNCIONES
PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el tiempo de desarrollo, aprovechando módulos ya existentes Permitir la resolución
PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C
PROGRAMACION ESTRUCTURADA: Tema 1. El lenguaje de programación C Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido
Lenguaje C. Lenguaje C. Erwin Meza Vega
Lenguaje C Erwin Meza Vega Outline 1 Introducción 2 Tipos básicos de datos 3 Estructuras de control 4 Funciones 5 Ejemplos de funciones 6 Tipos compuestos de datos 7 Arreglos 8 Apuntadores (punteros) 9
Introducción al lenguaje C
Introducción al lenguaje C Programación 2 Profesorado de Informática CeRP del Suroeste, Colonia, Uruguay 15 de marzo de 2016 Programación 2 Introducción al lenguaje C 15 de marzo de 2016 1 / 34 Objetivos
Introducción rápida a la programación (estructurada ) con C++
Introducción rápida a la programación (estructurada ) con C++ A B No A? Si B A Los Bloques pueden ser una línea de código o un modulo (función o subrutina) que pueden estar contenido en otro archivo de
Área de Arquitectura y Tecnología de Computadores. Universidad Carlos III de Madrid SISTEMAS OPERATIVOS. Ejercicio. Programación en bash
Área de Arquitectura y Tecnología de Computares Universidad Carlos III de Madrid SISTEMAS OPERATIVOS Ejercicio. Programación en bash Gra de Ingeniería en Informática Curso 2016/2017 AUTORES (Nombre, Apellis,
PROTOCOLOS PARA LA INTERCONEXIÓN DE REDES
UNIVERSIDAD DE CANTABRIA DEPARTAMENTO DE INGENIERÍA DE COMUNICACIONES GRUPO DE INGENIERÍA TELEMÁTICA PROTOCOLOS PARA LA INTERCONEXIÓN DE REDES PRÁCTICA 4: DESARROLLO DE APLICACIONES CLIENTE/SERVIDOR MEDIANTE
Los prototipos de las funciones de MPI se detallan en el document: MPI_funciones.pdf
UNIVERSIDAD POLITECNICA DE MADRIDETSII COMPUTADORES II Profesor: Dr. Claudio Rossi, PhD Profesor asistente: Julián Colorado, PhDc 11,17,18, 24 de abril de 2012 PRACTICA: USO DE MPI (MESSAGE PASSING INTERFACE)
PRACTICA Nº 2. Puertos de Entrada Digital. Sistemas Electrónicos Digitales. Subgrupo: de febrero de 2.015
PRACTICA Nº 2 Puertos de Entrada Digital Sistemas Electrónicos Digitales Subgrupo: 1-8 23 de febrero de 2.015 Índice 1. Objetivos 2. Introducción 3. Desarrollo 4. Conclusiones 5. Bibliografía 6. Hojas
PROYECTO DE PROGRAMACIÓN DE COMPUTADORES DE MEMORIA DISTRIBUIDA USANDO MPI.
SISTEMAS PARALELOS Y DISTRIBUIDOS. 3º GII-IC. PRÁCTICA 10 (Versión MPI). CURSO 2012-2013 Departamento de Arquitectura y Tecnología de Computadores. Universidad de Sevilla OBJETIVOS PROYECTO DE PROGRAMACIÓN
UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA PROPUESTA DE PARALELIZACIÓN DE UNA APLICACIÓN SECUENCIAL DE ALTO RENDIMIENTO
UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA DIVISIÓN DE CIENCIAS BÁSICAS E INGENIERÍA PROPUESTA DE PARALELIZACIÓN DE UNA APLICACIÓN SECUENCIAL DE ALTO RENDIMIENTO LIC. COMPUTACIÓN ÁREA DE COMPUTACIÓN
MPI: Message Passing Interface. Arquitectura de Computadores II Ingeniería en Informática (4º Curso) Universidad Carlos III de Madrid
MPI: Message Passing Interface Arquitectura de Computadores II Ingeniería en Informática (4º Curso) Universidad Carlos III de Madrid Definición MPI es una interfaz de paso de mensaje que representa un
Introducción a la Computación (Matemática)
Introducción a la Computación (Matemática) Primer Cuatrimestre de 2016 Brevísima Introducción a la Organización de Computadoras 1 Mapa de la materia Programas simples en C++. Especificación de problemas.
Escalabilidad: El desempeño del software y hardware debe ser eficiente desde un grupo pequeño de procesadores a un grupo muy grande de procesadores.
Página 1 de 8 Introducción a BSP La motivación para el modelo de computación paralela BSP (The Bulk-Synchronous Parallel Model) surge de una comparación con lo que se observa en el mundo de la computación
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 19 de junio de 2007
UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INFORMÁTICA INGENIERÍA EN INFORMÁTICA. ARQUITECTURA DE COMPUTADORES II 19 de junio de 2007 Para la realización del presente examen se dispondrá de 2 1/2
FUNDAMENTOS DE PROGRAMACIÓN Asignatura correspondiente al plan de estudios de la carrera de Ingeniería Informática
Página 1/14 Universidad Nacional del Litoral Facultad de Ingeniería y Ciencias Hídricas Departamento de Informática FUNDAMENTOS DE PROGRAMACIÓN Asignatura correspondiente al plan de estudios de la carrera
Introducción general al Lenguaje C (2010/2011)
Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Introducción general al Lenguaje C (2010/2011) Universidad de Sevilla Índice
Introducción al lenguaje C
Introducción al lenguaje C Programación 2 Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Uruguay 2 de marzo de 2016 Programación 2 Introducción al lenguaje C 2 de marzo
METODOLOGÍA DE LA PROGRAMACIÓN PARALELA. Modelos de programación paralela Paradigmas de programación paralela
METODOLOGÍA DE LA PROGRAMACIÓN PARALELA Modelos de programación paralela Paradigmas de programación paralela Tipos de paralelismo Paso de mensajes Paralelismo de datos Memoria compartida Tipos de paralelismo
Estructuras de Datos Declaraciones Tipos de Datos
Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación
Uso avanzado de punteros
Uso avanzado de punteros Mario Medina C. mariomedina@udec.cl Punteros Contienen direcciones de memoria Punteros a tipos de datos simples int, char, float, double Punteros a estructuras Punteros a vectores
Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009
Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy Febrero 2009 Índice Elementos básicos Ejecución de un programa Estructuras de control Ciclos Ejercicios 2 Elementos Básicos
Quick Tutorial de C++ y CLion
Quick Tutorial de C++ y CLion Departamento de Computación, FCEyN, Universidad de Buenos Aires. 28 de Agosto de 2017 Bienvenidos al Laboratorio de Programación de Algoritmos y Estructura de Datos Equipo
Arquitectura de Computadores: Exámenes y Controles
2º curso / 2º cuatr. Grado en Ing. Informática Doble Grado en Ing. Informática y Matemáticas Arquitectura de Computadores: Exámenes y Controles Examen de Prácticas AC 05/07/2013 resuelto Material elaborado
Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez
Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:
Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++)
Codificación en C Como pasar de Pseudocódigo a C (con pequeños trucos de C++) Plantilla Librerias Constantes Algoritmo #include #include #define PI 3.1416 int main(void){ /*Variables*/
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1
Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 1 Contenidos: 1. Características generales de C 2. Edición y compilación de un programa C 3. Variables y tipos
Programación Paralela y Distribuida
Programación Paralela y Distribuida Centro Universitario UAEM Valle de México Unidad 1 Paragdigmas y Bases del Cómuto Paralelo 1.2 Paradigmas de la Programación en Paralelo Ingeniería en Computación (ICO)
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS
UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una
Descomposición de dominios
Descomposición de dominios Miguel Vargas 27/10/10 1/29 Contenido Contenido Solución de ecuaciones diferenciales con descomposición de dominios Dominios sin traslape, complemento de Schur Método alternante
Lenguaje de Programación: Compiladores de C y C++
UG Introducción a C/C++ Lenguaje de Programación: de C y C++ Universidad de Guanajuato Septiembre 2010 C C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell de
SD Examen 2 EVA. 1 of 11 2/5/2013 8:49 PM. Paralelo 1? Evaluaciones? SD Examen 2 EVA. Comenzado: Feb 5 en 8:50pm
Paralelo 1? Evaluaciones? SD Examen 2 EVA SD Examen 2 EVA Comenzado: Feb 5 en 8:50pm Question 1: 1 puntos Los [ Seleccionar ] son la union logica de multiples equipos informaticos que funcionan como uno.
Descripción y Contenido del Curso. Programación C++ Capacity Academy.
Descripción y Contenido del Curso Programación C++ Capacity Academy Educación en Tecnología de la Información Online, Efectiva y Garantizada Qué aprenderá si toma este Curso? En este curso aprenderás todo
Programación Multiproceso
Proyecto Universidad-Secundaria Incorporación de contenidos de programación paralela en la rama de tecnologías informáticas Facultad Informática, Universidad de Murcia e Instituto de Enseñanza Secundaria
Algoritmos y estructuras de datos
Algoritmos y estructuras de datos Dr. Eduardo A. Rodríguez Tello Laboratorio de Tecnologías de Información Cinvestav Tamaulipas ertello@tamps.cinvestav.mx Cursos de inducción a la MCC Cinvestav Tamaulipas
Biblioteca de sistema
* Para la realización del presente examen se aconseja un tiempo de 2 horas. Teoría 1. Explique en detalle cómo se pasa una llamada al sistema operativo. El sistema operativo se activa cuando debe responder
Redes para Clusters. Redes para Clusters. Redes Ethernet. Myrinet InfiniBand. Ethernet Fast Ethernet Gigabit Ethernet
Redes para Clusters Redes Ethernet Ethernet Fast Ethernet Gigabit Ethernet Myrinet InfiniBand Redes para Clusters Redes Ethernet Ethernet LAN introducida en 1982 y más utilizada en los años 90 Ancho de
Arquitecturas: Clusters. Edgar Valderrama Lucio Mederos
Arquitecturas: Clusters Edgar Valderrama Lucio Mederos Qué es un cluster? Es un sistema compuesto por varias computadoras (nodos) unidas por una red que se comporta como una única entidad. De un cluster
Programación científica Punteros y arreglos
Programación científica Punteros y arreglos Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Punteros y arreglos p. 1 Arreglo Un arreglo es un conjunto de una cantidad fija de variables
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX
Clases 04 y 05: Repaso de programación de sistemas basados en UNIX Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco efranco.docencia@gmail.com Estructuras de datos (Prof.
Plataformas de Tiempo Real
Master en Computación Plataformas de Tiempo Real POSIX Avanzado y Extensiones Tema 1. Ficheros y entrada/salida Tema 3. Monitorización y control del tiempo de ejecución Tema 4. Planificación EDF Tema 5.
Departamento de Automática
Departamento de Automática Ejemplo Producto escalar Producto escalar (secuencial) /*Cálculo del producto escalar programa secuencial */ #include #include typedef struct double *a;