讲师中心 微信公众号
AI工具推荐 视频效率加速

C++ 怎么使用 Ascend C 编程语言在华为昇腾(Ascend NPU)上开发自定义算子

小涛大大_3047

小涛大大_3047

发布时间:2026-10-26 09:59:29

|

690人浏览过

|

来源于php中文网

原创

Ascend C不是独立编程语言,而是华为基于C++的扩展语法库,通过头文件、编译器插件(ascendcc)和专用attribute/intrinsics实现,仅用于昇腾NPU设备侧算子开发,必须与ACL Host侧代码协同使用。

c++ 怎么使用 ascend c 编程语言在华为昇腾(ascend npu)上开发自定义算子

Ascend C 不是独立编程语言,而是华为提供的 C++ 扩展语法库

很多人搜“Ascend C 编程语言”,误以为它是像 Rust 或 Go 那样的新语言——其实它只是华为在 C++ 基础上封装的一套头文件 + 编译器插件(akg + inc 工具链),所有代码仍需写成合法 C++,并用 ascendcc 编译器(本质是 clang 衍生版)处理特定 attribute 和 intrinsics。

这意味着你不能直接写 main() 运行 Ascend C 代码,也不能脱离昇腾驱动和 CANN 软件栈单独部署。真实开发流程是:写一个符合算子接口规范的 C++ 函数 → 加 __aicore__ attribute 标记 → 用 ascendcc 编译成 .o → 通过 op_compiler 打包为 .so → 注册进 PyTorch/TensorFlow 插件中调用。

常见错误现象:error: unknown attribute '__aicore__' —— 说明没用 ascendcc 编译,或环境变量 ASCEND_TOOLKIT_HOME 没设对;undefined reference to 'aclrtMemcpy' —— 混淆了 Host 侧(CPU)和 Device 侧(NPU)代码,Ascend C 只负责 Device 侧 kernel,内存拷贝、流同步等必须由 Host 侧 C++/Python 完成。

算子开发必须严格遵循 TBE/ACL 双层结构

昇腾平台把算子拆成两部分:TBE(Tensor Boost Engine)负责 Device 侧计算逻辑(用 Ascend C 写),ACL(Ascend Computing Language)负责 Host 侧调度(用 C++/Python 写)。两者不能混写,也不能省略任一环节。

立即学习“C++免费学习笔记(深入)”;

典型结构如下:

// device_kernel.cpp(Ascend C,必须用 ascendcc 编译)
__aicore__ void MyAddKernel(__gm__ half* x, __gm__ half* y, __gm__ half* z, int n) {
    // 使用 cube、vector 等专用 intrinsics
}

对应 Host 侧要写:

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
// host_op.cpp(标准 g++ 编译)
#include "acl/acl.h"
extern "C" aclError aclnnMyAddWorkspaceSize(...) { ... }
extern "C" aclError aclnnMyAdd(...); // 调用 device kernel

关键点:

  • __gm__ 指向 global memory(DDR),__l1__/__l0__ 才是片上缓存,不显式声明会默认走最慢路径
  • 所有 tensor shape、stride、dtype 必须通过 ACL 接口传入,Ascend C kernel 内不可硬编码尺寸
  • kernel 启动参数不能超过 6 个(含指针+标量),超限需打包进 __aicore__ struct
  • 不支持动态分支(如 if (x[i] > 0) 在 vector 模式下会触发 scalar fallback,性能暴跌)

调试 Ascend C kernel 的实际路径只有两条

没有传统意义上的单步调试器。你看到的 printf、assert、gdb 全部无效——NPU 上无法运行 libc 或符号表。真实可用的调试手段只剩:

  • 用 ascendcc -O0 --debug 编译,生成带 debug info 的 .o,再通过 op_tester 工具注入 mock 数据,观察输出 tensor 是否匹配预期
  • 在 Host 侧插入 aclrtSynchronizeStream + aclrtMemcpy 回拷中间 buffer,用 np.allclose() 校验每一段计算结果(例如只验证 L1 Load 阶段输出是否正确)
  • 禁用所有优化(-O0)、关闭向量化(--disable-vectorize),先让 scalar 版本跑通,再逐步打开 --enable-vectorize 和 --enable-cube

