Partager via


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