estrutura DML_SCATTER_OPERATOR_DESC (directml.h)

Copia todo o tensor de entrada para a saída e, em seguida, substitui os índices selecionados por valores correspondentes do tensor de atualizações. Esse operador executa o pseudocódigo a seguir.

output = input
output[index[i, j, k, ...], j, k, ...] = updates[i, j, k, ...] // if axis == 0
output[i, index[i, j, k, ...], k, ...] = updates[i, j, k, ...] // if axis == 1
output[i, j, index[i, j, k, ...], ...] = updates[i, j, k, ...] // if axis == 2
...

Se dois índices de elemento de saída se sobrepõem (o que é inválido), não haverá nenhuma garantia de qual última gravação vence.

DML_SCATTER_OPERATOR_DESC é o inverso de DML_GATHER_OPERATOR_DESC.

Sintaxe

struct DML_SCATTER_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *UpdatesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

Membros

InputTensor

Tipo: const DML_TENSOR_DESC*

O tensor do qual ler.

IndicesTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os índices no tensor de saída. Os Tamanhos devem corresponder a InputTensor.Sizes para cada dimensão, exceto Axis.

DML_FEATURE_LEVEL_3_0A partir do , esse operador dá suporte a valores de índice negativos ao usar um tipo integral assinado com esse tensor. Índices negativos são interpretados como sendo relativos ao final da dimensão do eixo. Por exemplo, um índice de -1 refere-se ao último elemento nessa dimensão.

UpdatesTensor

Tipo: const DML_TENSOR_DESC*

Um tensor que contém os novos valores para substituir os valores de entrada existentes nos índices correspondentes. Os Tamanhos deste tensor devem corresponder a IndicesTensor.Sizes. O DataType deve corresponder a InputTensor.DataType.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor no qual gravar os resultados. Os Tamanhos e DataType deste tensor devem corresponder a InputTensor.

Axis

Tipo: UINT

A dimensão do eixo a ser usada para indexação em OutputTensor, variando [0, OutputTensor.DimensionCount).

Exemplos

Exemplo 1. Dispersão 1D

Axis: 0

InputTensor: (Sizes:{5}, DataType:FLOAT32)
    [0,1,2,3,4]

IndicesTensor: (Sizes:{4}, DataType:UINT32)
    [3,1,3,0]

UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
    [5,6,7,8]

// output = input
// output[indices[x]] = updates[x]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
    [8,6,2,7,4]

Exemplo 2. Dispersão 2D

Axis: 0

InputTensor: (Sizes:{2,3}, DataType:FLOAT32)
    [[0.0, 0.0, 0.0],
     [0.0, 0.0, 0.0],
     [0.0, 0.0, 0.0]]

IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
    [[1, 0, 2],
     [0, 2, 1]]

UpdatesTensor: (Sizes:{2,3}, DataType:FLOAT32)
    [[10, 11, 12],
     [20, 21, 22]]

// output = input
// output[indices[y, x], x] = updates[y, x]
OutputTensor: (Sizes:{3,3}, DataType:FLOAT32)
    [[20, 11,  0],
     [10,  0, 22],
     [ 0, 21, 12]]

Comentários

DML_SCATTER_OPERATOR_DESC foi mais adequadamente alias ao nome DML_SCATTER_ELEMENTS_OPERATOR_DESC como o equivalente adequado para DML_GATHER_ELEMENTS_OPERATOR_DESC. Isso ocorre porque DML_SCATTER_OPERATOR_DESC não era realmente simétrico para DML_GATHER_OPERATOR_DESC.

Disponibilidade

Esse operador foi introduzido no DML_FEATURE_LEVEL_1_0.

Restrições do Tensor

  • IndicesTensor, InputTensor, OutputTensor e UpdatesTensor devem ter o mesmo DimensionCount.
  • InputTensor, OutputTensor e UpdatesTensor devem ter o mesmo DataType.

Suporte ao Tensor

DML_FEATURE_LEVEL_4_1 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
IndicesTensor Entrada 1 a 8 INT64, INT32, UINT64, UINT32
UpdatesTensor Entrada 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Saída 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 e superior

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

DML_FEATURE_LEVEL_2_1 e superior

Tensor Tipo Contagens de dimensões com suporte Tipos de dados com suporte
InputTensor Entrada 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
IndicesTensor Entrada 4 UINT32
UpdatesTensor Entrada 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Saída 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_1_0 e superior

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

Requisitos

   
Cliente mínimo com suporte Windows 10, versão 2004 (10.0; Build 19041)
Servidor mínimo com suporte Windows Server, versão 2004 (10.0; Build 19041)
Cabeçalho directml.h