struttura DML_QUANTIZED_LINEAR_MATRIX_MULTIPLY_OPERATOR_DESC (directml.h)

Esegue una funzione di moltiplicazione della matrice sui dati quantizzati. Questo operatore equivale matematicamente a dequantizzare gli input, quindi a eseguire la moltiplicazione della matrice e quindi a quantizzare l'output.

Questo operatore richiede che i tensori di input di moltiplicazione della matrice siano 4D formattati come { BatchCount, ChannelCount, Height, Width }. L'operatore di moltiplicazione matrice eseguirà BatchCount * ChannelCount numero di moltiplicazioni di matrici indipendenti.

Ad esempio, se ATensor ha sizes di e BTensor ha Sizes di e OutputTensor ha dimensioni di , quindi l'operatore di moltiplicazione matrice eseguirà BatchCount * ChannelCount moltiplicazioni di matrici indipendenti delle dimensioni {M,K} x {K,N} = {M,N}.

Funzione Dequantize

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

Funzione Quantize

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

Sintassi

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;
};

Membri

ATensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati A. Le dimensioni del tensore devono essere { BatchCount, ChannelCount, M, K }.

AScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati di scala ATensor. Le dimensioni previste del AScaleTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 } se è necessaria la quantizzazione per riga. Questi valori di scala vengono usati per dequantizzare i valori A.

Nota

Un valore di scala pari a 0 comporta un comportamento non definito.

AZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensore facoltativo contenente i dati ATensor punto zero. Le dimensioni previste di AZeroPointTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensor o { 1, 1, M, 1 } se è necessaria la quantizzazione per riga. Questi valori di zero punti vengono usati per dequantizzare i valori ATensor.

BTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati B. Le dimensioni del tensore devono essere { BatchCount, ChannelCount, K, N }.

BScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati di scalabilità di BTensor. Le dimensioni previste del BScaleTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensore o { 1, 1, 1, N } se è necessaria la quantizzazione per colonna. Questi valori di scala vengono usati per dequantizzare i valori BTensor.

Nota

Un valore di scala pari a 0 comporta un comportamento non definito.

BZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensore facoltativo contenente i dati BTensor zero punti. Le dimensioni previste del BZeroPointTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensore o { 1, 1, 1, N } se è necessaria la quantizzazione per colonna. Questi valori di zero punti vengono usati per dequantizzare i valori di BTensor .

OutputScaleTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente i dati di scalabilità di OutputTensor. Le dimensioni previste del OutputScaleTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 } se è necessaria la quantizzazione per riga. Questo valore di scala viene usato per dequantizzare i valori OutputTensor.

Nota

Un valore di scala pari a 0 comporta un comportamento non definito.

OutputZeroPointTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensore facoltativo contenente il OutputTensor dati di zero punti. Le dimensioni previste del OutputZeroPointTensor sono { 1, 1, 1, 1 } se è necessaria la quantizzazione per tensore o { 1, 1, M, 1 } se è necessaria la quantizzazione per riga. Questo valore zero point viene usato per dequantizzare i valori OutputTensor.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore in cui scrivere i risultati. Le dimensioni del tensore sono { BatchCount, ChannelCount, M, N }.

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_2_1.

Vincoli tensor

  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devono avere lo stesso DimensionCount.
  • ATensor, BTensore OutputTensor devono avere lo stesso DimensionCount.
  • BTensor e BZeroPointTensor devono avere lo stesso DataType.
  • OutputTensor e OutputZeroPointTensor devono avere lo stesso DataType.
  • AScaleTensor, AZeroPointTensor, BScaleTensor, BZeroPointTensor, OutputScaleTensore OutputZeroPointTensor devono avere lo stesso DimensionCount.
  • ATensor e AZeroPointTensor devono avere lo stesso DataType.

Supporto tensor

DML_FEATURE_LEVEL_4_0 e versioni successive

Tensore Gentile Conteggi delle dimensioni supportati Tipi di dati supportati
ATensor Immissione da 2 a 4 INT8, UINT8
AScaleTensor Immissione Da 1 a 4 FLOAT32
AZeroPointTensor Input facoltativo Da 1 a 4 INT8, UINT8
BTensor Immissione da 2 a 4 INT8, UINT8
BScaleTensor Immissione Da 1 a 4 FLOAT32
BZeroPointTensor Input facoltativo Da 1 a 4 INT8, UINT8
OutputScaleTensor Immissione Da 1 a 4 FLOAT32
OutputZeroPointTensor Input facoltativo Da 1 a 4 INT8, UINT8
OutputTensor Prodotto da 2 a 4 INT8, UINT8

DML_FEATURE_LEVEL_2_1 e versioni successive

Tensore Gentile Conteggi delle dimensioni supportati Tipi di dati supportati
ATensor Immissione 4 INT8, UINT8
AScaleTensor Immissione 4 FLOAT32
AZeroPointTensor Input facoltativo 4 INT8, UINT8
BTensor Immissione 4 INT8, UINT8
BScaleTensor Immissione 4 FLOAT32
BZeroPointTensor Input facoltativo 4 INT8, UINT8
OutputScaleTensor Immissione 4 FLOAT32
OutputZeroPointTensor Input facoltativo 4 INT8, UINT8
OutputTensor Prodotto 4 INT8, UINT8

Fabbisogno

Requisito Valore
client minimo supportato Windows 10 Build 20348
server minimo supportato Windows 10 Build 20348
intestazione directml.h