DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_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 独立矩阵乘法。

Dequantize 函数

f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale

Quantize 函数

f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)

语法

struct DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC {
  const DML_TENSOR_DESC *ATensor;
  const DML_TENSOR_DESC *AScaleTensor;
  const DML_TENSOR_DESC *AZeroPointTensor;
  const DML_TENSOR_DESC *BTensor;
  const DML_TENSOR_DESC *BScaleTensor;
  const DML_TENSOR_DESC *BZeroPointTensor;
  const DML_TENSOR_DESC *OutputScaleTensor;
  const DML_TENSOR_DESC *OutputZeroPointTensor;
  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 }。 这些缩放值用于取消量化 A 值。

注意

小数位数值为 0 会导致未定义的行为。

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 值。

注意

小数位数值为 0 会导致未定义的行为。

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 值的量化。

注意

小数位数值为 0 会导致未定义的行为。

OutputZeroPointTensor

类型:_Maybenull_ const DML_TENSOR_DESC*

一个可选张量,其中包含 OutputTensor 零点数据。 如果需要每张量量化,则 OutputZeroPointTensor 的预期维度 { 1, 1, 1, 1 };如果需要每行量化,则 { 1, 1, M, 1 }。 此零点值用于取消 OutputTensor 值的量化。

OutputTensor

类型:const DML_TENSOR_DESC*

要向其写入结果的张量。 此张量的尺寸 { BatchCount, ChannelCount, M, N }

可用性

此运算符是在 DML_FEATURE_LEVEL_2_1中引入的。

Tensor 约束

  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorOutputZeroPointTensor 必须具有相同 的 dimensionCount
  • ATensorBTensorOutputTensor 必须具有相同 DimensionCount
  • BTensorBZeroPointTensor 必须具有相同的 DataType
  • OutputTensorOutputZeroPointTensor 必须具有相同的 DataType
  • AScaleTensorAZeroPointTensorBScaleTensorBZeroPointTensorOutputScaleTensorOutputZeroPointTensor 必须具有相同 的 dimensionCount
  • ATensorAZeroPointTensor 必须具有相同的 DataType

Tensor 支持

DML_FEATURE_LEVEL_4_0及更高版本

张肌 支持的维度计数 支持的数据类型
ATensor 输入 2 到 4 INT8、UINT8
AScaleTensor 输入 1 到 4 FLOAT32
AZeroPointTensor 可选输入 1 到 4 INT8、UINT8
BTensor 输入 2 到 4 INT8、UINT8
BScaleTensor 输入 1 到 4 FLOAT32
BZeroPointTensor 可选输入 1 到 4 INT8、UINT8
OutputScaleTensor 输入 1 到 4 FLOAT32
OutputZeroPointTensor 可选输入 1 到 4 INT8、UINT8
OutputTensor 输出 2 到 4 INT8、UINT8

DML_FEATURE_LEVEL_2_1及更高版本

张肌 支持的维度计数 支持的数据类型
ATensor 输入 4 INT8、UINT8
AScaleTensor 输入 4 FLOAT32
AZeroPointTensor 可选输入 4 INT8、UINT8
BTensor 输入 4 INT8、UINT8
BScaleTensor 输入 4 FLOAT32
BZeroPointTensor 可选输入 4 INT8、UINT8
OutputScaleTensor 输入 4 FLOAT32
OutputZeroPointTensor 可选输入 4 INT8、UINT8
OutputTensor 输出 4 INT8、UINT8

要求

要求 价值
最低支持的客户端 Windows 10 内部版本 20348
支持的最低服务器 Windows 10 内部版本 20348
标头 directml.h