Partager via


DML_CUMULATIVE_PRODUCT_OPERATOR_DESC structure (directml.h)

Multiplie les éléments d’un tenseur le long d’un axe, en écrivant le décompte en cours d’exécution du produit dans le tenseur de sortie.

Syntaxe

struct DML_CUMULATIVE_PRODUCT_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  DML_AXIS_DIRECTION    AxisDirection;
  BOOL                  HasExclusiveProduct;
};

Membres

InputTensor

Type : const DML_TENSOR_DESC*

Tenseur contenant les données d’entrée. Il s’agit généralement du même tenseur que celui fourni en tant que InputTensor pour DML_BATCH_NORMALIZATION_OPERATOR_DESC dans la passe avant.

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

OutputTensor

Type : const DML_TENSOR_DESC*

Tenseur de sortie dans lequel écrire les produits cumulatifs résultants. 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 multiplier 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, le produit 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 le produit se produit en parcourant les éléments par index décroissant.

HasExclusiveProduct

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 ce même tenseur d’entrée.

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

Exemple 1. Produit cumulé sur des éclats horizontaux

Axis: 3
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2,  2,   6,  30],       // i.e. [2, 2*1, 2*1*3, 2*1*3*5]
   [3, 24, 168, 504],       //      [...                   ]
   [9, 54, 108, 432]]]]     //      [...                   ]

Exemple 2. Produits exclusifs

La définition de HasExclusiveProduct surTRUE 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
HasExclusiveProduct: TRUE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[1, 2,  2,   6],      // Notice the product is written before multiplying the input,
   [1, 3, 24, 168],      // and the final total is not written to any output.
   [1, 9, 54, 108]]]]

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
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 30,  15, 15, 5],    // i.e. [2*1*3*5, 1*3*5, 3*5, 5]
   [504, 168, 21, 3],    //      [...                   ]
   [432,  48,  8, 4]]]]  //      [...                   ]

Exemple 4. Multiplication le long d’un autre axe

Dans cet exemple, le produit se produit verticalement, le long de l’axe de hauteur (deuxième dimension).

Axis: 2
AxisDirection: DML_AXIS_DIRECTION_INCREASING
HasExclusiveProduct: FALSE

OutputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[ 2,  1,  3,  5],   // i.e. [2,    ...]
   [ 6,  8, 21, 15],   //      [2*3,  ...]
   [54, 48, 42, 60]]]] //      [2*3*9 ...]

Remarques

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

Disponibilité

Cet opérateur a été introduit dans DML_FEATURE_LEVEL_3_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 Genre 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 Sortie 1 à 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_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, UINT32
OutputTensor Sortie 1 à 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_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, UINT32
OutputTensor Sortie 4 FLOAT32, FLOAT16, INT32, UINT32

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Build 22000
Serveur minimal pris en charge Windows Build 22000
En-tête directml.h