Programación en MPI Capítulo 4. 4–2 NOT Gate 4–3 AND Gate.

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

Curso de java básico (scjp)
Métodos y parámetros.
El lenguaje de programación C - El primer programa -
Funciones y recursividad
Algoritmos paralelos Lab. 1: Introducción
El Diseño de Algoritmos Paralelos
Fundamentos de la Programación Estructurada
Programación, Algoritmos y Estructuras de Datos
Funciones. Programación, Algoritmos y Estructuras de Datos.
INFORMATICA I Funciones CLASE 13.
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Programación Estructurada
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
El Algoritmo de Floyd Capítulo 6.
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
El lenguaje de programación C - Funciones -
Programación I Teoría VI: Recursividad
Métodos Algoritmos y Desarrollo de Programas I. Cuando utilizar métodos  Los métodos se utilizan para romper un problema en pedazos de forma que este.
Universidad Autónoma del Estado de Hidalgo Instituto de Ciencias Básicas e Ingeniería Área Académica de Computación y Electrónica Licenciatura en Ciencias.
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.
Semana 5 Subprogramas..
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
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.
Clase Teórica No. 4 Programación IV
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Estructura de un programa en C
Funciones1 PROGRAMACIÓN ESTRUCTURADA EN PSEUDÓCODIGO Profr. Miguel Rodríguez Hernández PROGRAMACIÓN MODULAR O FUNCIONAL.
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Archivos.
Aplicado a programas openMP
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.
Ejemplos openMP.
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
Material de apoyo Unidad 4 Estructura de datos
El lenguaje de programación C - Vectores y matrices -
Sistemas Operativos II MC. Daniel Fajardo Delgado INSTITUTO TECNOLÓGICO DE CD. GUZMÁN 30 de Mayo de 2004.
Archivos Programación I MC Beatriz Beltrán Martínez.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Control de Flujo.
Lenguaje de Programación  Un lenguaje se puede definir como un conjunto de palabras y formas de expresión por medio de las cuales se comunican y relacionan.
Elementos básicos del lenguaje
(agradecimiento: Ruben Weht
Funciones Definidas por el Programador
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Alto Nivel. Y Es un compilador. YContiene un conjunto de palabras.
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.
Empleando apuntadores una función puede entregar múltiples resultados / /Esta función no funciona #include void intercambiaValores(float a, float b) {

LENGUAJE “C” Programación.
Fundamentos de Programación
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
Capítulo 2 “Subprogramas/Funciones - Arreglos”
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
 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.
MEMORIA DINÁMICA.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
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.
Repaso C Ficheros, memoria dinámica, … Pablo San Segundo (C-206)
INTRODUCCION A M (ESSAGE) P (ASSING) I (NTERFACE) Paradigma de Transferencia de Mensajes Cada procesador corre un programa Todas las variables son privadas.
Entrada y Salida en C++, Estructuras de Control Prof. Manuel B. Sánchez.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
GRIDS & e- Ciencia Curso Postgrado CSIC Junio 2006, Santander
Message Passing Interface
Transcripción de la presentación:

Programación en MPI Capítulo 4

4–2 NOT Gate

4–3 AND Gate

4–4 OR Gate

Circuitos Lógicos Los gates se combinan en circuitos usando la salida de un gate como la entrada de otra.

El Problema de Satisfacer un Circuito Es el problema de determinar de un circuito lógico con una salida si hay una combinación de entradas que hace la salida igual a 1.

Determinar la combinaciones de entradas que satisfacen el circuito

Método de Solución El problema es NP completo Ningun algorítmo polinomial se sabe Resolvemos el problema cotejando cada una de las 2 16 =65536 posibilidades Buscaremos todas las soluciones que existen.

Diseño del Algoritmo Descomposición funcional: Cada proceso (i.e., tarea) cotejará una combinación. No hay comunicaciones entre tareas. El tiempo para cotejar una combinación es variable. Balanceamos el cargo de computaciones asignando procesadores en una manera cíclica. Asignamos un proceso a un procesdaor.

Comunicadores Un comunicador provee el ambiente para pasar mensajes entre procesos. Si no se especifica, el comunicador es MPI_COMM_WORLD que incluye todos los procesos..

Rango Todo proceso de un comunicador tiene una identificación en ese comunicador, que se llama el rango (“rank”). MPI_Comm_rank(comunicador,&id) pone el rango del comunicador comunicador en id; Ejemplo: MPI_Comm_rank (MPI_COMM_WORLD,&id)

Tamaño El número de procesos en un comunicador se llama el tamaño (“size”) del comunicador.. MPI_Comm_size (comunicador,&p) pone en la variable p el tamaño del comunicador comunicador. Ejemplo: MPI_Comm_size (MPI_COMM_WORLD,&p);

Todo programa de MPI contiene #include int main (int argc,char *argv[]).. MPI_Init(&argc,&argv); MPI_Finalize(); return 0;

Satisfacer Circuito #include #include int main (int argc, char *argv[]) { int i; int id; int p; void check_circuit (int, int); MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &id); MPI_Comm_size (MPI_COMM_WORLD, &p); for (i = id; i < 65536; i += p) check_circuit (id, i); printf ("Process %d is done\n", id); fflush (stdout); MPI_Finalize(); return 0; }

Distribución de Trabajo Cada uno de los p procesadores coteja piso(65536/p) combinaciones. Proceso #id coteja las combinaciones i tales que i = id mod p Por ejemplo si p=8, Proceso #0 coteja combs. 0,8,16….,65528 Proceso #1 coteja combs 1,9,17,…,65529 ….… Proceso #7 coteja combs 7,15,22,…,65535

Para Cotejar una Combincación Dado el número i, extraer sus bits y guardarlos en un arreglo v[0],v[1],…,v[15] Expresar la salida del circuito como una expresión booleana E en las variables v[0],v[1],…,v[15] El cuerpo de la función check_circuit consistirá de if (E) imprimir (v[0]…v[15])

check_circuit /* Return 1 if 'i'th bit of 'n' is 1; 0 otherwise */ #define EXTRACT_BIT(n,i) ((n&(1<<i))?1:0) void check_circuit (int id, int z) { int v[16]; /* Each element is a bit of z */ int i; for (i = 0; i < 16; i++) v[i] = EXTRACT_BIT(z,i); if ((v[0] || v[1]) && (!v[1] || !v[3]) && (v[2] || v[3]) && (!v[3] || !v[4]) && (v[4] || !v[5]) && (v[5] || !v[6]) && (v[5] || v[6]) && (v[6] || !v[15]) && (v[7] || !v[8]) && (!v[7] || !v[13]) && (v[8] || v[9]) && (v[8] || !v[9]) && (!v[9] || !v[10]) && (v[9] || v[11]) && (v[10] || v[11]) && (v[12] || v[13]) && (v[13] || !v[14]) && (v[14] || v[15])) { printf ("%d) %d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n", id, v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9], v[10],v[11],v[12],v[13],v[14],v[15]); fflush (stdout); }

Compilar y Ejecutar Si el programa reside en el archivo sat1.c, se compila con mpicc –o sat1 sat1.c Se ejecuta con mpirun –np número sat1 donde número es el número de procesadores

Problema Modificado Cambiar el problema de satisfacer para que en vez de determinar las soluciones, se determina el número de soluciones. Esto se hace utilizando reducción.

Cambios al Programa Devolver 1 si la combinacion satisface el circuito y devolver 0 si no. Cada proceso lleva cuenta del número de combinaciones que el ha encontrado que satisfacen el circuitos. Usar reducción para determinar el número total de combinaciones que funcionan.

Cambios a check_circuit int check_circuit (int id, int z) { #define EXTRACT_BIT(n,i) ((n&(1<<i))?1:0) int v[16]; /* Each element is a bit of z */ int i; for (i = 0; i < 16; i++) v[i] = EXTRACT_BIT(z,i); if ((v[0] || v[1]) && (!v[1] || !v[3]) && (v[2] || v[3]) && (!v[3] || !v[4]) && (v[4] || !v[5]) && (v[5] || !v[6]) && (v[5] || v[6]) && (v[6] || !v[15]) && (v[7] || !v[8]) && (!v[7] || !v[13]) && (v[8] || v[9]) && (v[8] || !v[9]) && (!v[9] || !v[10]) && (v[9] || v[11]) && (v[10] || v[11]) && (v[12] || v[13]) && (v[13] || !v[14]) && (v[14] || v[15])) return 1; else return 0; }

Cambios a main #include int main (int argc, char *argv[]) { int global_solutions; int i; int id; int p; int solutions; int check_circuit (int, int); MPI_Init (&argc, &argv); MPI_Comm_rank (MPI_COMM_WORLD, &id); MPI_Comm_size (MPI_COMM_WORLD, &p); solutions = 0; for (i = id; i < 65536; i += p) solutions += check_circuit (id, i); MPI_Reduce (&solutions,&global_solutions,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD); printf("Process %d is done\n",id); fflush (stdout); MPI_Finalize(); if (id==0) printf ("There are %d different solutions\n",global_solutions); return 0; }

Prototipo de MPI_Reduce int MPI_Reduce ( void *operando, /* dir del primer elemento */ void *resultado /* dir del primer resultado */ int count, /* reducciones para llevar acabo */ MPI_Datatype tipo, /* type of elements */ MPI_Op operador, /* reduction operator */ int raiz, /* proceso que recibe resultado*/ MPI_Comm com /* comunicador */ )

La Llamada a MPI_Reduce MPI_Reduce (&solutions, &global_solutions, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD) if (id==0) printf ("There are %d different solutions\n", global_solutions);

Tipos de Dato MPI MPI_CHAR MPI_DOUBLE MPI_FLOAT MPI_INT MPI_LONG MPI_LONG_DOUBLE MPI_SHORT MPI_UNSIGNED_CHAR MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_UNSIGNED_SHORT

Operaciones de Reducción MPI_BAND MPI_BOR MPI_BXOR MPI_LAND MPI_LOR MPI_LXOR MPI_MAX MPI_MAXLOC MPI_MIN MPI_MINLOC MPI_PROD MPI_SUM

“Benchmarking” MPI_Barrier(comunicador) asegure que ninguno de los procesos en comunicador puedan avanzar despues de la barrera hasta que todos lleguen. MPI_Wtime() devuelve el número de segundos que han pasado después de un cierto momento.

El Código para Benchmarking double elapsed_time; … MPI_Init (&argc, &argv); MPI_Barrier (MPI_COMM_WORLD); elapsed_time = - MPI_Wtime(); … MPI_Reduce (…); elapsed_time += MPI_Wtime();

Tiempos de Ejecutación de SAT2 Núm. de procs. p Tiempo (t P ) Speedup ( t 1 / t p )

Asignación Benchmark the circuit problem discussed in class by adding the appropriate timing commands to the program. Determine the speedup for 2, 4, and 8 processors. All programs in the text can be downloaded from staff.seattleu.edu/quinnm/web/education/Parallel Programming staff.seattleu.edu/quinnm/web/education/Parallel Programming Hand in a table with the speedups in class on Thursday, February 1