0

CRAY 超级计算机使用 MPICH2 库。每个节点有 32 个 CPU。

我在 N 个不同的 MPI 等级上有一个浮点数,其中每个等级都在不同的节点上。我需要对这组浮点数执行归约操作。我想知道 MPI_Reduce 是否比 MPI_Gather 更快,对于任何 N 值,在根上计算减少。请假设在根等级上完成的减少将使用可以利用 N 个线程的良好并行减少算法完成.

如果对于任何 N 值都不是更快,那么对于较小的 N(如 16)或较大的 N 是否会更适合?

如果是真的,为什么?(例如,MPI_Reduce 是否会使用一种树通信模式,该模式倾向于在它用于与树的下一层通信的方法中隐藏归约操作的时间?)

4

1 回答 1

3

假设它MPI_Reduce总是比MPI_Gather+ local reduce 快。

即使在 N 的情况下减少比收集慢,在这种情况下,MPI 实现可以很容易地在收集 + 局部减少方面实现减少。

MPI_Reduce仅比MPI_Gather+ local reduce 有优势:

  1. MPI_Reduce是更高级别的操作为实现提供更多优化的机会。
  2. MPI_Reduce需要分配更少的内存
  3. MPI_Reduce需要在同一链路上传输更少的数据(如果使用树)或更少的数据(如果使用直接全对一)
  4. MPI_Reduce可以跨更多资源分配计算(例如使用树通信模式)

也就是说:永远不要假设任何关于性能的事情。措施。

于 2018-04-25T07:50:34.593 回答