Ascend C 编程模型与核函数基础
快速开发调试:聚焦 Sigmoid 算子 Kernel 核函数,流程为环境准备→Kernel 矩阵编程→直调验证→调试调优,快速验证算子功能。标准开发调试:全链路开发,流程为 CANN 环境部署→算子分析→工程创建→Kernel/Host 实现→编译部署→ST 测试→调用,适配生产场景。
·
一、SPMD 编程模型详解
Ascend C 算子编程采用SPMD(单程序多数据) 范式,核心原理如下:
- 数据并行:将输入数据拆分为多个分片,分配给多个 AI Core 并行处理,所有 AI Core 共享相同的指令代码。
- 核身份识别:每个执行核函数的 AI Core 会被分配唯一逻辑 ID(通过内置变量
block_idx标识),开发者可通过kldx()函数获取该 ID,为不同核定义差异化数据处理逻辑。 - 开发简化:开发者仅需关注单个 AI Core 的算子实现逻辑,框架自动完成多 Core 调度与数据分发,降低并行开发复杂度。
SPMD 模型数据处理流程
- 输入数据按预设规则(如均分)切分为 N 个分片(N 为参与计算的 AI Core 数量)。
- 每个 AI Core 获取一个数据分片,执行相同的指令代码。
- 各 AI Core 通过
block_idx识别自身处理的数据分片,完成计算后输出局部结果。 - 框架汇总所有 AI Core 的局部结果,生成最终输出。
二、核函数定义与调用
(一)核函数定义规则
核函数是 Ascend C 算子在 Device 侧的入口函数,需通过特定修饰符标识运行属性:
__global__:标识核函数可通过<...>>>内核调用符调用,运行在 Device 侧。__aicore__:标识核函数在 AI Core 上执行(区别于 AI CPU)。__gm__:指针入参修饰符,表明该指针指向 Global Memory 中的内存地址,通常通过GM_ADDR宏统一封装(#define GM_ADDR __gm__ uint8_t)。
(二)核函数定义示例
#include "kernel_operator.h"
using namespace AscendC;
// 核函数定义:打印"Hello World"
extern "C" __global__ __aicore__ void hello_world() {
AscendC::printf("Hello World!!!\n");
}
// 核函数调用封装:通过内核调用符<<<>>>规定执行配置
void hello_world_do(uint32_t blockDim, void* stream) {
hello_world<<<blockDim, nullptr, stream>>>();
}
(三)核函数调用参数说明
内核调用符<<<blockDim, l2ctrl, stream>>>的参数含义如下:

三、Hello World 实战:核函数调用全流程
(一)Host 侧调用代码
#include "acl/acl.h"
extern void hello_world_do(uint32_t coreDim, void* stream);
int32_t main(int argc, char const *argv[]) {
// 1. AscendCL初始化
aclInit(nullptr);
// 2. 运行管理资源申请
int32_t deviceId = 0;
aclrtSetDevice(deviceId); // 绑定设备
aclrtStream stream = nullptr;
aclrtCreateStream(&stream); // 创建任务队列
// 3. 配置核函数执行参数(使用8个AI Core)
constexpr uint32_t blockDim = 8;
hello_world_do(blockDim, stream); // 调用核函数
// 4. 等待任务执行完成
aclrtSynchronizeStream(stream);
// 5. 资源释放与AscendCL去初始化
aclrtDestroyStream(stream);
aclrtResetDevice(deviceId);
aclFinalize();
return 0;
}
(二)关键接口说明

训练营简介
2025 年昇腾 CANN 训练营第二季,基于 CANN 开源开放全场景,推出 0 基础入门系列、码力全开特辑、开发者案例等专题课程,助力不同阶段开发者快速提升算子开发技能。获得 Ascend C 算子中级认证,即可领取精美证书,完成社区任务更有机会赢取华为手机,平板、开发板等大奖。
报名链接
https://www.hiascend.com/developer/activities/cann20252?tab=overview
更多推荐


所有评论(0)