我使用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)
這打印:
1 0x7f362a405048
2 0x7f362a405048
...
這就是為什么我認為必須有一種方法可以在另一個過程中重建對象.但是,我在文檔中找不到有關如何操作的線索.
簡而言之,我的問題是:是否可以在mpi4py中的同一節點上的進程之間共享對象?