我需要同步分配在多个工作处理器上分配的优化问题的中间解决方案。已知解向量是稀疏的。
我注意到如果我使用MPI_AllReduce,与我自己的AllReduce实现相比,性能会很好。
但是,我相信,如果AllReduce只能传递解决方案向量中的非零条目,则可以进一步提高性能。我找不到AllReduce的任何这样的实现。
有什么想法吗?
似乎不能使用MPI_type_indexed,因为事先不知道非零条目的索引。
答案 0 :(得分:0)
MPI中没有稀疏的集体。这是MPI论坛过去讨论的内容(到底是什么,我不知道),但该领域也有research。通常,在讨论论坛中的这些事情时,我认为它们更多地涉及不涉及所有过程而不是所有数据的集体。
正如Hristo在评论中所说,MPI(根据一些人)的目标一直是在MPI之上实现更优化的技巧,并将其用作低级库来抽象通信调用。显然,这并不是MPI在大多数情况下实际使用的方式,但你仍然可以编写自己的稀疏集体。听起来对我来说是一篇好文章。
答案 1 :(得分:0)
这里有类似的问题。您很可能需要实现自定义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
请注意,它们不提供实施,您可能需要支付少量费用。
祝你好运