我正在为一个科学应用程序开发一个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
我应该这样做还是有更清晰的方法来写?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