后端¶
逐架构的差异行为,从 pass 中剥离出来。
pass 从不对 BackendType 做分支判断。所有与架构相关的内容 —— codegen 目标、运行时 API
名称、硬件冒险规避、跨核 layout 规则 —— 都由当前 PassContext 提供的 BackendHandler
回答。新增一个架构意味着新增一个 handler,而不是修改 pass。
| 页面 | 内容 |
|---|---|
| BackendHandler:有原则的后端分派 | 该虚接口、pass 如何查询它,以及新增后端需要做什么 |
| 同步硬件资源 | 资源域查询、ID 范围与编译器预留策略 |
| ISA 宏同步资源 | 后端维护的 ISA 信号占用声明与查询 |
已注册算子清单¶
通过具体后端查询实际注册的算子:
from pypto import backend
target = backend.get_backend_instance(backend.BackendType.Ascend910)
names = target.get_registered_op_names()
返回列表已排序,与注册表相互独立。查询结果反映目标架构的排除项和覆盖项,
不会改变全局后端选择。检视降低(lowering)覆盖范围时应使用该清单;
解析注册源码可能误计注释中的示例,或遗漏通过共享表注册的名称。
算子已注册并不意味着它支持所有数据类型、形状或布局。
列表也包含 IR 算子定义已不存在的历史后端条目;检视当前 IR 时,
可通过 ir.is_op_registered(name) 区分这些条目。
审核清单位于 tests/ut/backend/buffer_migration_inventory.py:
MIGRATION_FAMILIES 将 168 个有效名称分为 22 个算子族,
HISTORICAL_CALLBACKS 记录 8 个历史回调。注册范围变化时,需要同步更新此模块。
其校验文件 tests/ut/backend/test_buffer_migration_inventory.py 将清单与两个实际后端注册表比较,
检测名称的新增与删除、重复分类、目标架构变化,以及重新获得 IR 定义的历史回调。
清单中的 PLANNED 和 RESTRICTED 状态描述已声明的迁移成熟度。
RESTRICTED 表示部分形式已实现,不保证所有数据类型、布局、属性或目标架构形式都受支持。
该检查让清单遗漏触发测试失败;实际实现覆盖范围仍由生产转换规则(conversion recipes)
及其转换、原生编译和数值测试确认。审核清单不参与降低过程,也不会启用默认切换。
该检查还查询 backend.get_buffer_elementwise_recipe_names(),其来源是逻辑转换和原生发射
实际使用的规则表。每条返回的规则必须对应有效的后端算子及 RESTRICTED 审核分类。
这样既能保持成熟度声明同步,也无需重复生产指令映射,更不会宣称所有形式都已覆盖。
另请参阅¶
- Pass、PassContext、PassPipeline 与 PassManager —— handler 的来源。
- PTO ISA 参考 —— handler 所抽象掉的硬件差异。
后端名称¶
A2/A3 后端使用 BackendType.Ascend910,A5 使用 BackendType.Ascend950。
Python 和 C++ 中的 BackendType.Ascend910B 均保留为 BackendType.Ascend910
的兼容别名,两个名称选择相同目标。规范的 .name 和新写入的产物元数据使用
Ascend910。包含 Ascend910B 的旧产物仍可读取;较旧版本的 PyPTO 可能无法
识别包含 Ascend910 的新产物。平台字符串(a2a3、a2a3sim、a5、
a5sim)与枚举整数值保持不变。