python - 使用 mpi4py 嵌套 mpi 调用

标签 python parallel-processing mpi python-3.4 mpi4py

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

我收到错误:

Open MPI does not support recursive calls of mpirun

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

测试代码:

父级.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

将 openmpi 2.0.0 与 gcc 和 python/3.4.2 结合使用

任何人对于为什么会发生这种情况有任何好主意......

谢谢!

最佳答案

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

#!/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 父级.py

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

(感谢祖兰)

关于python - 使用 mpi4py 嵌套 mpi 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39617250/

相关文章:

java - "Unresolved compilation problems"来自在 Eclipse Indigo 中运行 MPJ express

python - 如何在 openpyxl 中进行列对齐?

regex - 并行正则表达式与 NFA 与 DFA 匹配?哪个更快?

java - 如何针对可以并行运行的 JPA 编写 junit 测试?

haskell - 为什么 Haskell 中没有隐式并行性?

c++ - 编译运行 OpenMPI 程序

mpi - 从 PVM 迁移到 MPI

python - Django/Postgres 将使用多少字节作为十进制字段?

python - django 模板不呈现

python 2.7 : create dictionary from list of sets