工作原理
算子下发过程

输出shape推导(inferShape)
shape推导(inferShape)的作用是由输入的shape+属性推输出shape和数据类型dtype。
例如:矩阵乘Matmul的左矩阵tensorA是M*K,右矩阵tensorB是K*N,inferShape的结果是M*N,如下图所示。
在输入数据类型为float16场景下,输出数据类型默认float16。
图1 shape推导示例


Tiling
大多数情况下,单个AI Core存在存储空间有限,算子的输入数据无法一次完全载入完成计算,需要将输入切分成多块,分块完成计算,这个过程称为Tiling,数据切分的算法称为Tiling算法或者Tiling策略。
Tiling策略对复杂算子的性能影响巨大, 同一个算子在不同Tiling策略下可能有10倍性能差异。
图2 Tiling示例


获取workspace大小
workspace:算子内部有时需要通过额外的device内存进行数据交换或者缓存,需要在算子实际执行前分配好。通常存在两种使用场景:
1. 需要使用Unified Buffer和L1 Buffer上空间且空间不够用时,可以将数据暂存至workspace上。
2. 调用其他API接口时,需要workspace作为入参。
通常Tiling和workspace是一起计算的。
图3 workspace示例


算子下发LaunchKernel
图4 算子下发示意


算子执行
图5 算子执行示意图


父主题: 进阶专题