是否可以将mpiexec作为mpiexec'd程序的子进程运行?

时间:2013-01-29 12:24:43

标签: parallel-processing mpi openmpi mpich

我有一个用mpiexec运行的程序A.该程序通常并行运行,但在其中一种执行模式中,它可以调用也支持MPI的外部程序B.当然,如果B被调用为串行,则每个A实例最终都会调用一个B实例。如果并行调用,则A的每个实例都将调用并行B.

一种可能的解决方案是让A的主节点调用并行B,让其他A的进程空闲,但当然我需要从用户命令行调用A(包括任何怪癖,例如PBS)中继承mpiexec选项交互)到内部B调用。这是我认为不是微不足道的,也不能很好地处理不同的MPI实现(例如MPICH与Open MPI)。

有没有人有这种问题的经验?

2 个答案:

答案 0 :(得分:0)

如果不使用MPI 2及更高版本的动态过程管理,则无法做到这一点。您应该使用MPI调用,如MPI_COMM_SPAWN或MPI_COMM_SPAWN_MULTIPLE来创建新的MPI进程。如果使用fork和exec或类似函数来启动新的mpiexec命令,则新进程将不会启用MPI,并且对MPI_Init的任何调用都将失败。 我在项目中有经验。

答案 1 :(得分:-2)

如果可能的话并不重要 - 这是一个糟糕的主意。如其他人所述,使用MPI_Comm_spawn(_multiple)。

我相信至少有一些网络不能使用这种用法,因此它不可移植。