Skip to content

概述

本节将以Add算子为例,带您快速构建Ascend C矢量算子程序,并学习矢量算子开发的典型场景以及处理方式。涉及的场景包括:

  • 基础矢量算子:开发一个简单的Add矢量算子。
  • TBuf的使用:在算子计算过程中使用临时空间存储运算的中间结果。
  • 多核Tiling切分:当算子需要多核并行计算或支持动态shape时,对输入数据进行切分、分块计算,并将不同数据块分配到多个AI Core上处理。
    • 主块均分:算子在AI处理器的多个核上运行,所有核的计算数据量相等且32字节对齐。
    • 尾块均分:算子在AI处理器的多个核上运行,所有核的计算数据量相等,每个核上除最后一个数据块(尾块)外,其余数据块的数据量相等,每个核都需要处理尾块数据的计算。
    • 尾核切分:算子在AI处理器的多个核上运行,数据无法平均分配到每个核。将所有核分为多个整核和多个尾核,整核的计算数据量相等,尾核的计算数据量相等。
    • 尾核尾块切分:算子在AI处理器的多个核上运行,数据无法平均分配到每个核,同时每个核内的数据无法均分,除最后一个数据块(尾块)外,其余数据块的数据量相等,每个核都需要单独处理尾块数据的计算。
  • DoubleBuffer场景:开启double buffer,算子中的多条流水并行执行。
  • Broadcast场景:算子中两个输入的shape(形状)不相等,需要将一个输入的shape进行Broadcast(广播)后,再执行计算。
  • 非对齐场景:更多数据非32字节对齐场景的处理方案。

注意 进行数据搬运和Vector计算时,对于搬运的数据长度和操作数的起始地址有如下的对齐要求:

  • 使用DataCopy接口进行数据搬运,搬运的数据长度和操作数在Unified Buffer(UB)上的起始地址必须保证32字节对齐。
  • 通常情况下,进行Vector计算时,操作数的起始地址必须保证32字节对齐,执行计算的基本单位为32字节。

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区