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

CANN/asc-devkit RTC运行时编译指南

RTC【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitRTC是Ascend C运行时编译库通过aclrtc接口在程序运行时将中间代码动态编译成目标机器码提升程序运行性能。运行时编译库提供以下核心接口aclrtcCreateProg根据输入参数字符串形式表达的Ascend C源代码等创建aclrtcProg程序实例。aclrtcAddNameExpr可选注册需要导出的核函数名表达式支持模板参数如 Kernel::add_customfloat非模板核函数可跳过。aclrtcCompileProg编译给定的程序支持用户自定义编译选项比如指定NPU架构版本号--npu-archdav-2201。支持的编译选项可以参考《毕昇编译器用户指南》。aclrtcGetBinDataSize获取编译后的Device侧二进制数据的大小。aclrtcGetBinData获取编译后的Device侧二进制数据。aclrtcGetLoweredName可选获取核函数编译后的mangled name用于后续通过aclrtBinaryGetFunction查找核函数句柄非模板核函数可跳过。aclrtcDestroyProg在编译和执行过程结束后销毁给定的程序。编译完成后需要调用如下接口完成仅列出核心接口Kernel加载与执行。完整流程和详细接口说明请参考《Runtime运行时API》中的“Kernel加载与执行”章节。通过aclrtBinaryLoadFromData接口解析由aclrtcGetBinData接口获取的算子二进制数据。获取核函数句柄并根据核函数句柄操作其参数列表相关接口包括aclrtBinaryGetFunction获取核函数句柄、aclrtKernelArgsInit初始化参数列表、aclrtKernelArgsAppend追加拷贝用户设置的参数值如xDevice, yDevice, zDevice等。调用aclrtLaunchKernelWithConfig接口启动对应算子的计算任务。如下样例演示了如何使用aclrtc接口编译并运行一个核函数该核函数中调用了printf进行打印。完整样例请参考LINK。#include cstdio #include vector #include acl/acl.h #include acl/acl_rt_compile.h // 使用aclrtc接口需要包含的头文件 #ifndef ACL_RTC_NPU_ARCH #define ACL_RTC_NPU_ARCH dav-2201 #endif #define ASCENDC_CHECK(expr) do { \ aclError ret (expr); \ if (ret ! ACL_SUCCESS) { \ fprintf(stderr, \ Ascend Error: %s:%d code%d %s\n,\ __FILE__, __LINE__, \ ret, aclGetRecentErrMsg()); \ return ret; \ } \ } while(0) const char *src R( #include debug/asc_printf.h extern C __global__ __vector__ void hello_world() { printf(Hello World!!!\n); } ); int main(int argc, char *argv[]) { aclrtcProg prog; ASCENDC_CHECK(aclrtcCreateProg(prog, src, hello_world.asc, 0, nullptr, nullptr)); // aclrtc流程传入毕昇编译器的编译选项调用aclrtcCompileProg进行编译 const char *options[] { --npu-arch ACL_RTC_NPU_ARCH, }; int numOptions sizeof(options) / sizeof(options[0]); aclError ret aclrtcCompileProg(prog, 1, options); if (ret ! ACL_SUCCESS) { // 编译报错时打印错误信息 size_t size 0; (void)aclrtcGetCompileLogSize(prog, size); char log[size] {0}; (void)aclrtcGetCompileLog(prog, log); printf(Compile Error Log : %s, log); } // aclrtc流程获取Device侧二进制内容和大小 size_t binDataSizeRet; ASCENDC_CHECK(aclrtcGetBinDataSize(prog, binDataSizeRet)); std::vectorchar deviceELF(binDataSizeRet); ASCENDC_CHECK(aclrtcGetBinData(prog, deviceELF.data())); // ----------------------------------------------- aclrt part ------------------------------------------------ aclrtBinHandle binHandle nullptr; aclrtBinaryLoadOptions loadOption; loadOption.numOpt 1; aclrtBinaryLoadOption option; option.type ACL_RT_BINARY_LOAD_OPT_LAZY_MAGIC; option.value.magic ACL_RT_BINARY_MAGIC_ELF_AICORE; loadOption.options option; ASCENDC_CHECK(aclrtSetDevice(0)); ASCENDC_CHECK(aclrtBinaryLoadFromData(deviceELF.data(), binDataSizeRet, loadOption, binHandle)); aclrtFuncHandle funcHandle nullptr; const char *funcName hello_world; ASCENDC_CHECK(aclrtBinaryGetFunction(binHandle, funcName, funcHandle)); aclrtArgsHandle argsHandle nullptr; ASCENDC_CHECK(aclrtKernelArgsInit(funcHandle, argsHandle)); ASCENDC_CHECK(aclrtKernelArgsFinalize(argsHandle)); // 核函数执行 uint32_t numBlocks 8; ASCENDC_CHECK(aclrtLaunchKernelWithConfig(funcHandle, numBlocks, nullptr, nullptr, argsHandle, nullptr)); ASCENDC_CHECK(aclrtSynchronizeDevice()); ASCENDC_CHECK(aclrtBinaryUnLoad(binHandle)); ASCENDC_CHECK(aclrtResetDevice(0)); // 编译和运行均已结束销毁程序 ASCENDC_CHECK(aclrtcDestroyProg(prog)); return 0; }编译命令如下编译时需要设置-I${ASCEND_HOME_PATH}/include用于找到aclrtc相关头文件并设置-L${ASCEND_HOME_PATH}/lib64链接alc_rtc动态库。g rtc_hello_world.cpp -I${ASCEND_HOME_PATH}/include -L${ASCEND_HOME_PATH}/lib64 -lascendcl -lacl_rtc -o main对于非模板核函数如hello_world编译器可自动导出符号无需额外操作。当核函数为模板函数时编译器无法自动确定需要导出的特化实例需要通过aclrtcAddNameExpr手动注册需要导出的核函数名含模板参数编译后通过aclrtcGetLoweredName获取mangled name用于后续aclrtBinaryGetFunction查找句柄。// 注册需要导出的核函数名含模板参数 const char* kernelNameExpr Kernel::add_customfloat; aclrtcAddNameExpr(prog, kernelNameExpr); // ... 编译流程aclrtcCompileProg ... // 获取编译后的mangled name const char* manglingName ; aclrtcGetLoweredName(prog, kernelNameExpr, manglingName);完整样例请参考rtc_template_add。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/asc-devkit RTC运行时编译指南

