上述两种类型之外的算子,我们根据计算类型来进行分类,具体地:
我们提出根据计算模式对深度学习算子进行分类的方法。它的核心概念在于输出张量中的每个元素和输入张量中每个输入元素之间的依赖关系。我们首先将输入张量和输出张量展平为一维向量,这样至少有以下两个方面的好处:依赖关系不受具体张量维度和布局影响,依赖关系可以使用一个二维依赖矩阵来表达,每一行为输出张量中的元素,每一列为输入张量中的元素,如果有依赖,对应位置置为1,其余位置置为0。展开为一维向量,与实际物理内存中元素所占内存空间排布类似,更容易反映访存类型。接下来,我们以三种基础的计算展示二维依赖矩阵。
Element-wise类,它的依赖矩阵的形式为对角矩阵:
\[\begin{split} \begin{Bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
0&0&0&1
\end{Bmatrix} \end{split}\]
Broadcast类,它的依赖矩阵为竖线:
\[\begin{split}\begin{Bmatrix}
1 & 0 \\
1 & 0 \\
0 & 1 \\
0 & 1
\end{Bmatrix}\end{split}\]
Reduce类,它的依赖矩阵为横线:
\[\begin{split}\begin{Bmatrix}
0 & 0 & 1 & 1\\
1 & 1 & 0 & 0 \\
\end{Bmatrix}\end{split}\]
Composite类,由上述三种基础类型组合而成