动态多线程

概述

动态多线程(Dynamic Multithreading)是一种并行计算模型,通过 spawn(生成并行子任务)和 sync(等待子任务完成)两个关键字来表达算法中的并行性。其性能由三个关键指标刻画:work(总操作数)、span(最长依赖链/关键路径长度)和parallelism(并行度 = work/span)。

定义

动态多线程(Dynamic Multithreading)

动态多线程模型使用伪指令扩展串行模型:

  • spawn:生成一个并行子线程,父线程可与子线程并行执行
  • sync:等待所有通过 spawn 生成的子线程完成后再继续

算法的并行性由计算有向无环图(computation DAG)表示:

  • 每个顶点代表一个strand(连续的非并行指令序列)
  • 边代表 strand 之间的依赖关系(先后顺序)

性能指标

设计算 DAG 为 ,则:

  • Work :所有 strand 的执行时间之和(在单处理器上的运行时间)
  • Span :DAG 中最长路径(关键路径)的长度(在无限处理器上的运行时间)
  • Parallelism :理论最大加速比的上界

个处理器上的运行时间 满足:

核心性质

指标符号含义理想目标
Work总操作数尽量接近最优串行算法
Span最长依赖链尽量短,决定并行加速上限
Parallelism并行度越大越好,理想
Speedup实际加速比越接近 越好

应用场景

  • 并行归并排序,并行度
  • 并行矩阵乘法(递归分块),并行度
  • 并行 FFT,并行度
  • 并行前缀和,并行度

参见