多次调用mpi时关闭连接

Closing connection when calling mpi multiple times

我在函数内部使用 mpi4py。这个函数可以多次调用,所以我在函数的开头做comm = MPI.COMM_WORLD。在里面我使用 ScatterGather, 并且我不知道每次调用后我是否应该以某种方式“关闭连接”。让我们使用以下示例:

def test():
    comm = MPI.COMM_WORLD

    if comm.rank == 0:  # Start with the node 0 having the whole data
        print("Master process.")

    else:  # Other nodes has no data ("for now")
        print("Slave process.")


    # comm.Free()
    # comm.Disconnect()
    # MPI.Finalize()

def call_test_twice():
    test()
    test()

if __name__ == "__main__":
    call_test_twice()

那么,问题是,在这段代码中,是否应该使用test()末尾的任何注释命令?

MPI.COMM_WORLD 是预定义的世界通讯器。它在程序启动时由 MPI 环境创建,并一直存在到程序执行结束。你永远不应该干涉世界通讯器,否则会发生不好的事情。干预包括释放或断开连接。

调用 MPI.Finalize() 完成 MPI 环境,进程不能再参与任何进一步的通信,因此您将无法再次调用 test()(前提是 rank 属性 世界通讯器不缓存)。 mpi4py 脚本退出时自动完成 MPI。

答案很简单 - 只要您使用 MPI.COMM_WORLD,您就无需执行任何操作。