Subido por alikewin03

Guion

Anuncio
Práctica 2: Fundamentos básicos de paralelización: Modelo
de comunicación punto a punto
Introducción
Para realizar esta práctica, hemos hecho uso de las funciones MPI aplicadas a nuestros
procesos en paralelo.
Gracias a la teoría proporcionada y explicada hemos hecho uso de la comunicación
bloqueante para poder realizar los ejercicios.
Ejercicio 1 (6 puntos)
Se pide implementar un programa usando MPI que simule el funcionamiento de un
bingo a pequeña escala. Se contará con un fichero con números del 1 al 15 escritos en
orden aleatorio (uno en cada línea y sin repetir). En este bingo podrán participar un
máximo de 16 procesos siendo el proceso con rango 0 el locutor, y del 1 al 15 los
jugadores.
El funcionamiento del juego será el siguiente:
Nada más empezar, el locutor dirá el número de participantes que hay, mientras que
los jugadores deberán acceder al fichero y leer qué número les ha tocado en su cartón.
El número asignado a cada proceso está en la misma línea que su rango. Mientras, el
proceso 0 debe esperar a que se termine esta lectura. Tras esto, el proceso 0 empezará
a mostrar por pantalla un número aleatorio entre 1 y 40 cada 1,5 segundos, y
transmitiéndolo al resto de procesos.
Los jugadores deberán esperar a recibir este mensaje, comprobarán el número con su
cartón y, si no es el suyo se mantendrán a la espera de otro número mientras que, si
es el suyo mostrarán por pantalla: “Bingo! Soy el proceso X y mi número es el Y”, siendo
X el rango e Y el número de su cartón. Pese a cantar bingo, el juego seguirá
funcionando de manera indefinida y seguirá habiendo más ganadores.
2
Este código es un programa que simula un juego de bingo con cartones para cada
proceso de un único número.
Primero comenzamos como de costumbre, inicializando nuestro entorno MPI y
definiendo rango y numero de procesos.
Para que funcione habrá que realizar una distinción entre el proceso 0 que será el
locutor y los demás procesos que serán los jugadores. Para ello realizamos nuestro
primer “if rango==0 y else”.
3
El proceso 0 genera el numero aleatorio que será el numero ganador del bingo y lo
mostrará por pantalla cada 1,5 segundos. Usando la función `MPI_Bcast` transmitirá
ese número a todos los otros procesos.
Por el otro lado, nuestros procesos irán leyendo los números desde un archivo txt.
Estos números serán con los que jugarán el bingo.
Si el número del proceso coincide con el numero sorteado lo anunciará por pantalla.
Y así sucesivamente ya que el juego continua de manera que otros procesos puedan
ganar.
Ejercicio 2 (4 puntos)
Modificar el programa anterior para que, cuando un jugador cante bingo, este le envíe
su rango al organizador, le proclame como ganador por pantalla, y envíe a todos los
participantes el número 0 para indicar que deben finalizar y termine el programa.
4
5
En este código hemos realizado unas pequeñas modificaciones para que cuando el
proceso identifique al ganador este cante bingo y el juego finalice.
Las fuentes usadas para realizar el trabajo son procedentes de:
fuente aleatorios: https://blog.martincruz.me/2012/09/obtener-numeros-aleatorios-enc-rand.html
fuente leer archivo: https://parzibyte.me/blog/2020/09/11/leer-archivo-texto-cpp/
Conclusión
Mediante el uso de la función MPI_Barrier hemos conseguido que todos los procesos
consigan sincronizarse esperándose unos a otros. Consiguiendo así el correcto
funcionamiento del código de programas paralelos.
6
Descargar