Я использую gcc
и OpenMPI. Обычно я запускать программы MPI с использованием mpirun
обертки - например,Запуск программы OpenMPI без mpirun
mpirun -np 4 myprogram
начать 4 процесса.
Однако мне было интересно, можно ли сгенерировать двоичный файл, который будет делать это автоматически (возможно, с некоторыми жестко заданными параметрами, такими как -np 4
выше).
Я знаю, что могу написать C оболочку, которая вызывает мою программу, например, следующее:
#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;
}
, но это, кажется, немного неуклюжий, и я в конечном итоге с двумя исполняемыми вместо одного.
Я попытался явно связать библиотеки 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
)?
Это можно сделать, хотя я не знаю, как из-за моей головы. Я знаю пару программ, с которыми я столкнулся, чтобы это сделать. Там нет настоящей магии, это просто куча вещей за кулисами, которые вы также можете сделать сами. –
Правильно ли я понимаю - вы хотите пропустить 'mpirun' или хотите как-то автоматически называть' mpirun'? –
@Hristo Iliev: Было бы неплохо, если бы у меня был один статический бинарный файл. – Jay