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

Confira também