“主存 merge sort 的 $O(n\log n)$ 比较并未描述数据移动层次。外存排序一次并 $M/B$ 路,把成本写成 Sort$(N)$ I/O;Funnel Sort以递归漏斗获…”
四个必须分开的量 ​
对同一并行计算,记
前者是在一个处理器上执行并行程序全部工作所需时间,后者是在无限处理器下仍受依赖限制的时间,也称 span 或 depth。若每个原子任务单位成本,work
任意调度都满足
第一项是容量下界,第二项是关键路径下界。只说“深度
加速比、效率与成本 ​
相对同一算法的串行执行,加速比与处理器效率定义为
总处理器成本是
实际报告还应写明
并行归并的任务轨迹 ​
合并两个各长
每层所有二分与分割的总工作可控制在线性量级,递归深度为对数级;具体并行 merge 版本可达到
把它放进并行 mergesort,可得到
span 取决于所用 merge:若每层 merge span 为
共享内存、PRAM 与 fork–join ​
共享内存线程通过 load/store、原子操作和同步原语交流,缓存一致性与伪共享会影响成本。PRAM把执行切成同步轮,并按 EREW、CREW、CRCW 规定同一单元的并发访问;它适合算法结构分析,却不计缓存层次。
Fork–join 程序在 spawn 时产生可并行子任务,在 sync 时等待子任务完成,执行可表示为动态 DAG。Work–Depth 模型抽去具体线程数,先分析
这些模型描述的冲突规则不同。PRAM 的同步轮不能无条件等同于现实线程 barrier;fork–join 的动态任务也不要求预先枚举所有处理器指令。
分布式内存与通信 ​
分布式内存中,处理器只能直接访问本地数据,远端信息通过消息传递。除 work 与 span 外,至少还要报告消息数、通信字节、同步轮数,或用延迟—带宽模型写成
低 span 并不保证低通信。例如每轮让所有处理器读取一个远端中心值,在 PRAM CREW 中可视作常数轮,在网络上却可能形成广播瓶颈。数据划分、拓扑和局部内存容量属于模型前提。
正确性与保证类型 ​
并行正确性既要证明输出满足规格,也要证明所有允许交错下无数据竞争或冲突由模型规则解决。确定性 DAG 的 work/span 是最坏界;随机算法要说明期望对随机输入、算法硬币还是调度器随机性取。
若运行时间写成“高概率
模型边界 ​
内存带宽、cache miss、NUMA、任务创建和 barrier 开销都可能使
空间也需区分总空间与每处理器本地空间。为了把 span 降低而复制
参考资料
- Guy Blelloch, Programming Parallel Algorithms, Communications of the ACM, 1996.
- Thomas Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, multithreaded algorithms chapters.
- Richard Cole, Parallel Merge Sort, SIAM Journal on Computing, 1988.