当前位置: 首页 > news >正文

ops-nn Tiling策略详解:张量切分与并行调度的核心机制和3大交付件

ops-nn Tiling策略详解:张量切分与并行调度的核心机制和3大交付件

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

ops-nn 是 CANN 提供的神经网络类计算算子库,用于实现网络在 NPU 上的加速计算。而在每个算子跑上 NPU 之前,都绕不开一个关键环节——Tiling(张量切分):把大张量切成小块、分配给成百上千个 AI Core 并行计算。本文将带你快速搞懂 Tiling 的核心机制,并盘点它的3 大交付件

为什么NPU算子必须要做Tiling?

NPU 由多个AI Core组成,每个核内部都有片上存储空间(UB,Unified Buffer),但它比显存小得多,无法一次性把整个张量加载进来计算。因此必须把输入张量切分为多个小块(Tile),逐块搬运、逐块计算。

用一句话概括 Tiling 的职责:

Tiling 策略 = 决定「怎么切」+「谁来切」+「每块多大」,并把这些决策告诉 Kernel。

Tiling 运行在 Host 侧(CPU),Kernel 运行在 Device 侧(NPU)。两者之间不直接通信,而是通过TilingData结构体传递信息——Tiling 算好参数写进去,Kernel 读出来执行。

一条流水线:从Tiling到Kernel并行执行

整个协作流程可以拆成 4 步:

  1. 查硬件家底:Tiling 入口函数(TilingFunc)先获取平台信息——可用 AI Core 核数(coreNum)和单核 UB 大小(ubSize)。
  2. 核间切分(Block Tiling):把总数据量平均分配给各核,「优先用更多的核并行计算」。
  3. 核内切分(UB Tiling):根据 UB 容量和双缓冲等流水需求,算出每核每次可搬运的数据块大小。
  4. 下发决策:把切分参数写入TilingData,通过SetBlockDim设置实际启用的核数,并通过TilingKey标识本次选择的具体算法路径。

Kernel 侧收到后,用GetBlockIdx()找到自己的数据段,循环执行「搬入 → 计算 → 搬出」流水线,即可并行跑满全卡。

3大交付件清单:一次看懂Tiling要写什么

一个标准算子的 Tiling 实现,一共需要3 个交付件

#交付件所在目录职责
1${op_name}_tiling.cppop_host/Tiling 主切分逻辑,核心计算都在这里
2${op_name}_tiling_key.hop_kernel/定义 TilingKey,标识不同的切分/算法分支
3${op_name}_tiling_data.hop_kernel/定义 TilingData 结构体,存储块大小、并行度等配置

三个文件各有分工,缺一不可:

  • tiling.cpp是「大脑」:完成平台信息获取、shape 校验、核切分与 UB 切分计算,最终注册 Tiling 函数。
  • tiling_key.h是「路标」:同一个算子可能有 float 路径、int 路径、不同架构路径,Kernel 侧依据 TilingKey 走不同的if constexpr分支,选择对应的实现。
  • tiling_data.h是「契约」:Tiling 侧写入、Kernel 侧读取,是两侧唯一的参数传递通道,例如:
// ${op_name}_tiling_data.h struct ${op_name}TilingData { int64_t totalLength; // 总数据量大小 int64_t tileNum; // 每个核的数据切块数量 };

完整目录说明可参考 项目目录结构文档,其中详细标注了${op_name}_tiling.cpp${op_name}_tiling_key.h${op_name}_tiling_data.h各自的位置与用途。

实战拆解:以AddExample为例的Tiling流程

官方在 examples/add_example 目录给出了完整的加法算子样例,是学习 Tiling 的最佳起点。它的核心 Tiling 函数 add_example_tiling.cpp 流程如下:

  1. GetPlatformInfo:获取ubSize(UB 大小)与coreNum(AIV 核数);
  2. GetShapeAttrsInfo:校验输入输出 shape 均为 4 维,提取总元素数totalIdx与数据类型;
  3. 核切分blockFactor = CeilDiv(totalIdx, coreNum),算出每个核处理的元素数,并用SetBlockDim(usedCoreNum)启用对应核数;
  4. UB 切分:考虑 2 输入 + 1 输出、双缓冲共 6 块 UB 缓冲区,计算ubFactor
  5. 设置 TilingKeyFLOAT类型走SCH_MODE_0INT32类型走SCH_MODE_1

