【发布时间】:2022-09-23 15:35:55
【问题描述】:
我想编写一个 MPI 程序,其中每个进程都有一个布尔值 initiate,最初设置为 false。然后,等级 0 检查大型 2D 布尔数组的值 (i,j) 是否为真,如果是,则等级 0 将其值 initiate 设置为真。如果 rank 0 的 initiate 值为真,那么我希望 rank 0 将 initiate 的新值广播给其他进程,间接告诉他们每个人启动另一个方法的执行。
我怎样才能有效地做到这一点?很高兴听到任何想法。
-谢谢
PS。我考虑将二维布尔数组发送到每个进程,但二维数组可以非常在某些情况下很大,我担心我的代码不能很好地扩展。
-
简单的方法是在等级
0上计算initiate,广播它,然后其他等级知道该做什么。这种方法有什么问题吗? -
我希望仅在 0 级发现
initiate为真时进行广播。我怎样才能做到这一点?否则,如果我每次广播 rank 0 计算initiate的值可能非常昂贵,因为 rank 0 计算initiate的值很多次通常是错误的 -
您可以在非根等级上使用 MPI_Ibcast() 和轮询(例如 MPI_Test())