我需要在多个工作处理器上同步分布式解决的优化问题的中间解决方案。已知解向量是稀疏的。
我注意到,如果我使用MPI_AllReduce,与我自己的AllReduce实现相比,性能是很好的。
然而,我相信,如果AllReduce可以只与解向量中的非零条目通信,那么性能可以进一步提高。我找不到任何这样的AllReduce实现。
有什么想法吗?
MPI_type_indexed似乎无法使用,因为事先不知道非零项的索引。
正如Hristo在评论中所说,MPI的目标(根据一些人的说法)一直是在MPI之上实现更优化的技巧,并将其用作抽象通信调用的低级库。显然,MPI在大多数情况下并不是这样使用的,但您仍然可以编写自己的稀疏集体。听起来像是一篇不错的论文。
这里也有类似的问题。很可能您需要实现自定义MPI_Allreduce()。
这里有一个优化的实现。你很可能已经找到了这个链接:https://fs.hlrs.de/projects/par/mpi//myreduce.html
如果你想要更好的性能实现,这里有一些:
https://dl.acm.org/citation.cfm?id=2642791
https://dl.acm.org/citation.cfm?id=2642773
请注意,它们没有提供实现,您可能需要支付少量费用。
祝好运