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 |