Share via


DML_CUMULATIVE_PRODUCT_OPERATOR_DESC-Struktur (directml.h)

Multipliziert die Elemente eines Tensors entlang einer Achse und schreibt die laufende Tallye des Produkts in den Ausgabe tensor.

Syntax

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

Member

InputTensor

Typ: const DML_TENSOR_DESC*

Ein Tensor, der die Eingabedaten enthält. Dies ist in der Regel derselbe Tensor, der als InputTensor bereitgestellt wurde, um im Vorwärtsdurchlauf DML_BATCH_NORMALIZATION_OPERATOR_DESC .

Der Eingabe-Tensor, der zu multiplizierende Elemente enthält.

OutputTensor

Typ: const DML_TENSOR_DESC*

Der Ausgabe-Tensor, in den die resultierenden kumulativen Produkte geschrieben werden sollen. Dieser Tensor muss die gleiche Größe und denselben Datentyp wie InputTensor aufweisen.

Axis

Typ: UINT

Der Index der Dimension, über die Elemente multipliziert werden sollen. Dieser Wert muss kleiner als der DimensionCount des InputTensor sein.

AxisDirection

Typ: DML_AXIS_DIRECTION

Einer der Werte der DML_AXIS_DIRECTION-Enumeration . Wenn auf DML_AXIS_DIRECTION_INCREASING festgelegt ist, erfolgt das Produkt, indem der Tensor entlang der angegebenen Achse durch den aufsteigenden Elementindex durchlaufen wird. Wenn auf DML_AXIS_DIRECTION_DECREASING festgelegt ist, ist die Umgekehrte true, und das Produkt erfolgt durch Durchlaufen von Elementen durch den absteigenden Index.

HasExclusiveProduct

Typ: BOOL

Bei TRUE wird der Wert des aktuellen Elements ausgeschlossen, wenn die ausgeführte Ally in den Ausgabe tensor geschrieben wird. Wenn FALSE, wird der Wert des aktuellen Elements in die ausgeführte Ally eingeschlossen.

Beispiele

In den Beispielen in diesem Abschnitt wird derselbe Eingabe tensor verwendet.

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

Beispiel 1: Kumulatives Produkt für horizontale Slivers

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]]]]     //      [...                   ]

Beispiel 2: Exklusive Produkte

Wenn HasExclusiveProduct auf TRUE festgelegt wird, wird der Wert des aktuellen Elements beim Schreiben in den Ausgabe tensor von der ausgeführten Ally ausgeschlossen.

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]]]]

Beispiel 3: Achsenrichtung

Das Festlegen von AxisDirection auf DML_AXIS_DIRECTION_DECREASING bewirkt, dass die Durchlaufreihenfolge von Elementen beim Berechnen der Ausgeführten Ally umgekehrt wird.

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]]]]  //      [...                   ]

Beispiel 4. Multiplizieren entlang einer anderen Achse

In diesem Beispiel tritt das Produkt vertikal entlang der Höhenachse (zweite Dimension) auf.

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 ...]

Hinweise

Dieser Operator unterstützt die direkte Ausführung, was bedeutet, dass der Ausgabe-Tensor während der Bindung den Alias InputTensor verwenden darf.

Verfügbarkeit

Dieser Operator wurde in DML_FEATURE_LEVEL_3_1eingeführt.

Tensoreinschränkungen

InputTensor und OutputTensor müssen denselben DataType, DimensionCount und Sizes aufweisen.

Tensorunterstützung

DML_FEATURE_LEVEL_5_0 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 1 bis 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32
OutputTensor Ausgabe 1 bis 8 FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_4_0 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 1 bis 8 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Ausgabe 1 bis 8 FLOAT32, FLOAT16, INT32, UINT32

DML_FEATURE_LEVEL_3_1 und höher

Tensor Variante Unterstützte Dimensionsanzahl Unterstützte Datentypen
InputTensor Eingabe 4 FLOAT32, FLOAT16, INT32, UINT32
OutputTensor Ausgabe 4 FLOAT32, FLOAT16, INT32, UINT32

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Build 22000
Unterstützte Mindestversion (Server) Windows Build 22000
Kopfzeile directml.h