Condividi tramite


DML_GEMM_OPERATOR_DESC struttura (directml.h)

Esegue una funzione di moltiplicazione di matrice generale del modulo Output = FusedActivation(Alpha * TransA(A) x TransB(B) + Beta * C), dove x indica la moltiplicazione della matrice e * indica la moltiplicazione con un scalare.

Questo operatore richiede tensori 4D con layout { BatchCount, ChannelCount, Height, Width }e eseguirà BatchCount * Numero channelCount di moltiplicazioni di matrice indipendenti.

Ad esempio, se ATensor ha Dimensioni di e BTensor ha dimensioni di { BatchCount, ChannelCount, M, K }e OutputTensorha{ BatchCount, ChannelCount, M, N }dimensioni di { BatchCount, ChannelCount, K, N }, questo operatore esegue BatchCount * ChannelCount moltiplicazioni indipendenti di dimensioni {M,K} x {K,N} = {M,N} = {M,N}.

Sintassi

struct DML_GEMM_OPERATOR_DESC {
  const DML_TENSOR_DESC   *ATensor;
  const DML_TENSOR_DESC   *BTensor;
  const DML_TENSOR_DESC   *CTensor;
  const DML_TENSOR_DESC   *OutputTensor;
  DML_MATRIX_TRANSFORM    TransA;
  DML_MATRIX_TRANSFORM    TransB;
  FLOAT                   Alpha;
  FLOAT                   Beta;
  const DML_OPERATOR_DESC *FusedActivation;
};

Members

ATensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente la matrice A. Le dimensioni di questo tensore devono essere { BatchCount, ChannelCount, M, K } se TransA è DML_MATRIX_TRANSFORM_NONE o { BatchCount, ChannelCount, K, M } se TransA è DML_MATRIX_TRANSFORM_TRANSPOSE.

BTensor

Tipo: const DML_TENSOR_DESC*

Tensore contenente la matrice B. Le dimensioni di questo tensore devono essere { BatchCount, ChannelCount, K, N } se TransB è DML_MATRIX_TRANSFORM_NONE o { BatchCount, ChannelCount, N, K } se TransB è DML_MATRIX_TRANSFORM_TRANSPOSE.

CTensor

Tipo: _Maybenull_ const DML_TENSOR_DESC*

Tensor contenente la matrice C o nullptr. I valori predefiniti sono 0 quando non vengono specificati. Se specificato, le dimensioni di questo tensore devono essere { BatchCount, ChannelCount, M, N }.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor in cui scrivere i risultati. Le dimensioni di questo tensore sono { BatchCount, ChannelCount, M, N }.

TransA

Tipo: DML_MATRIX_TRANSFORM

Trasformazione da applicare a ATensor; trasposto o nessuna trasformazione.

TransB

Tipo: DML_MATRIX_TRANSFORM

Trasformazione da applicare a BTensor; trasposto o nessuna trasformazione.

Alpha

Tipo: FLOAT

Valore del moltiplicatore scalare per il prodotto di input ATensor e BTensor.

Beta

Tipo: FLOAT

Valore del moltiplicatore scalare per l'input facoltativo CTensor. Se CTensor non viene fornito, questo valore viene ignorato.

FusedActivation

Tipo: _Maybenull_ const DML_OPERATOR_DESC*

Livello di attivazione fusibile facoltativo da applicare dopo GEMM. Per altre informazioni, vedere Uso degli operatori fusi per migliorare le prestazioni.

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_1_0.

Vincoli tensor

  • ATensor, BTensor, CTensor e OutputTensor devono avere lo stesso Oggetto DataType e DimensionCount.
  • CTensor e OutputTensor devono avere le stesse dimensioni.

Supporto di Tensor

DML_FEATURE_LEVEL_4_0 e versioni successive

Tensore Tipo Dimensioni Conteggi delle dimensioni supportate Tipi di dati supportati
ATensor Input { [BatchCount], [ChannelCount], M, K } da 2 a 4 FLOAT32, FLOAT16
BTensor Input { [BatchCount], [ChannelCount], K, N } da 2 a 4 FLOAT32, FLOAT16
CTensor Input facoltativo { [BatchCount], [ChannelCount], M, N } da 2 a 4 FLOAT32, FLOAT16
OutputTensor Output { [BatchCount], [ChannelCount], M, N } da 2 a 4 FLOAT32, FLOAT16

DML_FEATURE_LEVEL_1_0 e versioni successive

Tensore Tipo Dimensioni Conteggi delle dimensioni supportate Tipi di dati supportati
ATensor Input { BatchCount, ChannelCount, M, K } 4 FLOAT32, FLOAT16
BTensor Input { BatchCount, ChannelCount, K, N } 4 FLOAT32, FLOAT16
CTensor Input facoltativo { BatchCount, ChannelCount, M, N } 4 FLOAT32, FLOAT16
OutputTensor Output { BatchCount, ChannelCount, M, N } 4 FLOAT32, FLOAT16

Requisiti

Requisito Valore
Intestazione directml.h

Vedi anche