estrutura DML_GEMM_OPERATOR_DESC (directml.h)
Executa uma função de multiplicação de matriz geral do formulário Output = FusedActivation(Alpha * TransA(A) x TransB(B) + Beta * C)
, em que x
indica multiplicação de matriz e *
indica multiplicação com um escalar.
Esse operador requer tensores 4D com layout { BatchCount, ChannelCount, Height, Width }
e executará BatchCount * Número channelcount de multiplicações de matriz independentes.
Por exemplo, se ATensor tiver Tamanhos de { BatchCount, ChannelCount, M, K }
e BTensor tiver Tamanhos de { BatchCount, ChannelCount, K, N }
, e OutputTensor tiver Tamanhos de { BatchCount, ChannelCount, M, N }
, esse operador executará BatchCount * Multiplicações de matriz independente ChannelCount das dimensões {M,K} x {K,N} = {M,N}.
Sintaxe
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;
};
Membros
ATensor
Tipo: const DML_TENSOR_DESC*
Um tensor que contém a matriz A. Os Tamanhos desse tensor devem ser { BatchCount, ChannelCount, M, K }
se TransA for DML_MATRIX_TRANSFORM_NONE ou { BatchCount, ChannelCount, K, M }
se TransA for DML_MATRIX_TRANSFORM_TRANSPOSE.
BTensor
Tipo: const DML_TENSOR_DESC*
Um tensor que contém a matriz B. Os Tamanhos desse tensor devem ser { BatchCount, ChannelCount, K, N }
se o TransB for DML_MATRIX_TRANSFORM_NONE ou { BatchCount, ChannelCount, N, K }
se o TransB for DML_MATRIX_TRANSFORM_TRANSPOSE.
CTensor
Tipo: _Maybenull_ const DML_TENSOR_DESC*
Um tensor que contém a matriz C ou nullptr
. Os valores padrão são 0 quando não fornecidos. Se fornecido, os Tamanhos desse tensor deverão ser { BatchCount, ChannelCount, M, N }
.
OutputTensor
Tipo: const DML_TENSOR_DESC*
O tensor no qual gravar os resultados. Os tamanhos desse tensor são { BatchCount, ChannelCount, M, N }
.
TransA
Tipo: DML_MATRIX_TRANSFORM
A transformação a ser aplicada ao ATensor; uma transposição ou nenhuma transformação.
TransB
Tipo: DML_MATRIX_TRANSFORM
A transformação a ser aplicada ao BTensor; uma transposição ou nenhuma transformação.
Alpha
Tipo: FLOAT
O valor do multiplicador escalar para o produto das entradas ATensor e BTensor.
Beta
Tipo: FLOAT
O valor do multiplicador escalar para o CTensor de entrada opcional. Se CTensor não for fornecido, esse valor será ignorado.
FusedActivation
Tipo: _Maybenull_ const DML_OPERATOR_DESC*
Uma camada de ativação fundida opcional a ser aplicada após o GEMM. Para obter mais informações, consulte Usando operadores fundidos para melhorar o desempenho.
Disponibilidade
Esse operador foi introduzido em DML_FEATURE_LEVEL_1_0
.
Restrições do Tensor
- ATensor, BTensor, CTensor e OutputTensor devem ter os mesmos DataType e DimensionCount.
- CTensor e OutputTensor devem ter os mesmos Tamanhos.
Suporte ao Tensor
DML_FEATURE_LEVEL_4_0 e superior
Tensor | Tipo | Dimensões | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|---|
Atensor | Entrada | { [BatchCount], [ChannelCount], M, K } | 2 a 4 | FLOAT32, FLOAT16 |
BTensor | Entrada | { [BatchCount], [ChannelCount], K, N } | 2 a 4 | FLOAT32, FLOAT16 |
Ctensor | Entrada opcional | { [BatchCount], [ChannelCount], M, N } | 2 a 4 | FLOAT32, FLOAT16 |
OutputTensor | Saída | { [BatchCount], [ChannelCount], M, N } | 2 a 4 | FLOAT32, FLOAT16 |
DML_FEATURE_LEVEL_1_0 e superior
Tensor | Tipo | Dimensões | Contagens de dimensões com suporte | Tipos de dados com suporte |
---|---|---|---|---|
Atensor | Entrada | { BatchCount, ChannelCount, M, K } | 4 | FLOAT32, FLOAT16 |
BTensor | Entrada | { BatchCount, ChannelCount, K, N } | 4 | FLOAT32, FLOAT16 |
Ctensor | Entrada opcional | { BatchCount, ChannelCount, M, N } | 4 | FLOAT32, FLOAT16 |
OutputTensor | Saída | { BatchCount, ChannelCount, M, N } | 4 | FLOAT32, FLOAT16 |
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | directml.h |