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

发布时间:2026/7/18 10:25:53

CANN/asc-devkit多核Tiling切分概述 概述【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitAscend 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_sourcegitcode_repo_files)由于硬件限制在对输入数据进行数据切分时应遵循以下几个原则由于AI Core中Unified Buffer上的物理限制要求Unified Buffer上的数据存储空间必须保持32字节对齐。输入数据不满足32字节对齐时需要取输入数据长度向上对齐到32字节的长度作为输入数据总长度。进行Tiling有关计算时以32字节为最小单位进行计算。尽可能最大利用Unified Buffer空间。AI Core与外部存储交互时会产生性能开销频繁的进行数据搬运会导致性能瓶颈因此应尽可能充分利用Unified Buffer空间减少从Global Memory上搬运数据的次数。AI处理器包含多个AI Core应该充分均衡利用多核计算能力将计算均衡分配到多个AI Core上。本章将基于以上原则对几种典型场景进行说明。图2多核及Tiling示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/258f0725972f41f1a23d1fcda692fd94f2d443ce/docs/zh/guide/figures/多核及Tiling示意图.png 多核及Tiling示意图?utm_sourcegitcode_repo_files)数据切分示意如上图所示将长度为TOTAL_LENGTH的算子输入分配到多个核上进行计算每个核上计算的数据长度为BLOCK_LENGTH。对于每个核的计算数据基于Local Memory的大小进一步切分切分数据块的个数为TILE_NUM得到的每个数据块的长度为TILE_LENGTH。根据每个核计算的数据量是否相同、核内每个数据块的数据量是否相同切分策略可能会存在以下几种场景核间均分核内均分每个核处理的数据量相同核内每个数据块的数据量相同。在此场景中通过多核Tiling将数据均匀分配到各个核上执行每个核上每次计算的数据长度相同。核间均分核内不均分每个核处理的数据量相同核内各数据块的数据量不完全相同。此场景基于多核Tiling核内数据不能切分为多个数据量相同且32字节对齐的数据块需要通过尾块Tiling处理尾块数据的计算。核间不均分核内均分每个核处理的数据量不同核内每个数据块的数据量相同。在此场景中通过尾核Tiling的处理解决数据无法在各核间均匀分配的问题。核间不均分核内不均分每个核处理的数据量不同核内各数据块的数据量不完全相同。该场景下需要同时考虑尾核尾块处理多核间及核内数据的合理切分。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