Używam gcc
i OpenMPI. Zazwyczaj uruchomić programy MPI za pomocą mpirun
opakowania - npUruchamianie programu OpenMPI bez mpirun
mpirun -np 4 myprogram
rozpocząć 4 procesy.
Jednak zastanawiałem się, czy można łatwo wygenerować plik binarny, który zrobi to automatycznie (może z niektórymi zakodowanymi opcjami, takimi jak -np 4
powyżej).
wiem, że mogę napisać otoki C, która wywołuje mój program, takich jak:
#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;
}
ale ten wydaje się nieco niezdarny i kończy się z dwóch plików wykonywalnych, zamiast jednego.
starałem się wyraźnie odwołuje się bibliotek MPI, jak
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
ale gdy uruchamiam wynikające wykonywalnego, MPI_Comm_size
zestawy zera jako wielkości grupy (tak jakbym dał -np 0
jako argument). Czy mogę użyć zmiennej środowiskowej lub czegoś innego do przekazania rozmiaru grupy? Czy istnieje inny sposób na zbudowanie pojedynczego pliku wykonywalnego MPI (używając Linuksa i gcc
)?
Można to zrobić, chociaż nie wiem jak z góry mojej głowy. Znam kilka programów, na które natknąłem się na to. Nie ma tam prawdziwej magii, po prostu robi wiele rzeczy za kulisami, które możesz zrobić samemu. –
Czy rozumiem poprawnie - chcesz pominąć 'mpirun' lub chcesz jakoś automatycznie wywołać' mpirun'? –
@Hristo Iliev: Byłoby miło, gdybym miał pojedynczy statyczny plik binarny. – Jay