概述
本节将以Add算子为例,带您快速构建Ascend C矢量算子程序,并学习矢量算子开发的典型场景以及处理方式。涉及的场景包括:
- 基础矢量算子:开发一个简单的Add矢量算子。
- TBuf的使用:在算子计算过程中使用临时空间存储运算的中间结果。
- 多核Tiling切分:当算子需要多核并行计算或支持动态shape时,对输入数据进行切分、分块计算,并将不同数据块分配到多个AI Core上处理。
- DoubleBuffer场景:开启double buffer,算子中的多条流水并行执行。
- Broadcast场景:算子中两个输入的shape(形状)不相等,需要将一个输入的shape进行Broadcast(广播)后,再执行计算。
- 非对齐场景:更多数据非32字节对齐场景的处理方案。
注意 进行数据搬运和Vector计算时,对于搬运的数据长度和操作数的起始地址有如下的对齐要求:
- 使用DataCopy接口进行数据搬运,搬运的数据长度和操作数在Unified Buffer(UB)上的起始地址必须保证32字节对齐。
- 通常情况下,进行Vector计算时,操作数的起始地址必须保证32字节对齐,执行计算的基本单位为32字节。