c - mpi 向随机选择的节点发送消息

标签 c mpi genetic-algorithm

我正在尝试使用 MPI 实现分布式遗传算法(孤岛模型)。所有节点都会重复生成新的种群,并在每 k 次迭代后交换最佳个体。我希望交换是随机的,这样任何进程都可以向任何其他进程发送消息。因此,在每 k 次迭代之后,每个进程都会向随机选择的进程发送一条消息。但是,我不确定如何使用 MPI 实现它。来自这篇文章 - Sending data to randomly selected hosts by using MPI我认为异步通信会有所帮助,但我不确定具体有多大帮助。

最佳答案

随机通信模式很难在 MPI 中实现。 MPI 基于具有一组确定性通信模式的所有级别。

对于点对点解决方案,每个等级将在 MPI_ANY_SOURCE 上调用 MPI_Irecv。当发生数据交换时,每个rank可以调用MPI_Send到特定的目标rank。目标排名将需要再次调用 MPI_Irecv 以准备下一次迭代。当作业完成时,任何未使用的 MPI_Irecv 调用都可以被 MPI_Cancel'd。

对于集体方法,每个等级将调用 MPI_Alltoall 或 MPI_Alltoallv(如果交换的数据量不同)。每个等级只会将数据填充到随机选择接收数据的单个等级。这种“稀疏”数据交换在 MPI_Alltoall 中很常见。集体可能很昂贵,但它确实允许每 k 次迭代进行硬同步,并避免清除 MPI_Cancel。

关于c - mpi 向随机选择的节点发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246569/

相关文章:

JAVA循环问题

c++ - Ubuntu 12.04 上的 Boost.MPI

genetic-algorithm - 如何在遗传算法中将数字表示为染色体?

c - C 中双倍的最小公倍数

c - 在宏中执行 { } while(0) 与 if (1) { }

将 libc 回溯转换为源代码行号

java - 这两种基因型之间的差异

java - 这种选择 `parent`像 `gambling roulette `的方法可行吗?

c - setvbuf 无法使标准输入无缓冲

c - c 中的 ')' token 错误之前预期为 '*'