| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
update ops-tensor submodule Co-authored-by: liuyufan0725<liuyufan9@huawei.com> # message auto-generated for no-merge-commit merge: !337 merge fix into master update ops-tensor submodule Created-by: liuyufan0725 Commit-by: liuyufan0725 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更新samples仓的ops-tensor submodule,并优先include其中的tensor_api和c_api实现,从而解决包间兼容性 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联 [Issue224](https://gitcode.com/cann/cann-samples/issues/224) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 编译通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/cann-samples!337 | 2 个月前 | |
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 | 2 个月前 |