我想在MPI(Java实现)中写一个小程序声明了一个变量x(双变量)。线程尝试修改变量(假设是随机修改)。当线程 i 发现 X 的新值小于旧值时,会向其他线程广播,以便它们可以更新其变量 X 的值
我已经查看了 MPI 中的 Bcast 函数......但在所有示例中,无论变量是否被修改,它都被所有线程调用。
我想在MPI(Java实现)中写一个小程序声明了一个变量x(双变量)。线程尝试修改变量(假设是随机修改)。当线程 i 发现 X 的新值小于旧值时,会向其他线程广播,以便它们可以更新其变量 X 的值
我已经查看了 MPI 中的 Bcast 函数......但在所有示例中,无论变量是否被修改,它都被所有线程调用。
这是在多线程环境(例如 OpenMP 或 Java 线程)中很容易实现并且在 MPI 中很难甚至不可能有效实现的场景之一。N
通常的方法是重构你的算法,使得每一步都可以传达最佳值(N
可能等于 1,但由于通信开销,这可能非常低效),然后Intracomm.Allreduce
与设置为 的 reduce 操作一起使用MPI.MIN
。每个进程提供自己的最小值,归约返回全局最小值。如果您还想知道保持全局最小值的进程的等级,MPI.MINLOC
则应改为使用。
如果您尝试实现并行遗传优化,有一些 C++ 库可能会给您带来启发。