DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC Struktur (directml.h)
Führt eine Matrixmultiplikationsfunktion für quantisierte Daten aus. Dieser Operator entspricht mathematisch der Dequantisierung der Eingaben, dann der Matrix multiplizieren und dann die Ausgabe quantisieren.
Für diesen Operator muss die Matrix die Eingabe-Tensoren multiplizieren, um 4D zu sein, die als { BatchCount, ChannelCount, Height, Width }
formatiert sind. Der Matrixmultiplikationsoperator führt BatchCount * ChannelCount-Anzahl unabhängiger Matrixmultiplikationen durch.
Wenn z. B. ATensorGrößen{ BatchCount, ChannelCount, M, K }
hat und BTensorGrößen{ BatchCount, ChannelCount, K, N }
hat und Ausgabe Der verfügt über Größen von { BatchCount, ChannelCount, M, N }
. Anschließend führt der Matrixmultiplikationsoperator BatchCount * ChannelCount unabhängige Matrixmultiplikationen von Dimensionen {M,K,N} = {M,N} = {M,N} aus.
Dequantize-Funktion
f(Input, Scale, ZeroPoint) = (Input - ZeroPoint) * Scale
Quantize-Funktion
f(Input, Scale, ZeroPoint) = clamp(round(Input / Scale) + ZeroPoint, Min, Max)
Syntax
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;
};
Angehörige
ATensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die A-Daten enthält. Die Dimensionen dieses Tensors sollten { BatchCount, ChannelCount, M, K }
werden.
AScaleTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die ATensor-Skalierungsdaten enthält. Die erwarteten Dimensionen der AScaleTensor
werden { 1, 1, 1, 1 }
, wenn pro Tensor quantisierung erforderlich ist, oder { 1, 1, M, 1 }
, wenn pro Zeilenquantisierung erforderlich ist. Diese Skalierungswerte werden zum Dequantisieren der A-Werte verwendet.
Anmerkung
Ein Skalierungswert von 0 führt zu einem nicht definierten Verhalten.
AZeroPointTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein optionaler Tensor, der die ATensor- Nullpunktdaten enthält. Die erwarteten Dimensionen des AZeroPointTensor werden { 1, 1, 1, 1 }
, wenn die Quantisierung pro Tensor erforderlich ist, oder { 1, 1, M, 1 }
, wenn pro Zeilenquantisierung erforderlich ist. Diese Nullpunktwerte werden zum Dequantisieren der ATensor-Werte verwendet.
BTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die B-Daten enthält. Die Dimensionen dieses Tensors sollten { BatchCount, ChannelCount, K, N }
werden.
BScaleTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die BTensor- Skalierungsdaten enthält. Die erwarteten Dimensionen der BScaleTensor
werden { 1, 1, 1, 1 }
, wenn pro Tensor-Quantisierung erforderlich ist, oder { 1, 1, 1, N }
, wenn pro Spaltenquantisierung erforderlich ist. Diese Skalierungswerte werden zum Dequantisieren der BTensor--Werte verwendet.
Anmerkung
Ein Skalierungswert von 0 führt zu einem nicht definierten Verhalten.
BZeroPointTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein optionaler Tensor, der die BTensor Nullpunktdaten enthält. Die erwarteten Dimensionen der BZeroPointTensor
werden { 1, 1, 1, 1 }
, wenn pro Tensor-Quantisierung erforderlich ist, oder { 1, 1, 1, N }
, wenn pro Spaltenquantisierung erforderlich ist. Diese Nullpunktwerte werden zum Dequantisieren der BTensor--Werte verwendet.
OutputScaleTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, der die OutputTensor- Skalierungsdaten enthält. Die erwarteten Dimensionen der OutputScaleTensor
werden { 1, 1, 1, 1 }
, wenn die Quantisierung pro Tensor erforderlich ist, oder { 1, 1, M, 1 }
, wenn die Quantisierung pro Zeile erforderlich ist. Dieser Skalierungswert wird zum Dequantisieren der OutputTensor--Werte verwendet.
Anmerkung
Ein Skalierungswert von 0 führt zu einem nicht definierten Verhalten.
OutputZeroPointTensor
Typ: _Maybenull_ const DML_TENSOR_DESC*
Ein optionaler Tensor mit dem OutputTensor Nullpunktdaten. Die erwarteten Dimensionen der OutputZeroPointTensor
werden { 1, 1, 1, 1 }
, wenn die Quantisierung pro Tensor erforderlich ist, oder { 1, 1, M, 1 }
, wenn die Quantisierung pro Zeile erforderlich ist. Dieser Nullpunktwert wird zum Dequantisieren der OutputTensor--Werte verwendet.
OutputTensor
Typ: DML_TENSOR_DESC*
Ein Tensor, in den die Ergebnisse geschrieben werden sollen. Die Dimensionen dieses Tensors sind { BatchCount, ChannelCount, M, N }
.
Verfügbarkeit
Dieser Operator wurde in DML_FEATURE_LEVEL_2_1
eingeführt.
Tensoreinschränkungen
- AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensor, und OutputZeroPointTensor muss denselben DimensionCounthaben.
- ATensor-, BTensor-und OutputTensor- müssen denselben DimensionCount-haben.
- BTensor- und BZeroPointTensor- müssen denselben Datentyphaben.
- OutputTensor- und OutputZeroPointTensor- muss denselben Datentyphaben.
- AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensor, und OutputZeroPointTensor muss denselben DimensionCounthaben.
- ATensor- und AZeroPointTensor- müssen denselben DataType-aufweisen.
Tensorunterstützung
DML_FEATURE_LEVEL_4_0 und höher
Tensor | Art | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
ATensor | Eingabe | 2 bis 4 | INT8, UINT8 |
AScaleTensor | Eingabe | 1 bis 4 | FLOAT32 |
AZeroPointTensor | Optionale Eingabe | 1 bis 4 | INT8, UINT8 |
BTensor | Eingabe | 2 bis 4 | INT8, UINT8 |
BScaleTensor | Eingabe | 1 bis 4 | FLOAT32 |
BZeroPointTensor | Optionale Eingabe | 1 bis 4 | INT8, UINT8 |
OutputScaleTensor | Eingabe | 1 bis 4 | FLOAT32 |
OutputZeroPointTensor | Optionale Eingabe | 1 bis 4 | INT8, UINT8 |
OutputTensor | Ausgabe | 2 bis 4 | INT8, UINT8 |
DML_FEATURE_LEVEL_2_1 und höher
Tensor | Art | Unterstützte Dimensionsanzahl | Unterstützte Datentypen |
---|---|---|---|
ATensor | Eingabe | 4 | INT8, UINT8 |
AScaleTensor | Eingabe | 4 | FLOAT32 |
AZeroPointTensor | Optionale Eingabe | 4 | INT8, UINT8 |
BTensor | Eingabe | 4 | INT8, UINT8 |
BScaleTensor | Eingabe | 4 | FLOAT32 |
BZeroPointTensor | Optionale Eingabe | 4 | INT8, UINT8 |
OutputScaleTensor | Eingabe | 4 | FLOAT32 |
OutputZeroPointTensor | Optionale Eingabe | 4 | INT8, UINT8 |
OutputTensor | Ausgabe | 4 | INT8, UINT8 |
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Windows 10 Build 20348 |
mindestens unterstützte Server- | Windows 10 Build 20348 |
Header- | directml.h |