J'utilise gcc
y OpenMPI . En général, j'exécute les programmes MPI à l'aide de la fonction mpirun
par exemple,
mpirun -np 4 myprogram
pour lancer 4 processus.
Cependant, je me demandais s'il était possible de générer facilement un binaire qui ferait cela automatiquement (peut-être avec quelques options codées en dur comme -np 4
ci-dessus).
Je sais que je peux écrire un wrapper C qui appelle mon programme, tel que le suivant :
#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;
}
mais cela semble un peu maladroit et je me retrouve avec deux exécutables au lieu d'un.
J'ai essayé de lier explicitement les bibliothèques MPI, comme par exemple
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
mais lorsque j'exécute l'exécutable qui en résulte, MPI_Comm_size
fixe à zéro la taille du groupe (comme si j'avais indiqué -np 0
comme argument). Puis-je utiliser une variable d'environnement ou quelque chose d'autre pour transmettre la taille du groupe ? Ou existe-t-il un autre moyen de construire un programme MPI exécutable en une seule fois (en utilisant Linux et gcc
) ?