Skip to content

Work–Depth 模型

work-depth model · work-span model · computation DAG model

把并行计算表示为依赖 DAG,以总工作 W 和关键路径深度 D 分离工作量与并行性。

Computation DAG

把一次确定的并行执行展开成有向无环图 G=(V,E)。每个节点是一个单位时间原子任务;边 uv 表示 v 必须等待 u 完成。入度为零的未执行节点是 ready tasks,调度器只能从它们中选择。

总工作与深度定义为

W=|V|,D=maxπ is a directed path|π|.

若节点有权重 c(v),则 W=vc(v)D 是最大路径权重和;或把整数权重节点展开成任务链。混用“节点数 work”和“带权 span”会破坏调度不等式。

T1,T,TP 的关系

在单位成本、忽略调度开销时,单处理器必须执行全部节点,所以 T1=W;无限处理器每轮执行所有 ready tasks,时间等于关键路径 T=D。任意 P 处理器调度满足

TPmax{WP,D}.

比值 W/D 称为 average parallelism。它表示整个 DAG 可供利用的平均并行度,不是每一轮都恰有这么多 ready tasks,也不是超过该处理器数后绝无任何加速。

八叶归约的层次状态

八个输入各先产生一个叶任务,然后两两合并。若只计七个加法节点,三层 ready 集大小依次为 4、2、1:work 为 7,depth 为 3,平均并行度 7/3。若把读入八个叶值也算单位任务,则 work 为 15、depth 为 4;两种账本都可用,但必须从头到尾一致。

P=2 时,第一层 4 个加法需两轮,第二层 2 个加法一轮,根一轮,共 4 轮;下界是 max(7/2,3)=3.5,取整后 4,恰好达到。P=8 也只能用 3 轮,因为关键路径不变。

组合规则

两个 DAG 顺序组合、第二个必须等第一个全部结束时,

W=W1+W2,D=D1+D2.

若二者完全独立并行启动,则

W=W1+W2,D=max(D1,D2).

Fork–join 程序常同时包含两种组合。一个循环体可并行不代表下一阶段与它独立;漏画 barrier 或数据依赖会人为缩短 span。反过来,加入不必要的全局 barrier 会让 DAG 比算法真正依赖更深。

Work efficiency 与 slackness

W 与最佳串行算法时间同阶,算法 work-efficient。若为了把 D 降到常数而做 n2 个比较,即使无限处理器很快,也可能在现实 P 下输给 O(nlogn) work 的算法。

PW/D 时,容量项 W/P 通常主导,存在充分 parallel slackness;当 PW/D 时,关键路径主导,增加处理器收益很小。Brent 调度定理把这一直觉变成贪心调度上界。

随机 DAG 与量词

若算法随机性决定分支或任务数量,W,D 是随机变量。可以证明 E[TP],也可以分别给 W,D 的高概率界后取联合事件;不能从 E[W]E[D] 直接推出所有执行都满足同一时间界。

调度器随机性与算法随机性也应分开。工作窃取的期望界通常固定一棵 fully strict computation DAG,再对随机受害者选择取期望。

模型边界

Work–Depth DAG 表达控制与数据依赖,却不自动计通信、cache miss、内存容量或写冲突。两个节点没有依赖边,只说明语义上可并行,不保证它们访问内存时没有带宽竞争。

Depth 有时也指 PRAM 同步轮数;span 更强调关键路径。页面可把 D=T 作为同义约定,但不能把实际 TP 也叫 depth。处理器数 P 必须在调度阶段进入,而不是藏进 D

参考资料
  • Guy Blelloch, Prefix Sums and Their Applications, CMU Technical Report, 1990.
  • Robert Blumofe, Charles Leiserson, Scheduling Multithreaded Computations by Work Stealing, Journal of the ACM, 1999.
  • Thomas Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, multithreaded algorithms.