我想在MPI中编写一个小程序(Java实现) 声明变量x(双变量)。线程尝试修改变量(让我们说随机修改)。当一个线程我发现一个小于旧的X的新值时,就会向其他线程广播,这样他们就可以更新它们的变量值X
我已经查看了MPI中的Bcast函数...但在所有示例中,所有线程都调用了变量是否被修改。
答案 0 :(得分:2)
这是在多线程环境(例如OpenMP或Java线程)中很容易实现的场景之一,并且很难在MPI中高效实现。通常的方法是以这样一种方式重构算法:每个N
步骤可以传递最佳值(N
可能等于1,但由于通信开销,这可能是非常低效的)然后使用Intracomm.Allreduce
并将reduce操作设置为MPI.MIN
。每个过程都提供自己的最小值,减少量返回全局最小值。如果您还想知道保持全局最小值的流程的等级,则应使用MPI.MINLOC
代替。
如果您正在尝试实施并行遗传优化,那么some C++ libraries可能会为您提供灵感。