我使用此处描述的相同操作(第一个代码)[1]。
position: fixed;
我看到MPI_Reduce在通信器中被p-1进程号调用,但对于其他减少函数(如MPI_Allreduce)来说这是错误的。
1Q - 是否有一种模式可以知道MPI_Reduce调用创建的操作的次数?
2Q - 有没有办法将MPI_Reduce的调用次数减少到只有一个进程(root)但是包含所有进程的输入条目?
答案 0 :(得分:0)
首先,当您编写 MPI_Reduce
时,我认为您的意思是 MPI用户缩减功能。
1)未定义调用用户缩减功能的频率。例如,明确允许MPI实现在输入数据的块上调用缩减操作。因此,您不应对正确性做出任何假设。如果您想进行优化,请根据您的具体情况进行测量。
2)如果你坚持只在根级别上调用减少操作,你可以使用MPI_Gather
(如果内存允许)。 MPI_Reduce_Local
可能对您有所帮助,但不是集体减少,只是一种调用MPI_Op
的方法。这样效率会低得多,因为你浪费了非食品行业的计算和通信能力。实际上,你在时间复杂度方面从O(log n)到O(n)。
如果您可以描述您尝试解决的实际问题,可能会有更好的解决方案。