在C ++中用MPI并行运行可执行文件

时间:2013-03-28 10:05:01

标签: c++ mpi

我一直在使用MPI,但我没有经验。所以 我在这里就以下实施的一般结构提出建议。 说,我有

的主要C ++文件
MPI_Init(&narg,&arg);
int me,nprocs;
MPI_Comm_rank(MPI_COMM_WORLD,&me);
MPI_Comm_size(MPI_COMM_WORLD,&nprocs);

int N = 10;

for (int i=0;i<N;i++) {
   //(1)do some stuff in parallel...
   //(2)gather results and write an input file for executable

   MPI_Barrier(MPI_COMM_WORLD);
   //(3)run executable in parallel.
   // which is usually run from command line as:
   // 
   // mpirun -np 6 external.exe < input.file
   //
   MPI_Barrier(MPI_COMM_WORLD);

   //(4)gather output from executable, distribute info among processors and keep running 
}
MPI_Finalize();

这是(3)我在理解如何操作并且告诉它可以使用多少个处理器时遇到问题。我的困惑是,某些“运行”命令应该可以从单个处理器/实例执行。那么我如何让它工作并让并行可执行文件使用提供给主程序的所有处理器?如果可能的话。

p / s /我在stackoverflow中看到了类似的问题,但是如果可能的话,没有明确的答案。

1 个答案:

答案 0 :(得分:0)

您是否可以控制exe,即可​​以更改其代码吗?如果是这样,我建议重新开发它,以便exe只是你需要的行为的包装,然后你可以将实际操作链接到你的应用程序。

如果这不是一个选项,我建议只从你的主(等级0)进程调用可执行文件,让其他人等待。不是超级高效,但它会完成这项工作:

if (me == 0) {
    system("mpirun -np 6 external.exe < input.file")
}

你必须找到一种等待命令完成的方法,但根据systemmpirun的文档,它应该像检查来自{的返回值一样简单{1}}为零,然后继续(在屏障之后,如示例中所示)。