在MPI中广播更好的值

在MPI中广播更好的值,mpi,mpj-express,Mpi,Mpj Express,我想用MPI(Java实现)编写一个小程序 声明了一个变量x(双变量)。线程尝试修改变量(比如说随机修改)。当一个线程发现一个小于旧线程的新值X时,会向其他线程进行广播,以便它们可以更新变量X的值 我已经看过了MPI中的Bcast函数。。。但在所有示例中,无论变量是否修改,它都被所有线程调用 这是在多线程环境(例如OpenMP或Java线程)中很容易实现的场景之一,在MPI中很难有效实现。通常的方法是重构算法,使每个N步骤都可以传递最佳值(其中N可能等于1,但由于通信开销,这可能非常低效),然后

我想用MPI(Java实现)编写一个小程序 声明了一个变量x(双变量)。线程尝试修改变量(比如说随机修改)。当一个线程发现一个小于旧线程的新值X时,会向其他线程进行广播,以便它们可以更新变量X的值


我已经看过了MPI中的Bcast函数。。。但在所有示例中,无论变量是否修改,它都被所有线程调用

这是在多线程环境(例如OpenMP或Java线程)中很容易实现的场景之一,在MPI中很难有效实现。通常的方法是重构算法,使每个
N
步骤都可以传递最佳值(其中
N
可能等于1,但由于通信开销,这可能非常低效),然后使用
intracom.Allreduce
,并将reduce操作设置为
MPI.MIN
。每个进程都提供自己的最小值,减少值返回全局最小值。如果您还想知道保存全局最小值的进程的级别,则应改用
MPI.MINLOC


如果你正试图实施并行遗传优化,有一些方法可能会给你灵感。

没错,广播就是这样工作的——传播者的所有过程都参与其中。在进程交换消息之前,一个进程不知道另一个进程上的变量值已更改。您可能希望查看其他集合,例如
mpi\u聚集
mpi\u分散
mpi\u所有聚集
。还有其他的。我明白了,在谈论多机/分布式系统时,这总是一个问题。是的,你的想法很好,但正如你所说的,当N=1时,由于通信开销,它将是低效的。。。如果N>1,则无法充分优化。。感谢这些C++库并行遗传优化…我的领域并不关注这一点,但阅读新事物总是很有趣的