多次调用mpi时关闭连接
Closing connection when calling mpi multiple times
我在函数内部使用 mpi4py。这个函数可以多次调用,所以我在函数的开头做comm = MPI.COMM_WORLD
。在里面我使用 Scatter
和 Gather,
并且我不知道每次调用后我是否应该以某种方式“关闭连接”。让我们使用以下示例:
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
,您就无需执行任何操作。
我在函数内部使用 mpi4py。这个函数可以多次调用,所以我在函数的开头做comm = MPI.COMM_WORLD
。在里面我使用 Scatter
和 Gather,
并且我不知道每次调用后我是否应该以某种方式“关闭连接”。让我们使用以下示例:
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
,您就无需执行任何操作。