Download PARADIGMAS Y LENGUAJES DE PROGRAMACIÓN Licenciatura

Document related concepts
no text concepts found
Transcript
PARADIGMAS Y LENGUAJES DE PROGRAMACIÓN
Licenciatura en Sistemas de Información
Año 2016
Trabajo práctico - Unidad III (MPI - OpenMP)
En cada ejercicio anexar los códigos resueltos con el formato del código de
inicio del ejercicio 4.
Entorno MPI
1. Resolver el ejercicio planteado en el siguiente link (No se admite Ctrl+C Ctrl+V):
http://lsi.ugr.es/jmantas/pdp/tutoriales/tutorial_mpi.php?tuto=01_helloworld
a) Explique el brevemente cómo funciona el código fuente.
b) Describa las instrucciones propias del MPI utilizadas en el ejercicio. ¿cuáles son
los parámetros de entrada cuales son de salida?
2. Resolver el ejercicio planteado en el siguiente link (No se admite Ctrl+C Ctrl+V):
http://lsi.ugr.es/jmantas/pdp/tutoriales/tutorial_mpi.php?tuto=02_send_receive
a) Explique el brevemente cómo funciona el código fuente.
b) Describa las instrucciones propias del MPI utilizadas en el ejercicio. ¿cuáles son
los parámetros de entrada cuales son de salida?
MPI_Send, MPI_Receive, MPI_Isend, MPI_Ireceive
3. Adapte el ejercicio 2 al siguiente planteamiento. El proceso 0 envía 2 mensajes, un
mensaje “11111” al proceso 1 y un mensaje “22222” al proceso 2. Luego el mensaje
“11111” debe ir pasando por los procesos impares y el mensaje “22222” por los
procesos pares.
4. Se tiene un algoritmo que envía un mensaje '100' hacia los procesos superiores y al llegar
al último nodo reenvía al proceso 0.
Se solicita adaptar el código para que aparte del mensaje '100', se envié un mensaje
'200' que se dirija en dirección contraria.
Código de inicio:
#include "mpi.h"
#include <stdio.h>
main(int argc, char *argv[]){
PARADIGMAS Y LENGUAJES DE PROGRAMACIÓN
Licenciatura en Sistemas de Información
Año 2016
int numtasks,
rank,
next, prev,
msjForward=100,
buzonForward,
tag1=1;
MPI_Status estado1;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// SE DEFINEN LOS VECINOS
next = rank+1;
if (rank == (numtasks - 1))
next = 0;
prev=rank-1;
if (rank == 0)
prev = (numtasks - 1);
//////////////////// Se envian los mensajes
///////////////////////////
MPI_Send(&msjForward, 1, MPI_INT, next, tag1, MPI_COMM_WORLD);
///////////////////Se reciben los mensajes
////////////////////////////
MPI_Recv(&buzonForward, 1, MPI_INT,prev , tag1, MPI_COMM_WORLD,
&estado1);
printf("soy %d y recibi el msj %d de %d \n
",rank,buzonForward,estado1.MPI_SOURCE);
MPI_Finalize();
}
MPI_Reduce, MPI_Gather, MPI_Scatter,
5. Resuelva el ejercicio planteado en el siguiente link: <código fuente simplificado en aula
virtual>
http://lsi.ugr.es/jmantas/pdp/tutoriales/tutorial_mpi.php?tuto=04_producto_escalar
a) Mostrar las capturas de pantallas de la ejecución del ejercicio.
b) Explique el brevemente cómo funciona el código fuente.
c) Describa las instrucciones propias del MPI utilizadas para el presente ejercicio.
¿cuáles son los parámetros de entrada cuales son de salida?
6. Realizar un ejercicio, que dado un vector de tamaño X (X=10*la cantidad de procesos
lanzados), se seccione el vector y se los distribuya entre los procesos (Scatter), cada
proceso debe realizar el ordenamiento de su parte del vector, y luego se deben unir los
vectores locales ordenados en el proceso 0 (Gather).
PARADIGMAS Y LENGUAJES DE PROGRAMACIÓN
Licenciatura en Sistemas de Información
Año 2016
OPENMP
1. Resuelva el ejercicio planteado en el siguiente link:
http://lsi.ugr.es/jmantas/pdp/tutoriales/tutorial_omp.php?tuto=01_omp_holamundo
a) Mostrar las capturas de pantallas de la ejecución del ejercicio.
b) Explique el brevemente que hace el código fuente.
c) Describa las instrucciones propias del OPENMP utilizadas para el presente
ejercicio. Explicar cómo trabaja cláusula de compartición de datos.
2. Resuelva el ejercicio planteado en el siguiente link:
http://lsi.ugr.es/jmantas/pdp/tutoriales/tutorial_omp.php?tuto=01_omp_holamundo
a) Mostrar las capturas de pantallas de la ejecución del ejercicio.
b) Explique el brevemente cómo funciona el código fuente.
c) Describa las instrucciones propias del OPENMP utilizadas para el presente
ejercicio. Como trabaja cada uno de los planificadores que se pueden definir para
un FOR.
3. Analizar el código fuente del archivo “OPENMP_sumavector.cpp” del aula virtual.
a) Explique el brevemente el funcionamiento.
b) Mencione las instrucciones propias de OPENMP utilizadas.
4. Escribir un programa que realice el producto escalar entre 2 vectores utilizando OPENMP.