RTC 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/a…...

终极AMD Ryzen性能调优指南:5分钟掌握SMUDebugTool免费调试神器

终极AMD Ryzen性能调优指南:5分钟掌握SMUDebugTool免费调试神器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: h…...

深度技术解析:Lenovo Legion Toolkit 高级性能调优与系统集成指南

深度技术解析:Lenovo Legion Toolkit 高级性能调优与系统集成指南 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit …...

Windows Defender移除终极指南:如何彻底禁用微软安全组件提升系统性能30%

Windows Defender移除终极指南:如何彻底禁用微软安全组件提升系统性能30% 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.…...

Python金融数据引擎:重构通达信数据获取的技术范式

Python金融数据引擎:重构通达信数据获取的技术范式 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在量化投资和金融数据分析领域,数据获取一直是开发者面临的首要挑战。传…...

DLSS Swapper完整指南:3分钟掌握游戏性能优化终极技巧

DLSS Swapper完整指南:3分钟掌握游戏性能优化终极技巧 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款革命性的开源工具,专门为PC游戏玩家设计,让你能够轻松管理、…...

QQ空间数据备份指南:三步骤永久保存你的数字青春

QQ空间数据备份指南:三步骤永久保存你的数字青春 【免费下载链接】QZoneExport QQ空间导出助手,用于备份QQ空间的说说、日志、私密日记、相册、视频、留言板、QQ好友、收藏夹、分享、最近访客为文件,便于迁移与保存 项目地址: https://gitc…...

华硕笔记本终极控制神器:G-Helper轻量化替代方案完整指南

华硕笔记本终极控制神器:G-Helper轻量化替代方案完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…...

DownGit:3分钟掌握GitHub文件下载的终极指南,无需克隆整个仓库!

DownGit:3分钟掌握GitHub文件下载的终极指南,无需克隆整个仓库! 【免费下载链接】DownGit github 资源打包下载工具 项目地址: https://gitcode.com/gh_mirrors/dow/DownGit 你是否曾经为了下载GitHub上的一个配置文件,却被…...

Cobalt Strike 完整安装指南,含网盘资源与Java配置

Cobalt Strike安装教程 说明: 本教程仅用于学习与研究,请勿用于非法用途。 kali安装java环境参考(如有侵权联系删除) https://blog.csdn.net/weixin_54499207/article/details/144985879?sharetypeblog&shareId144985879&…...

QMCDecode:三步快速解密QQ音乐加密音频的免费工具

QMCDecode:三步快速解密QQ音乐加密音频的免费工具 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结…...

3分钟搞定M3U8视频下载:免费开源工具的终极懒人包

3分钟搞定M3U8视频下载:免费开源工具的终极懒人包 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 还在为下载在线视频发愁吗?那些藏在网页里的M3U8格式视频…...

Python爬虫实战:从零编写一个健壮的静态页面抓取器!

㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐⭐ (进阶) 🉐福利: 一次订阅后,专栏内的所有文…...

工业设备数据采集太难?这款.NET8边缘网关,轻松搞定多协议对接

🌈前言如今工业数字化、智能化转型脚步越来越快,工厂现场各类 PLC、仪表、传感器设备型号繁杂,通信协议五花八门,设备数据采集难、协议对接繁琐、多设备统一管控麻烦,一直是很多制造企业、工控从业者头疼的实际问题。市…...

