DML_CUMULATIVE_PRODUCT_OPERATOR_DESC structure (directml.h)
Multiplies the elements of a tensor along an axis, writing the running tally of the product into the output 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;
};
Members
InputTensor
Type: const DML_TENSOR_DESC*
A tensor containing the input data. This is typically the same tensor that was provided as the InputTensor to DML_BATCH_NORMALIZATION_OPERATOR_DESC in the forward pass.
The input tensor containing elements to be multiplied.
OutputTensor
Type: const DML_TENSOR_DESC*
The output tensor to write the resulting cumulative products to. This tensor must have the same sizes and data type as InputTensor.
Axis
Type: UINT
The index of the dimension to multiply elements over. This value must be less than the DimensionCount of the InputTensor.
AxisDirection
Type: DML_AXIS_DIRECTION
One of the values of the DML_AXIS_DIRECTION enumeration. If set to DML_AXIS_DIRECTION_INCREASING, then the product occurs by traversing the tensor along the specified axis by ascending element index. If set to DML_AXIS_DIRECTION_DECREASING, the reverse is true and the product occurs by traversing elements by descending index.
HasExclusiveProduct
Type: BOOL
If TRUE, then the value of the current element is excluded when writing the running tally to the output tensor. If FALSE, then the value of the current element is included in the running tally.
Examples
The examples in this section all use this same input tensor.
InputTensor: (Sizes:{1,1,3,4}, DataType:FLOAT32)
[[[[2, 1, 3, 5],
[3, 8, 7, 3],
[9, 6, 2, 4]]]]
Example 1. Cumulative product across horizontal 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]]]] // [... ]
Example 2. Exclusive products
Setting HasExclusiveProduct to TRUE has the effect of excluding the current element's value from the running tally when writing to the output tensor.
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]]]]
Example 3. Axis direction
Setting the AxisDirection to DML_AXIS_DIRECTION_DECREASING has the effect of reversing the traversal order of elements when computing the running tally.
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]]]] // [... ]
Example 4. Multiplying along a different axis
In this example, the product occurs vertically, along the height axis (second 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 ...]
Remarks
This operator supports in-place execution, meaning that the output tensor is permitted to alias InputTensor during binding.
Availability
This operator was introduced in DML_FEATURE_LEVEL_3_1
.
Tensor constraints
InputTensor and OutputTensor must have the same DataType, DimensionCount, and Sizes.
Tensor support
DML_FEATURE_LEVEL_5_0 and above
Tensor | Kind | Supported dimension counts | Supported data types |
---|---|---|---|
InputTensor | Input | 1 to 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
OutputTensor | Output | 1 to 8 | FLOAT32, FLOAT16, INT64, INT32, UINT64, UINT32 |
DML_FEATURE_LEVEL_4_0 and above
Tensor | Kind | Supported dimension counts | Supported data types |
---|---|---|---|
InputTensor | Input | 1 to 8 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Output | 1 to 8 | FLOAT32, FLOAT16, INT32, UINT32 |
DML_FEATURE_LEVEL_3_1 and above
Tensor | Kind | Supported dimension counts | Supported data types |
---|---|---|---|
InputTensor | Input | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
OutputTensor | Output | 4 | FLOAT32, FLOAT16, INT32, UINT32 |
Requirements
Requirement | Value |
---|---|
Minimum supported client | Windows Build 22000 |
Minimum supported server | Windows Build 22000 |
Header | directml.h |