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

CANN/asc-devkit多核Tiling切分概述

概述

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

Ascend C核函数是运行在一个核上的处理函数,上述介绍的基础矢量算子与TBuf的使用样例均为在单核上运行的算子,不涉及Host侧Tiling实现。矢量算子实现的组成如下图所示。

为了提高算子的执行效率,通常在算子中实现多核并行计算,即对输入数据进行切分,并将不同的数据块分配到不同的核上处理。此外,由于单个核上内部存储Local Memory大小有限,存在无法一次完整地容纳算子的输入和输出数据的场景,因此需要每次搬运一部分输入进行计算然后搬出,再搬运下一部分输入进行计算,直到获得最终的完整结果,这个数据切分、分块计算的过程称之为Tiling。切分数据的算法称为Tiling算法或者Tiling策略。根据算子的shape等信息来确定数据切分算法相关参数(比如每次搬运的块大小,以及总共循环多少次)的计算程序,称之为Tiling实现,也叫Tiling函数(Tiling Function)。由于Tiling实现中完成的均为标量计算,AI Core并不擅长,所以我们将其独立出来放在Host侧CPU上执行。核函数内部通过解析Host侧传入的Tiling结构体获取Tiling信息,根据Tiling信息控制数据搬入、搬出Local Memory的流程;通过调用计算、数据搬运、内存管理、任务同步API,实现算子逻辑。

图1算子实现组成
![](https://raw.gitcode.com/cann/asc-devkit/raw/258f0725972f41f1a23d1fcda692fd94f2d443ce/docs/zh/guide/figures/算子实现组成.png "算子实现组成"?utm_source=gitcode_repo_files)

由于硬件限制,在对输入数据进行数据切分时应遵循以下几个原则:

  1. 由于AI Core中Unified Buffer上的物理限制,要求Unified Buffer上的数据存储空间必须保持32字节对齐。

    • 输入数据不满足32字节对齐时,需要取输入数据长度向上对齐到32字节的长度作为输入数据总长度。
    • 进行Tiling有关计算时,以32字节为最小单位进行计算。
  2. 尽可能最大利用Unified Buffer空间。

    AI Core与外部存储交互时会产生性能开销,频繁的进行数据搬运会导致性能瓶颈,因此应尽可能充分利用Unified Buffer空间,减少从Global Memory上搬运数据的次数。

  3. AI处理器包含多个AI Core,应该充分均衡利用多核计算能力,将计算均衡分配到多个AI Core上。

本章将基于以上原则对几种典型场景进行说明。

图2多核及Tiling示意图
![](https://raw.gitcode.com/cann/asc-devkit/raw/258f0725972f41f1a23d1fcda692fd94f2d443ce/docs/zh/guide/figures/多核及Tiling示意图.png "多核及Tiling示意图"?utm_source=gitcode_repo_files)

数据切分示意如上图所示,将长度为TOTAL_LENGTH的算子输入分配到多个核上进行计算,每个核上计算的数据长度为BLOCK_LENGTH。对于每个核的计算数据,基于Local Memory的大小进一步切分,切分数据块的个数为TILE_NUM,得到的每个数据块的长度为TILE_LENGTH。

根据每个核计算的数据量是否相同、核内每个数据块的数据量是否相同,切分策略可能会存在以下几种场景:

  1. 核间均分,核内均分:每个核处理的数据量相同,核内每个数据块的数据量相同。在此场景中,通过多核Tiling将数据均匀分配到各个核上执行,每个核上每次计算的数据长度相同。
  2. 核间均分,核内不均分:每个核处理的数据量相同,核内各数据块的数据量不完全相同。此场景基于多核Tiling,核内数据不能切分为多个数据量相同且32字节对齐的数据块,需要通过尾块Tiling处理尾块数据的计算。
  3. 核间不均分,核内均分:每个核处理的数据量不同,核内每个数据块的数据量相同。在此场景中,通过尾核Tiling的处理解决数据无法在各核间均匀分配的问题。
  4. 核间不均分,核内不均分:每个核处理的数据量不同,核内各数据块的数据量不完全相同。该场景下需要同时考虑尾核&尾块,处理多核间及核内数据的合理切分。

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

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

http://www.jsqmd.com/news/1212628/

相关文章:

  • 青岛劳力士原厂官方售后服务中心|真伪维修网点辨别官方公示(2026 年 7 月最新) - 劳力士售后服务官网
  • 苏州积家回收价格查询和各大平台实测排行(2026年7月最新) - 天价名表回收平台
  • 10分钟上手Eflatun.SceneReference:从安装到实现场景跳转全流程
  • 不想进厂打工?武汉科谷技工学校这几个专业不用进厂、环境还好 - 升学择校早知道
  • 如何高效部署COLMAP三维重建工具:从零到生产的完整指南
  • 5分钟掌握跨平台输入法词库转换:深蓝词库转换完全指南
  • 告别输入法束缚:深蓝词库转换器带你实现跨平台词库自由
  • 阴阳师百鬼夜行自动化脚本终极指南:告别手动砸豆,轻松收集式神碎片
  • 从0到1搭建Rix开发环境:超简单Makefile构建与环境配置教程
  • kvcached路线图:未来功能规划与技术发展方向
  • 2026 迪奥早春限定包袋 中检奢侈品鉴定中心全程核验 - 商业每日快报
  • ReconPi自动化侦察:daily脚本与Cron任务设置,实现24小时监控
  • 深入解析EDMA中断与事件寄存器:从概念到实战调试
  • 如何在个人电脑上实现专业级音频转录?Buzz离线转录工具完整指南
  • 天津大型黄金回收靠谱公司,正规门店变现避坑注意事项 - 日常比对手册
  • 重庆渝中区老牌建材店!20年老店,建材采购+施工一站式搞定 - 林州鸿途网络
  • CANN/asc-devkit分离模式矩阵乘法实现
  • KMP 全栈开发:从 Android 到 AI Agent(一)
  • 如何快速在React Native应用中实现Facebook风格的骨架屏加载动画
  • Litarvan主题实战案例:打造个性化Linux登录界面的3个创意方案
  • 深入解析向量中断管理器:嵌入式实时系统中断性能优化实战
  • 张恒汝的个人简介
  • 郑州闲置首饰便捷变现:2026上门回收规则解读与最优变现方式 - 全国二奢机构参考
  • 2026 上海品牌首饰回收上门服务哪家强?全城免费上门 + 当场转账门店排名 - 易奢福
  • TI平台MIPI CSI-2时钟与寄存器配置实战指南
  • CANN/asc-devkit assert断言接口
  • STM32-红外遥控控制原理与示例(源码)
  • 2026舒尔全国总代客户口碑力荐 高认可度避坑优选 - myqiye
  • Unity Addressables完美搭档:Eflatun.SceneReference地址管理高级技巧
  • IE8linter实战教程:5个常见IE8兼容性问题及解决方案