DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC 结构 (directml.h)
对整数输入张量数据执行矩阵乘法函数,并生成浮点输出。
此运算符要求矩阵将输入张量相乘得到 4D 张量,格式为 { BatchCount, ChannelCount, Height, Width }
。 矩阵乘法运算符将执行 BatchCount * ChannelCount 数量的独立矩阵乘法。
例如,如果 ATensor 的大小为 { BatchCount, ChannelCount, M, K }
,而 BTensor 的大小为 { BatchCount, ChannelCount, K, N }
,OutputTensor 的大小为 { BatchCount, ChannelCount, M, N }
,则矩阵乘法运算符将执行维度 {M,K} x {K,N} = {M,N} 的 BatchCount * ChannelCount 独立矩阵乘法。
重要
此 API 作为 DirectML 独立可再发行组件包的一部分提供(请参阅 Microsoft.AI.DirectML 版本 1.13 及更高版本。 另请参阅 DirectML 版本历史记录。
语法
struct DML_MATRIX_MULTIPLY_INTEGER_TO_FLOAT_OPERATOR_DESC
{
const DML_TENSOR_DESC* ATensor;
const DML_TENSOR_DESC* AScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* AZeroPointTensor;
const DML_TENSOR_DESC* BTensor;
const DML_TENSOR_DESC* BScaleTensor;
_Maybenull_ const DML_TENSOR_DESC* BZeroPointTensor;
_Maybenull_ const DML_TENSOR_DESC* BiasTensor;
const DML_TENSOR_DESC* OutputTensor;
};
成员
ATensor
类型:const DML_TENSOR_DESC*
包含 A 数据的张量。 此张量的大小应为 { BatchCount, ChannelCount, M, K }
。
AScaleTensor
类型:const DML_TENSOR_DESC*
包含 ATensor 刻度数据的张量。 如果需要按张量量化,则 AScaleTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, M, 1 }
。 这些刻度值用于对 ATensor 值进行去量化。
AZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含 ATensor 零点数据的可选张量。 如果需要按张量量化,则 AZeroPointTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, M, 1 }
。 这些零点值用于对 ATensor 值进行去量化。
BTensor
类型:const DML_TENSOR_DESC*
包含 B 数据的张量。 此张量的大小应为 { BatchCount, ChannelCount, K, N }
。
BScaleTensor
类型:const DML_TENSOR_DESC*
包含 BTensor 刻度数据的张量。 如果需要按张量量化,则 BScaleTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, 1, N }
。 这些刻度值用于对 BTensor 值进行去量化。
BZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含 BTensor 零点数据的可选张量。 如果需要按张量量化,则 BZeroPointTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, 1, N }
。 这些零点值用于对 BTensor 值进行去量化。
OutputScaleTensor
类型:const DML_TENSOR_DESC*
包含 OutputTensor 刻度数据的张量。 如果需要按张量量化,则 OutputScaleTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, M, 1 }
。 此刻度值用于对 OutputTensor 值进行去量化。
OutputZeroPointTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含 OutputTensor 零点数据的可选张量。 如果需要按张量量化,则 OutputZeroPointTensor 的预期维度为 { 1, 1, 1, 1 }
,或者如果需要每行量化,则预期维度为 { 1, 1, M, 1 }
。 此零点值用于对 OutputTensor 值进行去量化。
BiasTensor
类型:_Maybenull_ const DML_TENSOR_DESC*
包含偏差数据的可选张量。 如果提供,则此张量的大小应与输出大小 { BatchCount, ChannelCount, M, N }
相匹配。
OutputTensor
类型:const DML_TENSOR_DESC*
要写入结果的张量。 此张量的维度为 { BatchCount, ChannelCount, M, N }
。
可用性
此运算符是在 DML_FEATURE_LEVEL_6_2 中引入的。
张量约束
- AScaleTensor、AZeroPointTensor、BScaleTensor 和 BZeroPointTensor 必须具有相同的 DimensionCount。
- ATensor、BiasTensor、BTensor 和 OutputTensor 必须具有相同的 DimensionCount。
- BiasTensor 和 OutputTensor 必须具有相同的 Sizes。
- ATensor、AZeroPointTensor、BTensor 和 BZeroPointTensor 必须具有相同的 DataType。
- AScaleTensor、BiasTensor、BScaleTensor 和 OutputTensor 必须具有相同的 DataType。
张量支持
张量 | 种类 | 维度 | 支持的维度计数 | 支持的数据类型 |
---|---|---|---|---|
ATensor | 输入 | { [BatchCount], [ChannelCount], M, K } | 2 到 4 | INT32、INT16、INT8、UINT32、UINT16、UINT8 |
AScaleTensor | 输入 | { AScaleDimensions[] } | 1 到 4 | FLOAT32、FLOAT16 |
AZeroPointTensor | 可选输入 | { [1], [1], AZeroPointCount, [1] } | 1 到 4 | INT32、INT16、INT8、UINT32、UINT16、UINT8 |
BTensor | 输入 | { [BatchCount], [ChannelCount], K, N } | 2 到 4 | INT32、INT16、INT8、UINT32、UINT16、UINT8 |
BScaleTensor | 输入 | { BScaleDimensions[] } | 1 到 4 | FLOAT32、FLOAT16 |
BZeroPointTensor | 可选输入 | { [1], [1], [1], BZeroPointCount } | 1 到 4 | INT32、INT16、INT8、UINT32、UINT16、UINT8 |
BiasTensor | 可选输入 | { [BatchCount], [ChannelCount], M, N } | 2 到 4 | FLOAT32、FLOAT16 |
OutputTensor | 输出 | { [BatchCount], [ChannelCount], M, N } | 2 到 4 | FLOAT32、FLOAT16 |
要求
页眉 | directml.h |