Compartilhar via


estrutura DML_CUMULATIVE_PRODUCT_OPERATOR_DESC (directml.h)

Multiplica os elementos de um tensor ao longo de um eixo, gravando a contagem em execução do produto no tensor de saída.

Sintaxe

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

Membros

InputTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os dados de entrada. Normalmente, esse é o mesmo tensor que foi fornecido como InputTensor para DML_BATCH_NORMALIZATION_OPERATOR_DESC no passe para frente.

O tensor de entrada que contém elementos a serem multiplicados.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor de saída para o qual gravar os produtos cumulativos resultantes. Esse tensor deve ter os mesmos tamanhos e tipo de dados que InputTensor.

Axis

Tipo: UINT

O índice da dimensão para multiplicar elementos. Esse valor deve ser menor que o DimensionCount do InputTensor.

AxisDirection

Tipo: DML_AXIS_DIRECTION

Um dos valores da enumeração DML_AXIS_DIRECTION . Se definido como DML_AXIS_DIRECTION_INCREASING, o produto ocorrerá atravessando o tensor ao longo do eixo especificado pelo índice de elemento crescente. Se definido como DML_AXIS_DIRECTION_DECREASING, o inverso será true e o produto ocorrerá atravessando elementos por índice decrescente.

HasExclusiveProduct

Tipo: BOOL

Se TRUE, o valor do elemento atual será excluído ao gravar a contagem em execução no tensor de saída. Se FALSE, o valor do elemento atual será incluído na contagem em execução.

Exemplos

Os exemplos nesta seção usam esse mesmo tensor de entrada.

InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
   [3, 8, 7, 3],
   [9, 6, 2, 4]]]]

Exemplo 1. Produto cumulativo entre lascas horizontais

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

Exemplo 2. Produtos exclusivos

Definir HasExclusiveProduct como TRUE tem o efeito de excluir o valor do elemento atual da contagem em execução ao gravar no tensor de saída.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

Exemplo 3. Direção do eixo

Definir AxisDirectioncomo DML_AXIS_DIRECTION_DECREASING tem o efeito de reverter a ordem de passagem de elementos ao calcular a contagem em execução.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

Exemplo 4. Multiplicando ao longo de um eixo diferente

Neste exemplo, o produto ocorre verticalmente, ao longo do eixo de altura (segunda dimensão).

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

Comentários

Esse operador dá suporte à execução in-loco, o que significa que o tensor de saída tem permissão para alias InputTensor durante a associação.

Disponibilidade

Esse operador foi introduzido em DML_FEATURE_LEVEL_3_1.

Restrições do Tensor

InputTensor e OutputTensor devem ter os mesmos DataType, DimensionCount e Sizes.

Suporte ao Tensor

DML_FEATURE_LEVEL_5_0 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Saída 1 a 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada 1 a 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Saída 1 a 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Saída 4 FLOAT32, FLOAT16, INT32, UINT32

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Build 22000
Servidor mínimo com suporte Windows Build 22000
Cabeçalho directml.h