DML_GATHER_ND1_OPERATOR_DESC struttura (directml.h)
Raccoglie gli elementi dal tensore di input usando il tensore indici per eseguire il mapping degli indici a interi blocchi secondari dell'input. Questo operatore esegue lo pseudocode seguente, dove "..." rappresenta una serie di coordinate, con il comportamento esatto dipendente dal numero di dimensioni batch, input e indici.
output[batch, ...] = input[batch, indices[batch, ...], ...]
Sintassi
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;
};
Members
InputTensor
Tipo: const DML_TENSOR_DESC*
Tensore da cui leggere.
IndicesTensor
Tipo: const DML_TENSOR_DESC*
Tensore contenente gli indici. DimensionCount di questo tensore deve corrispondere a InputTensor.DimensionCount. L'ultima dimensione dell'indicesTensor è effettivamente il numero di coordinate per tupla dell'indice e non può superare InputTensor.DimensionCount. Ad esempio, un tensore di indici di Dimensioni{1,4,5,2}
con IndicesDimensionCount = 3 significa una matrice 4x5 di tupla a 2 coordinate che indicizza in InputTensor.
A partire da DML_FEATURE_LEVEL_3_0
, questo operatore supporta valori di indice negativi quando si usa un tipo integrale firmato con questo tensore. Gli indici negativi vengono interpretati come relativi alla fine della rispettiva dimensione. Ad esempio, un indice di -1 fa riferimento all'ultimo elemento lungo tale dimensione.
OutputTensor
Tipo: const DML_TENSOR_DESC*
Tensor in cui scrivere i risultati. DimensionCount e DataType di questo tensore devono corrispondere a InputTensor.DimensionCount. L'output previstoTensor.Sizes è la concatenazione dei segmenti principali indicesTensor.Sizes e del segmento finale InputTensor.Sizes , che restituisce quanto segue.
indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
OutputTensor.Sizes = {
1...,
IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndicesDimensionCount) .. (IndicesTensor.DimensionCount - 1)],
InputTensor.Sizes[(InputTensor.DimensionCount - indexTupleSize) .. InputTensor.DimensionCount]
}
Le dimensioni sono allineate a destra, con valori iniziali 1 prependati se necessario per soddisfare OutputTensor.DimensionCount.
Ecco un esempio.
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
Numero di dimensioni di input effettive all'interno di InputTensor dopo aver ignorato quelli iniziali irrilevanti, che vanno da [1, *InputTensor.DimensionCount*]
. Ad esempio, dato InputTensor.Sizes = {1,1,4,6}
e InputDimensionCount
= 3, gli indici significativi effettivi sono {1,4,6}
.
IndicesDimensionCount
Tipo: UINT
Numero di dimensioni effettive dell'indice all'interno dell'IndicesTensor dopo aver ignorato quelli iniziali irrilevanti, compresi [1, IndicesTensor.DimensionCount]. Ad esempio, dato IndicesTensor.Sizes = {1,1,4,6}
e IndicesDimensionCount = 3, gli indici significativi effettivi sono {1,4,6}
.
BatchDimensionCount
Tipo: UINT
Numero di dimensioni all'interno di ogni tensore (InputTensor, IndicesTensor, OutputTensor) considerati batch indipendenti, che vanno all'interno di [0, InputTensor.DimensionCount) e [0, IndicesTensor.DimensionCount). Il numero di batch può essere 0, implicando un singolo batch. Ad esempio, dato IndicesTensor.Sizes = {1,3,4,5,6,7}
e IndicesDimensionCount = 5 e = 2, sono presenti batch {3,4}
e BatchDimensionCount
indici {5,6,7}
significativi.
Commenti
DML_GATHER_ND1_OPERATOR_DESC aggiunge BatchDimensionCount ed è equivalente a DML_GATHER_ND_OPERATOR_DESC quando BatchDimensionCount = 0.
Esempi
Esempio 1. 1D remapping
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]]
Esempio 2. 2D remapping con conteggio batch
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]]
]]
Disponibilità
Questo operatore è stato introdotto in DML_FEATURE_LEVEL_3_0
.
Vincoli tensor
- IndicisTensor, 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 supportate | 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 supportate | 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 |
Requisiti
Client minimo supportato | Windows 10 Build 20348 |
Server minimo supportato | Windows 10 Build 20348 |
Intestazione | directml.h |