Partager via


DML_CUMULATIVE_SUMMATION_OPERATOR_DESC structure (directml.h)

Additionne les éléments d’un tenseur le long d’un axe, en écrivant le décompte en cours d’exécution de la somme dans le tenseur de sortie.

Syntaxe

struct DML_CUMULATIVE_SUMMATION_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveSum;
};

Membres

InputTensor

Type : const DML_TENSOR_DESC*

Tenseur d’entrée contenant les éléments à additionnez.

OutputTensor

Type : const DML_TENSOR_DESC*

Tenseur de sortie dans lequel écrire les additions cumulatives résultantes. Ce tenseur doit avoir les mêmes tailles et le même type de données que inputTensor.

Axis

Type : UINT

Index de la dimension sur laquelle additionner les éléments. Cette valeur doit être inférieure à dimensionCount du inputTensor.

AxisDirection

Type : DML_AXIS_DIRECTION

Une des valeurs de l’énumération DML_AXIS_DIRECTION . Si la valeur est DML_AXIS_DIRECTION_INCREASING, la somme se produit en parcourant le tenseur le long de l’axe spécifié par l’index d’élément croissant. Si la valeur est DML_AXIS_DIRECTION_DECREASING, l’inverse est true et la somme se produit en parcourant les éléments par index décroissant.

HasExclusiveSum

Type : BOOL

Si la valeur est TRUE, la valeur de l’élément actuel est exclue lors de l’écriture du tally en cours d’exécution dans le tenseur de sortie. Si la valeur est FALSE, la valeur de l’élément actuel est incluse dans le décompte en cours d’exécution.

Exemples

Les exemples de cette section utilisent tous un tenseur d’entrée avec les propriétés suivantes.

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

Exemple 1. Somme cumulée entre les éclats horizontaux

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveSum: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  3,  6, 11],     // i.e. [2, 2+1, 2+1+3, 2+1+3+5]
   [3, 11, 18, 21],     //      [...                   ]
   [9, 15, 17, 21]]]]   //      [...                   ]

Exemple 2. Sommes exclusives

La définition de HasExclusiveSum sur TRUE a pour effet d’exclure la valeur de l’élément actuel du décompte en cours d’exécution lors de l’écriture dans le tenseur de sortie.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveSum: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[0, 2,  3,  6],      // Notice the sum is written before adding the input,
   [0, 3, 11, 18],      // and the final total is not written to any output.
   [0, 9, 15, 17]]]]

Exemple 3. Direction de l’axe

La définition d’AxisDirection sur DML_AXIS_DIRECTION_DECREASING a pour effet d’inverser l’ordre de traversée des éléments lors du calcul du décompte en cours d’exécution.

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_DECREASING
HasExclusiveSum: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[11,  9,  8,  5],    // i.e. [2+1+3+5, 1+3+5, 3+5, 5]
   [21, 18, 10,  3],    //      [...                   ]
   [21, 12,  6,  4]]]]  //      [...                   ]

Exemple 4. Additionnement le long d’un autre axe

Dans cet exemple, la somme se produit verticalement, le long de l’axe de hauteur (dimension 2).

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveSum: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 5,  9, 10,  8],   //      [2+3,  ...]
   [14, 15, 12, 12]]]] //      [2+3+9 ...]

Notes

Cet opérateur prend en charge l’exécution sur place, ce qui signifie que OutputTensor est autorisé à alias le InputTensor pendant la liaison.

Disponibilité

Cet opérateur a été introduit dans DML_FEATURE_LEVEL_2_1.

Contraintes tensoriels

InputTensor et OutputTensor doivent avoir les mêmes DataType, DimensionCount et Sizes.

Prise en charge des tenseurs

DML_FEATURE_LEVEL_5_0 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée 1 à 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Output 1 à 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée 1 à 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Output 1 à 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_2_1 et versions ultérieures

Tenseur Type Nombre de dimensions pris en charge Types de données pris en charge
InputTensor Entrée 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Output 4 FLOAT32, FLOAT16, INT32, UINT32

Spécifications

   
Client minimal pris en charge Windows 10 Build 20348
Serveur minimal pris en charge Windows 10 Build 20348
En-tête directml.h