MPI en Windows/Cygwin

David 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.

MPICH compilándose
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+0x2a): 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+0x1b2): referencia a `_mpi_bcast_’ sin definir /cygdrive/c/David/CONFIG~1/Temp/cckwAu1U.o:mpi1.f:(.text+0x27b): 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.

Posted By dsuarez

David nació en Las Palmas de Gran Canaria, España. Estudió Ingeniería en Informática en la Universidad de Las Palmas de Gran Canaria (ULPGC), donde ha trabajado en investigación los últimos años. Siempre ha sentido una gran curiosidad por los ordenadores y las ciencias, y más recientemente en el mundo empresarial. Ha trabajado como programador/analista, consultor en tecnologías de la información y obtuvo la beca de Google Summer of Code en 2006. Es socio fundador de Wantudu (http://wantudu.es), empresa especializada en terminales táctiles para hoteles.

One Response to “MPI en Windows/Cygwin”

  1. Carmen says:

    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..

Leave a Reply