在昇腾 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)、内存管理、模型加载与执行、单算子调用以及媒体数据处理等全流程。
  • 昇腾 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 业务流程中,两者是协作关系:

  1. 开发阶段:开发者使用 Ascend C 开发出一个高性能的自定义算子,并编译成二进制文件。
  2. 调用阶段:在 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 则是底层“特种兵”,负责在芯片核心内执行最艰巨的数学运算任务。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