已合并
[acc_offload] kernel 构建改用 cmake ascendc_library 替代手写 bisheng #1129
zhaocong_z50062855创建于 8月17日
[acc_offload] kernel 构建改用 cmake ascendc_library 替代手写 bisheng #1129
已合并
Pull Request已成功合入, 合并人@zhangjinshi
(感谢 zhaocong_z50062855 的贡献)8月17日 关联了issue:[Usage]: offload kernel 构建改用 cmake ascendc_library 替代手写 bisheng
atomgit-bot
8月17日 评论:
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三种路径依次查找并includeascendc.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目录。


不准确?
ascend-robot
8月17日 评论:
8月17日 评论:
atomgit-bot
8月17日 评论:
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 |
⛔ 需要修改


不准确?
ascend-robot
8月17日 评论:
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 | ✅ | >>> |
- compile : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


此处折叠了61条消息 查看更多
8月21日 通过审查
8月21日 解决了最后一个问题
8月21日 合入了pull request
合入来源
问题/功能描述
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

A5

性能提升
A3 手写 bisheng

A3 cmake 构建

A5 手写 bisheng

A5 cmake 构建

A3 性能从 13-14GB/s 提升至 18GB/s,A5 性能不变。
是否涉及UT/ST
开发自检