最终生成的 AddExampleTilingData 只有三个字段,麻雀虽小五脏俱全:

struct AddExampleTilingData { int64_t totalNum = 0; // 总元素数 int64_t blockFactor = 0; // 每核元素数(核间切分) int64_t ubFactor = 0; // 单核单次搬运块大小(核内切分) };

对应的分支路由定义在 add_example_tiling_key.h 中,Kernel 入口 add_example.cpp 通过if constexpr (schMode == ...)选择 float/int32 不同实现,完成调度。

新手上手建议:如何验证你的Tiling写对了

  • 先读样例再动手:AI Core算子开发指南 中的 Tiling 章节给出了完整的代码骨架,包括TilingParse(图模式交付件,无逻辑时可置空)与TilingFunc(主入口)的标准写法。
  • Tiling 与 Kernel 严格对齐tiling_data.h中的每个字段都要在 Kernel 的Init中被消费,字段不一致是新手最常见的踩坑点。
  • 补齐 Tiling UT:在tests/ut/op_host/test_${op_name}_tiling.cpp中构造输入 shape、属性与 compileInfo,断言输出的 TilingKey、TilingData 与 Workspace 是否符合预期,无需 NPU 环境即可快速验证。

掌握 Tiling 策略,就掌握了 NPU 算子性能的第一把钥匙:切得巧,核核都不闲着;切得糙,再强的硬件也白搭。

【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn

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

http://www.cnnetsun.cn/news/4329467.html

相关文章:

  • 幻影防务 MPX 3.0 安装全指南:从环境检查到启动验证
  • AI生成内容加水印:技术原理、落地挑战与可信互联网的基石
  • 从1946到2023:zip压缩包解压与数据修复全记录
  • Kronos:基于预训练+微调的金融K线时序预测模型实战指南
  • 植物叶片分割数据集构建与模型调优实战:从0.62到0.87
  • 垃圾分类运输路径优化:从VRP建模到遗传算法实战
  • Claude Code编排机械臂实现物理拦截:从风控决策到仿真执行
  • VMware Workstation 16.1.2 安装、虚拟机创建、去虚拟化与彻底卸载指南
  • Umi-OCR 快速上手:免费离线OCR软件,3步搞定截图、批量与PDF识别
  • 为什么值得试试 Ghostty:一款快速、跨平台、GPU 加速终端的实践指南
  • FBG反射谱与透射谱的Matlab仿真:从传输矩阵到调参避坑
  • ai-memory用Copilot和OpenAI OAuth:零API Key配置订阅账号指南
  • 3分钟部署Shannon:Docker跑通AI渗透测试环境
  • RMA距离徙动算法详解:从原理到Matlab成像实现
  • 51单片机节日彩灯控制器设计与Proteus仿真实战
  • stitch-skills stitch-loop完全指南:一个提示词构建多页网站
  • YOLOv8-Pose驾驶员疲劳检测系统实战:从数据标注到UI界面
  • 国内B2C电商脱敏数据集:设计思路、脱敏方案与实战场景
  • STM32+MAX30102实现心率血氧检测与OLED显示实战
  • Matlab调用SBDART做辐射传输计算:从原理到实战全解析
  • MATLAB调用SBDART辐射传输模型:从解压到批量跑通
  • Zabbix与Prometheus监控体系实战:从部署到告警全解析
  • 2018迅雷计算机视觉校招笔试解析:基础考点与备考经验
  • 电商比较模块开发实战:从Redis存储到前端动态对比
  • Umi-OCR 实战指南:免费离线 OCR,快速搞定截图、批量图片与 PDF 文字提取
  • PicoPro Glitch一键IDM模板:从参数到故障艺术效果实战
  • Thunderbolt 加密数据线上格式完整解析:__enc:<iv>:<ciphertext> 背后的设计
  • Files.md任务管理:把Chat.md变成无压力待办清单的Later机制详解
  • 闲置设备算力变现:AI算力共享系统技术拆解
  • 4GB 显存够用:DeepSpeed 在 Windows 上跑通全流程的完整指南