已合并
[acc_offload] kernel 构建改用 cmake ascendc_library 替代手写 bisheng #1129
[acc_offload] kernel 构建改用 cmake ascendc_library 替代手写 bisheng #1129
已合并
zhaocong_z50062855创建于 8月17日
zhaocong_z50062855
zhaocong_z50062855成员
8月17日

合入来源

问题/功能描述

acc_offload 的 sparse_copy kernel 在 script/run_pkg_maker/install.sh 用手写 bisheng -x asc 构建,codegen 不及 cmake ascendc_library,导致 H2D 带宽低。

修改方案描述

把 accoffload kernel 构建从 install.sh 手写 bisheng 改为 cmake ascendc_library

自检验

A3
image.png

A5
image.png

性能提升

A3 手写 bisheng
image.png

A3 cmake 构建
image.png

A5 手写 bisheng
image.png

A5 cmake 构建
image.png

A3 性能从 13-14GB/s 提升至 18GB/s,A5 性能不变。

是否涉及UT/ST

开发自检

likedislike
Pull Request已成功合入, 合并人@zhangjinshi
(感谢 zhaocong_z50062855 的贡献)
zhaocong_z50062855zhaocong_z50062855成员
8月17日 关联了issue:[Usage]: offload kernel 构建改用 cmake ascendc_library 替代手写 bisheng
atomgit-bot
atomgit-bot
8月17日 评论:

变更摘要

此 PR 将 acc_offload 的 kernel 构建方式由 install.sh 中手写 bisheng -x asc 编译改为使用 cmake 的 ascendc_library 构建,以解决 sparse_copy kernel 因 codegen 质量不足导致的 H2D 带宽偏低问题。改动集中在 script/run_pkg_maker/install.sh:新增通过 cmake -S . -B build_cmake 配置并构建出静态库 libmf_accoffload_kernel.a,随后以 --whole-archive 方式将其链接进 libmf_hybm_accoffload.so;同时新增 src/acc_offload/csrc/operators/config_ascendc.cmake 用于在多种 CANN 安装布局下定位并引入 ascendc_kernel_cmake。整体仅调整构建与链接流程,不涉及功能逻辑。

主要改动

  • kernel 构建从手写 bisheng 改为 cmake ascendc_library:install.sh 删除原来的 bisheng -x asc ... -o libmf_hybm_accoffload_kernel.so 编译命令,改为导出 ASCEND_HOME_PATH 后执行 cmake 配置(含 -DSOC_VERSION=ascend910_9382、-DCMAKE_BUILD_TYPE=RELEASE)并通过 cmake --build 生成 build_cmake/lib/libmf_accoffload_kernel.a,失败时清理 build_cmake 并退出。
  • 新增 config_ascendc.cmake 定位 ascendc 构建环境:该文件从 ASCEND_HOME_PATH(含环境变量回退)下按 tools/tikcpp/ascendc_kernel_cmake、compiler/tikcpp/ascendc_kernel_cmake、ascendc_devkit/tikcpp/samples/cmake 三种路径依次查找并 include ascendc.cmake,未找到时输出 FATAL_ERROR。
  • 链接方式由动态库改为静态库全量链接:最终 g++ -shared 生成 libmf_hybm_accoffload.so 时,将原来的 -L. -lmf_hybm_accoffload_kernel 替换为 -Wl,--whole-archive ${KERN_A} -Wl,--no-whole-archive,确保静态库符号被完整打入。
  • 安装与清理流程调整:拷贝产物时不再复制 libmf_hybm_accoffload_kernel.so,仅安装 libmf_hybm_accoffload.so,并在结尾清理 build_cmake 目录。
likedislike
不准确?
atomgit-bot
atomgit-bot
8月17日 评论:

代码审查

审查完成。以下是本次评审的结论。

变更文件审查确认

  • script/run_pkg_maker/install.sh — 发现 3 个问题(1×P1、2×P3),详见上文。
  • src/acc_offload/csrc/operators/CMakeLists.txt — 无独立问题(其 SOC_VERSION 默认值硬编码 ascend910_9382 的问题已在 install.sh 的 P1 发现中一并说明)。
  • src/acc_offload/csrc/operators/config_ascendc.cmake — 无独立问题(ASCEND_HOME_PATH 未加引号与 install.sh 属于同类低概率路径含空格问题,未单独上报)。

结论

  • 按优先级统计:P0 0 个,P1 1 个,P2 0 个,P3 2 个。
  • 总体风险判断:中高风险。核心风险在于构建方式切换时把 kernel 的 SoC 版本硬编码为 A3(ascend910_9382),丢失了原先对 A5(dav-c310)平台的架构分支,可能导致 A5 平台安装/运行回归;其余为依赖校验与引号缺失等健壮性问题,影响相对次要。
类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
不准确?
ascend-robot
ascend-robot成员
8月17日 评论:
流水线 PR-pipeline_memfabric_hybrid#5291 [ commitID:d9eea853 ] 已完成
阶段 任务名 状态 详情
编译构建 Build_memfabric-hybrid ✅ >>>
Build_memfabric-hybrid-bazel ✅ >>>
恶意代码检查 Antipoison_mf ✅ >>>
编码安全与规范检查 pre-commit ✅ >>>
CodeCheck_mf ✅ >>>
开源片段检查 SCA_mf ✅ >>>
开发者测试 UT_memfabric-hybrid ✅ >>>
zbal_ascend_pr_build_test_ut ✅ >>>
流水线 PR-pipeline_memfabric_hybrid ✅ >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
此处折叠了61条消息 查看更多
Wwlwen成员
8月21日 将wlwen设为评审人
Wwlwen成员
8月21日 通过了评审
Zzhangjinshi成员
8月21日 通过审查
Zzhangjinshi成员
8月21日 解决了最后一个问题
Zzhangjinshi成员
8月21日 合入了pull request