昇腾C和C以及C++的区别?
·
在昇腾 CANN(Compute Architecture for Neural Networks)开发体系中,昇腾 C (Ascend C) 与传统的 C/C++ 语言在定位、运行位置及开发目标上存在显著区别。
以下是它们的主要对比:
1. 定位与用途
- C / C++(应用开发语言):
- 主要用于编写应用逻辑。开发者通过调用 CANN 提供的 AscendCL (Ascend Computing Language) 接口(以
acl为前缀的 C 语言 API 库)来利用昇腾硬件资源。 - 负责任务的编排:包括系统初始化、运行时资源申请(Device、Context、Stream)、内存管理、模型加载与执行、单算子调用以及媒体数据处理等全流程。
- 主要用于编写应用逻辑。开发者通过调用 CANN 提供的 AscendCL (Ascend Computing Language) 接口(以
- 昇腾 C (Ascend C)(算子开发语言):
- 专为自定义算子开发设计。它是基于 C/C++ 语言规范,通过语法扩展实现的一种面向昇腾 AI 处理器的编程语言。
- 负责计算逻辑的实现:开发者使用 Ascend C 编写核函数(Kernel Function),直接操作硬件资源(如 AI Core、Vector Core)来完成具体的数学运算(如张量加法、卷积等)。
2. 运行位置
- C / C++:运行在 Host 侧(通常是 X86 或 ARM 服务器的 CPU 上)。它作为管理者,将 AI 任务通过 PCIe 等通道下发给 Device 侧运行。
- 昇腾 C (Ascend C):编译生成的二进制文件(*.o)运行在 Device 侧(昇腾 AI 处理器的核心上)。它作为执行者,在处理器内部完成高性能的数值计算。
3. 语法与特性
- C / C++:遵循标准的 ISO C/C++ 规范。在 CANN 开发中,开发者主要面对的是高层抽象的 API 归一化接口,无需感知底层的硬件差异。
- 昇腾 C (Ascend C):
- 硬件亲和:引入了特定的语法扩展,支持针对昇腾 AI 核心的深度优化,如流水线同步信号(check_flag)、内存搬运指令等。
- 核函数编程:采用核函数概念,允许开发者编写设备端的并行运行代码,利用多核并行能力加速计算。
4. 协作关系
在完整的 AI 业务流程中,两者是协作关系:
- 开发阶段:开发者使用 Ascend C 开发出一个高性能的自定义算子,并编译成二进制文件。
- 调用阶段:在 C/C++ 编写的应用程序中,通过 AscendCL 接口(如
aclrtLaunchKernel)加载并启动这个由 Ascend C 编写的算子计算任务。
总结对比表
| 特性 | C / C++ (AscendCL 应用开发) | 昇腾 C (Ascend C 算子开发) |
|---|---|---|
| 编程目标 | 业务逻辑、资源管理、任务调度 | 算子计算逻辑实现 |
| 运行位置 | Host 侧 (CPU) | Device 侧 (NPU, 如 AI Core) |
| 语言规范 | 标准 C/C++ | C/C++ 语法扩展 |
| 核心 API | 以 acl 开头的 AscendCL 接口 |
Ascend C 指令与核函数定义 |
| 开发难度 | 较低,侧重流程控制 | 较高,侧重硬件性能榨取与并行优化 |
简单来说,C/C++ 像是“指挥官”,负责下达命令和调配资源;而 昇腾 C 则是底层“特种兵”,负责在芯片核心内执行最艰巨的数学运算任务。
更多推荐


所有评论(0)