matmul与inplaceAdd融合
产品支持情况
| 
          硬件型号  | 
        
          是否支持  | 
       
|---|---|
| 
          | 
        
          √  | 
       
| 
          | 
        
          √  | 
       
| 
          | 
        
          x  | 
       
| 
          | 
        
          x  | 
       
| 
          | 
        
          x  | 
       
功能概述
矩阵乘matmul与inplaceAdd融合,将矩阵乘结果累加到累加矩阵上,相较于算子拼接的方案,性能较优。
计算公式
矩阵乘输入两个张量A(x)和B(weight),累加张量为C(accum),同时也是输出张量:

参数配置
| 
          成员名称  | 
        
          取值范围  | 
        
          特殊说明  | 
       
|---|---|---|
| 
          transposeA  | 
        
          false/true  | 
        
          取值为true时,不支持部分场景,详见规格说明。 当输入数据类型为float16时,不支持transposeA为true。  | 
       
| 
          transposeB  | 
        
          false/true  | 
        
          -  | 
       
| 
          hasBias  | 
        
          false  | 
        
          -  | 
       
| 
          outDataType  | 
        
          ACL_DT_UNDEFINED  | 
        
          -  | 
       
| 
          enAccum  | 
        
          true  | 
        
          -  | 
       
| 
          matmulType  | 
        
          MATMUL_UNDEFINED  | 
        
          -  | 
       
| 
          quantMode  | 
        
          QUANT_UNDEFINED  | 
        
          -  | 
       
输入
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          x  | 
        
          [m, k]/[batch, m, k]  | 
        
          float16/bf16  | 
        
          ND  | 
        
          矩阵乘的A矩阵。  | 
       
| 
          weight  | 
        
          [k, n]/[batch, k, n]  | 
        
          float16/bf16  | 
        
          ND  | 
        
          矩阵乘的B矩阵,权重。  | 
       
| 
          accum  | 
        
          [m, n]/[batch, m, n]  | 
        
          float  | 
        
          ND  | 
        
          累加矩阵。  | 
       
输出
| 
          参数  | 
        
          维度  | 
        
          数据类型  | 
        
          格式  | 
        
          描述  | 
       
|---|---|---|---|---|
| 
          output  | 
        
          [m, n]/[batch, m, n]  | 
        
          float  | 
        
          ND  | 
        
          累加矩阵,与accum为同一个Tensor,即计算结果原地写。  | 
       
规格说明
由于输入输出的排列组合约束较复杂,下表列举了所有输入输出属性的组合,表格中没有的组合即不支持:
    “transposeA”取值为true时,不支持组合2、5、8、11。
OP使用与典型场景
OP使用时,可参考算子使用指导中的使用流程部分,其中,单算子构造Operation参数的构造方法参考以下参数构造部分。
// 参数构造 atb::infer::LinearParam param; param.transposeA = false; param.transposeB = false; param.hasBias = false; param.outDataType = ACL_DT_UNDEFINED; param.enAccum = true; param.matmulType = MATMUL_UNDEFINED; param.quantMode = QUANT_UNDEFINED;
# 计算示例
>>> x
tensor([[1, 2],
        [3, 4]])
>>> weight
tensor([[1, 2, 3],
        [4, 5, 6]])
>>> accum
tensor([[1, 2, 3],
        [4, 5, 6])
>>> output
tensor([[10, 14, 18],
        [23, 31, 39]])
# 10 = 1 * 1 + 2 * 4 + 1
# 14 = 1 * 2 + 2 * 5 + 2
# 18 = 1 * 3 + 2 * 6 + 3
# 23 = 3 * 1 + 4 * 4 + 4
# 31 = 3 * 2 + 4 * 5 + 5
# 39 = 3 * 3 + 4 * 6 + 6
   功能约束
- “transposeA”为true时不支持部分场景。
 - “hasBias”为false。
 - “outDataType”为ACL_DT_UNDEFINED。
 - “enAccum”为true。