MPI es una interfaz, API o especificación para el paso de mensajes (síncronos y asíncronos) entre ordenadores para permitir una comunicación. Generalmente es usado en supercomputadores, clusters de computadores y en general sistemas distribuidos ya que no requiere memoria compartida.
Existen muchas implementaciones de MPI y en multitud de lenguajes. Las implementaciones más usadas son las escritas en C y C++.
En este artículo usaremos la implementación de software libre OpenMPI escrita en C por un consorcio de acádemicos, investigadores e industrias afines. Esta implementación soporta la versión MPI-2 de 1997 por lo que esta muy capacitada para desarrollos profesionales.
Para instalarla en Ubuntu, en mi caso Ubuntu Maverick 10.10:
$ sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc
Puedes probar un ejemplo simple con el siguiente código:
#include < stdio.h>
#include < mpi.h>
int main(int argc, char** argv)
{
int myrank, nprocs;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
printf("Hello from processor %d of %d\n", myrank, nprocs);
MPI_Finalize();
return 0;
}
Compilarlo con:
$ mpicc MPI_Hello.c -o MPI_Hello
Y ejecutarlo con:
$ mpiexec -n 5 MPI_Hello
Obtendrás una salida similar a:
$ mpiexec -n 5 MPI_Hello
Hello from processor 1 of 5
Hello from processor 0 of 5
Hello from processor 2 of 5
Hello from processor 4 of 5
Hello from processor 3 of 5
Obviamente más ejecuciones pueden darte resultados distintos o diferir de este, ya que cada procesador puede ejecutarse en diferentes momentos.
Integrar entorno de desarrollo Geany
Si además deseas integrar un IDE como Geany para hacer el proceso de compilación y ejecución fácil y rápido, puedes seguir los siguientes pasos para poder compilar un programa MPI con Geany:
1. Descargar el archivo de etiquetas C para OpenMPI y copiarlo a ~/.config/geany/tags/
$ wget http://shakaran.net/blog/wp-content/uploads/openmpi.c.tags
$ cp openmpi.c.tags ~/.config/geany/tags/
Actualización: También puedes generar el fichero con:
$ geany -g -P openmpi.c.tags /usr/include/mpi.h
2. Abrir el ejemplo MPI anterior con Geany
3. Establecer las configuraciones de compilación. Para ello, pinchar en el menú “Construir > Establecer comandos de construcción”
En compilar poner:
mpicc -Wall "%f" -o "%e"
En ejecutar:
mpiexec -n 5 "%e"
Debería quedarte algo como en esta imagen (pinchar para ampliar):