Static Library Compile 样例
概述
本样例基于Gather算子,演示了将Host + Device混合.asc文件(含Kernel定义与<<<>>>内核调用)编译为静态库(.a),再由Host侧.cpp链接调用的静态库编译流程。其中.asc文件的<<<>>>调用函数通过extern暴露给纯Host侧的.cpp。代码结构与调用关系如图 1 所示:
图1:代码结构与调用关系
支持的产品
- Ascend 950PR/Ascend 950DT
支持的CANN软件版本
- > CANN 9.0.0
目录结构介绍
├── 03_static_library_compile │ ├── CMakeLists.txt // 编译工程文件 │ ├── gather_kernel.asc // 混合文件(含Kernel定义、<<<>>>内核调用) │ ├── main.cpp // 纯Host侧代码(通过extern调用.asc暴露的函数) │ └── figures // README中的图片资源算子描述
gather算子实现了从长度为100000的一维输入向量中获取指定索引的12288个数据的功能。
静态库编译介绍
通过静态库编译,.asc混合文件被编译为独立的静态库(.a),Host侧.cpp通过链接该.a完成调用。
bisheng命令行编译
使用-lib选项将.asc混合文件编译为静态库(.a)。具体编译命令如下:
bisheng -lib kernel.asc -o libkernel.a --npu-arch=dav-3510 --enable-simt其中,--npu-arch为编译时指定的 AI 处理器架构,本样例仅支持dav-3510,各产品型号对应的架构版本号请通过对应关系表进行查询。--enable-simt用于指定SIMT方式编译。
更多 bisheng 编译选项及用法说明,请参考AI-Core算子编译基本用法。
CMake方式编译
在 CMake 工程中,使用add_library配置STATIC关键字即可将.asc文件编译为静态库:
# 将.asc文件编译为静态库 add_library(kernel STATIC kernel.asc)编译运行
在本样例根目录下执行如下步骤,编译并执行样例。
配置环境变量 请根据当前环境上 CANN 开发套件包的安装方式,选择对应配置环境变量的命令。
默认路径,root用户安装CANN软件包
source /usr/local/Ascend/cann/set_env.sh默认路径,非root用户安装CANN软件包
source $HOME/Ascend/cann/set_env.sh指定路径install_path,安装CANN软件包
source ${install_path}/cann/set_env.sh
样例执行
命令行方式
bisheng -lib gather_kernel.asc -o libgather_kernel.a --npu-arch=dav-3510 --enable-simt # 编译 .asc 为静态库 bisheng main.cpp -o demo -L./ -L${ASCEND_HOME_PATH}/lib64 -I${ASCEND_HOME_PATH}/include \ -lgather_kernel -lascendcl -lruntime -lstdc++ # 链接生成可执行文件 ./demo # 执行样例CMake方式
mkdir -p build && cd build; # 创建并进入build目录 cmake -DCMAKE_ASC_ARCHITECTURES=dav-3510 ..;make -j; # 编译工程 ./demo # 执行样例使用 NPU 仿真模式时,添加
-DCMAKE_ASC_RUN_MODE=sim参数即可。示例如下:cmake -DCMAKE_ASC_RUN_MODE=sim -DCMAKE_ASC_ARCHITECTURES=dav-3510 ..;make -j; # NPU仿真模式注意:切换编译模式前需清理 cmake 缓存,可在 build 目录下执行
rm CMakeCache.txt后重新 cmake。
执行结果
执行结果如下,说明精度对比成功。
[Success] Case accuracy is verification passed.
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考