Condividi tramite


struttura DML_GATHER_ELEMENTS_OPERATOR_DESC (directml.h)

Raccoglie gli elementi dal tensore di input lungo l'asse specificato usando il tensore di indici per eseguire nuovamente il mapping nell'input. Questo operatore esegue lo pseudocodice seguente, con il comportamento esatto dipendente dall'asse, dal numero di dimensioni di input e dal conteggio delle dimensioni degli indici.

output[i, j, k, ...] = input[index[i, j, k, ...], j, k, ...] // if axis == 0
output[i, j, k, ...] = input[i, index[i, j, k, ...], k, ...] // if axis == 1
output[i, j, k, ...] = input[i, j, index[i, j, k, ...], ...] // if axis == 2
...

Sintassi

struct DML_GATHER_ELEMENTS_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

Members

InputTensor

Tipo: const DML_TENSOR_DESC*

Tensore da cui leggere.

IndicesTensor

Tipo: const DML_TENSOR_DESC*

Indici nel tensore di input lungo l'asse attivo. Le dimensioni devono corrispondere a InputTensor.Sizes per ogni dimensione ad eccezione di Axis.

DML_FEATURE_LEVEL_3_0A partire da , questo operatore supporta i valori di indice negativi quando si usa un tipo integrale con segno con questo tensore. Gli indici negativi vengono interpretati come relativi alla fine della dimensione dell'asse. Ad esempio, un indice di -1 fa riferimento all'ultimo elemento lungo tale dimensione.

OutputTensor

Tipo: const DML_TENSOR_DESC*

Tensore in cui scrivere i risultati. Le dimensioni devono corrispondere a IndicesTensor.Sizes e DataType devono corrispondere a InputTensor.DataType.

Axis

Tipo: UINT

Dimensione dell'asse di InputTensor da raccogliere, che va da [0, *InputTensor.DimensionCount*).

Esempio

Axis = 0

InputTensor: (Sizes:{3,3}, DataType:FLOAT32)
    [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

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

// output[y, x] = input[indices[y, x], x]
OutputTensor: (Sizes:{2,3}, DataType:UINT32)
    [[4, 8, 3], // select elements vertically from data
     [7, 2, 3]]

Disponibilità

Questo operatore è stato introdotto in DML_FEATURE_LEVEL_2_1.

Vincoli tensor

  • IndicesTensor, InputTensor e OutputTensor devono avere lo stesso DimensionCount.
  • InputTensor e OutputTensor devono avere lo stesso Tipo di dati.

Supporto di Tensor

DML_FEATURE_LEVEL_4_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input da 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
IndicesTensor Input da 1 a 8 INT64, INT32, UINT64, UINT32
OutputTensor Output da 1 a 8 FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_3_0 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input da 1 a 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
IndicesTensor Input da 1 a 8 INT64, INT32, UINT64, UINT32
OutputTensor Output da 1 a 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

DML_FEATURE_LEVEL_2_1 e versioni successive

Tensore Tipo Conteggi delle dimensioni supportati Tipi di dati supportati
InputTensor Input 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
IndicesTensor Input 4 UINT32
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8

Requisiti

Requisito Valore
Client minimo supportato Windows 10 Build 20348
Server minimo supportato Windows 10 Build 20348
Intestazione directml.h