| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: keep SDMA host headers CPU-safe 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](https://github.com/hw-native-sys/simpler/pull/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 | 14 天前 | |
megamoe优化,改成主E模式 Co-authored-by: zhangyuan<zyuan.zhangyuan@huawei.com> # message auto-generated for no-merge-commit merge: !1466 merge master1 into master megamoe优化,改成主E模式 Created-by: zy_tt Commit-by: zhangyuan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 本 PR 将 A3 MegaMoE 从**阶段主序的 expert 间 overlap**,改为 **Expert 主序的阶段间 overlap**,对 AIC/AIV 做固定分组 + 动态扩缩组,减少 AIV 搬运对 AIC 计算的带宽抢占。 **原因:** 基线 overlap 下 AIC 已接近满载,但 Dispatch/Combine 的 AIV 搬运仍与 GMM 争用 HBM;Unpermute 还要等全部 rank Combine 结束,尾部流水被拉长。大 M(512+)空间更大。 **方法:** 1. **AIC 分组动态调度** 物理核 0..15(16 个 AIC)做 GMM1,16..23(8 个 AIC)做 GMM2。前 fullAicGmm1ExpertCount=2 个 expert 用满 24 个 AIC 打 GMM1;之后 GMM1 缩到 16 核。GMM1 结束后,16 个 AIC 并入 GMM2,尾部 expert 由 24 核一起算。合组时刻由 GMM1 实际结束时间决定,不是写死最后几个 expert。 2. **AIV 分组与延后 Combine** 核 0..15 的 AIV0 做 Dispatch、AIV1 做 SwiGLU;核 16..23 的 AIV0 做 Combine(8 核)。Combine 数据量约为 Dispatch 的 2 倍,用 combineStartAfterGmm2Expert 按 shape 延后启动(M=16/128 等 3,M=1024/2048 等 2,M=32/64/512 不等待),避免和 Dispatch 抢同一段带宽。 3. **Unpermute 两阶段启动** 各 source rank Combine 达到 unpermutePhase1ReadyExpertCount 后,前 32 个 AIV 先处理已就绪数据;本卡 Combine 完成后,再加入 16 个 AIV,48 核处理剩余部分。不再整体等待所有 rank Combine 结束。 4. **阶段同步** 组内用单向 software doorbell(arrival → coordinator 取共同进度 → ready)。epoch 按 expert 单调递增,支持 GMM1 24→16、GMM2 8→24 扩缩组。跨 rank 同样只等自己需要的 DataReady,不做全 rank barrier。 目标 shape:K=7168、N=4096、topK=8、expertPerRank=16,EP8/EP16。 ## 测试 在 A3 上对 canonical shape 做了 EP8 / EP16、M=16~2048 的精度 + 性能对比(相对基线 overview.md 版本)。 **A3 EP8** | M | 基线 avg (us) | 优化 avg (us) | 差值 (us) | 加速率 | | ---: | ---: | ---: | ---: | ---: | | 16 | 584.09 | 573.08 | -11.01 | +1.88% | | 32 | 601.39 | 588.30 | -13.09 | +2.18% | | 64 | 634.77 | 627.77 | -7.00 | +1.10% | | 128 | 695.31 | 696.04 | +0.73 | -0.10% | | 512 | 1394.90 | 1234.03 | -160.87 | +11.53% | | 1024 | 2251.61 | 2016.18 | -235.43 | +10.46% | | 2048 | 4285.13 | 3756.88 | -528.25 | +12.33% | 小 case 略有收益,大 case 约 10%~12%。 **A3 EP16** | M | 基线 avg (us) | 优化 avg (us) | 差值 (us) | 加速率 | | ---: | ---: | ---: | ---: | ---: | | 16 | 584.52 | 579.02 | -5.50 | +0.94% | | 32 | 605.18 | 600.38 | -4.80 | +0.79% | | 64 | 633.47 | 636.46 | +2.99 | -0.47% | | 128 | 717.26 | 707.30 | -9.96 | +1.39% | | 512 | 1337.57 | 1190.04 | -147.53 | +11.03% | | 1024 | 2261.64 | 1964.26 | -297.38 | +13.15% | | 2048 | 4380.82 | 3714.16 | -666.66 | +15.22% | 小 case 基本持平或略优,大 case 约 11%~15%。 ## 文档更新 - 新增 kernels/manual/a2a3/dispatch_mega_combine/overview_v1.md:V1 overlap 原则、AIC/AIV 分组、expert 流水、tiling 参数表、同步模型及 EP8/EP16 性能对比 - 新增 overlap 图:docs/figures/megamoe/v1_2048_overlap_pipeline.png(对比基线 2048_16rank_overlap_pipeline.png) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/pto-isa!1466 | 5 天前 | |
docs: sync flash attention performance references Co-authored-by: SherwinBai<baixiaorui1@h-partners.com> # message auto-generated for no-merge-commit merge: !885 merge update-fa-performent into master docs: sync flash attention performance references Created-by: SherwinBai Commit-by: SherwinBai Merged-by: cann-robot Description: ## 描述 更新门户README中Flash Attention性能数据 ## 类型标签 - [ ] 文档更新 See merge request: cann/pto-isa!885 | 3 个月前 | |
update docs Co-authored-by: yujiangtao<yujiangtao11@h-partners.com> # message auto-generated for no-merge-commit merge: !39 merge master into master update docs Created-by: qq_60134168 Commit-by: yujiangtao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/pto-isa!39 | 7 个月前 | |
origin code Signed-off-by: yujiangtao <yujiangtao11@h-partners.com> | 7 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 14 天前 | ||
| 5 天前 | ||
| 3 个月前 | ||
| 7 个月前 | ||
| 7 个月前 |