estructura DML_SCATTER_OPERATOR_DESC (directml.h)
Copia el tensor de entrada completo en la salida y, a continuación, sobrescribe los índices seleccionados con los valores correspondientes del tensor de actualizaciones. Este operador realiza el pseudocódigo siguiente.
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
...
Si dos índices de elemento de salida se superponen (que no son válidos), no hay ninguna garantía de qué última escritura gana.
DML_SCATTER_OPERATOR_DESC es el inverso de DML_GATHER_OPERATOR_DESC.
Sintaxis
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;
};
Miembros
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensor desde el que se va a leer.
IndicesTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene los índices en el tensor de salida. Los tamaños deben coincidir con InputTensor.Sizes para cada dimensión excepto Axis.
DML_FEATURE_LEVEL_3_0
A partir de , este operador admite valores de índice negativos cuando se usa un tipo entero firmado con este tensor. Los índices negativos se interpretan como relativos al final de la dimensión del eje. Por ejemplo, un índice de -1 hace referencia al último elemento a lo largo de esa dimensión.
UpdatesTensor
Tipo: const DML_TENSOR_DESC*
Tensor que contiene los nuevos valores para reemplazar los valores de entrada existentes en los índices correspondientes. Los tamaños de este tensor deben coincidir con IndexsTensor.Sizes. DataType debe coincidir con InputTensor.DataType.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensor en el que se van a escribir los resultados. Los tamaños y el tipo de datos de este tensor deben coincidir con InputTensor.
Axis
Tipo: UINT
Dimensión del eje que se va a usar para la indexación en OutputTensor, que va desde [0, OutputTensor.DimensionCount)
.
Ejemplos
Ejemplo 1. Dispersión 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]
Ejemplo 2. Dispersión 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]]
Comentarios
DML_SCATTER_OPERATOR_DESC se ha aplicado un alias más adecuado al nombre DML_SCATTER_ELEMENTS_OPERATOR_DESC como homólogo adecuado para DML_GATHER_ELEMENTS_OPERATOR_DESC. Esto se debe a que DML_SCATTER_OPERATOR_DESC no era realmente simétrico para DML_GATHER_OPERATOR_DESC.
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_1_0
.
Restricciones tensor
- IndexsTensor, InputTensor, OutputTensor y UpdatesTensor deben tener el mismo DimensionCount.
- InputTensor, OutputTensor y UpdatesTensor deben tener el mismo DataType.
Compatibilidad con Tensor
DML_FEATURE_LEVEL_4_1 y versiones posteriores
Tensor | Kind | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | De 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndexsTensor | Entrada | De 1 a 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Entrada | De 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
OutputTensor | Resultados | De 1 a 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 y versiones posteriores
Tensor | Kind | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | De 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndexsTensor | Entrada | De 1 a 8 | INT64, INT32, UINT64, UINT32 |
UpdatesTensor | Entrada | De 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Resultados | De 1 a 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 y versiones posteriores
Tensor | Kind | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndexsTensor | Entrada | 4 | UINT32 |
UpdatesTensor | Entrada | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
OutputTensor | Resultados | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_1_0 y versiones posteriores
Tensor | Kind | Recuentos de dimensiones admitidos | Tipos de datos admitidos |
---|---|---|---|
InputTensor | Entrada | 4 | FLOAT32, FLOAT16 |
IndexsTensor | Entrada | 4 | UINT32 |
UpdatesTensor | Entrada | 4 | FLOAT32, FLOAT16 |
OutputTensor | Resultados | 4 | FLOAT32, FLOAT16 |
Requisitos
Cliente mínimo compatible | Windows 10, versión 2004 (10.0; Compilación 19041) |
Servidor mínimo compatible | Windows Server, versión 2004 (10.0; Compilación 19041) |
Encabezado | directml.h |