| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(falite): add v0 (GM block exchange) and v1 (L0C->UB) to flash_attn_lite_story Co-authored-by: 镜花水月1tachi<617413776@qq.com> # message auto-generated for no-merge-commit merge: !349 merge master into master feat(falite): add v0 (GM block exchange) and v1 (L0C->UB) to flash_attn_lite_story Created-by: CDragon Commit-by: 镜花水月1tachi Merged-by: cann-robot Description: ## 描述 为 flash_attn_lite_story 新增 v0 和 v1,与现有 v2~v5 构成完整的 CV 数据通路演进链。 ## v0: 分块 + online softmax / GM 块交换 - C1/V1/C2/V2 j-loop CV 流水,4 个 CrossCore flag/轮 - C1/C2 经 Fixpipe L0C→GM,S/P/ΔO 全经 GM - AIV 直写 BF16 O,D 维沿 BLOCK_K=64 拆分 ## v1: L0C→UB 优化 - C1 S→UB (FixpipeToVecUB dualDstCtl=2), C2 ΔO→UB - AIV 从 UB 直读 S/ΔO,省去两路 GM 读写 - P 仍经 GM,仅需 5 GM buffers (v0 需 7 个) - 单 Mmad 无 D 拆分 ## 精度验证 | 版本 | S=128 | S=1024 | S=4096 | S=32768 | |------|-------|--------|--------|---------| | v0 | 0 失败 | 0 失败 | 0 失败 | 0 失败 | | v1 | 0 失败 | 0 失败 | 0 失败 | 0 失败 | ## 性能 (S=32768, 28 AIC) | 版本 | Task Duration | 加速比 | |------|-------------|--------| | v0 | 20,359 us | 1.00x | | v1 | 10,409 us | **1.96x** | ## 关联 Issue https://gitcode.com/cann/cann-samples/issues/235 See merge request: cann/cann-samples!349 | 9 天前 | |
docs: 修正full_quant_fused_infer_attention_score_story中关于A3支持FP8的错误描述 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !372 merge master into master docs: 修正full_quant_fused_infer_attention_score_story中关于A3支持FP8的错误描述 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 修正 full_quant_fused_infer_attention_score_story 文档中关于 A3 支持 FP8 的错误描述:将"对标A3的FP8量化能力"改为"参考业界主流的FP8量化能力",去掉错误的 A3 指代,避免误导学习者。 ## 关联的Issue - #246: full_quant_fused_infer_attention_score_story文档介绍存在错误,需要修正,否则误导学习者 ## 测试 无(纯文档修改) ## 文档更新 - Samples/2_Performance/full_quant_fused_infer_attention_score_story/README.md:修正 A3 / FP8 描述 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/cann-samples!372 | 2 天前 | |
feat: add gelu_eltwise_regbase_story progressive RegBase tutorial Co-authored-by: yu-xinjie62<yuxinjie1@huawei.com> # message auto-generated for no-merge-commit merge: !327 merge vf_progress into master feat: add gelu_eltwise_regbase_story progressive RegBase tutorial Created-by: yu-xinjie62 Commit-by: yu-xinjie62 Merged-by: cann-robot Description: ## 描述 新增 Samples/2_Performance/gelu_eltwise_regbase_story:用 GELU + Element-wise 融合算子演示 RegBase 的改写和优化。 - Case 0:MemBase 基线 - Case 1~4:四步优化,依次是 VF 融合、循环拆分、循环展开、常量外提 每个 Case 是独立可执行目标,Kernel / VF 写在对应 src/*.asc;Host 公共逻辑在 include/sample_common.h。并更新了 Samples/2_Performance/CMakeLists.txt 和索引 README。 ## 关联的 Issue 无 ## 测试 **环境**:Ascend 950PR(dav-3510),社区版 CANN Toolkit 9.1.0 bash source ${ASCEND_HOME_PATH}/set_env.sh cmake -S . -B build -DNPU_ARCH=dav-3510 cmake --build build --target gelu_eltwise_regbase_story ./build/Samples/2_Performance/gelu_eltwise_regbase_story/gelu_eltwise_regbase_0_membase ./build/Samples/2_Performance/gelu_eltwise_regbase_story/gelu_eltwise_regbase_1_vf_fused ./build/Samples/2_Performance/gelu_eltwise_regbase_story/gelu_eltwise_regbase_2_loop_split ./build/Samples/2_Performance/gelu_eltwise_regbase_story/gelu_eltwise_regbase_3_unroll ./build/Samples/2_Performance/gelu_eltwise_regbase_story/gelu_eltwise_regbase_4_scalar_tuning Case 0~4 均 PASSED,precision 100%,max diff ≈ 1.9e-6(容差 1e-3)。规格:float32 [8192, 8192]。 ## 文档更新 - 新增 gelu_eltwise_regbase_story/README.md - 更新 Samples/2_Performance/README.md 索引 ## 类型标签 - [x] 新特性 - [ ] Bug修复 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他 ## 限制说明 - 仅支持 NPU_ARCH=dav-3510 - 仅验证 float32 [8192, 8192] See merge request: cann/cann-samples!327 | 12 天前 | |
refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !352 merge master into master refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 29 个 sample CMakeLists.txt 中重复的架构校验样板(SUPPORTED_NPU_ARCHS + skip message)提取到 cmake/sample_common.cmake 的 cann_sample_check_arch() 宏中。 每个 leaf sample 的 CMakeLists.txt 从原来的 5 行 boilerplate 缩减为 1 行宏调用: cmake # Before (5 行) set(SUPPORTED_NPU_ARCHS dav-3510) file(RELATIVE_PATH SAMPLE_PATH ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT "${NPU_ARCH}" IN_LIST SUPPORTED_NPU_ARCHS) message(STATUS "Skip sample ${SAMPLE_PATH}: NPU_ARCH=${NPU_ARCH} is not supported") return() endif() # After (1 行) cann_sample_check_arch(dav-3510) 变更涉及 30 个文件,净减少 144 行(185 删除,41 新增)。 ### 改动原因 49 个 sample CMakeLists.txt 中每个都独立实现了完全相同的架构校验逻辑,存在维护成本高和一致性衰减问题。这是 Issue #226 中提到的 CMake 样板代码重复问题的务实第一步。 ### 改动方法 - 新增 cmake/sample_common.cmake:定义 cann_sample_check_arch() 宏,封装架构校验逻辑 - 根 CMakeLists.txt 添加 include(cmake/sample_common.cmake) - 逐个迁移 29 个 leaf sample CMakeLists.txt(保留了三种架构配置:dav-3510、dav-2201、dav-2201 dav-3510) - 未修改中间 dispatcher CMakeLists.txt 和继承父级架构检查的子目录(如 matmul_tutorials) ## 关联的Issue - https://gitcode.com/cann/cann-samples/issues/226 ## 测试 - 远程 Git Hook 检查通过(推送前) - 代码逻辑等价替换,架构校验行为无变化 - 宏变量使用下划线前缀(_cann_sample_expected_archs、_cann_sample_path)避免与 sample 本地变量冲突 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:CMake 构建系统重构(消除重复样板代码) See merge request: cann/cann-samples!352 | 14 天前 | |
fix(2_Performance): 修复 simd_vf 成员函数导致的 dav-3510 编译错误 Co-authored-by: zhangzijie<zhangzijie11@hisilicon.com> # message auto-generated for no-merge-commit merge: !362 merge fix/ci-build-compile-errors into master fix(2_Performance): 修复 simd_vf 成员函数导致的 dav-3510 编译错误 Created-by: zhangzijie Commit-by: zhangzijie Merged-by: cann-robot Description: ## 问题 bash .ci/build.sh(dav-3510)在 master 上编译失败,bisheng 编译器报 11 处错误: error: simd_vf function 'XXX' must be a free function or static member function 涉及 2 个样例、5 个文件: - Samples/2_Performance/rms_norm_quant_story/src/{3_vf,4_double_buffer,5_ub_utilization,6_binary_sum}.asc - Samples/2_Performance/kv_rms_norm_rope_cache_story/regbase/full_load.asc ## 修复方案 按照 Samples/1_Features/hardware_features/simd_vf_constraints 示例给出的约束与推荐写法,将 __simd_vf__ 成员函数改为文件作用域的**自由函数模板**,原来隐式依赖的对象成员状态(tilingData_、scale_、offset_、rInv_、vfLoopRNum_、rAlign_、dvLoop_ 等)全部改为显式参数传入,函数体逻辑保持不变。 注意:原代码在循环后对 count 标量的重新赋值(如 r = tilingData_->r;)不是冗余代码——AscendC::Reg::UpdateMask 会破坏 count 标量寄存器,重新赋值是保证循环后掩码正确的必要写法。重构后以「从按值参数重新赋值」的方式等价保留(并加了注释)。实测若删除该重新赋值,NPU 上精度从 100% 降至 ~15%(最终 ReduceSum 掩码错误导致 rms 计算失效、int8 量化饱和)。 ## 验证 - bash .ci/build.sh dav-3510 ✅ 通过(0 error,打包成功) - bash .ci/build.sh dav-2201 ✅ 通过(两个样例为 dav-3510 专有,按预期 skip) - 在真实 NPU 上运行全部 5 个修复样例,golden 数据比对: - rms_norm_quant_{3_vf,4_double_buffer,5_ub_utilization,6_binary_sum}:Precision 100%,Compare Difference length 0 - kv_rms_norm_rope_cache_regbase_full_load:k/v cache、k/v out 全部 100%,PASS - 未修改样例(0_naive/1_preload_gamma/2_multi_core、membase 版本)行为不变,仍 100%/PASS 另外验证中发现两个与本次修改无关的既有问题,供参考:CI 功能性清单中 matmul_basic 期望的输出串与样例实际输出不一致(样例实际输出 [PASS] NPU results are consistent with CPU.);hif8 的 gen_data.py 依赖 requirements.txt 中的 en_dtypes,在未安装该包的环境下无法生成数据。 --- ## 更新:修复 CI 编译失败(升级 shmem 子模块) CI(Compile_Ascend_X86_950)在本 PR 上仍然失败,错误不在样例代码,而在 third_party/shmem 子模块: third_party/shmem/src/host/init/backends/shmem_init_backend.cpp:104:10: error: no member named 'copy_n' in namespace 'std' third_party/shmem/src/host/init/backends/shmem_init_backend.cpp:461:20: error: no member named 'find_if' in namespace 'std' third_party/shmem/src/host/transport/device_rdma/fixed_ranks_qp_manager.cpp:424:18: error: no member named 'remove_if' in namespace 'std' ### 根因 - CI 机器系统 GCC 为 14,bisheng 自动选用 libstdc++-14 头文件; - 旧版 shmem(本仓库锁定的 bff4c64 / v1.3.0)的上述文件使用了 std::copy_n / std::find_if / std::remove_if 但未 #include <algorithm>,旧 libstdc++ 靠传递包含侥幸编译,libstdc++-14 移除传递包含后编译失败; - 该问题与本 PR 的样例修改无关,在 master 上同样会触发。 ### 修复 升级 shmem 子模块指针 bff4c64 → **64ce637**(上游提交:“修复cce-ld链接错误,用到std::copy的cpp添加algorithm头文件”,即上游针对该问题的修复提交,取最小升级范围)。 ### 验证 - 本地复现:安装 g++-14 使 bisheng 选用 GCC-14 的 libstdc++ 后,在 bff4c64 上干净构建 shmem,精确复现 CI 的 3 处错误(行号、信息一致); - 升级到 64ce637 后,完全干净状态(rm -rf build 及 shmem 自身 build/install)下 bash .ci/build.sh(dav-3510)与 bash .ci/build.sh dav-2201 均通过,0 error,打包成功; - moe 样例(shmem 使用方)编译链接正常(ldd 可见 libshmem 等 4 个库经 rpath 正确解析),其余样例行为不变。 See merge request: cann/cann-samples!362 | 11 天前 | |
docs: 修复文档链接、拼写错误并补充目录入口与Perf Story索引 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !366 merge master into master docs: 修复文档链接、拼写错误并补充目录入口与Perf Story索引 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 修复 cann-samples 文档中的链接错误、拼写问题,并补充 README 中缺失的目录入口和 Perf Story 条目。 ### 改动详情 - **README.md**:补充 3_Utilities 目录入口(快速入门表与文件结构)、更新 Perf Stories 徽章计数 9→13 - **Samples/0_Introduction/npu_execution/README.md**:修复 3 处拼写/描述错误(参数v→参数、piblic→public、静态kernel→动态kernel) - **Samples/2_Performance/README.md**:新增 flash_attn_lite_story、scalar_story、simd_vf_story 三个 Perf Story 索引条目 - **Samples/2_Performance/matmul_story/docs/quant_matmul_mxfp4_tutorials.md**:修复损坏的相对链接 ## 关联的Issue - fix #238 - fix #239 - fix #240 - fix #241 - fix #242 ## 测试 文档修改,无需测试。 ## 文档更新 - [x] README.md - [x] Samples/0_Introduction/npu_execution/README.md - [x] Samples/2_Performance/README.md - [x] Samples/2_Performance/matmul_story/docs/quant_matmul_mxfp4_tutorials.md ## 类型标签 - [x] 文档更新 See merge request: cann/cann-samples!366 | 6 天前 | |
refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !352 merge master into master refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 29 个 sample CMakeLists.txt 中重复的架构校验样板(SUPPORTED_NPU_ARCHS + skip message)提取到 cmake/sample_common.cmake 的 cann_sample_check_arch() 宏中。 每个 leaf sample 的 CMakeLists.txt 从原来的 5 行 boilerplate 缩减为 1 行宏调用: cmake # Before (5 行) set(SUPPORTED_NPU_ARCHS dav-3510) file(RELATIVE_PATH SAMPLE_PATH ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT "${NPU_ARCH}" IN_LIST SUPPORTED_NPU_ARCHS) message(STATUS "Skip sample ${SAMPLE_PATH}: NPU_ARCH=${NPU_ARCH} is not supported") return() endif() # After (1 行) cann_sample_check_arch(dav-3510) 变更涉及 30 个文件,净减少 144 行(185 删除,41 新增)。 ### 改动原因 49 个 sample CMakeLists.txt 中每个都独立实现了完全相同的架构校验逻辑,存在维护成本高和一致性衰减问题。这是 Issue #226 中提到的 CMake 样板代码重复问题的务实第一步。 ### 改动方法 - 新增 cmake/sample_common.cmake:定义 cann_sample_check_arch() 宏,封装架构校验逻辑 - 根 CMakeLists.txt 添加 include(cmake/sample_common.cmake) - 逐个迁移 29 个 leaf sample CMakeLists.txt(保留了三种架构配置:dav-3510、dav-2201、dav-2201 dav-3510) - 未修改中间 dispatcher CMakeLists.txt 和继承父级架构检查的子目录(如 matmul_tutorials) ## 关联的Issue - https://gitcode.com/cann/cann-samples/issues/226 ## 测试 - 远程 Git Hook 检查通过(推送前) - 代码逻辑等价替换,架构校验行为无变化 - 宏变量使用下划线前缀(_cann_sample_expected_archs、_cann_sample_path)避免与 sample 本地变量冲突 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:CMake 构建系统重构(消除重复样板代码) See merge request: cann/cann-samples!352 | 14 天前 | |
refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !352 merge master into master refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 29 个 sample CMakeLists.txt 中重复的架构校验样板(SUPPORTED_NPU_ARCHS + skip message)提取到 cmake/sample_common.cmake 的 cann_sample_check_arch() 宏中。 每个 leaf sample 的 CMakeLists.txt 从原来的 5 行 boilerplate 缩减为 1 行宏调用: cmake # Before (5 行) set(SUPPORTED_NPU_ARCHS dav-3510) file(RELATIVE_PATH SAMPLE_PATH ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT "${NPU_ARCH}" IN_LIST SUPPORTED_NPU_ARCHS) message(STATUS "Skip sample ${SAMPLE_PATH}: NPU_ARCH=${NPU_ARCH} is not supported") return() endif() # After (1 行) cann_sample_check_arch(dav-3510) 变更涉及 30 个文件,净减少 144 行(185 删除,41 新增)。 ### 改动原因 49 个 sample CMakeLists.txt 中每个都独立实现了完全相同的架构校验逻辑,存在维护成本高和一致性衰减问题。这是 Issue #226 中提到的 CMake 样板代码重复问题的务实第一步。 ### 改动方法 - 新增 cmake/sample_common.cmake:定义 cann_sample_check_arch() 宏,封装架构校验逻辑 - 根 CMakeLists.txt 添加 include(cmake/sample_common.cmake) - 逐个迁移 29 个 leaf sample CMakeLists.txt(保留了三种架构配置:dav-3510、dav-2201、dav-2201 dav-3510) - 未修改中间 dispatcher CMakeLists.txt 和继承父级架构检查的子目录(如 matmul_tutorials) ## 关联的Issue - https://gitcode.com/cann/cann-samples/issues/226 ## 测试 - 远程 Git Hook 检查通过(推送前) - 代码逻辑等价替换,架构校验行为无变化 - 宏变量使用下划线前缀(_cann_sample_expected_archs、_cann_sample_path)避免与 sample 本地变量冲突 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:CMake 构建系统重构(消除重复样板代码) See merge request: cann/cann-samples!352 | 14 天前 | |
fix(2_Performance): 修复 simd_vf 成员函数导致的 dav-3510 编译错误 Co-authored-by: zhangzijie<zhangzijie11@hisilicon.com> # message auto-generated for no-merge-commit merge: !362 merge fix/ci-build-compile-errors into master fix(2_Performance): 修复 simd_vf 成员函数导致的 dav-3510 编译错误 Created-by: zhangzijie Commit-by: zhangzijie Merged-by: cann-robot Description: ## 问题 bash .ci/build.sh(dav-3510)在 master 上编译失败,bisheng 编译器报 11 处错误: error: simd_vf function 'XXX' must be a free function or static member function 涉及 2 个样例、5 个文件: - Samples/2_Performance/rms_norm_quant_story/src/{3_vf,4_double_buffer,5_ub_utilization,6_binary_sum}.asc - Samples/2_Performance/kv_rms_norm_rope_cache_story/regbase/full_load.asc ## 修复方案 按照 Samples/1_Features/hardware_features/simd_vf_constraints 示例给出的约束与推荐写法,将 __simd_vf__ 成员函数改为文件作用域的**自由函数模板**,原来隐式依赖的对象成员状态(tilingData_、scale_、offset_、rInv_、vfLoopRNum_、rAlign_、dvLoop_ 等)全部改为显式参数传入,函数体逻辑保持不变。 注意:原代码在循环后对 count 标量的重新赋值(如 r = tilingData_->r;)不是冗余代码——AscendC::Reg::UpdateMask 会破坏 count 标量寄存器,重新赋值是保证循环后掩码正确的必要写法。重构后以「从按值参数重新赋值」的方式等价保留(并加了注释)。实测若删除该重新赋值,NPU 上精度从 100% 降至 ~15%(最终 ReduceSum 掩码错误导致 rms 计算失效、int8 量化饱和)。 ## 验证 - bash .ci/build.sh dav-3510 ✅ 通过(0 error,打包成功) - bash .ci/build.sh dav-2201 ✅ 通过(两个样例为 dav-3510 专有,按预期 skip) - 在真实 NPU 上运行全部 5 个修复样例,golden 数据比对: - rms_norm_quant_{3_vf,4_double_buffer,5_ub_utilization,6_binary_sum}:Precision 100%,Compare Difference length 0 - kv_rms_norm_rope_cache_regbase_full_load:k/v cache、k/v out 全部 100%,PASS - 未修改样例(0_naive/1_preload_gamma/2_multi_core、membase 版本)行为不变,仍 100%/PASS 另外验证中发现两个与本次修改无关的既有问题,供参考:CI 功能性清单中 matmul_basic 期望的输出串与样例实际输出不一致(样例实际输出 [PASS] NPU results are consistent with CPU.);hif8 的 gen_data.py 依赖 requirements.txt 中的 en_dtypes,在未安装该包的环境下无法生成数据。 --- ## 更新:修复 CI 编译失败(升级 shmem 子模块) CI(Compile_Ascend_X86_950)在本 PR 上仍然失败,错误不在样例代码,而在 third_party/shmem 子模块: third_party/shmem/src/host/init/backends/shmem_init_backend.cpp:104:10: error: no member named 'copy_n' in namespace 'std' third_party/shmem/src/host/init/backends/shmem_init_backend.cpp:461:20: error: no member named 'find_if' in namespace 'std' third_party/shmem/src/host/transport/device_rdma/fixed_ranks_qp_manager.cpp:424:18: error: no member named 'remove_if' in namespace 'std' ### 根因 - CI 机器系统 GCC 为 14,bisheng 自动选用 libstdc++-14 头文件; - 旧版 shmem(本仓库锁定的 bff4c64 / v1.3.0)的上述文件使用了 std::copy_n / std::find_if / std::remove_if 但未 #include <algorithm>,旧 libstdc++ 靠传递包含侥幸编译,libstdc++-14 移除传递包含后编译失败; - 该问题与本 PR 的样例修改无关,在 master 上同样会触发。 ### 修复 升级 shmem 子模块指针 bff4c64 → **64ce637**(上游提交:“修复cce-ld链接错误,用到std::copy的cpp添加algorithm头文件”,即上游针对该问题的修复提交,取最小升级范围)。 ### 验证 - 本地复现:安装 g++-14 使 bisheng 选用 GCC-14 的 libstdc++ 后,在 bff4c64 上干净构建 shmem,精确复现 CI 的 3 处错误(行号、信息一致); - 升级到 64ce637 后,完全干净状态(rm -rf build 及 shmem 自身 build/install)下 bash .ci/build.sh(dav-3510)与 bash .ci/build.sh dav-2201 均通过,0 error,打包成功; - moe 样例(shmem 使用方)编译链接正常(ldd 可见 libshmem 等 4 个库经 rpath 正确解析),其余样例行为不变。 See merge request: cann/cann-samples!362 | 11 天前 | |
增加scalar优化原理与实践 Co-authored-by: luwei<luwei5@huawei.com> # message auto-generated for no-merge-commit merge: !234 merge master into master 增加scalar优化原理与实践 Created-by: luweikk Commit-by: luwei Merged-by: cann-robot Description: ## 描述 新增 Scalar 优化原理与实践长文,沉淀昇腾 NPU 上 ScalarBound 问题的成因分析、优化方法论与可量化的收益数据,补齐 Samples/2_Performance/ 中缺失的 Scalar 维度性能样例。 **新增内容(14 个文件,+870 行,纯文档)**: - Samples/2_Performance/scalar_story/README.md:约 870 行的中文系统性长文; - Samples/2_Performance/scalar_story/images/*.png:13 张原理与前后对比图。 **核心要点**: 1. **现状分析**:基于 Ascend 950 平台对 8000+ 用例的实测统计,ScalarBound 在 Cube/Mix 类算子中占比 **> 97%**;Load/Store 指令过多(占比 > 30%)是主因,根源在于编译器寄存器 spill。 2. **优化案例**: - **FusedInferAttentionScore**:通过 icache 预取、静态创建 LocalTensor、消除多级指针解引用等手段,**Scalar 耗时平均降低 33%,端到端性能平均提升 15%**; - **QuantBatchMatmul**:通过循环主尾块分离、局部变量替代成员变量、显式编写循环代码等手段,**Scalar 耗时平均降低 50%,端到端性能平均提升 10%**。 3. **方法论沉淀**: - 一套可落地的 ScalarBound 诊断流程; - **7 条 Scalar 高性能算子编码原则**:结构体内慎用数组、循环主尾块分离、显式编写循环代码、尽量使用局部变量、变量定义贴近使用位置、避免多级指针解引用、避免使用超大结构体。 ## 关联的Issue #157 ## 测试 - 仅新增 Markdown 文档与配图,不涉及代码、构建脚本与 CI 流程; - 已在本地核对 README 章节锚点与图片相对路径(./images/*.png)正确; - 文档中所有性能数据均来自 Ascend 950 + CANN 9.0 + msprof/cannsim 的实测采集,并在文档「4.1 实验环境」中显式标注采集环境。 ## 文档更新 - 新增:Samples/2_Performance/scalar_story/README.md - 新增:Samples/2_Performance/scalar_story/images/(13 张配图) - 与已有的 matmul_story、gather 等性能样例并列,形成更完整的性能调优知识库。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/cann-samples!234 | 2 个月前 | |
refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !352 merge master into master refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 29 个 sample CMakeLists.txt 中重复的架构校验样板(SUPPORTED_NPU_ARCHS + skip message)提取到 cmake/sample_common.cmake 的 cann_sample_check_arch() 宏中。 每个 leaf sample 的 CMakeLists.txt 从原来的 5 行 boilerplate 缩减为 1 行宏调用: cmake # Before (5 行) set(SUPPORTED_NPU_ARCHS dav-3510) file(RELATIVE_PATH SAMPLE_PATH ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT "${NPU_ARCH}" IN_LIST SUPPORTED_NPU_ARCHS) message(STATUS "Skip sample ${SAMPLE_PATH}: NPU_ARCH=${NPU_ARCH} is not supported") return() endif() # After (1 行) cann_sample_check_arch(dav-3510) 变更涉及 30 个文件,净减少 144 行(185 删除,41 新增)。 ### 改动原因 49 个 sample CMakeLists.txt 中每个都独立实现了完全相同的架构校验逻辑,存在维护成本高和一致性衰减问题。这是 Issue #226 中提到的 CMake 样板代码重复问题的务实第一步。 ### 改动方法 - 新增 cmake/sample_common.cmake:定义 cann_sample_check_arch() 宏,封装架构校验逻辑 - 根 CMakeLists.txt 添加 include(cmake/sample_common.cmake) - 逐个迁移 29 个 leaf sample CMakeLists.txt(保留了三种架构配置:dav-3510、dav-2201、dav-2201 dav-3510) - 未修改中间 dispatcher CMakeLists.txt 和继承父级架构检查的子目录(如 matmul_tutorials) ## 关联的Issue - https://gitcode.com/cann/cann-samples/issues/226 ## 测试 - 远程 Git Hook 检查通过(推送前) - 代码逻辑等价替换,架构校验行为无变化 - 宏变量使用下划线前缀(_cann_sample_expected_archs、_cann_sample_path)避免与 sample 本地变量冲突 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:CMake 构建系统重构(消除重复样板代码) See merge request: cann/cann-samples!352 | 14 天前 | |
add histogram story sample Co-authored-by: gavinhhr<2803677117@qq.com> # message auto-generated for no-merge-commit merge: !350 merge simt_histogram_story into master add histogram story sample Created-by: gavinhhr Commit-by: gavinhhr Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增加 Histogram A5 Sample ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/cann-samples/issues/227 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 4 cases 均通过 cmake 构建(dav-3510)并在 Ascend950 NPU 真机运行,精度校验 PASS。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了本 Story 的 README 文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/cann-samples!350 | 9 天前 | |
refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !352 merge master into master refactor(cmake): extract arch check boilerplate into cann_sample_check_arch() macro Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 将 29 个 sample CMakeLists.txt 中重复的架构校验样板(SUPPORTED_NPU_ARCHS + skip message)提取到 cmake/sample_common.cmake 的 cann_sample_check_arch() 宏中。 每个 leaf sample 的 CMakeLists.txt 从原来的 5 行 boilerplate 缩减为 1 行宏调用: cmake # Before (5 行) set(SUPPORTED_NPU_ARCHS dav-3510) file(RELATIVE_PATH SAMPLE_PATH ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) if(NOT "${NPU_ARCH}" IN_LIST SUPPORTED_NPU_ARCHS) message(STATUS "Skip sample ${SAMPLE_PATH}: NPU_ARCH=${NPU_ARCH} is not supported") return() endif() # After (1 行) cann_sample_check_arch(dav-3510) 变更涉及 30 个文件,净减少 144 行(185 删除,41 新增)。 ### 改动原因 49 个 sample CMakeLists.txt 中每个都独立实现了完全相同的架构校验逻辑,存在维护成本高和一致性衰减问题。这是 Issue #226 中提到的 CMake 样板代码重复问题的务实第一步。 ### 改动方法 - 新增 cmake/sample_common.cmake:定义 cann_sample_check_arch() 宏,封装架构校验逻辑 - 根 CMakeLists.txt 添加 include(cmake/sample_common.cmake) - 逐个迁移 29 个 leaf sample CMakeLists.txt(保留了三种架构配置:dav-3510、dav-2201、dav-2201 dav-3510) - 未修改中间 dispatcher CMakeLists.txt 和继承父级架构检查的子目录(如 matmul_tutorials) ## 关联的Issue - https://gitcode.com/cann/cann-samples/issues/226 ## 测试 - 远程 Git Hook 检查通过(推送前) - 代码逻辑等价替换,架构校验行为无变化 - 宏变量使用下划线前缀(_cann_sample_expected_archs、_cann_sample_path)避免与 sample 本地变量冲突 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:CMake 构建系统重构(消除重复样板代码) See merge request: cann/cann-samples!352 | 14 天前 | |
add histogram story sample Co-authored-by: gavinhhr<2803677117@qq.com> # message auto-generated for no-merge-commit merge: !350 merge simt_histogram_story into master add histogram story sample Created-by: gavinhhr Commit-by: gavinhhr Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增加 Histogram A5 Sample ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/cann-samples/issues/227 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 4 cases 均通过 cmake 构建(dav-3510)并在 Ascend950 NPU 真机运行,精度校验 PASS。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了本 Story 的 README 文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/cann-samples!350 | 9 天前 | |
docs: 修复文档链接、拼写错误并补充目录入口与Perf Story索引 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !366 merge master into master docs: 修复文档链接、拼写错误并补充目录入口与Perf Story索引 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 修复 cann-samples 文档中的链接错误、拼写问题,并补充 README 中缺失的目录入口和 Perf Story 条目。 ### 改动详情 - **README.md**:补充 3_Utilities 目录入口(快速入门表与文件结构)、更新 Perf Stories 徽章计数 9→13 - **Samples/0_Introduction/npu_execution/README.md**:修复 3 处拼写/描述错误(参数v→参数、piblic→public、静态kernel→动态kernel) - **Samples/2_Performance/README.md**:新增 flash_attn_lite_story、scalar_story、simd_vf_story 三个 Perf Story 索引条目 - **Samples/2_Performance/matmul_story/docs/quant_matmul_mxfp4_tutorials.md**:修复损坏的相对链接 ## 关联的Issue - fix #238 - fix #239 - fix #240 - fix #241 - fix #242 ## 测试 文档修改,无需测试。 ## 文档更新 - [x] README.md - [x] Samples/0_Introduction/npu_execution/README.md - [x] Samples/2_Performance/README.md - [x] Samples/2_Performance/matmul_story/docs/quant_matmul_mxfp4_tutorials.md ## 类型标签 - [x] 文档更新 See merge request: cann/cann-samples!366 | 6 天前 |
Performance
最佳实践, 从Baseline到极致性能的调优实践。
grouped_matmul_story
分组矩阵乘性能优化专题,覆盖 grouped matmul 的 tiling、数据搬运与 kernel 实现,并提供 MXFP4/MXFP8 可运行示例及数据校验流程。
matmul_story
矩阵乘性能优化专题,覆盖 MatMul 与量化 MatMul(如 MXFP4)两类实践,包含性能分析文档、分步教程(baseline→SWAT→尾轮负载均衡→UnitFlag)以及可运行的 recipe 示例(A16W16、quant_matmul_mxfp4)。
rms_norm_quant_story
以 Ascend 950PR/950DT 训练/推理系列产品为例,介绍 RmsNormQuant 算子的完整性能优化实践。包括多核并行与数据预加载、内存带宽优化、核内流水线排布、硬件特性适配等优化策略,从理论分析到代码实践的端到端调优指南。
full_quant_fused_infer_attention_score_story
围绕 FIA(Fused Infer Attention Score)算子提供 per-block 全量化实现示例,包含输入数据生成、算子执行与结果校验流程。
moe_init_routing_story
以 Ascend950PR/DT 训练/推理系列产品为例,介绍 MoeInitRoutingV3 算子的完整性能优化实践。包括多核并行、内存带宽优化、核内流水线排布、SIMT编程、硬件特性适配等优化策略,从理论分析到代码实践的端到端调优指南。
moe_dispatch_and_combine_story
围绕 moe dispatch/combine 通信算子给出性能优化实践,包含构建运行命令、测试数据生成与精度校验流程。
kv_rms_norm_rope_cache_story
围绕 Ascend 950 上的 KvRmsNormRopeCache full-load 路径给出 MemBase 与 RegBase 两个 BF16 直调样例,展示 RMSNorm、interleave RoPE 与 Norm cache 更新的融合实现,以及从 MemBase 到 RegBase 的寄存器化优化点。
simt_scatter_story
以 Scatter 算子为例的 SIMT 递进教学样例(dav-3510):演示 SIMT 直接访问 GM 完成不规则写,以及通过目标地址分组和单写者选择处理重复 index 带来的写冲突。
simt_histogram_story
以 Histogram 算子为例的 SIMT 递进教学样例(dav-3510):从 MTE+Vector 串行基线出发,逐步引入 SIMT 并行计数(grid-stride)、float4 向量化、launch_bounds 寄存器分析与 GridDim 扫描,展示 A5 纯 SIMT 编程模型下的性能优化路径。
gelu_eltwise_regbase_story
用 GELU + Element-wise 融合算子演示 RegBase 的改写和优化(dav-3510):Case 0 是 MemBase 基线,Case 1~4 依次做 VF 融合、循环拆分、循环展开、常量外提,共 5 个独立可执行 Case。
flash_attn_lite_story
Flash Attention Lite 教学样例(Ascend 950),以固定规格的 Flash Attention 前向计算说明 Cube 与 Vector 融合算子的实现和流水排布,从单槽串行基线逐步加入 CV 核间双槽流水、AIC 核内双缓冲和 task 级 I/O 双缓冲,覆盖 v0~v5 递进版本。
scalar_story
Scalar 单元性能优化专题,分析 Ascend 950 上 ScalarBound 问题的根因与诊断方法,涵盖 icache 预取、静态创建 LocalTensor、局部变量替代成员变量、消除多级指针解引用等优化手段,以 FusedInferAttentionScore 和 QuantBatchMatmul 为案例。
simd_vf_story
SIMD VF 编程范式实践,覆盖 Broadcast(尾轴/首轴/中间轴)、Elemwise 逐元素与 Reduce 归约算子的 SIMD VF 实现与优化分析,展示不同写法间的性能差异与优化原理。