Currently Browsing
google SoC
Google surprise!
- 6 July //
- Posted in google SoC //
- Tags :
- 2 Comments
Funciones definidas por el usuario en DaVinci
- 5 July //
- Posted in google SoC, informática //
- Tags :
- No Comment
Las funciones definidas por el usuario son programadas en el lenguage DaVinci y son cargadas desde la interfaz de línea de comandos mediante la función source(). Para manejarlas, se parsean del modo usual en DaVinci, aunque catalogando esa rama del árbol sintáctico como una función definida por el usuario (ufunc).
En un entorno distribuido de alta capacidad de cómputo como el que estoy implementando, ¿cómo hacer para sincronizar este tipo de funciones entre los procesos trabajadores? Las funciones son cargadas únicamente en el proceso maestro, de modo que, en principio, los procesos trabajadores no pueden acceder al fichero fuente.
La solución que he encontrado es francamente sencilla: cuando es necesario sincronizar una función, se transmite el código fuente de la misma al trabajador para que este la interprete con el parser local. ¡Es realmente fácil y rápido! La otra opción consistiría en serialize el árbol sintáctico generado en el maestro al parsear la función, pero ¿es esto mejor que transmitir el código fuente y ejecutar el parser en los trabajadores? La verdad es que haciendo una estimación, esta última opción aunque más compleja no mejoraría ni el tiempo de ejecución ni el de transmisión de los datos.
En primer lugar: serializar el árbol sintáctico puede llevar bastante tiempo ¡tanto como crearlo desde un código fuente! En segundo lugar: transmitir el árbol serializado posiblemente lleve tanto tiempo como el código fuente del mismo. Sólo la información que es necesaria enviar para poder descerializar el árbol en los trabajadores ocuparía más que el propio código fuente.
Acerca de las librerías MPI open source.
- 30 June //
- Posted in google SoC, informática //
- Tags :
- 1 Comment
Descubrí cual era el problema con OpenMPI y MPI_Gather + MPI_Scatter. No se puede enviar un número 0 de elementos en ningún caso. Si se hace así, el sistema da un error. Cambié la llamada para que enviara 1 elemento y todo parece funcionar.
MPICH2 no tiene esta limitación, pero falla en el tema de entrada y salida.
LAM/MPI no funcionó haciendo este cambio. Y me resulta curioso porque el código de LAM/MPI y OpenMPI son prácticamente idénticos (diría que los del LAM que ahora están en OpenMPI decidieron que su código era suficientemente bueno para copiarlo) xD.
MPI_Spawn + MPI_Gather + MPI_Scatter
- 27 June //
- Posted in física, google SoC, informática //
- Tags :
- No Comment
Bueno, sigo con mi serie de ejemplos de utilización de MPI. Este ejemplo ilustra cómo crear un conjunto de procesos mediante MPI_Spawn y comunicarse de forma muy básica con ellos para transmitirles información (MPI_Scatter) y recibir los resultados que computen (MPI_Gather).
El programita ejecutado como maestro genera un vector de 50 enteros con los números del 1 al 50, lo reparte entre los 5 procesos que crea enviando 10 enteros a cada proceso y recupera los resultados que éstos le envían.Si el programa se ejecuta como trabajador (utilizando “-workers”, y cosa que sólo debería hacer el mismo programa ejecutado como maestro) espera que le envíen 10 enteros, calcula su cuadrado y lo devuelve.
El código fuente está aquí: Gathertest