8. 编程模型契约¶
8.1 范围¶
本章定义 Auto 与 Manual 两种模式下的架构安全编程契约。 重点是正确性与可移植边界,而不是后端特定优化技巧。
8.2 Auto 与 Manual 契约分工¶
8.2.1 Auto 模式¶
- 工具链 SHOULD 自动推导合法放置、顺序与调度。
- 生成代码 MUST 保持虚拟 ISA 语义。
- 在等价源码与选项下,用户可见行为 MUST 保持确定性。
8.2.2 Manual 模式¶
- 程序员 MAY 显式控制放置与同步。
- 用户显式编写的依赖与顺序点 MUST 被保留。
- 非法手工配置 MUST 以可执行诊断失败。
8.3 可移植安全编程规则¶
面向跨后端可移植的程序 SHOULD:
- 保持在文档定义的指令族合法域内
- 避免依赖实现定义副作用
- 在数据流无法保证顺序时显式使用同步
- 将 dtype/layout/location 组合限制在后端交集画像内
8.4 性能导向且可移植的模式¶
可移植模式包括:
- 显式且域安全的 tiling 与有效区域管理
- 通过事件/
TSYNC建立清晰的生产-消费边界 - 使用能力检查进行后端受控特化
- 对不支持组合提供确定性回退路径
8.5 反模式¶
以下做法不具可移植性,SHOULD 避免:
- 将有效域外值当作有意义数据读取
- 依赖未文档化流水线时序行为
- 在无依赖定义时假设隐式顺序
- 未经画像门控直接编码后端特定假设
8.6 调试与验证流程¶
建议流程:
- 结构正确性检查(类型、元数、属性)
- 合法域检查(shape/layout/location 组合)
- 同步检查(依赖完备性)
- 后端一致性检查(画像约束)
- 跨代表目标差分行为检查
8.7 兼容说明¶
当代码依赖实现定义行为时:
- 假设 MUST 被文档化
- 后端画像约束 MUST 明确声明
- 在可行时 SHOULD 提供回退行为