我使用gcc
和OpenMPI。我通常運行使用mpirun
包裝MPI程序 - 例如,運行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