参数列表
成员名称 |
类型 |
默认值 |
取值范围 |
描述 |
---|---|---|---|---|
transposeA |
bool |
false |
false/true |
是否需要对A矩阵进行行列转置。取值为true时进行转置,否则不转置。 |
transposeB |
bool |
true |
false/true |
是否需要对B矩阵进行行列转置。取值为true时进行转置,否则不转置。 |
hasBias |
bool |
true |
false/true |
是否叠加偏置。取值为true时叠加偏置,否则不叠加。 |
outDataType |
aclDataType |
ACL_DT_UNDEFINED |
ACL_DT_UNDEFINED/ACL_FLOAT16/ACL_BF16 |
指定输出tensor的数据类型。 |
enAccum |
bool |
false |
false/true |
是否使能累加,即matmul+inplace add融合场景。 |
rsv[23] |
uint8_t |
{0} |
- |
预留参数。 |
详细说明
transposeA和transposeB
- 根据transposeA和transposeB的配置,转置后的A矩阵和B矩阵shape需满足矩阵乘维度关系;
- transposeA和transposeB的取值在部分功能中存在约束;
- transposeA和transposeB可用于提升特殊场景下算子性能,收益根据shape动态变化。以常规矩阵乘为例,假设A矩阵和B矩阵的shape分别为[m, k]和[k, n]:
- 当m为256的整数倍且k不为256的整数倍时,配置transposeA为true,将A矩阵进行行列转置,可提升性能,此时A矩阵shape为[k, m];
- 当k为256的整数倍且n不为256的整数倍时,配置transposeB为true,将B矩阵进行行列转置,可提升性能,此时B矩阵shape为[n, k]。
- 后文进行功能描述时,默认为transposeA与transposeB取值均为false的情况,维度对应关系如下表:
A矩阵原维度
transposeA为true时A矩阵维度
[m, k]
[k, m]
[batch, m, k]
[batch, k, m]
B矩阵原维度
transposeB为true时B矩阵维度
[k, n]
[n, k]
[batch, k, n]
[batch, n, k]
[1, n / 16, k, 16]
[1, k / 16, n, 16]
[batch, n / 16, k, 16]
[batch, k / 16, n, 16]
[1, n / 32, k, 32]
[1, k / 32, n, 32]
[batch, n / 32, k, 32]
[batch, k / 32, n, 32]
hasBias
- 当enAccum配置为true时,hasBias仅支持配置为false;
- hasBias的取值在部分功能中存在约束。
outDataType
在反量化场景中,配置为输出tensor的数据类型,目前支持ACL_FLOAT16/ACL_BF16;否则,在其他场景中,配置为默认值ACL_DT_UNDEFINED。
enAccum
- 当hasBias配置为true时,enAccum仅支持配置为false;
- 该参数配置为true时,触发matmul + inplaceAdd融合功能,该功能具体设计与约束参考matmul与inplaceAdd融合。