从 CUDA Kernel 到 AscendC:Kerminal 辅助完成一次算子迁移实践
·
在 AI 加速计算场景中,算子迁移是一类典型的工程任务。
例如,将一个 CUDA kernel 迁移到新的计算平台,并不是简单替换几个 API。
开发者通常需要:
- 理解原有 kernel 的计算逻辑;
- 分析 CUDA runtime 调用方式;
- 调整内存管理流程;
- 根据目标平台重新组织工程结构;
- 完成编译和验证。
对于这类任务,AI Agent 的价值并不仅仅是生成代码,而是参与整个工程流程。
本文以一个简单的 vector add CUDA kernel 为例,展示 Kerminal 如何辅助完成从 CUDA 到 AscendC 的迁移分析。
1. 首先理解已有 CUDA 代码
面对已有工程,Kerminal 首先读取 CUDA 源文件。

它分析:
- 当前代码实现的功能;
- 使用的 CUDA 特有 API;
- 迁移过程中需要调整的部分。
示例中的 CUDA kernel 实现的是经典向量加法:
c[i] = a[i] + b[i]
虽然计算逻辑简单,但其中包含典型 CUDA 编程模型:
- global kernel;
- threadIdx/blockIdx 索引;
- cudaMalloc/cudaMemcpy 内存管理;
- kernel launch
2. 根据迁移目标拆解任务
复杂工程迁移的难点,不在于单段代码转换,而在于明确整体路径。
Kerminal 根据已有代码分析,生成迁移方案:
- 创建目标平台工程结构;
- 迁移 kernel 计算逻辑;
- 调整 Host 侧调用;
- 处理数据切分;
- 编译验证。


这一过程类似开发者进行迁移前的技术方案设计。
3. 根据目标平台生成工程结构
CUDA 工程通常围绕 GPU 编程模型组织。
而迁移到 AscendC 后,需要适配新的开发方式。
Kerminal 根据迁移方案创建:
vector_add_ascend/
├── op_kernel
├── op_host
├── main.cpp
├── CMakeLists.txt
└── scripts
分别对应:
- 算子 kernel 实现;
- Host 调度逻辑;
- 编译配置;
- 测试验证脚本。

4. 持续检查任务状态
除了执行任务,Agent 还需要知道任务推进到什么阶段。
Kerminal 对当前工程状态进行检查:
已完成:
- 工程目录结构;
- 测试脚本;
- 部分代码框架。
待完成:
- kernel 核心实现;
- 目标环境编译;
- NPU 真机验证。
同时给出下一步建议。


总结
对于计算工程任务而言,真正困难的往往不是生成某一段代码。
而是理解已有系统,拆解迁移路径,处理工程约束,持续推进任务。
这也是 Kerminal 在计算场景中的价值所在。
更多推荐


所有评论(0)