当前位置: 首页 > news >正文

asc-devkit Aclrtc运行时编译示例

Aclrtc运行时编译 + printf打印样例

概述

本样例展示了如何使用Aclrtc(运行时编译)接口,在 Host 侧运行时编译核函数源码并执行,核函数通过printf打印输出结果。

支持的产品

  • Ascend 950PR/Ascend 950DT
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品

目录结构介绍

├── rtc_hello_world │ ├── CMakeLists.txt // 编译工程文件 │ ├── rtc_hello_world.cpp // Host 侧代码(含 RTC 核函数源码字符串)

样例描述

  • 样例实现:
    • Kernel实现
      核函数源码以字符串形式嵌入 Host 代码中,通过printf打印输出结果。

    • 调用实现
      调用 aclrtc 接口系列在运行时编译并执行核函数,完整链路如下:

      • 编译阶段

        1. aclrtcCreateProg— 创建编译程序对象,传入核函数源码字符串
        2. aclrtcAddNameExpr— 注册需要导出的核函数名(含模板参数,如Kernel::add_custom<float>
        3. aclrtcCompileProg— 执行运行时编译,通过 options 传入--npu-arch指定 NPU 架构
        4. aclrtcGetBinDataSize/aclrtcGetBinData— 获取编译产物的二进制大小及数据(device ELF)
        5. aclrtcGetLoweredName— 获取核函数编译后的 mangled name,用于后续查找
      • 加载阶段

        1. aclrtBinaryLoadFromData— 将编译产物的二进制加载到设备(通过ACL_RT_BINARY_MAGIC_ELF_AICORE标记为 AI Core 可执行)
        2. aclrtBinaryGetFunction— 从加载的二进制中获取核函数句柄(funcHandle
      • 参数配置阶段

        1. aclrtKernelArgsInit— 初始化核函数参数句柄
        2. aclrtKernelArgsAppend— 逐个追加参数(核函数为__gm__ uint8_t* x, __gm__ uint8_t* y, __gm__ uint8_t* z,对应传入三个 Device 内存指针)
        3. aclrtKernelArgsFinalize— 完成参数配置
      • 执行阶段

        1. aclrtLaunchKernelWithConfig— 启动核函数,指定 block 数量、stream 等执行配置
      • 资源清理

        1. 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_ARCHITECTURES=dav-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),仅供参考

http://www.jsqmd.com/news/1194415/

相关文章:

  • 如何快速搭建你的私人小说图书馆?novel-downloader完整指南
  • 2026 济南天桥手表回收,易奢福:假表不收,真表不压价,就这么横 - ys韩
  • 小程序毕设选题推荐:基于 SpringBoot + 微信小程序的随机组卷答题系统 基于 SpringBoot 的学生成绩测评系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 企业微信重拳出击:当“拉群“变成“拉锯战“,私域运营的下半场怎么打?
  • CANN/asc-devkit TensorDesc简介
  • 机器视觉全自动检测核心优势
  • 基于GoogLeNet的水果分类
  • AMD Llama-3.1-8B-Instruct-w4a16-llmcompressor-v0.10.0.2与GPU推理对比:CPU推理的优势与适用场景
  • ProxyPin请求重写实战指南:5个高效网络调试技巧深度解析
  • 幻兽帕鲁存档修复终极指南:告别角色丢失的完整解决方案
  • 高效智能的GTA5辅助工具:YimMenu完整防护与体验提升指南
  • CANN/asc-devkit DeQue队列API
  • Office自动化部署神器:5分钟搞定Microsoft 365与Office 2024安装
  • CANN/asc-devkit:SIMD矢量比较API
  • 突破性配置:REPENTOGON高效部署完全指南
  • 基于YOLOv8的小麦的病害检测
  • CANN/Ascend C GmFree调试接口
  • 如何用WzComparerR2轻松提取《冒险岛》游戏资源:终极解密工具指南
  • CANN/asc-devkit CubeResGroupHandle使用说明
  • 如何用 AI 做竞品分析?产品经理效率提升指南
  • 紧急更新!OpenAI最新模型对文案策略的影响:3类失效Prompt预警及5套替代方案
  • CANN/asc-devkit VacantInQue函数
  • Malhar Angular Dashboard小部件自定义设置完全教程
  • BLHeli 电调固件完整配置指南:5分钟快速入门与性能优化技巧
  • 【VScode】无法建立ssh连接问题
  • 从Spotify到本地:3步打造永久音乐库的终极方案
  • CANN/asc-devkit GetPhyAddr函数文档
  • 肖特基二极管失效分析与工程防护方案
  • 5分钟掌握知乎数据采集:开源zhihu-spider完整解决方案
  • 合肥钻石回收就选奢二网,1500余家直营门店全国联网,合肥75店就近服务 - 生活时报