1. Indice de pagina
  2. 1. Objetivos
  3. 2. Enunciado
  4. 2.1. Pistas
  5. 2.2. Código secuencial de inicio
  6. 2.3. Funciones necesarias
  7. 3. Solución
  8. 3.1. Código
  9. 3.2. Salida

Hello World

Objetivos

Enunciado

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.

Imagen HelloWorld (Pulsar sobre la imagen para ver la animación)

Pistas

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.

Código secuencial de inicio Descarga

#include <iostream>
using namespace std;
 
int main(int argc, char *argv[])
{
    cout<<"¡Hola Mundo soy proceso unico! "<<endl;
 
    return 0;
}

Funciones necesarias

Solución

Código Descarga

#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;
}

Salida

>mpiCC 1_HolaMundo.cpp -o holaMundo
>mpirun -np 4 holaMundo

¡Hola Mundo desde el proceso 2 de 4 que somos!
¡Hola Mundo desde el proceso 3 de 4 que somos!
¡Hola Mundo desde el proceso 0 de 4 que somos!
¡Hola Mundo desde el proceso 1 de 4 que somos!

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.

Creado por: Daniel Guerrero Martínez y Sergio Rodríguez Lumley 2010

Valid HTML 4.01 Transitional