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