gpt4 book ai didi

MPI_Send/Recv 与 MPI_Reduce

转载 作者:行者123 更新时间:2023-12-01 12:45:00 35 4
gpt4 key购买 nike

我得到了一个小练习,我必须通过使用 MPI 来估计 n 个球体的总体积来实现蒙特卡罗算法,这些球体的中心坐标和半径在 3 维中。即使我们必须使用 MPI,我们也可以在本地机器上启动所有进程,因此没有网络开销。我实现了这个练习的两个版本:

一,使用 MPI_Send 和 MPI_Recv(其中排名 0 的进程只等待其他进程的部分结果来执行最终求和) http://pastebin.com/AV41hJqn

另一个,使用 MPI_Reduce,这里也是 0 级进程等待部分结果。 http://pastebin.com/8b0czv6a

我预计这两个程序将花费相同的时间完成,但我发现使用 MPI_Reduce 的程序更快。为什么这个?哪里不一样了?

最佳答案

可能有很多原因,具体取决于您使用的 MPI 实现、运行的硬件类型以及实现的优化程度以利用它。 This Google Scholar search给出了在这方面所做的各种工作的一些想法。给你一些关于它可能是什么的想法:

  • 由于缩减可以在中间步骤中完成,因此可以使用 different topology与基本的 rank 0 collect-from-all 方法不同,在延迟和带宽方面进行了权衡。
  • 在一个计算节点内(或者在您的台式机或笔记本电脑上,如果您尝试解决玩具问题),可以利用内核中的局部性、CPU 插槽上的内核之间或插槽之间的局部性来对计算进行排序和以一种对硬件更有效的方式进行通信。听起来像是this paper from IBM的摘要可能会给出一些关于这些设计决策的具体细节。或者,该实现可能会选择缓存不经意的方案,以便在通用计算节点内获得更好的性能。
  • 可以在 MPI_Reduce 实现中使用持久通信(MPI_Send_init 和 MPI_Recv_init)。这些例程可以perform better than their blocking and non-blocking counterparts由于向 MPI 实现和硬件提供了有关程序如何对其通信进行分组的额外详细信息。

这不是一个完整的列表,但希望它能帮助您入门,并提供一些想法,让您了解如何在有兴趣的情况下搜索更多详细信息。

关于MPI_Send/Recv 与 MPI_Reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20975196/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com