Categories
- deporte (1)
- entretenimiento (11)
- física (23)
- google SoC (19)
- informática (58)
- desarrollo web (4)
- java (2)
- motos (4)
- opinión (4)
- trabajo (9)
- ull (4)
- ulpgc (38)
- uncategorized (4)
Latest News
- Sistemas de control de versiones: Subversion
- Movistar y timofónica. Odisea 2008: Liberar el móvil.
- Poblaciones del Carbono bajo campo de radiación
- Tasas de absorción y emisión estimulada
- Intel Fortran Compiler
- Espectro del carbono. El de verdad
- Retrasos becas FPU
- Espectro del carbono
- Frameworks PHP. Por fin una alternativa.
- Primer triatlón. Experiencias.
Monthly archives
- November 2008
- June 2008
- May 2008
- April 2008
- February 2008
- November 2007
- October 2007
- September 2007
- March 2007
- February 2007
- November 2006
- October 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
- February 2006
- January 2006
Links
Blogroll
Universidad
Search
Acerca de las librerías MPI open source.
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.
Posted by dsuarez
Posted in: google SoC, informática
1 Comment »
June 2006
MPI_Spawn + MPI_Gather + MPI_Scatter
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
Posted by dsuarez
Posted in: física, google SoC, informática
No Comments »
June 2006
LAM/MPI y mis problemas con MPI_Scatter / MPI_Gather
He tenido un problema mientras utilizaba LAM/MPI para generar un pequeño programa ejemplo que hiciera uso de MPI_Spawn, MPI_Gather y MPI_Scatter. Situémonos en contexto.
En MPI-2 hay dos tipos de comunicadores, el intracomunicador y el intercomunicador. Un intracomunicador es un comunicador como el definido en el estándar MPI-1: todos los procesos del comunicador se comunican de igual a igual.
Sin embargo, el intercomunicador define dos grupos de procesos, el local y el remoto (nombres arbitrarios que dependen del punto de vista del proceso actual), que podemos denominar A y B.
Supongamos que un proceso M ha realizado una llamada a MPI_Spawn generando un conjunto de K procesos S. Ahora el proceso M puede utilizar el intercomunicador que devolvió MPI_Spawn para comunicarse con los procesos de K, y cualquier proceso de K puede llamar a MPI_Comm_get_parent para obtener un intercomunicador que le permita comunicarse con proceso que lo creó. El intercomunicador obtenido en ambos casos es el mismo.
El intercomunicador tiene dos grupos, el grupo A conteniendo al “proceso” M y el grupo B conteniendo los K procesos. Una llamada a MPI_Gather o MPI_Scatter funciona de forma distinta cuando se utiliza un intercomunicador que cuando se utiliza un intracomunicador. La principal ventaja del intercomunicador en este caso es que el proceso M puede comunicarse con todos los procesos del conjunto S mediante MPI_Scatter y MPI_Gather sin recibir el mismo ningún paquete de datos (cosa que ocurre cuando se utiliza un intercomunicador).
Para que el esquema funcione del modo que deseamos, utilizamos una constante de MPI denominada MPI_ROOT, que define un proceso como origen de los datos. Utilizando en el proceso M:
MPI_Scatter(sendbuf, n, MPI_INT, NULL, 0, MPI_INT, MPI_ROOT, comm);
y en todos los procesos de K:
MPI_Scatter(NULL, 0, MPI_INT, recvbuf, n, MPI_INT, rank, parent_comm);
Donde rank es el rango del proceso M en el grupo A. Muy posiblemente rank sea 0 cuando en A sólo hay un proceso; podría ser que el grupo A tuviera más de un proceso (el “proceso” M que creó el conjunto S era un conjunto de procesos M’) y en este caso los otros procesos de A pasarían MPI_PROC_NULL en lugar de MPI_ROOT.
Pues bien, esto funciona bien en MPICH2, aunque en LAM/MPI 7.1.1 no funciona. Estoy compilando LAM/MPI 7.1.2 para asegurarme de que no ha sido corregido desde la versión anterior. MPICH2 no termina de gustarme porque no es todo lo transparente que necesito que sea. En DaVinci se utiliza un wrapper para ejecutar correctamente el verdadero intérprete, y ese wrapper da problemas cuando se ejecuta con el mpiexec de MPICH2.
Posted by dsuarez
Posted in: física, google SoC, informática
No Comments »
June 2006
Cómo utilizar MPI_Spawn y acerca de OpenMPI
OpenMPI me ha decepcionado. He descubierto un bug en MPI_Spawn: Cuando utilizas MPI_Spawn para crear nuevas instancias del mismo programa que esta ejecutando MPI_Spawn, estas nuevas instancias se bloquean y abortan la ejecución en la llamada MPI_Init, y sin embargo… ¡los valores de retorno son 0! Es decir, el proceso que ejecutó MPI_Spawn recibe un falso positivo: piensa que los procesos se crearon correctamente.
Contaré como lo descubrí: Después de una tarde de frustración, decido instalar LAM/MPI (una implementación de MPI mucho más madura, aunque ahora en mantenimiento debido a que sus miembros estan trabajando en OpenMPI). Después de configurarla (diría que es un poco más complicado que OpenMPI) compilo el mismo código fuente que utilizaba para las pruebas de MPI_Spawn cuando utilizaba OpenMPI. Grande es mi sorpresa cuando funciona sin problemas.
El código fuente del programa de prueba se puede descargar aquí: Spawntest
Además de MPI_Spawn, también muestra el uso de MPI_Bcast para enviar el mismo mensaje a los procesos creados con el MPI_Spawn. Próximamente, uso de MPI_Scatter para distribuir un conjunto de datos entre los procesos.
Posted by dsuarez
Posted in: google SoC, informática
No Comments »
June 2006