Skip to main content

5. 异步操作、内存模型和 waitcnt

异步指令在发射时递增对应计数器,完成并提交结果后递减。waitcnt 的每个字段是“允许保留的最老序号阈值”;写全 0 等待该队列清空,写全 1(或字段最大保留值)表示不等待。sm 虽为 2 bit 且硬件最多 15 个 outstanding,但标记为乱序,只有 0 有意义,非零按保守实现处理为 0。

计数器位数/上限顺序覆盖
vm6 / 62in-order向量 load、返回原子、scratch load、L1/L2 invalidate。
vst5 / 30in-order向量 store、非返回原子、image store/atomic、L2 writeback。
tex5 / 30in-ordertexture sample/fetch/query、image load、返回 image atomic。
ls4 / 14in-ordershared/tile memory、插值、zs.test。
sm2 / 15out-of-orderuniform scalar memory load;只接受 0。
sfu3 / 6in-orderSFU 超越、除法、平方根。

fixed:n 延迟指令在 n 个周期后写回;async:<counter> 必须用相应 counter 等待。内存顺序采用 acquire/release:普通 global/buffer 访问按 program order 发射,barrier 建立 workgroup 内的 release/acquire,waitcnt 只保证指定队列完成,不替代跨 workgroup 的系统栅栏。cpol=def/nt/l2/sys 分别表示默认、non-temporal、强制 L2、系统级可见;host-coherent 页不进入 L2。L1 为 write-through,命中时更新,store 计数在 L2 确认后递减。