容易踩的坑:op_tester 默认使用 float32,但你的 kernel 是 half,必须显式指定 --input-dtype=half,否则数据被截断后根本看不出逻辑错在哪。

编译产物必须通过 op_compiler 打包,不能直接 dlopen

Ascend C 编译出的 .o 文件不是 ELF 共享库,不能用 dlopen() 加载。必须用华为提供的 op_compiler 工具将其与 JSON 描述文件(op_info.json)一起打包为 libxxx.so,且该 so 中必须导出固定符号:

  • aclnnMyAddWorkspaceSize
  • aclnnMyAdd
  • GetOpImplyType

否则在 PyTorch 调用时会报 OP registration failed: symbol not found。JSON 文件里 inputFormat、outputFormat 必须与实际 tensor layout 一致(比如 NCHW 对应 ND,NHWC 对应 NHWC),填错会导致 shape 解析失败,但错误信息只会显示 invalid param,无具体字段提示。

真正难的是多维度对齐:Host 侧申请的 buffer size、kernel 内 __gm__ 指针偏移、JSON 里描述的 tensor stride、以及 PyTorch autograd 需要的 backward kernel 输入输出顺序——这四者只要有一处差一个字节,就会静默出错,输出全零或 NaN。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
编程语言有哪些
编程语言有哪些

编程语言有C语言、C++语言、Java语言、Python语言、JavaScript语言、Ruby语言、Go语言等。本专题为大家提供编程语言相关的各种文章、以及下载和课程。

1112

2023.08.11

html转换txt文本格式方法
html转换txt文本格式方法

html通过使用在线工具、离线工具和编程语言来转txt。更多关于html转换txt文本格式方法详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3835

2023.11.01

c语言是什么编程语言
c语言是什么编程语言

c语言作为一种通用、结构化的编程语言,自诞生以来广泛应用于计算机领域。其基本特性包括结构化编程、过程式编程、底层访问能力、高效性能和跨平台性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

820

2024.03.14

如何挑选适合初学者的编程语言
如何挑选适合初学者的编程语言

编程语言选择至关重要,它直接影响学习效率和职业发展。初学者选择易于入门且应用广泛的语言,能为未来的深造和职业规划奠定基础。选择不当可能导致学习曲线陡峭、应用范围狭窄、就业机会有限,甚至难以拓展其他领域。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

482

2025.01.24

编程语言排行榜2025
编程语言排行榜2025

本专题文章深入分析2025年最新的编程语言流行度排名,基于TIOBE指数等权威数据,揭示Python、C++、Java等主流语言的最新动态与市场份额变化。通过对比各语言的优缺点、应用场景及就业前景,为开发者提供选择学习方向的实用参考,同时展望编程语言在人工智能、大数据和云计算等前沿技术中的未来发展。想了解更多详细内容,请阅读专题下面的文章。

4867

2025.07.29

java基础知识学习
java基础知识学习

本专题文章旨在为Java语言初学者提供系统化的学习路径,涵盖Java编程的核心基础知识、实用代码示例及全面的知识点总结。本专题适合零基础学习者及希望巩固Java基础的开发者,通过理论与实践结合,快速入门并迈向进阶开发。

4584

2025.08.01

2026 年编程语言排行榜与趋势解读
2026 年编程语言排行榜与趋势解读

本专题整合了编程语言排行榜合集,阅读专题下面的文章了解更多详细内容。

20895

2026.05.29

零基础编程语言选择与学习路线
零基础编程语言选择与学习路线

面向编程零基础用户与转行人群,系统分析不同编程语言的学习曲线、适用场景与就业前景,涵盖 Python(数据分析/AI/自动化/爬虫)、JavaScript/TypeScript(前端/全栈/小程序)、Java(企业后端/Android/大数据)、Go(云原生/微服务/DevOps)、C/C++(系统底层/嵌入式/游戏引擎)的定位对比与人群匹配建议、各语言从入门到实战的分阶段学习路线图、优质学习资源推荐(官方文档/在线课程/开源项目)、自

804

2026.05.29

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
iOS应用UI控件开发基础视频
iOS应用UI控件开发基础视频

共148课时 | 41.4万人学习

Fitten Code官方手册
Fitten Code官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn