使用 mpi4py 嵌套 mpi 调用
Nesting mpi calls with mpi4py
我正在尝试使用 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
将 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)
运行 与:
mpi运行 --oversubscribe -np 4 parent.py
似乎在 4 个内核上启动 4 个 SOME_MPI_EXECUTABLE 实例,每个 运行ning。
(感谢祖蓝)
我正在尝试使用 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
将 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)
运行 与:
mpi运行 --oversubscribe -np 4 parent.py
似乎在 4 个内核上启动 4 个 SOME_MPI_EXECUTABLE 实例,每个 运行ning。
(感谢祖蓝)