Comentarios sobre el SoC
August 17th, 2006Ya que hace mucho tiempo que no escribo nada sobre el proyecto del Summer of Code, voy a realizar un pequeño resumen del trabajo realizado, puesto que ya faltan pocos dÃas para la fecha de entrega.
El proyecto consistÃa en modificar el intérprete del lenguaje DaVinci para que paralelizara automaticamente llamadas a funciones. La forma de hacerlo es mediante el operador @axis(variable), que divide el dato que va entre paréntesis según la ristra axis. El valor que puede tener axis es una combinación de algunas de las siguientes letras: x, y, z; simbolizando cada letra un eje de coordenadas y ningún valor. Por ejemplo, la utilización de @xy(data) dividirÃa la variable data (que debe ser una variable numérica tridimensional) en varias filas de tamaño 1×1xk donde k es el tamaño del eje z. Es decir, hemos dividido la variable según los ejes x e y. Cuando no se utiliza ninguna letra, la variable entre paréntesis debe ser una estructura, y entonces se divide según cada campo.
El uso de @axis(variable) está retringido a los parámetros de las llamadas a funciones. Cuando se llama a una función que tiene como parámetro una variable paralelizada mediante @(), entonces se ejecuta la función tantas veces como divisiones de la variable se obtuvieron al aplicarle el operador @(), enviándole como parámetro a cada función la correspondiente parte de la variable.
Evidentemente, la paralelización se obtiene de ejecutar cada una de las llamadas a las funciones en un proceso distinto. Para ello se ha utilizado el estándar MPI. MPI es un estándar que define una serie de funciones que se utilizan para crear procesos y comunicar datos entre ellos. La implementación usada ha sido OpenMPI. La ejecución de DaVinci en un cluster de ordenadores que soporte OpenMPI significarÃa que la ejecución de los programas escritos en DaVinci se ejecutaran mucho más rapido al estar paralelizados, y que su paralelización serÃa trivial gracias al operador @().
El objetivo del proyecto ha sido logrado y esta en fase de pruebas y optimización.