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_0
A 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 |