news 2026/5/9 15:40:30

CANN TileLang算子设计模板

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN TileLang算子设计模板

{算子名称} 算子设计文档

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

1. 概述

1.1 算子名称

{算子名称}

1.2 功能描述

{一句话描述算子功能}

1.3 数学公式

$$ {数学公式} $$

1.4 算法描述

{对于多步算子,描述计算步骤的分解逻辑。单步算子可省略。}

1.5 数据流图

输入张量 → [计算步骤1] → [计算步骤2] → ... → 输出张量

2. 编程模式选型

2.1 模式结论

选定模式: {Developer / Expert / 混合}

2.2 选型理由

{基于算子特征(计算类型、是否含 matmul、是否含归约、是否需要流水线)的分析}

2.3 模式影响

维度本算子的选择
内存分配{如: T.alloc_ub 显式指定 UB}
计算方式{如: T.Parallel + 运算符}
作用域{如: 编译器自动分离 / 显式 T.Scope}
同步方式{如: 自动同步 / 手动 T.barrier_all}

3. API 映射设计

3.1 公式拆解

步骤数学表达说明
1{子表达式}{说明}
2{子表达式}{说明}
.........

3.2 TileLang API 映射

步骤数学表达TileLang API参数模式
1{子表达式}{如: T.tile.exp(dst, src)}{参数说明}{Developer/Expert}
2{子表达式}{如: T.reduce_sum(buf, out, dim=-1)}{参数说明}{Developer/Expert}
...............

3.3 计算伪代码

# 基于 TileLang API 的计算流程伪代码 with T.Kernel(block_num, is_npu=True) as (cid, vid): # 1. 分配 buffer {buffer 分配代码} # 2. 数据搬入 {T.copy 搬入代码} # 3. 计算 {核心计算代码} # 4. 数据搬出 {T.copy 搬出代码}

3.4 API 可行性确认

{列出使用的 API 及其来源确认(速查表 / 示例 / 源码),标注是否经过验证}


4. 数据规格与内存规划

4.1 输入张量

参数名Shapedtype说明
{A}{(M, N)}{float16}{输入矩阵}
............

4.2 输出张量

参数名Shapedtype说明
{C}{(M, N)}{float16}{输出矩阵}
............

4.3 中间缓冲区

Buffer 名Shapedtype存储层级用途
{a_ub}{(block_M, block_N)}{float16}{UB}{输入 tile 缓冲}
{tmp}{(1, block_N)}{float32}{UB}{归约临时缓冲}
...............

4.4 内存搬运路径

{完整的数据搬运路径图} 示例(纯 Vector): GM[A] --T.copy--> UB[a_ub] --计算--> UB[c_ub] --T.copy--> GM[C] 示例(Cube + Vector): GM[A] --T.copy--> L1[a_l1] --T.copy--> L0A[a_l0a] GM[B] --T.copy--> L1[b_l1] --T.copy--> L0B[b_l0b] L0A + L0B --T.gemm--> L0C[c_l0c] --T.copy--> UB[c_ub] UB[c_ub] --后处理--> UB[c_ub] --T.copy--> GM[C]

4.5 UB 内存预算

BufferShapedtype大小 (Bytes)
{a_ub}{(128, 128)}{float16}{32768}
............
总计{总字节数} / 131072 (128KB)

4.6 动态轴定义

{如无动态轴,写"无"。如有:}

动态轴声明方式运行时范围
{K}{T.dyn['K']}{1 ~ 64K}

4.7 JIT 配置

@tilelang.jit( out_idx=[{输出索引}], pass_configs={ {pass 配置项} }, )

5. Tiling 策略

5.1 计算类型

类型: {纯 Vector / 纯 Cube / 混合}

判定依据: {如: 算子仅包含 element-wise 运算,无 matmul,判定为纯 Vector}

5.2 Block 划分

block_M = {值} # {选择理由} block_N = {值} # {选择理由} block_num = (M // block_M) * (N // block_N)

5.3 约束分析

  • 对齐约束: {如: block_N=128, fp16 尾轴 128 > 16 ✓}
  • UB 容量: {如: 总 buffer = 64KB < 128KB ✓}
  • L0 容量: {如: 无 Cube 计算,不适用}

5.4 注意事项

{非整除情况的处理策略、边界块的特殊逻辑等}


6. 循环与调度结构

6.1 循环结构总结

