Estoy usando gcc
y OpenMPI. Por lo general me quedo programas MPI utilizando el envoltorio mpirun
- por ejemplo,Ejecutando el programa OpenMPI sin mpirun
mpirun -np 4 myprogram
4 para iniciar procesos.
Sin embargo, me preguntaba si es posible generar fácilmente un archivo binario que lo haga automáticamente (tal vez con algunas opciones codificadas como -np 4
anterior).
sé que puedo escribir un contenedor C que llama a mi programa, tales como los siguientes:
#include <stdlib.h>
#include <unistd.h>
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
pero esto parece un poco torpe y termino con dos ejecutables en lugar de uno.
me han tratado de vincular de manera explícita las librerías MPI, como
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
pero el resultado cuando corro ejecutable, MPI_Comm_size
conjuntos de cero a medida que el tamaño del grupo (como si hubiera dado -np 0
como argumento). ¿Puedo usar una variable de entorno u otra cosa para pasar el tamaño del grupo? ¿O existe otra forma de construir un programa MPI ejecutable de manera única (utilizando Linux y gcc
)?
Se puede hacer, aunque no sé cómo hacerlo desde lo más alto de mi cabeza. Conozco un par de programas con los que me he encontrado que hacen esto. No hay magia real allí, solo hace un montón de cosas detrás de escena que también puedes hacer tú mismo. –
¿Lo entiendo correctamente? ¿Desea omitir 'mpirun' o desea de alguna manera llamar' mpirun' automáticamente? –
@Hristo Iliev: Sería bueno si tuviera un solo binario estático. – Jay