estructura DML_SCATTER_ND_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 siguiente pseudocódigo, donde "..." representa una serie de coordenadas, con el comportamiento exacto determinado por el tamaño del eje e índices.
output = input
output[indices[...]] = updates[...]
Si dos índices de elemento de salida se superponen (que no son válidos), no hay ninguna garantía de cuál gana la última escritura.
Sintaxis
struct DML_SCATTER_ND_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *UpdatesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT InputDimensionCount;
UINT IndicesDimensionCount;
};
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. DimensionCount de este tensor debe coincidir con InputTensor.DimensionCount. La última dimensión de IndexsTensor es realmente el número de coordenadas por tupla de índice y no debe superar InputTensor.DimensionCount. Por ejemplo, un tensor de tamaño {1,4,5,2}
de índices con IndexsDimensionCount = 3 significa una matriz de 4x5 de tuplas de coordenadas de 2 valores que se indexa en InputTensor.
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 respectiva. 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. DimensionCount de este tensor debe coincidir con InputTensor.DimensionCount. Los elementos UpdatesTensor.Sizes esperados son la concatenación de los segmentos iniciales IndexsTensor.Sizes y inputTensor.Sizes finales para producir lo siguiente.
indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
UpdatesTensor.Sizes = [
1...,
IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndicesDimensionCount) .. (IndicesTensor.DimensionCount - 1)],
InputTensor.Sizes[(InputTensor.DimensionCount - indexTupleSize) .. InputTensor.DimensionCount]
]
Las dimensiones están alineadas a la derecha, con los 1 valores iniciales antepuestos si es necesario para satisfacer UpdatesTensor.DimensionCount.
Este es un ejemplo.
InputTensor.Sizes = [3,4,5,6,7]
InputDimensionCount = 5
IndicesTensor.Sizes = [1,1, 1,2,3]
IndicesDimensionCount = 3 // can be thought of as a [1,2] array of 3-coordinate tuples
// The [1,2] comes from the indices tensor (ignoring last dimension, which is the tuple size),
// and the [6,7] comes from input tensor, ignoring the first 3 dimensions
// since the index tuples are 3 elements (from the indices tensor last dimension).
UpdatesTensor.Sizes = [1, 1,2,6,7]
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.Sizes.
InputDimensionCount
Tipo: UINT
Número de dimensiones de entrada reales dentro de InputTensor después de omitir los iniciales irrelevantes, que van [1, InputTensor.DimensionCount). Por ejemplo, dado InputTensor.Sizes = {1,1,4,6} y InputDimensionCount = 3, los índices significativos reales son {1,4,6}.
IndicesDimensionCount
Tipo: UINT
Número de dimensiones de índice reales dentro de IndexsTensor después de omitir las irrelevantes iniciales irrelevantes, que van [1, IndexsTensor.DimensionCount). Por ejemplo, dado IndexsTensor.Sizes = {1,1,4,6} y IndexsDimensionCount = 3, los índices significativos reales son {1,4,6}.
Ejemplos
InputTensor: (Sizes:{8}, DataType:FLOAT32)
[1, 2, 3, 4, 5, 6, 7, 8]
IndicesTensor: (Sizes:{4,1}, DataType:FLOAT32)
[[4], [3], [1], [7]]
UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
[9, 10, 11, 12]
// output = input
// output[indices[x, 0]] = updates[x]
OutputTensor: (Sizes:{8}, DataType:FLOAT32)
[1, 11, 3, 10, 9, 6, 7, 12]
Disponibilidad
Este operador se introdujo en DML_FEATURE_LEVEL_2_1
.
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 | Clase | 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 | Clase | 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 | Clase | 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 |
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | compilación 20348 de Windows 10 |
Servidor mínimo compatible | compilación 20348 de Windows 10 |
Encabezado | directml.h |