DML_GATHER_ELEMENTS_OPERATOR_DESC structure (directml.h)
Collecte les éléments du tenseur d’entrée le long de l’axe donné à l’aide du tenseur d’index pour remapper l’entrée. Cet opérateur exécute le pseudocode suivant, avec le comportement exact dépendant de l’axe, du nombre de dimensions d’entrée et du nombre de dimensions d’index.
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
...
Syntaxe
struct DML_GATHER_ELEMENTS_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
const DML_TENSOR_DESC *OutputTensor;
UINT Axis;
};
Membres
InputTensor
Type : const DML_TENSOR_DESC*
Tenseur à partir duquel lire.
IndicesTensor
Type : const DML_TENSOR_DESC*
Index dans le tenseur d’entrée le long de l’axe actif. Les tailles doivent correspondre à InputTensor.Sizes pour chaque dimension à l’exception de Axis.
DML_FEATURE_LEVEL_3_0
À compter de , cet opérateur prend en charge les valeurs d’index négatives lors de l’utilisation d’un type intégral signé avec ce tenseur. Les indices négatifs sont interprétés comme étant relatifs à la fin de la dimension de l’axe. Par exemple, un index de -1 fait référence au dernier élément le long de cette dimension.
OutputTensor
Type : const DML_TENSOR_DESC*
Tenseur dans lequel écrire les résultats. Les tailles doivent correspondre à IndexsTensor.Sizes et DataType doivent correspondre à InputTensor.DataType.
Axis
Type : UINT
Dimension d’axe d’InputTensor à collecter le long, allant de [0, *InputTensor.DimensionCount*)
.
Exemples
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é
Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_1
.
Contraintes tensoriels
IndicesTensor
, InputTensor et OutputTensor doivent avoir le même DimensionCount.- InputTensor et OutputTensor doivent avoir le même DataType.
Prise en charge des tenseurs
DML_FEATURE_LEVEL_4_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
IndexTensor | Entrée | 1 à 8 | INT64, INT32, UINT64, UINT32 |
OutputTensor | Sortie | 1 à 8 | FLOAT64, FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_3_0 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndexTensor | Entrée | 1 à 8 | INT64, INT32, UINT64, UINT32 |
OutputTensor | Sortie | 1 à 8 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
DML_FEATURE_LEVEL_2_1 et versions ultérieures
Tenseur | Genre | Nombre de dimensions pris en charge | Types de données pris en charge |
---|---|---|---|
InputTensor | Entrée | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
IndexTensor | Entrée | 4 | UINT32 |
OutputTensor | Sortie | 4 | FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8 |
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 10 Build 20348 |
Serveur minimal pris en charge | Windows 10 Build 20348 |
En-tête | directml.h |