【问题标题】:Barrier after spawned mpi4py process产生 mpi4py 进程后的障碍
【发布时间】:2016-09-22 18:21:54
【问题描述】:

我有一段代码使用 mpi4py 生成多个 mpi 可执行文件的实例。我希望代码在这些进程完成时暂停,然后调用第二组相同的可执行文件。

问题是对 mpi 可执行文件的所有调用都会立即产生。

似乎没有办法使用屏障来防止这种情况发生。有谁知道这是否正确,如果正确,是否有人有一个聪明的主意来获得我需要的结果。

#!/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()
directory=os.path.join(cwd,str(rank))
print(rank,directory)
os.chdir(directory)


new_comm.Spawn("SOME_F90_MPI_EXECUTABLE",
                  args=None,
                           maxprocs=4)

'''I want to pause here until the spawned processes finish running...'''
new_comm.Barrier()
MPI.COMM_WORLD.Barrier()

print(new_comm.Get_rank())

cwd=os.getcwd()
directory=os.path.join(cwd,str(rank))
print(rank,directory)
os.chdir(directory+"_2")


new_comm.Spawn("SOME_F90_MPI_EXECUTABLE",
                  args=["> output"],
                           maxprocs=4)

new_comm.Disconnect()

print("All finished here.....")

谢谢!

【问题讨论】:

    标签: python parallel-processing mpi mpi4py


    【解决方案1】:

    你必须使用Spawn返回的intercommunicator

    child_comm = MPI.COMM_WORLD.Spawn("./spawnchild.py", args=None, maxprocs=2)
    child_comm.Barrier()
    

    对于孩子,获取父母intercommunicator(在Fortran中类似):

    parent = MPI.COMM_WORLD.Get_parent()
    assert(parent != MPI.COMM_NULL)
    parent.Barrier();
    

    请注意,由两组进程组成的 intercommunicator 的行为与传统的 intercommunicator 不同。例如。对于屏障,以下语义适用:

    如果 comm 是互通者,MPI_BARRIER 涉及两个组。只有在另一组(组 B)的所有成员都进入调用(反之亦然)之后,调用才会在交互器的一组(组 A)中的进程处返回。一个进程可能在它自己的组中的所有进程都进入调用之前从调用中返回。

    (MPI 3.1 Standard, 5.3)

    【讨论】:

    • 太好了 - 谢谢祖兰。如果我在 spawn 过程中循环,我是否需要在第二次进入循环之前断开/释放 spawn 返回的交互器?
    • 我相信你应该断开对讲机,但我不完全确定标准是否规定了这一点。
    • 我不知道为什么,但 f90 可执行文件在生成后似乎挂起,尽管看似完成 - 即所有输出都已完成。当我运行 f90 可执行文件而不从 python 脚本调用它时,它应该需要几分之一秒,但是当它通过生成运行时,它会挂起几分钟。这是你以前注意到的吗?
    • 这是单节点还是分布式系统?
    • 单节点 - 当我使用 disconnect() 时问题就消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    相关资源
    最近更新 更多