基础知识

本节内容为使用高阶API进行矩阵乘法的编程指导。使用高阶API进行实际的矩阵编程时,需要通过Matmul查看确认接口支持的产品型号。

矩阵乘法概述

Matmul的计算公式为:C = A * B + bias,其示意图如下。

矩阵乘法数据流

在了解矩阵乘法数据流之前,需要先回顾一下几个重要的存储逻辑位置的概念:

矩阵乘法数据流指矩阵乘的输入输出在各存储位置间的流向。逻辑位置的数据流向如下图所示(为了简化描述,没有列出bias):

数据格式

在完成Matmul矩阵乘法时,涉及到两种分形格式ND和NZ。

数据分块(Tiling)

[h2]多核切分

为了实现多核并行,需要将矩阵数据进行切分,分配到不同的核上进行处理。切分策略如下图所示:

比如,下图中共有8个核参与计算,将A矩阵沿着M轴划分为4块,将B矩阵沿着N轴切分为两块,单核上仅处理某一分块(比如图中绿色部分为core3上参与计算的数据):SingleCoreM * K大小的A矩阵分块和SingleCoreN* K大小的B矩阵分块相乘得到SingleCoreM * SingleCoreN大小的C矩阵分块。

[h2]核内切分

大多数情况下,Local Memory的存储,无法完整的容纳算子的输入与输出,需要每次搬运一部分输入进行计算然后搬出,再搬运下一部分输入进行计算,直到得到完整的最终结果,也就是需要做核内的输入切分。切分的策略如下所示:

除了baseM, baseN, baseK外,还有一些常用的tiling参数,其含义如下。