Parallel processing 是否可以将mpiexec作为mpiexec的子进程运行';d计划?

Parallel processing 是否可以将mpiexec作为mpiexec的子进程运行';d计划?,parallel-processing,mpi,openmpi,mpich,Parallel Processing,Mpi,Openmpi,Mpich,我有一个用mpiexec运行的程序a。此程序通常并行运行,但在其中一种执行模式中,它可能会调用也启用MPI的外部程序B。当然,如果B以串行方式调用,那么A的每个实例最终都会调用B的一个实例。如果并行调用,A的每个实例都将调用并行B 一种可能的解决方案是让A的主节点调用并行B,让另一个A的进程空闲,但我当然需要将mpiexec选项从A的用户命令行调用(包括任何怪癖,例如PBS交互)转移到内部B调用。就我所见,这不是微不足道的,也不是很好地处理不同的MPI实现(例如,MPICH与OpenMPI) 有

我有一个用mpiexec运行的程序a。此程序通常并行运行,但在其中一种执行模式中,它可能会调用也启用MPI的外部程序B。当然,如果B以串行方式调用,那么A的每个实例最终都会调用B的一个实例。如果并行调用,A的每个实例都将调用并行B

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


有人有过此类问题的经验吗?

如果不使用MPI 2及以上版本的动态流程管理,这是不可能的。您应该使用MPI调用,如MPI_COMM_SPAWN或MPI_COMM_SPAWN_MULTIPLE来创建新的MPI进程。如果使用fork和exec或类似函数启动新的mpiexec命令,则新进程将不会启用MPI,并且对MPI_Init的任何调用都将失败。
我在一个项目中有这样的经历

如果不使用MPI 2及以上版本的动态流程管理,这是不可能的。您应该使用MPI调用,如MPI_COMM_SPAWN或MPI_COMM_SPAWN_MULTIPLE来创建新的MPI进程。如果使用fork和exec或类似函数启动新的mpiexec命令,则新进程将不会启用MPI,并且对MPI_Init的任何调用都将失败。
我在一个项目中有这样的经历

这是否可能并不重要——这是一个糟糕的想法。如其他人所述,使用MPI_Comm_spawn(_multiple)


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

如果可能的话,这是一个糟糕的想法。如其他人所述,使用MPI_Comm_spawn(_multiple)


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

MPI中的内置流程管理如何?值得高兴的是,DRM交互会自动得到处理,因为初始A的
mpiexec
将在B中生成流程。@HristoIliev:您可能已经了解了一些东西,您能详细介绍一下MPI中的流程管理吗?请看一下MPI标准的一章。有一些例子在堆栈溢出周围浮动-只需搜索
MPI\u Comm\u spawn
@HristoIliev:这真的很有趣。谢谢我将进一步探讨它,如果它有效,请回来添加它作为一个答案。我会随时通知你的。MPI中的内置流程管理如何?值得高兴的是,DRM交互会自动得到处理,因为初始A的
mpiexec
将在B中生成流程。@HristoIliev:您可能已经了解了一些东西,您能详细介绍一下MPI中的流程管理吗?请看一下MPI标准的一章。有一些例子在堆栈溢出周围浮动-只需搜索
MPI\u Comm\u spawn
@HristoIliev:这真的很有趣。谢谢我将进一步探讨它,如果它有效,请回来添加它作为一个答案。我会随时通知你的。不管糟糕与否,这就是我需要提供的。此外,当你不得不运行一个生成进程的脚本时,我没有看到太多的替代方案。不管糟糕与否,这就是我需要提供的。此外,当您必须运行生成进程的脚本时,我看不到很多替代方案。