Compartir a través de


estructura DML_GATHER_ND1_OPERATOR_DESC (directml.h)

Recopila elementos del tensor de entrada, utilizando el tensor de índices para reasignar índices a subbloqueos completos de la entrada. Este operador realiza el siguiente pseudocódigo, donde "..." representa una serie de coordenadas, con el comportamiento exacto dependiente del número de dimensiones de lote, entrada e índices.

output[batch, ...] = input[batch, indices[batch, ...], ...]

Sintaxis

struct DML_GATHER_ND1_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  InputDimensionCount;
  UINT                  IndicesDimensionCount;
  UINT                  BatchDimensionCount;
};

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 puede superar InputTensor.DimensionCount. Por ejemplo, un tensor de índices de Tamaños{1,4,5,2} con IndexsDimensionCount = 3 significa una matriz de 4x5 de tuplas de 2 coordenadas que indexa en InputTensor.

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 respectiva. Por ejemplo, un índice de -1 hace referencia al último elemento a lo largo de esa dimensión.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensor en el que se van a escribir los resultados. DimensionCount y DataType de este tensor deben coincidir con InputTensor.DimensionCount. OutputTensor.Sizes esperado son la concatenación de los segmentos iniciales IndexsTensor.Sizes y inputTensor.Sizes, que produce lo siguiente.

indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
OutputTensor.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 OutputTensor.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).
OutputTensor.Sizes = {1, 1,2,6,7}

InputDimensionCount

Tipo: UINT

Número de dimensiones de entrada reales dentro de InputTensor después de omitir los irrelevantes iniciales, que van a [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, 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}.

BatchDimensionCount

Tipo: UINT

Número de dimensiones dentro de cada tensor (InputTensor, IndexsTensor, OutputTensor) que se consideran lotes independientes, que van dentro de [0, InputTensor.DimensionCount) y [0, IndexsTensor.DimensionCount). El número de lotes puede ser 0, lo que implica un único lote. Por ejemplo, dado IndexsTensor.Sizes = {1,3,4,5,6,7} y IndexsDimensionCount = 5 y BatchDimensionCount = 2, hay lotes {3,4} y índices significativos {5,6,7}.

Comentarios

DML_GATHER_ND1_OPERATOR_DESC agrega BatchDimensionCount y equivale a DML_GATHER_ND_OPERATOR_DESC cuando BatchDimensionCount = 0.

Ejemplos

Ejemplo 1. Reasignación 1D

InputDimensionCount: 2
IndicesDimensionCount: 2
BatchDimensionCount: 0

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

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

// output[y, x] = input[indices[y], x]
OutputTensor: (Sizes:{2,2}, DataType:FLOAT32)
    [[2,3],[0,1]]

Ejemplo 2. Reasignación 2D con recuento de lotes

InputDimensionCount: 3
IndicesDimensionCount: 3
BatchDimensionCount: 1

// 3 batches.
InputTensor: (Sizes:{1, 3,2,2}, DataType:FLOAT32)
    [
        [[[0,1],[2,3]],   // batch 0
         [[4,5],[6,7]],   // batch 1
         [[8,9],[10,11]]] // batch 2
    ]

// A 3x2 array of 2D tuples indexing into InputTensor.
// e.g. a tuple of <1,0> in batch 1 corresponds to input value 6.
IndicesTensor: (Sizes:{1, 3,2,2}, DataType:UINT32)
    [
        [[[0,0],[1,1]],
         [[1,1],[0,0]],
         [[0,1],[1,0]]]
    ]

// output[batch, x] = input[batch, indices[batch, x, 0], indices[batch, x, 1]]
OutputTensor: (Sizes:{1,1, 3,2}, DataType:FLOAT32)
    [[
        [[0,3],
         [7,4],
         [9,10]]
    ]]

Disponibilidad

Este operador se introdujo en DML_FEATURE_LEVEL_3_0.

Restricciones tensor

  • IndexsTensor, InputTensor y OutputTensor deben tener el mismo DimensionCount.
  • InputTensor y OutputTensor 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
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
OutputTensor Resultados De 1 a 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

Requisitos

   
Cliente mínimo compatible Compilación 20348 de Windows 10
Servidor mínimo compatible Compilación 20348 de Windows 10
Encabezado directml.h