可扩展MPI通信拆分算法与多线程MPI通信优化
1. 并行排序算法流程与时间复杂度分析
并行排序算法主要包含以下几个步骤:
1. 输入子表处理 :每个进程使用递归加倍和合并来生成输入,无需对其输入子表进行排序,此过程耗时为 (O(\frac{n}{p}))。
2. 精确分割器查找 :经过 (lg n) 轮找到精确分割器,每轮执行时间成本为 (O(p + lg \frac{n}{p})),总时间为 (O(p lg n + lg^2 n))。
3. 条目交换 :每个进程与其他进程最多交换 (\frac{n}{p}) 个条目,交换的时间复杂度为 (O(\frac{n}{p}))。
4. 子表合并 :每个进程在 (lg p) 个阶段递归合并其 (p) 个分区,成本为 (O(\frac{n}{p} lg p))。
并行排序的总时间为 (O(p lg n + lg^2 n + \frac{n}{p} lg p))。在并行排序结束时,(p) 个进程使用递归加倍来构建表的完整副本,此阶段耗时为 (O(n))。虽然该算法的通信量比传统递归加倍实现多,但在适度数量的排序进程下,能观察到性能提升。
2. 分布式表减少内存使用
为使应用程序能够扩展到数百万个进程,提出了分布式表的概念。在分布式表中,通信器中的进程按排名排列在分布式二叉树中。每个进程最初只知道其父进程和两个子进程的身份。当需要与其他进程通信时,若目标排名在其自己的子树中,则询问其子进程查找目标进程的地址;否则,询问其父进程。
超级会员免费看
订阅专栏 解锁全文

1871

被折叠的 条评论
为什么被折叠?



