一、PyPTO 是否生成算子 C++(AscendC)源码?

会生成 AscendC(昇腾专用算子C++)源码

  1. 完整编译链路
    Python PyPTO 代码 → TensorGraph/TileGraph IR 多层优化 → 自动输出 AscendC .cpp 源码 → bisheng 编译成 NPU 内核二进制
  2. 两种使用模式
    • JIT 即时编译:运行时自动生成临时 AscendC 文件、编译、加载,开发者默认看不到中间 cpp;
    • 导出源码模式:框架提供接口可持久化导出完整 AscendC 代码,可二次手动调优底层细节;
  3. 边界说明
    PyPTO 生成的是Tile分块并行逻辑的标准AscendC,内存搬运、多核调度、向量计算全部自动生成,无需手写 MTE、Vector 硬件原语;但极致硬件压榨场景,导出后仍可手动修改C++源码。

二、AscendCraft vs PyPTO 核心区别

1. 基础定位完全不同

PyPTO(CANN官方编程框架,生产可用)

  • 定位:算子开发编程语言/DSL,面向开发者手写算子;
  • 输入:用户手写 Python 风格张量/Tile 代码;
  • 核心:提供一套完整可迭代开发工作流(编码→调试→性能调优→编译);
  • 主体:CANN 官方长期维护,开源,面向日常算子开发、竞赛算子、大模型融合算子。

AscendCraft(学术自动代码生成工具,研究原型)

  • 定位:自动内核生成编译器工具,不用手写完整算子;
  • 输入:极简领域DSL描述算子数学逻辑(仅写计算表达式,不写分块/内存);
  • 核心:基于LLM+约束编译全自动生成AscendC,主打零手写、快速原型;
  • 主体:华为实验室+南京大学联合学术项目,论文原型,非标准CANN工具链,无官方生产运维支持。

2. 输入开发方式对比

维度 PyPTO AscendCraft
开发者工作量 中等,手写完整Tile并行逻辑(分块、load/store、并行循环) 极低,只写数学公式DSL,分块/内存/并行全部自动生成
上手门槛 中等,需理解Tile、NPU内存层级 极低,不用懂昇腾硬件编程细节
可控性 极高,所有分块、调度、展开参数手动可控(白盒调优契约) 低,自动生成逻辑黑盒,底层细节无法精细干预
迭代调优 原生支持逐轮调优、泳道图Profiling、修改Python代码重编译 生成后只能修改输出的AscendC源码再重新编译

3. 代码生成链路差异

  1. PyPTO
    Python API → 多层计算IR(Tensor/Tile/Block)→ 人工可调优化Pass → 生成AscendC源码 → NPU二进制
    全程开发者可以在IR任意阶段介入、修改调优参数。

  2. AscendCraft
    极简数学DSL输入 → LLM生成候选分块方案 → 约束编译器校验硬件合规 → 直接输出最终AscendC内核
    中间分块、内存策略由模型自动决策,开发者无法干预中间流程。

4. 性能与适用场景

PyPTO

  • 性能上限:接近手工AscendC最优性能;
  • 适用:高性能生产算子、CANN算子天梯赛、大模型KV Cache/融合算子、需要长期维护迭代的算子;
  • 优势:性能可控、调试工具完善、官方长期支持、可集成MindStudio全套调试工具。

AscendCraft

  • 性能上限:大部分场景良好,复杂MatMul/卷积类算子不如人工调优PyPTO;
  • 适用:算法快速验证、新算子原型快速出代码、学术实验、简单逐元素算子;
  • 短板:无成熟线上调优链路,复杂算子生成成功率下降,不适合高性能生产内核。

5. 工具链生态

  • PyPTO:深度集成标准CANN、MindStudio、msprof性能剖析、算子仿真,官方文档完善,社区大量实战案例;
  • AscendCraft:独立学术工具,不嵌入标准开发流程,仅用于代码生成,无配套调试、性能调优工具。

三、极简总结

  1. PyPTO 确实会自动生成 AscendC(昇腾算子C++)源码,支持JIT隐式生成与手动导出源码两种模式;
  2. PyPTO = 手写式算子开发框架(可控、高性能、生产首选);
  3. AscendCraft = 全自动代码生成工具(免手写、原型快速验证、学术原型,不适合线上极致性能算子)。
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