Currently Browsing

May, 2006

Implementación libre de MPI: OpenMPI

La librerí­a que he estado pensando utilizar para la paralelización del módulo de cálculo del proyecto de fin de carrera es la OpenMPI, surgida del esfuerzo combinado de varios grupos que trabajaban en las implementaciones FT-MPI, LA-MPI, LAM/MPI, y PACX-MPI

Ahora que estoy también interesado en la paralelización debido al Google Summer of Code, esta librerí­a me será útil para desarrollar las pruebas de paralelización del operador @() de DaVinci.

La página web es http://www.open-mpi.org y la compilación es sumamente sencilla. Descargar, descomprimir, configure, make y ya se pueden compilar programas con ella. Bueno, también hay que exportar LD_PATH_LIBRARY. Todo esto para Linux, la versión de windows/cygwin será funcional en el futuro.

Creé el tí­pico “Hola mundo!” y lo ejecuté en un número arbitrario de procesadores. Funciona. Mi intención es portar el esqueleto que tení­a hecho en Fortran90 a C y hacer alguna prueba que otra.

Problemas con la implementación @()

Estoy pensando en los problemas que me comentó mi mentor del proyecto:

  • Enviar a cada proceso los datos necesarios para ejecutar a función.
  • Reunir los datos devueltos por cada subproceso sin conocer de antemano el tamaño de los datos
  • Fucionamiento transparente usando MPI o sin usarlo. Vamos, que si no se usa se ejecute secuencialmente.

Para estos problemas tengo soluciones parciales, sin embargo, he localizado otro problema más:

Cuando los subprocesos utilizan nuevamente el operador @() para paralelizar otra llamada a una función… ¿qué ocurre? Si la primera llamada subdividió el dato problema en n subprocesos, uno por cada proceso MPI, entonces las nuevas paralelizaciones no serán efectivas, ya que se ejecutarán secuencialmente. Además, existen dos complicaciones:

  1. Subdividir el dato problema en muchas partes puede hacer que cada subproceso tenga una carga de cómputo pequeña y se pierda tiempo en la comunicación de los datos por la red.
  2. Subdividir el dato problema en un número fijo menor que el máximo de subprocesos puede ocasionar desperdicio de potencia de cálculo, ya que algunos procesos pueden permanecer ociosos.

Se lo plantearé a los mentores en el próximo email y veremos si me aportan algun dato que me ayude a resolver el problema

@() MediaWiki

He creado un wiki en http://soc.dsuarez.com con información que me es útil y que no encuentro en el wiki de DaVinci.

Nunca habí­a usado un wiki y la verdad es realmente potente. Ya he creado algunas páginas con información sobre cómo se crean nuevas funciones en C para usarlas dentro de DaVinci y también sobre la estructura interna que se utiliza para interpretar el lenguage.

Compilando DaVinci

Esta es el primero de una serie de post en los que iré describiendo mis experiencias como coder del de Google SoC. En ellos iré describiendo de forma general el estado de mi proyecto. Para una información más fiable, serí­a mejor referirse al wiki http://davinci.asu.edu/wiki o a la página web de DaVinci en http://davinci.asu.edu.

Mi mentor y yo nos hemos puesto en contacto y lo primero que he hecho ha sido instalar Linux. DaVinci se puede compilar en cygwin, pero en Linux todo tiene un look&feel más open source, que de eso de trata ;-) .

En principio DaVinci se descarga y se instala sin muchos problemas. El único problemilla que me dio fue con una librerí­a que no estaba referenciada en el makefile y que hací­a falta. Se añade a la buena de dios y listo.

Ahora, mientras me peleo con el ipw2200 para hacer funcionar el wifi, me dedicaré a pobar el DaVinci.