【发布时间】:2015-12-05 18:02:10
【问题描述】:
我使用MPI (mpi4py) 脚本(在单个节点上),它适用于非常大的对象。为了让所有进程都可以访问该对象,我通过comm.bcast()进行分发。这会将对象复制到所有进程并消耗大量内存,尤其是在复制过程中。因此,我想共享指针之类的东西,而不是对象本身。我在memoryview 中发现了一些有助于提高进程内对象工作的功能。对象的真实内存地址也可以通过memoryview对象字符串表示访问,并且可以像这样分布:
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
if rank:
content_pointer = comm.bcast(root = 0)
print(rank, content_pointer)
else:
content = ''.join(['a' for i in range(100000000)]).encode()
mv = memoryview(content)
print(mv)
comm.bcast(str(mv).split()[-1][: -1], root = 0)
打印出来:
<memory at 0x7f362a405048>
1 0x7f362a405048
2 0x7f362a405048
...
这就是为什么我相信必须有一种方法可以在另一个过程中重构对象。但是,我在文档中找不到有关如何执行此操作的线索。
简而言之,我的问题是:是否可以在mpi4py的同一节点上的进程之间共享一个对象?
【问题讨论】:
-
您能接受 JobJob 的新 MPI 3.0 答案正确吗?
标签: python-3.x mpi shared-memory mpi4py memoryview