【发布时间】:2018-07-29 11:07:56
【问题描述】:
我尝试谷歌但没有找到解决方案
简短的问题如下:是否可以在 MPI 中模拟一个全局变量,以便它不需要进程等待太多。
现在说来话长。我想为 MPI 的单成本集覆盖问题实现分支定界算法。为此,我需要一种方法让每个进程都知道迄今为止任何其他进程找到的当前全局最优值——这样如果它的当前解决方案变得比目前找到的全局最优值更差,该进程就可以停止分支。某种(同步的)全局变量非常适合。
我想在我的算法中做的事情类似于以下内容。假设有一个全局变量curr_global_min。每个进程在其工作期间不时读取这个变量,并且如果它目前发现的当前最优值小于curr_global_min,则用他的局部最小值更新这个全局变量。我预计更新全局最小值是相当罕见的事件(算法一开始除外)。
显然,我想在不浪费太多计算时间的情况下做到这一点。另一方面,我可以容忍更新中的一些延迟,也就是说,curr_global_min 不一定需要立即发送到所有进程——前提是这样可以节省总计算量时间。
【问题讨论】:
-
如果有人对我想尝试解决的问题的大小感兴趣:元素总数为 9740685,我有 759 个大小为 504152 的子集、2576 个大小为 49140 的子集和 759 个子集大小为 4096。我仍然想知道在一周内在集群上计算这个是否可行。
-
如果你能接受一些延迟,你可以发布一个非阻塞接收(
MPI_Recv(..., source=MPI_ANY_SOURCE, ...)在所有等级上。当 全局变量 应该更新时,只需发送新值到所有等级。所有等级应定期检查全局变量是否已更新为MPI_Test()
标签: synchronization mpi