使用mpi4py嵌套mpi调用

从一开始就

我正在尝试使用mpi4py调用mpi可执行文件的第二个实例。

我收到错误消息:

Open MPI does not support recursive calls of mpirun

但是我给人的印象是Spawn应该能够处理-即设置一个新的通信器,在其中可以启动另一个mpi命令。

测试代码:

parent.py:

#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys


rank = MPI.COMM_WORLD.Get_rank()
new_comm = MPI.COMM_WORLD.Split(color=rank, key=rank)
print(new_comm.Get_rank())
new_comm.Spawn(sys.executable,
                           args=['test.py'],
                           maxprocs=4)

调用test.py:

#!/usr/bin/env python
from mpi4py import MPI
import numpy
import os
import sys

comm = MPI.Comm.Get_parent()
rank = comm.Get_rank()

cwd=os.getcwd()
directory=os.path.join(cwd,str(rank))
os.chdir(directory)


os.system('{}'.format('mpirun -np 4 SOME_MPI_EXECUTABLE_HERE'))



print("Finished in "+directory)
os.chdir(cwd)

comm.Disconnect()

我正在与:

mpirun --oversubscribe -np 1 parent.py

在gcc和python / 3.4.2中使用openmpi 2.0.0

任何人对于为什么会这样有任何聪明的主意.....

谢谢!

从一开始就

以下代码似乎按照我想要的方式执行。

#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
import os

rank = MPI.COMM_WORLD.Get_rank()
new_comm = MPI.COMM_WORLD.Split(color=rank, key=rank)
print(new_comm.Get_rank())

cwd=os.getcwd()
os.mkdir(str(rank))
directory=os.path.join(cwd,str(rank))
print(rank,directory)
os.chdir(directory)


new_comm.Spawn("SOME_MPI_EXECUTABLE_HERE",
                  args=[""],
                           maxprocs=4)

运行:

mpirun --oversubscribe -np 4 parent.py

似乎要启动4个SOME_MPI_EXECUTABLE实例,每个实例都在4个内核上运行。

(感谢祖兰)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章