Repository navigation
CI: bump pinned pto-isa for PTOAS v0.55 - #1644
ChaoZheng109 merged 12 commits into
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughThe pull request updates the pinned PTO-ISA revision in ChangesPTO-ISA revision
Estimated code review effort: 1 (Trivial) | ~2 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Co-authored-by: Youhezhen<youhezhen@huawei.com> # message auto-generated for no-merge-commit merge: !1424 merge fix/sdma-host-header into master fix: keep SDMA host headers CPU-safe Created-by: Youhezhen Commit-by: Youhezhen Merged-by: cann-robot Description: ## 背景 本 MR 为 [hw-native-sys/simpler#1644](hw-native-sys/simpler#1644) 提供可固定依赖的 PTO-ISA revision,解决以下问题: 1. host 侧 SDMA workspace manager 间接包含 device-only 类型,导致普通 C++ host 编译失败; 2. CPU simulator 会无条件补齐 CUBE/VECTOR 两种角色,使显式的单角色编译同时启用两套实现并产生重复定义; 3. CPU stub 缺少设备侧已有的 `dcci_dst_t` 类型,三参数 `dcci` 调用无法在 CPU simulator 编译; 4. 仓库中存在仅大小写不同的 `TADDDEQRELU.*` / `TAddDeqRelu.*` 路径,macOS 的大小写不敏感文件系统会让 checkout 持续处于 dirty 状态。 ## 修改说明 ### 1. 将 SDMA workspace 常量拆到 host-safe header 涉及文件: - `include/pto/comm/async_common/sdma_constants.hpp` - `include/pto/comm/async_common/async_types.hpp` - `include/pto/comm/async/sdma/sdma_workspace_manager.hpp` **为什么改:** `sdma_workspace_manager.hpp` 是 host 侧代码,实际只需要 workspace 大小常量;原先包含 `async_types.hpp` 会同时引入 `__gm__`、`__ubuf__` 等 device-only 类型和定义,扩大 host 编译依赖并触发编译错误。 **怎么改:** 新增只依赖 `<cstdint>` 的轻量 header,将四个 workspace layout 常量移入其中;device 侧的 `async_types.hpp` 继续包含该 header,host manager 则直接包含它。 ```diff -#include "pto/comm/async_common/async_types.hpp" +#include "pto/comm/async_common/sdma_constants.hpp" ``` ```cpp // sdma_constants.hpp:host/device 均可安全包含 constexpr uint32_t kSdmaContextWorkspaceBytes = 16U * 1024U; constexpr uint32_t kSdmaFlagPayloadBytesPerGroup = 512U; constexpr uint32_t kSdmaMaxChannelGroups = 48U; constexpr uint32_t kSdmaWorkspaceBytes = kSdmaContextWorkspaceBytes + kSdmaMaxChannelGroups * kSdmaFlagPayloadBytesPerGroup; ``` 这样不改变常量的 namespace、名称或计算方式,只切断 host header 对 device 类型定义的依赖。 ### 2. 保留 CPU simulator 显式选择的执行角色 涉及文件:`include/pto/common/arch_macro.hpp` **为什么改:** 原逻辑在定义 `__CPU_SIM` 后,会分别补齐缺失的 `__DAV_CUBE__` 和 `__DAV_VEC__`。因此调用方即使显式指定 CUBE-only 或 VECTOR-only,另一个角色仍会被自动打开,同一翻译单元可能同时编译两套 role-specific 实现并产生重复定义。 **怎么改:** 仅当两种角色都未指定时,才保留 PTO standalone CPU tests 所需的双角色默认值;只要调用方已经指定任意一种角色,就原样保留。 ```diff -#if defined(__CPU_SIM) -#ifndef __DAV_CUBE__ +#if defined(__CPU_SIM) && !defined(__DAV_CUBE__) && !defined(__DAV_VEC__) #define __DAV_CUBE__ -#endif -#ifndef __DAV_VEC__ #define __DAV_VEC__ #endif -#endif ``` 结果是: - 未指定角色:仍同时提供 CUBE/VECTOR stub,保持现有 PTO CPU tests 行为; - 显式指定 CUBE:只编译 CUBE; - 显式指定 VECTOR:只编译 VECTOR。 ### 3. 补齐 CPU simulator 的 `dcci_dst_t` 涉及文件:`include/pto/common/cpu_stub.hpp` **为什么改:** device 代码可使用 `dcci_dst_t::CACHELINE_OUT` 作为三参数 `dcci` 的 destination mode,但 CPU stub 只有 `cache_line_t` 和三参数函数签名,没有对应类型,导致同一份 kernel 在 CPU simulator 编译失败。 **怎么改:** 在 CPU stub 中增加与 device API 同名的最小占位类型;其值保持为 `0`,符合 simulator 中 cache 操作为 no-op 的既有语义。 ```cpp struct dcci_dst_t { static constexpr int CACHELINE_OUT = 0; }; ``` 这只补齐编译期接口,不改变 CPU simulator 的运行时 cache 行为。 ### 4. 删除 macOS 上发生大小写碰撞的重复文档路径 涉及路径: ```text 删除:docs/figures/isa/TADDDEQRELU.svg 删除:docs/isa/TADDDEQRELU.md 删除:docs/isa/TADDDEQRELU_zh.md 保留:docs/figures/isa/TAddDeqRelu.svg 保留:docs/isa/TAddDeqRelu.md 保留:docs/isa/TAddDeqRelu_zh.md ``` **为什么改:** 两组文件在 Linux 上可共存,但在默认大小写不敏感的 macOS 文件系统上会映射到同一路径。checkout 后 Git 会持续报告伪修改;并发准备 PTO-ISA checkout 时还可能反复重建目录,最终表现为随机缺少 header。 **怎么改:** 保留与 `docs/isa/manifest.yaml` 中 `instruction: TAddDeqRelu` 一致、且被当前文档引用的 CamelCase 路径,删除旧的全大写重复路径。指令 C++ 名称 `TADDDEQRELU` 不变,仅规范文档文件名。 ## 兼容性 - SDMA workspace 常量的名称、值和 namespace 均未改变; - CPU simulator 未显式选择角色时的默认行为未改变; - NPU/device 实现和 `TADDDEQRELU` 指令接口未改变; - 文档内容仍由 canonical `TAddDeqRelu.*` 文件保留。 ## 验证 - GitCode pipeline:17/17 通过; - PTO-ISA full CPU simulator suite(GCC 15):通过; - Simpler `ep_dispatch_combine`:a2a3sim、a5sim 通过; - Simpler profiling flags smoke:2 个架构 × 6 组配置通过; - case-fold 路径冲突扫描:0 个冲突; - pre-commit:除本机 `/tmp` OAT 安装锁权限问题外其余 hooks 通过,OAT 及全部检查已由远端 pipeline 复验通过。 See merge request: cann/pto-isa!1424
Co-authored-by: Youhezhen<youhezhen@huawei.com> # message auto-generated for no-merge-commit merge: !1424 merge fix/sdma-host-header into master fix: keep SDMA host headers CPU-safe Created-by: Youhezhen Commit-by: Youhezhen Merged-by: cann-robot Description: ## 背景 本 MR 为 [hw-native-sys/simpler#1644](hw-native-sys/simpler#1644) 提供可固定依赖的 PTO-ISA revision,解决以下问题: 1. host 侧 SDMA workspace manager 间接包含 device-only 类型,导致普通 C++ host 编译失败; 2. CPU simulator 会无条件补齐 CUBE/VECTOR 两种角色,使显式的单角色编译同时启用两套实现并产生重复定义; 3. CPU stub 缺少设备侧已有的 `dcci_dst_t` 类型,三参数 `dcci` 调用无法在 CPU simulator 编译; 4. 仓库中存在仅大小写不同的 `TADDDEQRELU.*` / `TAddDeqRelu.*` 路径,macOS 的大小写不敏感文件系统会让 checkout 持续处于 dirty 状态。 ## 修改说明 ### 1. 将 SDMA workspace 常量拆到 host-safe header 涉及文件: - `include/pto/comm/async_common/sdma_constants.hpp` - `include/pto/comm/async_common/async_types.hpp` - `include/pto/comm/async/sdma/sdma_workspace_manager.hpp` **为什么改:** `sdma_workspace_manager.hpp` 是 host 侧代码,实际只需要 workspace 大小常量;原先包含 `async_types.hpp` 会同时引入 `__gm__`、`__ubuf__` 等 device-only 类型和定义,扩大 host 编译依赖并触发编译错误。 **怎么改:** 新增只依赖 `<cstdint>` 的轻量 header,将四个 workspace layout 常量移入其中;device 侧的 `async_types.hpp` 继续包含该 header,host manager 则直接包含它。 ```diff -#include "pto/comm/async_common/async_types.hpp" +#include "pto/comm/async_common/sdma_constants.hpp" ``` ```cpp // sdma_constants.hpp:host/device 均可安全包含 constexpr uint32_t kSdmaContextWorkspaceBytes = 16U * 1024U; constexpr uint32_t kSdmaFlagPayloadBytesPerGroup = 512U; constexpr uint32_t kSdmaMaxChannelGroups = 48U; constexpr uint32_t kSdmaWorkspaceBytes = kSdmaContextWorkspaceBytes + kSdmaMaxChannelGroups * kSdmaFlagPayloadBytesPerGroup; ``` 这样不改变常量的 namespace、名称或计算方式,只切断 host header 对 device 类型定义的依赖。 ### 2. 保留 CPU simulator 显式选择的执行角色 涉及文件:`include/pto/common/arch_macro.hpp` **为什么改:** 原逻辑在定义 `__CPU_SIM` 后,会分别补齐缺失的 `__DAV_CUBE__` 和 `__DAV_VEC__`。因此调用方即使显式指定 CUBE-only 或 VECTOR-only,另一个角色仍会被自动打开,同一翻译单元可能同时编译两套 role-specific 实现并产生重复定义。 **怎么改:** 仅当两种角色都未指定时,才保留 PTO standalone CPU tests 所需的双角色默认值;只要调用方已经指定任意一种角色,就原样保留。 ```diff -#if defined(__CPU_SIM) -#ifndef __DAV_CUBE__ +#if defined(__CPU_SIM) && !defined(__DAV_CUBE__) && !defined(__DAV_VEC__) #define __DAV_CUBE__ -#endif -#ifndef __DAV_VEC__ #define __DAV_VEC__ #endif -#endif ``` 结果是: - 未指定角色:仍同时提供 CUBE/VECTOR stub,保持现有 PTO CPU tests 行为; - 显式指定 CUBE:只编译 CUBE; - 显式指定 VECTOR:只编译 VECTOR。 ### 3. 补齐 CPU simulator 的 `dcci_dst_t` 涉及文件:`include/pto/common/cpu_stub.hpp` **为什么改:** device 代码可使用 `dcci_dst_t::CACHELINE_OUT` 作为三参数 `dcci` 的 destination mode,但 CPU stub 只有 `cache_line_t` 和三参数函数签名,没有对应类型,导致同一份 kernel 在 CPU simulator 编译失败。 **怎么改:** 在 CPU stub 中增加与 device API 同名的最小占位类型;其值保持为 `0`,符合 simulator 中 cache 操作为 no-op 的既有语义。 ```cpp struct dcci_dst_t { static constexpr int CACHELINE_OUT = 0; }; ``` 这只补齐编译期接口,不改变 CPU simulator 的运行时 cache 行为。 ### 4. 删除 macOS 上发生大小写碰撞的重复文档路径 涉及路径: ```text 删除:docs/figures/isa/TADDDEQRELU.svg 删除:docs/isa/TADDDEQRELU.md 删除:docs/isa/TADDDEQRELU_zh.md 保留:docs/figures/isa/TAddDeqRelu.svg 保留:docs/isa/TAddDeqRelu.md 保留:docs/isa/TAddDeqRelu_zh.md ``` **为什么改:** 两组文件在 Linux 上可共存,但在默认大小写不敏感的 macOS 文件系统上会映射到同一路径。checkout 后 Git 会持续报告伪修改;并发准备 PTO-ISA checkout 时还可能反复重建目录,最终表现为随机缺少 header。 **怎么改:** 保留与 `docs/isa/manifest.yaml` 中 `instruction: TAddDeqRelu` 一致、且被当前文档引用的 CamelCase 路径,删除旧的全大写重复路径。指令 C++ 名称 `TADDDEQRELU` 不变,仅规范文档文件名。 ## 兼容性 - SDMA workspace 常量的名称、值和 namespace 均未改变; - CPU simulator 未显式选择角色时的默认行为未改变; - NPU/device 实现和 `TADDDEQRELU` 指令接口未改变; - 文档内容仍由 canonical `TAddDeqRelu.*` 文件保留。 ## 验证 - GitCode pipeline:17/17 通过; - PTO-ISA full CPU simulator suite(GCC 15):通过; - Simpler `ep_dispatch_combine`:a2a3sim、a5sim 通过; - Simpler profiling flags smoke:2 个架构 × 6 组配置通过; - case-fold 路径冲突扫描:0 个冲突; - pre-commit:除本机 `/tmp` OAT 安装锁权限问题外其余 hooks 通过,OAT 及全部检查已由远端 pipeline 复验通过。 See merge request: cann/pto-isa!1424
Co-authored-by: Youhezhen<youhezhen@huawei.com> # message auto-generated for no-merge-commit merge: !1424 merge fix/sdma-host-header into master fix: keep SDMA host headers CPU-safe Created-by: Youhezhen Commit-by: Youhezhen Merged-by: cann-robot Description: ## 背景 本 MR 为 [hw-native-sys/simpler#1644](hw-native-sys/simpler#1644) 提供可固定依赖的 PTO-ISA revision,解决以下问题: 1. host 侧 SDMA workspace manager 间接包含 device-only 类型,导致普通 C++ host 编译失败; 2. CPU simulator 会无条件补齐 CUBE/VECTOR 两种角色,使显式的单角色编译同时启用两套实现并产生重复定义; 3. CPU stub 缺少设备侧已有的 `dcci_dst_t` 类型,三参数 `dcci` 调用无法在 CPU simulator 编译; 4. 仓库中存在仅大小写不同的 `TADDDEQRELU.*` / `TAddDeqRelu.*` 路径,macOS 的大小写不敏感文件系统会让 checkout 持续处于 dirty 状态。 ## 修改说明 ### 1. 将 SDMA workspace 常量拆到 host-safe header 涉及文件: - `include/pto/comm/async_common/sdma_constants.hpp` - `include/pto/comm/async_common/async_types.hpp` - `include/pto/comm/async/sdma/sdma_workspace_manager.hpp` **为什么改:** `sdma_workspace_manager.hpp` 是 host 侧代码,实际只需要 workspace 大小常量;原先包含 `async_types.hpp` 会同时引入 `__gm__`、`__ubuf__` 等 device-only 类型和定义,扩大 host 编译依赖并触发编译错误。 **怎么改:** 新增只依赖 `<cstdint>` 的轻量 header,将四个 workspace layout 常量移入其中;device 侧的 `async_types.hpp` 继续包含该 header,host manager 则直接包含它。 ```diff -#include "pto/comm/async_common/async_types.hpp" +#include "pto/comm/async_common/sdma_constants.hpp" ``` ```cpp // sdma_constants.hpp:host/device 均可安全包含 constexpr uint32_t kSdmaContextWorkspaceBytes = 16U * 1024U; constexpr uint32_t kSdmaFlagPayloadBytesPerGroup = 512U; constexpr uint32_t kSdmaMaxChannelGroups = 48U; constexpr uint32_t kSdmaWorkspaceBytes = kSdmaContextWorkspaceBytes + kSdmaMaxChannelGroups * kSdmaFlagPayloadBytesPerGroup; ``` 这样不改变常量的 namespace、名称或计算方式,只切断 host header 对 device 类型定义的依赖。 ### 2. 保留 CPU simulator 显式选择的执行角色 涉及文件:`include/pto/common/arch_macro.hpp` **为什么改:** 原逻辑在定义 `__CPU_SIM` 后,会分别补齐缺失的 `__DAV_CUBE__` 和 `__DAV_VEC__`。因此调用方即使显式指定 CUBE-only 或 VECTOR-only,另一个角色仍会被自动打开,同一翻译单元可能同时编译两套 role-specific 实现并产生重复定义。 **怎么改:** 仅当两种角色都未指定时,才保留 PTO standalone CPU tests 所需的双角色默认值;只要调用方已经指定任意一种角色,就原样保留。 ```diff -#if defined(__CPU_SIM) -#ifndef __DAV_CUBE__ +#if defined(__CPU_SIM) && !defined(__DAV_CUBE__) && !defined(__DAV_VEC__) #define __DAV_CUBE__ -#endif -#ifndef __DAV_VEC__ #define __DAV_VEC__ #endif -#endif ``` 结果是: - 未指定角色:仍同时提供 CUBE/VECTOR stub,保持现有 PTO CPU tests 行为; - 显式指定 CUBE:只编译 CUBE; - 显式指定 VECTOR:只编译 VECTOR。 ### 3. 补齐 CPU simulator 的 `dcci_dst_t` 涉及文件:`include/pto/common/cpu_stub.hpp` **为什么改:** device 代码可使用 `dcci_dst_t::CACHELINE_OUT` 作为三参数 `dcci` 的 destination mode,但 CPU stub 只有 `cache_line_t` 和三参数函数签名,没有对应类型,导致同一份 kernel 在 CPU simulator 编译失败。 **怎么改:** 在 CPU stub 中增加与 device API 同名的最小占位类型;其值保持为 `0`,符合 simulator 中 cache 操作为 no-op 的既有语义。 ```cpp struct dcci_dst_t { static constexpr int CACHELINE_OUT = 0; }; ``` 这只补齐编译期接口,不改变 CPU simulator 的运行时 cache 行为。 ### 4. 删除 macOS 上发生大小写碰撞的重复文档路径 涉及路径: ```text 删除:docs/figures/isa/TADDDEQRELU.svg 删除:docs/isa/TADDDEQRELU.md 删除:docs/isa/TADDDEQRELU_zh.md 保留:docs/figures/isa/TAddDeqRelu.svg 保留:docs/isa/TAddDeqRelu.md 保留:docs/isa/TAddDeqRelu_zh.md ``` **为什么改:** 两组文件在 Linux 上可共存,但在默认大小写不敏感的 macOS 文件系统上会映射到同一路径。checkout 后 Git 会持续报告伪修改;并发准备 PTO-ISA checkout 时还可能反复重建目录,最终表现为随机缺少 header。 **怎么改:** 保留与 `docs/isa/manifest.yaml` 中 `instruction: TAddDeqRelu` 一致、且被当前文档引用的 CamelCase 路径,删除旧的全大写重复路径。指令 C++ 名称 `TADDDEQRELU` 不变,仅规范文档文件名。 ## 兼容性 - SDMA workspace 常量的名称、值和 namespace 均未改变; - CPU simulator 未显式选择角色时的默认行为未改变; - NPU/device 实现和 `TADDDEQRELU` 指令接口未改变; - 文档内容仍由 canonical `TAddDeqRelu.*` 文件保留。 ## 验证 - GitCode pipeline:17/17 通过; - PTO-ISA full CPU simulator suite(GCC 15):通过; - Simpler `ep_dispatch_combine`:a2a3sim、a5sim 通过; - Simpler profiling flags smoke:2 个架构 × 6 组配置通过; - case-fold 路径冲突扫描:0 个冲突; - pre-commit:除本机 `/tmp` OAT 安装锁权限问题外其余 hooks 通过,OAT 及全部检查已由远端 pipeline 复验通过。 See merge request: cann/pto-isa!1424
Co-authored-by: Youhezhen<youhezhen@huawei.com> # message auto-generated for no-merge-commit merge: !1424 merge fix/sdma-host-header into master fix: keep SDMA host headers CPU-safe Created-by: Youhezhen Commit-by: Youhezhen Merged-by: cann-robot Description: ## 背景 本 MR 为 [hw-native-sys/simpler#1644](hw-native-sys/simpler#1644) 提供可固定依赖的 PTO-ISA revision,解决以下问题: 1. host 侧 SDMA workspace manager 间接包含 device-only 类型,导致普通 C++ host 编译失败; 2. CPU simulator 会无条件补齐 CUBE/VECTOR 两种角色,使显式的单角色编译同时启用两套实现并产生重复定义; 3. CPU stub 缺少设备侧已有的 `dcci_dst_t` 类型,三参数 `dcci` 调用无法在 CPU simulator 编译; 4. 仓库中存在仅大小写不同的 `TADDDEQRELU.*` / `TAddDeqRelu.*` 路径,macOS 的大小写不敏感文件系统会让 checkout 持续处于 dirty 状态。 ## 修改说明 ### 1. 将 SDMA workspace 常量拆到 host-safe header 涉及文件: - `include/pto/comm/async_common/sdma_constants.hpp` - `include/pto/comm/async_common/async_types.hpp` - `include/pto/comm/async/sdma/sdma_workspace_manager.hpp` **为什么改:** `sdma_workspace_manager.hpp` 是 host 侧代码,实际只需要 workspace 大小常量;原先包含 `async_types.hpp` 会同时引入 `__gm__`、`__ubuf__` 等 device-only 类型和定义,扩大 host 编译依赖并触发编译错误。 **怎么改:** 新增只依赖 `<cstdint>` 的轻量 header,将四个 workspace layout 常量移入其中;device 侧的 `async_types.hpp` 继续包含该 header,host manager 则直接包含它。 ```diff -#include "pto/comm/async_common/async_types.hpp" +#include "pto/comm/async_common/sdma_constants.hpp" ``` ```cpp // sdma_constants.hpp:host/device 均可安全包含 constexpr uint32_t kSdmaContextWorkspaceBytes = 16U * 1024U; constexpr uint32_t kSdmaFlagPayloadBytesPerGroup = 512U; constexpr uint32_t kSdmaMaxChannelGroups = 48U; constexpr uint32_t kSdmaWorkspaceBytes = kSdmaContextWorkspaceBytes + kSdmaMaxChannelGroups * kSdmaFlagPayloadBytesPerGroup; ``` 这样不改变常量的 namespace、名称或计算方式,只切断 host header 对 device 类型定义的依赖。 ### 2. 保留 CPU simulator 显式选择的执行角色 涉及文件:`include/pto/common/arch_macro.hpp` **为什么改:** 原逻辑在定义 `__CPU_SIM` 后,会分别补齐缺失的 `__DAV_CUBE__` 和 `__DAV_VEC__`。因此调用方即使显式指定 CUBE-only 或 VECTOR-only,另一个角色仍会被自动打开,同一翻译单元可能同时编译两套 role-specific 实现并产生重复定义。 **怎么改:** 仅当两种角色都未指定时,才保留 PTO standalone CPU tests 所需的双角色默认值;只要调用方已经指定任意一种角色,就原样保留。 ```diff -#if defined(__CPU_SIM) -#ifndef __DAV_CUBE__ +#if defined(__CPU_SIM) && !defined(__DAV_CUBE__) && !defined(__DAV_VEC__) #define __DAV_CUBE__ -#endif -#ifndef __DAV_VEC__ #define __DAV_VEC__ #endif -#endif ``` 结果是: - 未指定角色:仍同时提供 CUBE/VECTOR stub,保持现有 PTO CPU tests 行为; - 显式指定 CUBE:只编译 CUBE; - 显式指定 VECTOR:只编译 VECTOR。 ### 3. 补齐 CPU simulator 的 `dcci_dst_t` 涉及文件:`include/pto/common/cpu_stub.hpp` **为什么改:** device 代码可使用 `dcci_dst_t::CACHELINE_OUT` 作为三参数 `dcci` 的 destination mode,但 CPU stub 只有 `cache_line_t` 和三参数函数签名,没有对应类型,导致同一份 kernel 在 CPU simulator 编译失败。 **怎么改:** 在 CPU stub 中增加与 device API 同名的最小占位类型;其值保持为 `0`,符合 simulator 中 cache 操作为 no-op 的既有语义。 ```cpp struct dcci_dst_t { static constexpr int CACHELINE_OUT = 0; }; ``` 这只补齐编译期接口,不改变 CPU simulator 的运行时 cache 行为。 ### 4. 删除 macOS 上发生大小写碰撞的重复文档路径 涉及路径: ```text 删除:docs/figures/isa/TADDDEQRELU.svg 删除:docs/isa/TADDDEQRELU.md 删除:docs/isa/TADDDEQRELU_zh.md 保留:docs/figures/isa/TAddDeqRelu.svg 保留:docs/isa/TAddDeqRelu.md 保留:docs/isa/TAddDeqRelu_zh.md ``` **为什么改:** 两组文件在 Linux 上可共存,但在默认大小写不敏感的 macOS 文件系统上会映射到同一路径。checkout 后 Git 会持续报告伪修改;并发准备 PTO-ISA checkout 时还可能反复重建目录,最终表现为随机缺少 header。 **怎么改:** 保留与 `docs/isa/manifest.yaml` 中 `instruction: TAddDeqRelu` 一致、且被当前文档引用的 CamelCase 路径,删除旧的全大写重复路径。指令 C++ 名称 `TADDDEQRELU` 不变,仅规范文档文件名。 ## 兼容性 - SDMA workspace 常量的名称、值和 namespace 均未改变; - CPU simulator 未显式选择角色时的默认行为未改变; - NPU/device 实现和 `TADDDEQRELU` 指令接口未改变; - 文档内容仍由 canonical `TAddDeqRelu.*` 文件保留。 ## 验证 - GitCode pipeline:17/17 通过; - PTO-ISA full CPU simulator suite(GCC 15):通过; - Simpler `ep_dispatch_combine`:a2a3sim、a5sim 通过; - Simpler profiling flags smoke:2 个架构 × 6 组配置通过; - case-fold 路径冲突扫描:0 个冲突; - pre-commit:除本机 `/tmp` OAT 安装锁权限问题外其余 hooks 通过,OAT 及全部检查已由远端 pipeline 复验通过。 See merge request: cann/pto-isa!1424
Co-authored-by: Youhezhen<youhezhen@huawei.com> # message auto-generated for no-merge-commit merge: !1424 merge fix/sdma-host-header into master fix: keep SDMA host headers CPU-safe Created-by: Youhezhen Commit-by: Youhezhen Merged-by: cann-robot Description: ## 背景 本 MR 为 [hw-native-sys/simpler#1644](hw-native-sys/simpler#1644) 提供可固定依赖的 PTO-ISA revision,解决以下问题: 1. host 侧 SDMA workspace manager 间接包含 device-only 类型,导致普通 C++ host 编译失败; 2. CPU simulator 会无条件补齐 CUBE/VECTOR 两种角色,使显式的单角色编译同时启用两套实现并产生重复定义; 3. CPU stub 缺少设备侧已有的 `dcci_dst_t` 类型,三参数 `dcci` 调用无法在 CPU simulator 编译; 4. 仓库中存在仅大小写不同的 `TADDDEQRELU.*` / `TAddDeqRelu.*` 路径,macOS 的大小写不敏感文件系统会让 checkout 持续处于 dirty 状态。 ## 修改说明 ### 1. 将 SDMA workspace 常量拆到 host-safe header 涉及文件: - `include/pto/comm/async_common/sdma_constants.hpp` - `include/pto/comm/async_common/async_types.hpp` - `include/pto/comm/async/sdma/sdma_workspace_manager.hpp` **为什么改:** `sdma_workspace_manager.hpp` 是 host 侧代码,实际只需要 workspace 大小常量;原先包含 `async_types.hpp` 会同时引入 `__gm__`、`__ubuf__` 等 device-only 类型和定义,扩大 host 编译依赖并触发编译错误。 **怎么改:** 新增只依赖 `<cstdint>` 的轻量 header,将四个 workspace layout 常量移入其中;device 侧的 `async_types.hpp` 继续包含该 header,host manager 则直接包含它。 ```diff -#include "pto/comm/async_common/async_types.hpp" +#include "pto/comm/async_common/sdma_constants.hpp" ``` ```cpp // sdma_constants.hpp:host/device 均可安全包含 constexpr uint32_t kSdmaContextWorkspaceBytes = 16U * 1024U; constexpr uint32_t kSdmaFlagPayloadBytesPerGroup = 512U; constexpr uint32_t kSdmaMaxChannelGroups = 48U; constexpr uint32_t kSdmaWorkspaceBytes = kSdmaContextWorkspaceBytes + kSdmaMaxChannelGroups * kSdmaFlagPayloadBytesPerGroup; ``` 这样不改变常量的 namespace、名称或计算方式,只切断 host header 对 device 类型定义的依赖。 ### 2. 保留 CPU simulator 显式选择的执行角色 涉及文件:`include/pto/common/arch_macro.hpp` **为什么改:** 原逻辑在定义 `__CPU_SIM` 后,会分别补齐缺失的 `__DAV_CUBE__` 和 `__DAV_VEC__`。因此调用方即使显式指定 CUBE-only 或 VECTOR-only,另一个角色仍会被自动打开,同一翻译单元可能同时编译两套 role-specific 实现并产生重复定义。 **怎么改:** 仅当两种角色都未指定时,才保留 PTO standalone CPU tests 所需的双角色默认值;只要调用方已经指定任意一种角色,就原样保留。 ```diff -#if defined(__CPU_SIM) -#ifndef __DAV_CUBE__ +#if defined(__CPU_SIM) && !defined(__DAV_CUBE__) && !defined(__DAV_VEC__) #define __DAV_CUBE__ -#endif -#ifndef __DAV_VEC__ #define __DAV_VEC__ #endif -#endif ``` 结果是: - 未指定角色:仍同时提供 CUBE/VECTOR stub,保持现有 PTO CPU tests 行为; - 显式指定 CUBE:只编译 CUBE; - 显式指定 VECTOR:只编译 VECTOR。 ### 3. 补齐 CPU simulator 的 `dcci_dst_t` 涉及文件:`include/pto/common/cpu_stub.hpp` **为什么改:** device 代码可使用 `dcci_dst_t::CACHELINE_OUT` 作为三参数 `dcci` 的 destination mode,但 CPU stub 只有 `cache_line_t` 和三参数函数签名,没有对应类型,导致同一份 kernel 在 CPU simulator 编译失败。 **怎么改:** 在 CPU stub 中增加与 device API 同名的最小占位类型;其值保持为 `0`,符合 simulator 中 cache 操作为 no-op 的既有语义。 ```cpp struct dcci_dst_t { static constexpr int CACHELINE_OUT = 0; }; ``` 这只补齐编译期接口,不改变 CPU simulator 的运行时 cache 行为。 ### 4. 删除 macOS 上发生大小写碰撞的重复文档路径 涉及路径: ```text 删除:docs/figures/isa/TADDDEQRELU.svg 删除:docs/isa/TADDDEQRELU.md 删除:docs/isa/TADDDEQRELU_zh.md 保留:docs/figures/isa/TAddDeqRelu.svg 保留:docs/isa/TAddDeqRelu.md 保留:docs/isa/TAddDeqRelu_zh.md ``` **为什么改:** 两组文件在 Linux 上可共存,但在默认大小写不敏感的 macOS 文件系统上会映射到同一路径。checkout 后 Git 会持续报告伪修改;并发准备 PTO-ISA checkout 时还可能反复重建目录,最终表现为随机缺少 header。 **怎么改:** 保留与 `docs/isa/manifest.yaml` 中 `instruction: TAddDeqRelu` 一致、且被当前文档引用的 CamelCase 路径,删除旧的全大写重复路径。指令 C++ 名称 `TADDDEQRELU` 不变,仅规范文档文件名。 ## 兼容性 - SDMA workspace 常量的名称、值和 namespace 均未改变; - CPU simulator 未显式选择角色时的默认行为未改变; - NPU/device 实现和 `TADDDEQRELU` 指令接口未改变; - 文档内容仍由 canonical `TAddDeqRelu.*` 文件保留。 ## 验证 - GitCode pipeline:17/17 通过; - PTO-ISA full CPU simulator suite(GCC 15):通过; - Simpler `ep_dispatch_combine`:a2a3sim、a5sim 通过; - Simpler profiling flags smoke:2 个架构 × 6 组配置通过; - case-fold 路径冲突扫描:0 个冲突; - pre-commit:除本机 `/tmp` OAT 安装锁权限问题外其余 hooks 通过,OAT 及全部检查已由远端 pipeline 复验通过。 See merge request: cann/pto-isa!1424
64ba2a6 to
b7fe191
Compare
Qualify the dispatch DCCI cache-line arguments for the updated interface.
- migrate SDMA completion polling to post-done IDs - carry A2/A3 post IDs through deferred completion state - cover monotonic completion semantics with mailbox tests
- fetch the pinned PTO-ISA commit by exact SHA - retain advertised-ref fallback for restrictive Git servers - cover both resolver fetch paths with unit tests
- adapt host-build-graph SDMA completion to post IDs - carry SDMA backend cookies through deferred completion
- retry CI after transient PTO-ISA fetch failure
- retry the complete GitHub PTO-ISA acquisition three times - fall back to the GitCode mirror while preserving the exact pin
- increase the a2a3 unit-test job timeout from 30 to 45 minutes
Review 随访:3 点(非阻塞)建议基于对 #1644 的 review,以下是 3 点建议,均不阻塞合并。 1. a5
|
- migrate A5 host_build_graph SDMA completion to post-done records - cover the A5 HBG completion path and align mailbox padding comments
|
@ChaoZheng109 已按建议处理,感谢指出:
同时新增了 a5 HBG mailbox UT target;两套 a5 mailbox UT、a5 HBG runtime build,以及使用 HBG include 路径的 SDMA AICore kernel compile smoke 均已通过。 |
Summary
pto_isa.pinto0cefc9a5, based on current GitCode master and providing the PTOAS v0.55 soft SYNCALL interface.TADDDEQRELU.*documentation paths that collide with the manifest-managedTAddDeqRelu.*paths on case-insensitive filesystems.PTO-ISA source branch: https://gitcode.com/Youhezhen/pto-isa/tree/fix/sdma-host-header
PTO-ISA upstream MR: https://gitcode.com/cann/pto-isa/merge_requests/1424
Testing
ep_dispatch_combineona2a3simanda5sim— passed.