维度循环类型API理由
{M 方向}{block 级并行}{T.Kernel}{每个 block 处理一个 M 分块}
{K 方向}{迭代}{T.serial(K // block_K)}{K 维分块迭代累加}
{元素级}{向量化}{T.Parallel(block_M, block_N)}{block 内逐元素并行}

6.2 循环伪代码

# Block 级并行(隐式,由 T.Kernel 管理) with T.Kernel(block_num, is_npu=True) as (cid, vid): {block 内循环结构}

6.3 流水线优化

{是否使用 T.Pipelined?如使用,说明 num_stages 设计和 buffer 管理策略}

6.4 尾块处理

{当输入 shape 不能被 block size 整除时的处理策略}


7. 同步策略

7.1 同步模式

模式: {自动同步 / 手动同步 / 混合}

7.2 同步点说明

{手动同步时,列出每个同步点及理由:}

位置同步 API理由
{搬入后}{T.barrier_all()}{等待 DMA 搬运完成}
.........

7.3 pass_configs 配置

pass_configs = { {与同步相关的 pass 配置} }

8. 验证方案

8.1 Golden 函数

def golden_{算子名}({参数}): """基于 PyTorch/NumPy 的参考实现""" {参考实现代码}

8.2 测试用例

用例名级别Shapedtype说明
{basic_small}Level 0{(32, 32)}{float16}{最小功能验证}
{typical_1}Level 1{(1024, 1024)}{float16}{典型配置}
{boundary}Level 2{(1, 1)}{float16}{边界值测试}
{large_scale}Level 3{(8192, 8192)}{float16}{性能测试}

8.3 精度标准

dtypeatolrtol
float161e-21e-2
float321e-41e-4

9. 风险点与注意事项

9.1 已知约束

{列出本算子在 TileLang-Ascend 上的已知限制}

9.2 常见错误

错误触发场景影响解决方案
{UB 溢出}{block 过大}{编译失败}{减小 block size}
............

9.3 特殊场景处理

{如: 非整除分块、极小 shape、混合精度等}


10. 交付清单

10.1 目录结构

examples/{算子名}/ ├── example_{算子名}.py # 算子实现 + 简单测试 ├── design.md # 本设计文档 └── README.md # 使用说明(可选)

10.2 文件清单

文件状态说明
design.md{已完成}设计文档
example_{算子名}.py{待实现}算子实现
test_{算子名}.py{待实现}测试文件(可选,放入 testing/)

10.3 命名规范

  • 目录名:{算子名}(snake_case)
  • 实现文件:example_{算子名}.py
  • 测试文件:test_{算子名}.py

10.4 实现顺序

  1. ✅ 设计文档(design.md)
  2. ⬜ Golden 函数(验证基准)
  3. ⬜ 算子实现(example_{算子名}.py)
  4. ⬜ 基础测试(Level 0 + Level 1)
  5. ⬜ 边界测试(Level 2)
  6. ⬜ 性能测试(Level 3,可选)

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 15:39:35

CANN/ops-blas tpmv算子测试

tpmv算子实现 【免费下载链接】ops-blas 本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。 项目地址: https://gitcode.com/cann/ops-blas 概述 BLAS tpmv算子实现。 tpmv(Triangular Packed Matrix-Vector Multiplication)算子实现了三角矩阵与向量的…

作者头像 李华
网站建设 2026/5/9 15:35:45

GTA5线上小助手:模块化架构设计与高效游戏体验提升方案

GTA5线上小助手&#xff1a;模块化架构设计与高效游戏体验提升方案 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools GTA5线上小助手是一款专为《侠盗猎车手5》线上模式设计的开源辅助工具&#xff0c;通…

作者头像 李华
网站建设 2026/5/9 15:35:35

CANN/oam-tools HCCL测试工具

HCCL Test 【免费下载链接】oam-tools 本项目为开发者提供故障定位工具&#xff0c;包含故障信息收集&#xff0c;软硬件信息展示&#xff0c;AI core error报错分析等能力&#xff0c;提升故障问题定位效率&#xff0c;文档可在昇腾社区搜索“故障处理简介”&#xff08;选择社…

作者头像 李华
网站建设 2026/5/9 15:35:29

医疗AI可解释性实践:基于影像的生物年龄预测与XAI技术解析

1. 项目概述&#xff1a;当AI预测你的年龄&#xff0c;我们如何相信它&#xff1f;最近几年&#xff0c;AI在医疗健康领域的应用越来越火&#xff0c;从辅助诊断到药物研发&#xff0c;似乎无所不能。但有一个问题始终困扰着医生和研究者&#xff1a;AI模型很多时候像个“黑箱”…

作者头像 李华
网站建设 2026/5/9 15:34:59

CANN基础算子贡献指南

贡献指南 【免费下载链接】community 本项目是CANN开源社区的核心管理仓库&#xff0c;包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息 项目地址: https://gitcode.com/cann/community 本项目欢迎广大开发者体验并参与贡献&#xff0c;在参与社区贡献…

作者头像 李华