Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.

Slides:



Advertisements
Presentaciones similares
El lenguaje de programación C - El primer programa -
Advertisements

Estructuras de decisión en C
Algoritmos paralelos Lab. 1: Introducción
CAPITULO I. ARREGLOS Un arreglo es un grupo de posiciones en memoria relacionados entre si, por el hecho de que todas tienen el mismo nombre y son del.
Fundamentos de la Programación Estructurada
Programacion de Computadora Prof. Obadiah Oghoerore.
Funciones. Programación, Algoritmos y Estructuras de Datos.
proPar Curso 13/14 4 2, 3, 2 2, 2 5 Computadores Paralelos
Programación Estructurada
Programación con paso de mensajes: MPI
ÁRBOLES DE EXPRESION.
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
El Algoritmo de Floyd Capítulo 6.
Funciones y procedimientos
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Unidad I Java y C++ : Similitudes y diferencias
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
PRIMITIVAS DE SALIDA Curso de graficación I.
Semana 5 Subprogramas..
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Pase de Mensaje MPI Elaborado: Betzaida Romero. Agenda  Historia y Evolución  Que es MPI  Conceptos  Ventajas  Desventajas  Ejemplo  Conclusiones.
UNIDAD V Arreglos y Cadenas
CI TEORIA semana 4 Estructura Algorítmica: SELECCIÓN
Archivos.
Elaborado por Fernando Torre - Universidad Simón Bolívar ARREGLOS CI Computación I Universidad Simón Bolívar Dpto. de Computación y Tecnología de.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
MPISistemas Distribuidos1 MPI Un estándar de paso de mensajes para Clusters y Workstations Communications of the ACM, July 1996 J.J. Dongarra, S.W. Otto,
Programación de Memoria Compartida
Comunicación entre Procesos por pase de mensajes Universidad Simón Bolívar Departamento de Computación y T.I Sistemas de operación III CI-4822 Prof. Yudith.
Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.
Programación en Lenguaje C
El lenguaje de programación C - Vectores y matrices -
Introducción a los punteros Prof. Domingo Hernández.
ProParCurso 14/15 1Computadores Paralelos 2Programación basada en paso de mensajes 3Técnicas básicas de programación paralela Compulsiva, Divide y Vencerás,
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Informática Ingeniería en Electrónica y Automática Industrial
Tipo de dato Arreglo en C Uso del for con arreglos
Comunicadores Colectivos BARRIER Esta es una de las primeras que ya vimos. Bloquea todos los procesos hasta que todos los procesos del Comm la llaman.
LENGUAJE “C” Programación. Condicionales Los condicionales permiten al programa escoger entre varios posibles resultados dependiendo de la evaluación.
MPI: Message Passing Interface Vera Ortíz Thimoty Duéñez Saúl Moncada Ma. Cristina Otero Carolina teja.
Aitor Viana Sánchez Octavio Hombrados Juan F. Ramos Jesús López Bustos
(agradecimiento: Ruben Weht
APUNTADORES.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
El Cedazo de Eratosthenes Capítulo 5. Metas Analizar métodos de asignar bloques (“block allocation schemes”) Entender la función MPI_Bcast Estudiar métodos.
Ejemplos del Diseño de Algoritmos Paralelos (Transparencias de McGraw-Hill Modificadas)
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 22 de Mayo de 2004.
Tema: Mínimo común múltiplo
Tema: Mínimo común múltiplo (MCM)
PRINCIPIOS DE PROGRAMACIÓN
Ejemplos: float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; int N[] = {1, 2, 3, 6}; int M[][3] = {
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
ALGORITMOS PARALELOS DE MULTIPLICACIÓN DE MATRICES
Algoritmo.
Clase 1 Gabriela Araya Baez.. Char: Variable que almacena caracteres. Int: Variable que almacena enteros. Float: Variable que almacena decimales. Doble:
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Gabriela Araya Baez Estudiante Ingenieria Civil Industrial.
TIPOS DE DATOS Estructuras de control y repetición PARCIAL III.
Características de “C” Esta conformado por un Ambiente Integrado. Es un Lenguaje de Nivel medio.Es un compilador. Contiene un conjunto de palabras reservadas.
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada HERENCIA Tema: HERENCIA Ing. Javier Chamorro Cerón.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I.
GRIDS & e- Ciencia Curso Postgrado CSIC Junio 2006, Santander
Message Passing Interface
Puntero #include int main(int argc, char *argv[]) { int myVar = 378; printf("El valor de la variable es: %d\n", myVar); printf("Dirección de memoria de.
Transcripción de la presentación:

Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004

COMPUTACIÓN PARALELA IV PRÁCTICAS MPI

// Programa que simula un anillo // (para 4 procesos) #include #define max 5 main(int argc, char *argv[]){ int rango; int nprocs; int etiqueta = 50; // Cualquier número entero int destino; int fuente; char cad1[] = "cero"; char cad2[] = "uno"; char cad3[] = "dos"; char cad4[] = "tres"; char msgEnt[max]; // Contendrá el mensaje que se recibe MPI_Status estado; // Se inicializa el ambiente paralelo MPI_Init(&argc,&argv); // Obtiene el # de procesadores y su rango MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rango);

// Verifica que el # de procesadores sea 4 if(nprocs!=4){ printf("El número de procesadores no es el requerido\n"); exit(1); } else{ switch(rango){ case 0: destino = 1; fuente = 3; // Envía cad1 a procesador 1 MPI_Send(cad1,strlen(cad1)+1,MPI_CHAR, destino,etiqueta,MPI_COMM_WORLD); // Recibe mensaje de procesador 3 MPI_Recv(msgEnt,max,MPI_CHAR,fuente, etiqueta,MPI_COMM_WORLD,&estado); // Imprime mensaje de resultado printf("Soy %d y recibí mensaje: %s\n", rango,msgEnt); break; case 1: destino = 2; fuente = 0; // Envía cad2 a procesador 2 MPI_Send(cad2,strlen(cad2)+1,MPI_CHAR, destino, etiqueta, MPI_COMM_WORLD); // Recibe mensaje de procesador 0 MPI_Recv(msgEnt,max,MPI_CHAR,fuente, etiqueta,MPI_COMM_WORLD,&estado); // Imprime mensaje con el resultado printf("Soy %d y recibí mensaje: %s\n", rango,msgEnt); break;

case 2: destino = 3; fuente = 1; // Envía cad3 a procesador 3 MPI_Send(cad3,strlen(cad3)+1,MPI_CHAR, destino, etiqueta, MPI_COMM_WORLD); // Recibe mensaje de procesador 1 MPI_Recv(msgEnt, max, MPI_CHAR, fuente, etiqueta,MPI_COMM_WORLD,&estado); // Imprime mensaje con el resultado printf("Soy %d y recibí mensaje: %s\n", rango,msgEnt); break; case 3: destino = 0; fuente = 2; // Envía cad4 a procesador 0 MPI_Send(cad4,strlen(cad4)+1,MPI_CHAR, destino,etiqueta, MPI_COMM_WORLD); // Recibe mensaje de procesador 1 MPI_Recv(msgEnt, max, MPI_CHAR, fuente, etiqueta, MPI_COMM_WORLD,&estado); // Imprime mensaje con el resultado printf("Soy %d y recibí mensaje: %s\n", rango,msgEnt); } // Finaliza el ambiente paralelo MPI_Finalize(); }

RESULTADOS EN PANTALLA

/* Programa que muestra como es el criterio de justicia de la implementacion de paso de mensajes. Todos los procesos (excepto el proceso 0) envian 100 mensajes al proceso maestro (proceso 0). Despues el proceso 0 imprimira todos los mensajes tal como los recibe. Se utiliza MPI_ANY_SOURCE y MPI_ANY_TAG dentro de MPI_Recv. Es la implementacion MPI justa? */ #include main(int argc, char *argv[]){ int rank, size, i, buf[1]; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if(rank==0){ // Si es el proceso maestro // recibe cerca de (n-1)*100 mensajes, donde n // es el # de procesadores for(i=0;i<100*(size-1);i++){ MPI_Recv(buf, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status); printf("Mensaje proveniente del proceso %d con etiqueta %d\n", status.MPI_SOURCE, status.MPI_TAG); }

else{ // Si no es el proceso maestro for(i=0;i<100;i++) MPI_Send(buf, 1, MPI_INT, 0, i, MPI_COMM_WORLD); } MPI_Finalize(); return 0; } RESULTADOS EN PANTALLA

#include main(int argc, char *argv[]){ int rango, nprocs; // Se inicia el ambiente paralelo MPI_Init(&argc,&argv); // Se obtiene el # y rango de procesadores MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rango); // Se manda llamar a la función Bcast Bcast(rango, nprocs); // Finaliza ambiente paralelo MPI_Finalize(); } void Bcast(int mirango, int minprocs){ float a, b; int n, raiz=0; if(mirango == 0){ printf("Introduce 3 números (flotante flotante entero)\n"); scanf("%f %f %d",&a, &b, &n); }

// Broadcast del primer valor que está contenido en a MPI_Bcast(&a, 1, MPI_FLOAT, raiz, MPI_COMM_WORLD); printf("Rango: %d, recibí: %f\n", mirango, a); // Broadcast del segundo valor que está contenido en b MPI_Bcast(&b, 1, MPI_FLOAT, raiz, MPI_COMM_WORLD); printf("Rango: %d, recibí: %f\n", mirango, b); // Broadcast del tercer valor que está contenido en n MPI_Bcast(&n, 1, MPI_INT, raiz, MPI_COMM_WORLD); printf("Rango: %d, recibí: %d\n", mirango, n); } RESULTADOS EN PANTALLA

#include main(int argc, char *argv[]){ int rango, nprocs; // Inicializa el ambiente paralelo MPI_Init(&argc, &argv); // Obtiene # y rango de procesadores MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rango); // Se llama a la función Scatter Scatter(rango); // Finaliza el ambiente paralelo MPI_Finalize(); } void Scatter(int mirango){ int arreglo[8] = {3,5,7,9,11,13,15,17}; int recepcion = 0; int cont_recv = 1; int raiz = 0; // Función que distribuye un elemento del arreglo // a un procesador MPI_Scatter(&arreglo,sizeof(arreglo[0])/sizeof(int),MPI_INT, &recepcion,cont_recv,MPI_INT,raiz,MPI_COMM_WORLD); printf("rango: %d, elemento: %d\n",mirango,recepcion); }

RESULTADOS EN PANTALLA

#include main(int argc, char *argv[]){ int nprocs, rango; // Inicaliza el ambiente paralelo MPI_Init(&argc, &argv); // Obtiene el # y rango de los procesadores MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rango); // Llama a la función Gather Gather(rango, nprocs); // Finaliza el ambiente paralelo MPI_Finalize(); } void Gather(int mirango, int minprocs){ int arreglo[8] = {3,5,7,9,11,13,15,17}; int recepcion = 0; int arreglo1[sizeof(arreglo)/sizeof(int)]; int raiz = 0, i; }

// Se distribuye un elemento del arreglo a un procesador // hasta completar el número de elementos en un arreglo MPI_Scatter(&arreglo,sizeof(arreglo[0])/sizeof(int),MPI_INT, &recepcion,1,MPI_INT,raiz,MPI_COMM_WORLD); // Lee cada uno de los elementos que contiene cada procesador // y los envía al procesador raíz for(i=0;i<minprocs;i++){ MPI_Gather(&recepcion,1,MPI_INT,&arreglo1,1,MPI_INT, i,MPI_COMM_WORLD); } if(mirango == 0){ printf("Rango: %d\n",mirango); for(i=0;i<sizeof(arreglo1)/sizeof(int);i++) printf("%d\n",arreglo1[i]); }

RESULTADOS EN PANTALLA

PROYECTOS MPI 12 de Junio de 2004 ~> FFT (Fast Fourier Transform) EQUIPO #3 ~> Números primosEQUIPO #1 ~> Multiplicación de matricesEQUIPO #2 ~> Número PiEQUIPO #4