Compartir a través de


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_0A 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