MPI广播更改Python类实例的地址

2024-06-25 23:55:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个科学应用程序开发一个python框架,最近我想用mpi4py来加速这个应用程序。该框架使用3-4个类实例,这些类实例相互之间进行操作,每个类实例在一个数据库中存储对另一个实例的引用自变量. 你知道吗

让我烦恼的是,广播函数bcast每次都会更改实例的地址。为了实现这一点,我必须将每个实例的变量名(新引用)重新分配回所有其他实例。这让我觉得我做错了事情。你知道吗

我用下面的代码重现了这一点,每次调用bcast函数时,实例“obj”都会更改地址。你知道吗

from mpi4py import MPI

commMPI = MPI.COMM_WORLD
rankMPI = commMPI.Get_rank()
sizeMPI = commMPI.Get_size()

class Dummy():
    def __init__(self):
        pass

if rankMPI == 0:
    obj = Dummy()
else:
    obj = None

obj  = commMPI.bcast(obj,root=0)
obj1 = obj

obj  = commMPI.bcast(obj,root=0)

print(rankMPI,obj is obj1)

我刚刚开始使用mpi4py,所以我只知道最基本的东西。我是否必须实现一个内在类方法来更新实例,同时保留它们的主地址?我做错什么了?提前谢谢。你知道吗

更新

我发现如果我这样写的话,我可以保留根的地址(秩0)

tmp = commMPI.bcast(obj,root=0)
if rankMPI != 0:
    obj = tmp

我应该这样做还是有更清晰的方法来写?你知道吗


Tags: 实例函数框架objgetif地址mpi4py