矩阵乘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 |
- |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
x |
[m, k]/[batch, m, k] |
float16/bf16 |
ND |
矩阵乘的A矩阵。 |
weight |
[k, n]/[batch, k, n] |
float16/bf16 |
ND |
矩阵乘的B矩阵,权重。 |
bias |
[m, n]/[batch, m, n] |
float |
ND |
累加矩阵。 |
参数 |
维度 |
数据类型 |
格式 |
描述 |
---|---|---|---|---|
output |
[m, n]/[batch, m, n] |
float |
ND |
累加矩阵,与accum为同一个Tensor,即计算结果原地写。 |
由于输入输出的排列组合约束较复杂,下表列举了所有输入输出属性的组合,表格中没有的组合即不支持:
“transposeA”取值为true时,不支持组合2、5、8、11。
OP使用时,可参考算子使用指导中的使用流程部分,其中,单算子(OpsOperation)构造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;
# 计算示例 >>> 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