Sto usando gcc
e OpenMPI. Di solito corro programmi MPI utilizzando l'involucro mpirun
- per esempio,Esecuzione del programma OpenMPI senza mpirun
mpirun -np 4 myprogram
per avviare 4 processi.
Tuttavia, mi chiedevo se è possibile generare facilmente un binario che lo farà automaticamente (magari con alcune opzioni hardcoded come -np 4
sopra).
So che posso scrivere un wrapper C che chiama il mio programma, come il seguente:
#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;
}
ma questo sembra un po 'goffo e io alla fine con due file eseguibili invece di uno.
ho cercato di collegare in modo esplicito le librerie MPI, come
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
ma quando corro risultante eseguibile, MPI_Comm_size
set zero come la dimensione del gruppo (come se avessi dato -np 0
come argomento). Posso usare una variabile d'ambiente o qualcos'altro per superare la dimensione del gruppo? Oppure esiste un altro modo per creare un programma MPI a esecuzione singola (utilizzando Linux e gcc
)?
Si può fare, anche se non so come dalla parte superiore della mia testa. Conosco un paio di programmi in cui mi sono imbattuto. Non c'è vera magia lì dentro, solo un sacco di cose dietro le quinte che puoi anche fare da te. –
Ho capito bene - vuoi saltare 'mpirun' o vuoi in qualche modo chiamare' mpirun'? –
@Hristo Iliev: Sarebbe bello se avessi un singolo binario statico. – Jay