Запуск программы OpenMPI без mpirun

Я использую 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)?

10
задан Jay 24 June 2012 в 16:51
поделиться