Queremos hacer un programa que imprima por pantalla el saludo "Hola Mundo soy el proceso X, de Y que somos" donde X sera el identificador del proceso (rango), e Y el número de procesos que fueron lanzados de forma paralela.
Obten los datos pedidos en el enunciado a partir del comunicador global (MPI_COMM_WORLD).
Ten en cuenta que antes de usar las funciones de MPI debes inicializar su entorno con la función MPI_Init.
Es necesario liberar el entorno de MPI al finalizar su uso con MPI_Finalize.
Recuerda que los programas paralelos con mpi se ejecutan mediante la instrucción "mpirun -np x holaMundo" siendo x el numero de proceso que queremos lanzar.
#include <iostream> using namespace std; int main(int argc, char *argv[]) { cout<<"¡Hola Mundo soy proceso unico! "<<endl; return 0; }
#include "mpi.h" #include <iostream> using namespace std; int main(int argc, char *argv[]) { int rank, size; MPI_Init(&argc, &argv); // Inicializacion del entorno MPI MPI_Comm_size(MPI_COMM_WORLD, &size); // Obtenemos el numero de procesos en el comunicador global MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Obtenemos la identificacion de nuestro proceso en el comunicador global cout<<"¡Hola Mundo desde el proceso "<<rank<<" de "<<size<<" que somos!"<<endl; // Terminamos la ejecucion de los procesos, despues de esto solo existira // la hebra 0 // ¡Ojo! Esto no significa que los demas procesos no ejecuten el resto // de codigo despues de "Finalize", es conveniente asegurarnos con una // condicion si vamos a ejecutar mas codigo (Por ejemplo, con "if(rank==0)". MPI_Finalize(); return 0; }
La instruccion "mpirun -np 4 holaMundo" lanza 4 PROCESOS ( No hebras ) del programa holaMundo, indicando con "-np" (Numero de Procesos). Cada uno de ellos ejecuta el código indicando su numero identificador, obtenido de la función MPI_Comm_rank, y el numero de procesos que hay en ejecución, obtenido de la función MPI_Comm_size.
MPI_Init se encarga de inicializar el entorno MPI para que se puedan comunicar los distintos procesos, por tanto debe llamarse antes de cualquier otra función MPI.
Del mismo modo MPI_Finalize libera el entorno MPI y debe ser la ultima llamada MPI realizada.