流水线并行¶
本文档从阶段执行、缓冲组织和显式同步等角度,说明 PTO Tile Lib 中的流水线重叠方式。
本文档重点讨论 load、transform、compute、store 等阶段在软件层面的组织方式。
1. PTO 中的流水线重叠¶
在 PTO kernel 中,流水线优化通常指:让不同阶段的工作尽量重叠执行,从而避免数据搬运与计算被不必要地串行化。
一个常见的高层视角是:
TLOAD -> 布局 / 暂存变换 -> compute -> TSTORE
根据 kernel 不同,中间阶段可能包括:
TEXTRACTTMOVTTRANS- 各类向量计算指令
TMATMUL等矩阵指令
这种理解与 docs/coding/opt.md 中的优化思路是一致的。
2. 硬件可见阶段与软件可见阶段¶
从软件层面看,PTO 开发者通常围绕以下阶段来组织思路:
- 从 GM 加载 tile
- 对已暂存数据做变换或重排
- 执行 vector 或 cube 计算
- 把结果写回 GM
这些阶段在硬件上的精确映射会受到 backend 影响,但编程目标是稳定的:
- 在依赖允许时尽量让有价值的阶段重叠
- 减少不必要的停顿
- 避免为了局部依赖而把整个流水线全部排空
3. 缓冲的作用¶
流水线重叠通常依赖以下缓冲方式:
- 双缓冲
- 分阶段临时 tile
- 显式的 producer-consumer 同步
核心思想可以概括为:
- 当一个 tile 正在被后续阶段消费时,另一个 tile 可以同时为更早阶段做好准备
这种方式是否有收益,取决于:
- kernel 结构
- 主导瓶颈
- 可用片上资源
- 依赖关系是否建立正确
4. Event 与同步的作用¶
当前仓库已经在 docs/coding/Event.md 中给出了显式事件模型。
对于 PTO 中的细粒度同步,这份文档是当前最可靠的公开依据。
更稳妥的原则包括:
- 只为真实依赖加入同步
- 更偏向 producer-consumer 顺序控制,而不是不必要的宽泛屏障
- 事件使用方式应与文档中给出的 event 类型和 intrinsic 签名保持一致
在 device build 下,会使用类型化的 Event<SrcOp, DstOp> 表达依赖;在 CPU 仿真下,部分同步路径会被简化。
5. 预热、稳态与收尾¶
一个流水线 kernel 往往更适合分成三个阶段来理解:
- 预热:把第一批 tile 放入流水线
- 稳态:让连续 tile 之间的各阶段尽量重叠
- 收尾:完成剩余尚未结束的阶段
这种思路很有用,因为很多流水线问题并不是出在主循环本身,而是把首尾迭代错误地按稳态逻辑处理,导致依赖关系不正确。
6. 什么样的流水线更可能有效¶
当以下条件成立时,流水线通常更容易带来收益:
- 数据搬运和计算都占有一定比例
- 不同 tile 可以在有限缓冲下进入不同阶段
- 同步关系足够精确,不会破坏预期重叠
而在以下情况下,流水线收益可能有限:
- 某个单一阶段占据了几乎全部执行时间
- 缓冲压力过高
- 额外的变换或同步抵消了原本的重叠收益
因此,是否采用流水线并行,应围绕真实瓶颈判断,而不应默认所有 kernel 都会明显受益。
6. 表述边界¶
除非仓库源码或正式文档明确给出依据,否则以下内容都不应直接写成既定事实:
TCOMPUTE这类占位式指令- 与
docs/coding/Event.md不一致的事件 API - “一定能达到 3-4× 吞吐提升”之类的统一结论
- 把某种硬件阶段映射写成适用于所有目标的固定保证
- 忽略 tile 合法性、布局约束和指令支持情况的伪代码示例
这些写法在非正式讨论中可以帮助说明概念,但不适合作为严格的仓库文档。
7. 流水线调优流程¶
一个更稳妥的调优流程是:
- 先从正确的非重叠或最小重叠 kernel 出发
- 通过 profiling 或分阶段计时找出主导阶段
- 逐步引入缓冲和细粒度同步
- 每次调度修改后都重新验证正确性
- 当 tile 大小或划分方式变化后,再次确认重叠是否仍然有效
这与 docs/coding/opt.md 中的调优思路是相互一致的。
9. 相关参考文档¶
在当前 PTO Tile Lib 仓库中,最相关的参考包括:
docs/coding/Event.mddocs/coding/Tile.mddocs/coding/tutorial.mddocs/coding/opt.md
9. 结语¶
在 PTO Tile Lib 中,更准确的流水线并行描述方式应当是:
- 在合法前提下重叠 load / transform / compute / store 等阶段
- 谨慎使用缓冲与显式同步
- 围绕真实瓶颈进行调优,而不是抽象追求“更多重叠”
相比依赖虚构 API、占位式指令或固定性能结论,这种写法更符合当前仓库事实,也更适合作为严谨文档。