
Aclrtc运行时编译 printf打印样例概述本样例展示了如何使用Aclrtc运行时编译接口在 Host 侧运行时编译核函数源码并执行核函数通过printf打印输出结果。支持的产品Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品目录结构介绍├── rtc_hello_world │ ├── CMakeLists.txt // 编译工程文件 │ ├── rtc_hello_world.cpp // Host 侧代码含 RTC 核函数源码字符串样例描述样例实现Kernel实现核函数源码以字符串形式嵌入 Host 代码中通过printf打印输出结果。调用实现调用 aclrtc 接口系列在运行时编译并执行核函数完整链路如下编译阶段aclrtcCreateProg— 创建编译程序对象传入核函数源码字符串aclrtcAddNameExpr— 注册需要导出的核函数名含模板参数如Kernel::add_customfloataclrtcCompileProg— 执行运行时编译通过 options 传入--npu-arch指定 NPU 架构aclrtcGetBinDataSize/aclrtcGetBinData— 获取编译产物的二进制大小及数据device ELFaclrtcGetLoweredName— 获取核函数编译后的 mangled name用于后续查找加载阶段aclrtBinaryLoadFromData— 将编译产物的二进制加载到设备通过ACL_RT_BINARY_MAGIC_ELF_AICORE标记为 AI Core 可执行aclrtBinaryGetFunction— 从加载的二进制中获取核函数句柄funcHandle参数配置阶段aclrtKernelArgsInit— 初始化核函数参数句柄aclrtKernelArgsAppend— 逐个追加参数核函数为__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z对应传入三个 Device 内存指针aclrtKernelArgsFinalize— 完成参数配置执行阶段aclrtLaunchKernelWithConfig— 启动核函数指定 block 数量、stream 等执行配置资源清理aclrtcDestroyProg— 销毁编译程序对象数据生成与精度校验均在 Host 侧 C 内完成不依赖外部脚本。编译运行在本样例根目录下执行如下步骤编译并执行样例。配置环境变量请根据当前环境上 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样例执行mkdir -p build cd build; # 创建并进入build目录 cmake -DCMAKE_ASC_ARCHITECTURESdav-2201 ..;make -j; # 编译工程 ./demo # 执行编译生成的可执行程序执行样例[!WARNING] 注意 Aclrtc 仅支持 NPU 运行模式不支持 cpu 调试或 sim 仿真模式。执行结果执行结果如下说明执行成功。[AIV Block 0/8] Hello World!!! [AIV Block 1/8] Hello World!!! [AIV Block 2/8] Hello World!!! [AIV Block 3/8] Hello World!!! [AIV Block 4/8] Hello World!!! [AIV Block 5/8] Hello World!!! [AIV Block 6/8] Hello World!!! [AIV Block 7/8] Hello World!!!创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考