Python爬虫实战:构建博物馆藏品数字档案(列表到详情深度采集)

㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐⭐ (进阶) 🉐福利: 一次订阅后,专栏内的所有文…...

AI不是产品,是技术,Apple想明白了

一个让我愣住的观点前几天刷 HackerNews,看到一篇被顶到榜首的文章,标题很短,就一句话,AI is a technology, not a product。不是因为这个观点多新奇,而是因为一个显而易见的事实,居然需要有人专门写一篇文…...

米哈游游戏字体库终极指南:轻松获取11款精美架空文字字体资源

米哈游游戏字体库终极指南:轻松获取11款精美架空文字字体资源 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 想要为你的设计作品注入《原神》、《崩坏&#xf…...

中兴光猫工厂模式智能解锁:3步获得完全控制权限

中兴光猫工厂模式智能解锁:3步获得完全控制权限 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾因中兴光猫的限制而无法进行高级网络配置?是否在需要深…...

三步破解安全研发合规难题:Gitee软件工厂助力GJB5000B与等保三级高标准落地

TL;DR 国家安全领域软件研发需同时满足GJB5000B、等保2.0三级等强制合规要求与智能化装备带来的软件复杂度挑战。传统研发模式在协作、安全、交付三方面日益乏力。Gitee软件工厂通过“统一底座、细粒度权限、标准化流程”三大核心能力,内置SM2/SM4国密加密、IP白名单…...

抖音视频批量下载工具:免费保存去水印内容完整指南

抖音视频批量下载工具:免费保存去水印内容完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...

终极微信聊天记录导出指南:用WeChatExporter彻底掌控你的数据主权

终极微信聊天记录导出指南:用WeChatExporter彻底掌控你的数据主权 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录承载着…...

Sunshine游戏串流服务器:如何5分钟内搭建私人云游戏平台?

Sunshine游戏串流服务器:如何5分钟内搭建私人云游戏平台? 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想象一下,将你的高性能游戏PC变成一个…...

RAG 检索增强生成(全链路)

目录一、什么是RAG(Retrieval-augmented Generation)二、核心流程三、从零实战1. 环境准备2. 准备你的资料3. 代码4. 运行结果四、RAG全链路1. 文档切分(切块)2. Embedding 向量化3. 向量库存储4. 语义检索5. LLM生成回答必备5个工具(全免费&…...

OBS-VST插件完整指南:5分钟让直播音频秒变专业的终极方案

OBS-VST插件完整指南:5分钟让直播音频秒变专业的终极方案 【免费下载链接】obs-vst Use VST plugins in OBS 项目地址: https://gitcode.com/gh_mirrors/ob/obs-vst 想在OBS Studio中免费获得专业级音频处理效果吗?OBS-VST插件正是你需要的解决方…...

2026年3大知识竞赛软件测评:告别抢答器,手机闯关如何玩出高级感?

在2026年的今天,组织一场知识竞赛不再需要搬运笨重的抢答硬件,也不再需要人工统计分数。无论是学校的百科竞赛,还是企业的安全生产月活动,组织者最核心的需求已经演变为:如何在保证万人并发稳定的前提下,玩…...

3分钟学会使用elan:告别Lean版本混乱的智能版本管理器

3分钟学会使用elan:告别Lean版本混乱的智能版本管理器 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 还在为不同Lean项目需要不同版本而头疼吗?elan作为Lean定理证明器的智能版本管理器&…...

stm32F103C8T6标准库定时器应用流水灯1——相关的寄存器

目录1.SysTick介绍2.芯片架构2.1 M3系统架构图3.SysTick使用4.readme5.定时器中断配置5.1 core_cm3.h文件5.1.1 函数头注释部分5.1.2 函数名5.1.3 判断重装值是否超过 24 位5.1.4 设置重装载寄存器5.1.5 设置中断优先级5.1.6 清空当前计数器5.1.7 配置 CTRL 寄存器(…...

CANN-opbase-昇腾NPU算子开发的基础设施为什么这么重要

CANN-opbase-昇腾NPU算子开发的基础设施为什么这么重要 所有 CANN AOL 算子仓库的底层都依赖 opbase。它不提供任何算子实现,提供的是算子注册、编译、调度的基础设施。如果你要写自定义 Ascend C 算子,opbase 是绕不过去的第一步。 opbase 提供了什么组…...

插电式混合动力公交车工况预测与智能能量管理策略【附程序】

✨ 长期致力于插电式混合动力系统、行驶工况构建、工况预测、预测能量管理策略、智能能量管理策略研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)自组…...

终极指南:如何使用qmc-decoder快速解密QMC音频文件 [特殊字符]

终极指南:如何使用qmc-decoder快速解密QMC音频文件 🎵 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder qmc-decoder是一款专为QQ音乐用户设计的QMC音…...