MPI en Windows/Cygwin
March 31st, 2006David Suárez Perera@Movil /tmp/mpich2-1.0.3
$ ./configure
…
checking for Python
…
Python unavailable.
Configure will abort.
…Empecemos por el principio.
MPI para quien no lo sepa es un estandar para la paralelización de programas mediante el paso de mensajes (MPI = Message Passing-Interface). El hecho de que sea estandar permite, en principio, recompilar en otra arquitectura y que mantenga la capacidad de ejecutarse en múltiples procesadores. Hay varias implementaciones libres de MPI entre las que destacan LAM y MPICH, est última es de la que hablaré en este artÃculo.
Cygwin es un conjunto de librerÃas que permiten la ejecución de programas Unix/Linux en un PC equipado con Windows. Es muy útil para desarrollar código portable y utilizar herramientas de desarrollo GNU que normalmente solo estan disponibles para Linux en Windows.
El problema es utilizar MPICH y Cygwin. No hay mucha documentación al respecto en Internet, o al menos yo no la he encontrado. He optado por ir a http://www-unix.mcs.anl.gov/mpi/mpich2/ y descargarme las todas las fuentes “All (source)”.
Cygwin, que yo ya lo tenÃa instalado, se puede bajar de http://www.cygwin.com y el compilador de Fortran95 (’gfc’) para Cygwin de http://gcc.gnu.org/wiki/GFortranBinariesCygwin. Para que el Cygwin nos sea útil en nuestro propósito hay que instalar muchos paquetes entre los que cito: de la categorÃa desarrollo (devel) casi todos los compiladores que vayamos a usar, el make y las binutils, y de python y perl ambos lenguajes.
Instalas el GFortran (que basicamente es descomprimir en un directorio del árbol del Cygwin y hacer un enlace en /usr/bin) y descomprimes el MPICH en /tmp/mpich o donde te parezca.
Te metes y el clásico “./configure”…
Atención: Esto lo estoy haciendo mientras escribo sin saber que pasará al final. No puedo garantizar que el resultado sea satisfactorio. Si buscas información precisa y útil quizá no la encuentres aquÃ. Sin embargo, en Internet no hay, asi que es tu única oportunidad.
Ahora no me da el error de que falta el python, da un error de que faltan no se que librerias de las X, pero genera el makefile y podemos continuar el proceso…
“make” y a esperar un ratito a ver que pasa.
Mientras compila hablaré de que hay una versión del MPICH para Windows, con las dlls y listo para funcionar bajo los compiladores de Fortran (Visual Fortran entre otros, sea de la marca que sea
). Ya la he usado y si que funciona, pero lo que quiero es poder hacer pruebas en el Cygwin, ya que el código en el que estoy trabajando funcionará en una máquina Linux y tendré que realizar la compilación con el ‘gfc’.
Para amenizar la compilación, hablaré del codigo que tengo que probar. Es un código que simula un plasma de fusión por confinamiento inercial, en dicho plasma se quieren calcular las abundancias iónicas del elemento que compone el plasma.
PodrÃa decir que hay cosas más interesantes en que ocupar la tarde, pero ya las he hecho todas, y toca trabajar un rato en el proyecto, ¿no creen?
El “make” va compilando bien, pero tarda lo suyo. Tengo un portatil Centrino de 1.5 Ghz y 512 Mb de ocupadÃsima RAM.
Acabó y no hay errores. Fascinante. “make install”. Supuestamente deberÃa funcionar. Hay un programa en Fortran95 que utiliza MPI en el directorio de ejemplos (he instalado el MPICH, se compilar programas para que usen el paso de mensajes, pero no se programar utilizando MPICH, asi que no me preguntes
) y voy a probarlo. Me muevo a donde esta el dichoso programita, averigo donde se instalaron los ficheros de cabecera y las librerias del MPICH y… ¡a compilar!
$gfc -I/usr/local/include/ -L/usr/local/lib/ mpi1.f -l fmpich2
/cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×10): referencia a `_mpi_init_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×2a): referencia a `_mpi_comm_rank_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×44): referencia a `_mpi_comm_size_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×1b2): referencia a `_mpi_bcast_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×27b): referencia a `_mpi_reduce_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0×308): referencia a `_mpi_finalize_’ sin definir collect2: ld returned 1 exit status
Bueno, ha quedado claro que algo falla. Parece que no encuentra unas funciones: todas las pertenecientes a MPI. Y sin embargo esta instalado… sospechoso. Me meto en el directorio de ejemplos, y dentro de este del directorio f77 (../mpich/examples/f77) y compruebo que el make compila correctamente el ejemplo del directorio. Lo hace y el ejemplo funciona. Fantástico, soy yo el que la está cagando al compilar.
Miro el Makefile y … (ahora estoy mirando el makefile, por favor, espera).
Vaya, el proceso de link lo hace una utilidad del MPICH llamada mpif77, curioso. ¿Habrá una utilidad fmpif90? Pues no, será que hay que ponerlo en el ‘configure’, asi que no me ha servido de mucho, porque mi programa original estaba en Fortran90.
Parece que tenÃa que haber puesto:
./configure –enable-f90 –enable-sharedlibs=cygwin-gcc
En lugar de solo configure. Vamos a seguir intentándolo… SÃ, aun no me he frustrado. Parece ser que si tu compilador GFortran no se llama ‘f90′ no realiza bien el configure. Mal asunto: se hace un sym link y listo.ermina el configure de nuevo, y otra vez el make (realmente no creo que haya mucho que compilar). Una vez ha terminado vamos con el experimento…
…
Risas
Sigue sin funcionar la compilación de los programas en Fortran90. Sin embargo… ¡veo que en Fortran77 funciona perfectamente!. Me pongo a rebuscar en los README y miren lo que descubro:
–enable-f90 – Build the Fortran 90 bindings. This is not on by
default, since these have not yet been tested.
Ok, comprendo, la opción existe pero nadie ha comprobado que funciona. En fin, esperaré unos dÃas a ver si se actualiza el MPICH o si alguien da con alguna solución. Hasta aquà he llegado.
Conclusión: He logrado un 50% de éxito. Funciona el MPICH y el Cygwin pero sólo par Fortran 77 y no para Fortran90 que era mi objetivo principal.
December 6th, 2007 at 10:45 am
Buen dia!!
Queria pedirle una ayuda, si posible.. estoy queriendo implementar un cluster en mi casa.. pero me gustaria usarla con mpi..
tengo instalado ubuntu 7.10, y nose instalar el mpi.. :=( me salen canas verdes ya.. ahora desistale completamente, y quiero empezar desde el principio.. podria ayudarme dictando los pasos de instalacion del mpi??
Ahh olvide presentarme.. me llamo Carmen, y soy de Paraguay.. estoy terminando ing de sistemas en la Universidad Nacional..
Gracias desde ya!! Espero su respuesta..