如何解决在 mpi4py 窗口上使用活动目标同步 Start() Complete() Post() Wait() 的正确方法是什么?
为什么这不起作用?
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
group = comm.Get_group()
rank = comm.Get_rank()
mpi_datatype = MPI.DOUBLE # use this for Allocate()
np_datatype = numpy.float64
if rank == 1:
a = numpy.empty(9,dtype=np_datatype)
window = MPI.Win.Create(a,comm=comm)
elif rank == 0:
window = MPI.Win.Create(None,comm=comm)
if rank == 1:
window.Post(group=group)
window.Wait()
elif rank == 0:
b = numpy.full(9,1.5,dtype=np_datatype)
window.Start(group=group)
window.Put(b,target_rank=1)
window.Complete()
if rank == 1:
val = a[0] # should be 1.5 if Put() worked...
我注意到,如果我删除 window.Complete() 和 window.Wait() 函数,这两个排名进程能够打印 numpy.empty() 值,这意味着它们能够运行直到完成 - 但是不正确。
我在网上找不到有关如何在 mpi4py 中使用活动目标同步功能的示例。顺便说一句,我让 Fence() 和 Lock() 同步功能正常工作。但我相信这种方法会更快,因为我的实际程序将成对同步排名进程(我不想全局同步)。欢迎任何建议。
解决方法
解决办法: 开始(组=EXPOSURE_EPOCH_PROCESS_GROUP)和发布(组=ACCESS_EPOCH_PROCESS_GROUP)
import numpy
from mpi4py import MPI
comm = MPI.COMM_WORLD
group = comm.Get_group()
rank = comm.Get_rank()
mpi_datatype = MPI.DOUBLE # use this for Allocate()
np_datatype = numpy.float64
if rank == 1:
a = numpy.empty(9,dtype=np_datatype)
window = MPI.Win.Create(a,comm=comm)
elif rank == 0:
window = MPI.Win.Create(None,comm=comm)
if rank == 1:
g1 = comm.group.Incl([0])
window.Post(group=g1)
window.Wait()
elif rank == 0:
g2 = comm.group.Incl([1])
b = numpy.full(9,1.5,dtype=np_datatype)
window.Start(group=g2)
window.Put(b,target_rank=1)
window.Complete()
if rank == 1:
val = a[0] # val = 1.5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。