已关闭
[Requirement|需求建议]:更新SIMT样例的cmake配置 #1641
ruoshuisixue创建于  17 天前关闭于  10 天前
ruoshuisixue成员
17 天前 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Background(背景信息)

当前 SIMT 样例及 SIMT/SIMD 混合样例的 CMake 配置中,普遍通过 target_compile_options 手动传入 --npu-arch 和 --enable-simt。不同样例的配置位置和写法不一致,存在编译参数重复、配置分散、后续维护成本高等问题。

同时,Ascend C 的 CMake 工具链已经支持通过全局变量 CMAKE_ASC_ARCHITECTURES 和 CMAKE_ASC_ENABLE_SIMT 配置目标架构及 SIMT 编译模式,并自动将对应参数注入 ASC 编译命令。原有样例未统一使用该机制,用户在修改架构或新增样例时需要重复调整目标级编译选项。

本需求对相关 SIMT 样例的 CMake 配置进行统一,将架构和 SIMT 编译开关前置到 find_package(ASC) 之前配置,并删除重复的目标级编译参数。同时同步更新编译文档、样例版本要求及部分文件 License 头,解决样例配置不统一、说明与实际配置不一致的问题。

Origin(信息来源)

无

Benefit / Necessity (价值/作用)

  1. 统一样例编译方式
    所有相关样例采用 Ascend C CMake 工具链推荐的全局配置方式,降低不同样例之间的使用差异。

  2. 减少编译参数重复和配置错误
    --npu-arch、--enable-simt 等通用参数由 CMake 工具链统一注入,避免在多个 target_compile_options 中重复维护,降低参数遗漏或冲突的风险。

  3. 便于架构切换和工程扩展
    用户可以通过 -DCMAKE_ASC_ARCHITECTURES=dav-xxxx 在配置阶段切换 NPU 架构,无需修改每个目标的 CMake 配置。对于包含多个 ASC 源文件、多个库或多个可执行目标的工程,也可以保证编译参数统一生效。

  4. 明确配置顺序约束
    将 CMAKE_ASC_ARCHITECTURES 和 CMAKE_ASC_ENABLE_SIMT 设置在 find_package(ASC) 之前,使工具链在初始化阶段即可读取配置,避免变量设置过晚导致配置不生效。

  5. 改善样例可维护性和文档一致性
    样例 CMake 配置、中文文档和英文文档采用一致的编译方式,用户可以直接按照文档完成 SIMT 样例构建。受影响的 Gather 和 msProf 样例最低 CANN 版本同步更新为 9.1.0。

Design(设计方案)

整体方案是将通用编译参数从“目标级手动配置”迁移到“ASC 工具链全局配置”,保留样例自身特有的编译选项。

1. 配置全局编译变量

在 find_package(ASC REQUIRED) 之前设置目标架构和 SIMT 开关:

cmake_minimum_required(VERSION 3.16)

set(CMAKE_ASC_ARCHITECTURES
"dav-3510"
CACHE STRING "NPU architecture")

set(CMAKE_ASC_ENABLE_SIMT ON)

find_package(ASC REQUIRED)
project(kernel_samples LANGUAGES ASC CXX)

其中:

  • CMAKE_ASC_ARCHITECTURES 用于指定 NPU 架构,用户可通过 -D 参数覆盖默认值;
  • CMAKE_ASC_ENABLE_SIMT=ON 用于启用 SIMT 编译模式;
  • 两个变量必须在 find_package(ASC) 前设置,由 ASC CMake 模块在初始化编译规则时读取。

2. 由 CMake 工具链自动注入通用参数

ASC CMake 模块内部根据全局变量生成编译参数,逻辑如下:

if(CMAKE_ASC_ARCHITECTURES)
set(ASC_FLAGS "${ASC_FLAGS} --npu-arch=${CMAKE_ASC_ARCHITECTURES}")
endif()

if(CMAKE_ASC_ENABLE_SIMT)
set(ASC_FLAGS "${ASC_FLAGS} --enable-simt")
endif()

因此,样例中删除以下重复配置:

target_compile_options(demo PRIVATE
<<<COMPILE_LANGUAGE:ASC>:
--npu-arch=${CMAKE_ASC_ARCHITECTURES}
--enable-simt>
)

3. 保留样例特有编译选项

仅删除由全局配置统一管理的架构和 SIMT 参数,保留样例自身需要的选项,例如:

target_compile_options(demo PRIVATE
<<<COMPILE_LANGUAGE:ASC>:-dc>
<<<COMPILE_LANGUAGE:ASC>:--cce-res-usage>
)

这样不会影响单独编译、调试、资源统计、场景选择等原有功能。

4. 同步更新文档

同步修改相关中文和英文 README 及编程指南:

  • 将旧的 target_compile_options(... --enable-simt) 示例改为 CMAKE_ASC_ENABLE_SIMT;
  • 明确架构变量和 SIMT 开关必须在 find_package(ASC) 前设置;
  • 更新受影响样例的 CANN 最低版本要求;
  • 保持样例的编译、运行和验证流程不变。
likedislike
Rruoshuisixue成员
17 天前 添加了label:requirement
ruoshuisixue成员
17 天前 评论:

开发中,预计9.10闭环

likedislike
Rruoshuisixue成员
10 天前 issue状态由 待办的 改变为 已解决
Rruoshuisixue成员
10 天前 关闭了 issue
CANN-robotCANN-robot成员
10 天前 添加了label:resolved