Phase Tracking
Barrier 通过在 phase 0 和 phase 1 之间翻转,跨 iteration 复用
▶ 播放
phase = 0
Iter 0
phase = 1
Iter 1
phase = 0
Iter 2
phase = 1
Iter 3
phase = 0
Iter 4
phase = 1
Iter 5
phase = 0
Iter 6
phase = 1
Iter 7
工作方式
每个 barrier 都有一个
phase bit
(0 或 1)。所有预期 arrival 和被追踪的异步传输都完成后,barrier 会进入下一 phase 并 reset,为下一次 iteration 做好准备,不需要重新初始化。
1
Producer 报告 arrival 和预期传输字节数(phase 0)
2
Arrival 与传输全部完成,barrier 进入 phase 1
3
try_wait(phase=0)
返回,kernel 更新本地 parity
为什么需要 Phase Tracking?
在 pipelined kernel 中,barrier 会在 K-loop 的每个 iteration 中复用。Phase tracking 解决的问题是:
“这次 barrier 触发对应的是 iteration
i
,还是 iteration
i-1
?”
phase_tma = 0
for k in range(K):
try_wait(tma_bar,
phase_tma
)
phase_tma ^= 1 # flip