0

我正在尝试使用 MPI 实现分布式遗传算法(岛模型)。所有节点将重复生成新的种群,并在每 k 次迭代后交换最佳个体。我希望使交换随机,以便任何进程都可以向任何其他进程发送消息。所以在每 k 次迭代之后,每个进程都会向随机选择的进程发送一条消息。但是,我不确定如何使用 MPI 实现这一点。从这篇文章 -通过使用 MPI 将数据发送到随机选择的主机中,我了解到异步通信会有所帮助,但我不确定具体如何。

4

1 回答 1

4

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

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

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

于 2013-04-27T01:56:42.307 回答