MPI_Reduce调用的reduce操作次数是多少?

时间:2016-12-20 23:13:15

标签: c++ mpi reduce

我使用此处描述的相同操作(第一个代码)[1]。

position: fixed;

我看到MPI_Reduce在通信器中被p-1进程号调用,但对于其他减少函数(如MPI_Allreduce)来说这是错误的。

1Q - 是否有一种模式可以知道MPI_Reduce调用创建的操作的次数?

2Q - 有没有办法将MPI_Reduce的调用次数减少到只有一个进程(root)但是包含所有进程的输入条目?

[1] First k results

1 个答案:

答案 0 :(得分:0)

首先,当您编写 MPI_Reduce 时,我认为您的意思是 MPI用户缩减功能

1)未定义调用用户缩减功能的频率。例如,明确允许MPI实现在输入数据的块上调用缩减操作。因此,您不应对正确性做出任何假设。如果您想进行优化,请根据您的具体情况进行测量。

2)如果你坚持只在根级别上调用减少操作,你可以使用MPI_Gather(如果内存允许)。 MPI_Reduce_Local可能对您有所帮助,但是集体减少,只是一种调用MPI_Op的方法。这样效率会低得多,因为你浪费了非食品行业的计算和通信能力。实际上,你在时间复杂度方面从O(log n)到O(n)。

如果您可以描述您尝试解决的实际问题,可能会有更好的解决方案。