Я использую gcc
и OpenMPI. Обычно я запускаю программы MPI, используя оболочку mpirun
, например,
mpirun -np 4 myprogram
для запуска 4 процессов.
Тем не менее, мне было интересно, можно ли легко сгенерировать двоичный файл, который будет делать это автоматически (возможно, с некоторыми жестко закодированными параметрами, такими как -np 4
выше).
Я знаю, что могу написать оболочку C, которая вызывает мою программу, например:
#include
#include
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
, но это кажется немного неуклюжим, и в итоге я получаю два исполняемых файла вместо одного.
Я попытался явно связать библиотеки MPI, как
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
, но когда я запускаю результирующий исполняемый файл, MPI_Comm_size
устанавливает ноль в качестве размера группы (как если бы я дал -np 0
в качестве аргумента). Можно ли использовать переменную среды или что-то еще для передачи размера группы? Или есть другой способ создания одноисполняемой MPI-программы (используя Linux и gcc
)?