Programaci - PowerPoint PPT Presentation

1 / 31
About This Presentation
Title:

Programaci

Description:

Un metodo de solucionar un problema en el cual se enumera todos los posibles ... double elapsed_time; MPI_Init (&argc, &argv); MPI_Barrier (MPI_COMM_WORLD) ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 32
Provided by: Doro158
Category:
Tags: dbl | programaci

less

Transcript and Presenter's Notes

Title: Programaci


1
Programación en MPI
  • Capítulo 4

2
NOT Gate
42
3
AND Gate
43
4
OR Gate
44
5
Circuitos Lógicos
  • Los gates se combinan en circuitos usando la
    salida de un gate como la entrada de otra.

6
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.

7
Determinar la combinaciones de entradas que
satisfacen el circuito
8
Método de Solución
  • El problema es NP completo
  • Ningun algorítmo polinomial se sabe
  • Resolvemos el problema cotejando cada una de las
    216 65536 posibilidades
  • Buscaremos todas las soluciones que existen.

9
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.

10
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.
  • .

11
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)

12
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)

13
Todo programa de MPI contiene
  • include ltmpi.hgt
  • includeltstdio.hgt
  • int main (int argc,char argv)
  • ..
  • MPI_Init(argc,argv)
  • MPI_Finalize()
  • return 0

14
Satisfacer Circuito
  • include ltmpi.hgtinclude ltstdio.hgtint 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 lt 65536
    i p) check_circuit (id, i) printf
    ("Process d is done\n", id) fflush
    (stdout) MPI_Finalize() return 0

15
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 p8,
  • Proceso 0 coteja combs. 0,8,16.,65528
    Proceso 1 coteja combs 1,9,17,,65529
  • .
    Proceso 7 coteja combs
    7,15,22,,65535

16
Para Cotejar una Combincación
  • Dado el número i, extraer sus bits y guardarlos
    en un arreglo v0,v1,,v15
  • Expresar la salida del circuito como una
    expresión booleana E en las variables
    v0,v1,,v15
  • El cuerpo de la función check_circuit consistirá
    de
  • if (E) imprimir (v0v15)

17
check_circuit
  • / Return 1 if 'i'th bit of 'n' is 1 0 otherwise
    /
  • define EXTRACT_BIT(n,i) ((n(1ltlti))?10)
  • void check_circuit (int id, int z)
  • int v16 / Each element is a bit of
    z /
  • int i
  • for (i 0 i lt 16 i) vi
    EXTRACT_BIT(z,i)
  • if ((v0 v1) (!v1 !v3)
    (v2 v3)
  • (!v3 !v4) (v4 !v5)
  • (v5 !v6) (v5 v6)
  • (v6 !v15) (v7 !v8)
  • (!v7 !v13) (v8 v9)
  • (v8 !v9) (!v9 !v10)
  • (v9 v11) (v10 v11)
  • (v12 v13) (v13 !v14)
  • (v14 v15))
  • printf ("d) ddddddddddddddd
    d\n", id,

18
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

19
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.

20
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.

21
Cambios a check_circuit
  • int check_circuit (int id, int z)
  • define EXTRACT_BIT(n,i) ((n(1ltlti))?10)
  • int v16 / Each element is a bit of
    z /
  • int i
  • for (i 0 i lt 16 i) vi
    EXTRACT_BIT(z,i)
  • if ((v0 v1) (!v1 !v3)
    (v2 v3)
  • (!v3 !v4) (v4 !v5)
  • (v5 !v6) (v5 v6)
  • (v6 !v15) (v7 !v8)
  • (!v7 !v13) (v8 v9)
  • (v8 !v9) (!v9 !v10)
  • (v9 v11) (v10 v11)
  • (v12 v13) (v13 !v14)
  • (v14 v15))
  • return 1
  • else

22
Cambios a main
  • include ltmpi.hgt
  • include ltstdio.hgt
  • 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 lt 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)

23
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 /
  • )

24
La Llamada a MPI_Reduce
  • MPI_Reduce (solutions,
  • global_solutions,
  • 1,
  • MPI_INT,
  • MPI_SUM,
  • 0,
  • MPI_COMM_WORLD)
  • if (id0) printf ("There are d different
    solutions\n",
  • global_solutions)

25
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

26
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

27
Asignación
  • A small college wishes to assign unique
    identification numbers to all of its present and
    future students. The administration is thinking
    of using a six-digit identifier, but is not sure
    that there will be enough combinations, given
    various constraints that have been placed on what
    is considered to be an acceptable identifier.
    Write a parallel program to count the number of
    differenct six-digit combinations of the numerals
    0-9, given the following constraints

28
Asignación (cont.)
  • The first digit may not be a 0.
  • Two consecutive digits may not be the same.
  • The sum of the digits may not be 7, 11, or 13.
  • Enviar su programa a
  • dorothy.bollman_at_gmail.com
  • no mas tarde que el 3 de mayo. No se dará
  • crédito si se entrega después de esta fecha.

29
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.

30
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()

31
Tiempos de Ejecutación de SAT2
Write a Comment
User Comments (0)
About PowerShow.com