DML_ARGMAX_OPERATOR_DESC structure (directml.h)

Outputs the indices of the maximum-valued elements within one or more dimensions of the input tensor.

Each output element is the result of applying an argmax reduction on a subset of the input tensor. The argmax function outputs the index of the maximum-valued element within a set of input elements. The input elements involved in each reduction are determined by the provided input axes. Similarly, each output index is with respect to the provided input axes. If all input axes are specified, then the operator applies a single argmax reduction, and produces a single output element.

Syntax

struct DML_ARGMAX_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  AxisCount;
  const UINT            *Axes;
  DML_AXIS_DIRECTION    AxisDirection;
};

Members

InputTensor

Type: const DML_TENSOR_DESC*

The tensor to read from.

OutputTensor

Type: const DML_TENSOR_DESC*

The tensor to write the results to. Each output element is the result of an argmax reduction on a subset of elements from the InputTensor.

  • DimensionCount must match InputTensor.DimensionCount (the rank of the input tensor is preserved).
  • Sizes must match InputTensor.Sizes, except for dimensions included in the reduced Axes, which must be size 1.

AxisCount

Type: UINT

The number of axes to reduce. This field determines the size of the Axes array.

Axes

Type: _Field_size_(AxisCount) const UINT*

The axes along which to reduce. Values must be in the range [0, InputTensor.DimensionCount - 1].

AxisDirection

Type: DML_AXIS_DIRECTION

Determines which index to select when multiple input elements have the same value.

  • DML_AXIS_DIRECTION_INCREASING returns the index of the first maximum-valued element (for example, argmax({3,2,1,2,3}) = 0)
  • DML_AXIS_DIRECTION_DECREASING returns the index of the last maximum-valued element (for example, argmax({3,2,1,2,3}) = 4)

Examples

The examples in this section all use this same two-dimensional input tensor.

InputTensor: (Sizes:{3, 3}, DataType:FLOAT32)
[[1, 2, 3],
 [3, 0, 4],
 [2, 5, 2]]

Example 1. Applying argmax to columns

AxisCount: 1
Axes: {0}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{1, 3}, DataType:UINT32)
[[1,  // argmax({1, 3, 2})
  2,  // argmax({2, 0, 5})
  1]] // argmax({3, 4, 2})

Example 2. Applying argmax to rows

AxisCount: 1
Axes: {1}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{3, 1}, DataType:UINT32)
[[2], // argmax({1, 2, 3})
 [2], // argmax({3, 0, 4})
 [1]] // argmax({2, 5, 2})

Example 3. Applying argmax to all axes (the entire tensor)

AxisCount: 2
Axes: {0, 1}
AxisDirection: DML_AXIS_DIRECTION_INCREASING
OutputTensor: (Sizes:{1, 1}, DataType:UINT32)
[[7]]  // argmax({1, 2, 3, 3, 0, 4, 2, 5, 2})

Remarks

The output tensor sizes must be the same as the input tensor sizes, except for the reduced axes, which must be 1.

When AxisDirection is DML_AXIS_DIRECTION_INCREASING, this API is equivalent to DML_REDUCE_OPERATOR_DESC with DML_REDUCE_FUNCTION_ARGMAX.

A subset of this functionality is exposed through the DML_REDUCE_OPERATOR_DESC operator, and is supported on earlier DirectML feature levels.

Availability

This operator was introduced in DML_FEATURE_LEVEL_3_0.

Tensor constraints

InputTensor and OutputTensor must have the same DimensionCount.

Tensor support

DML_FEATURE_LEVEL_4_1 and above

Tensor Kind Supported dimension counts Supported data types
InputTensor Input 1 to 8 FLOAT32, FLOAT16, INT64, INT32, INT16, INT8, UINT64, UINT32, UINT16, UINT8
OutputTensor Output 1 to 8 INT64, INT32, UINT64, UINT32

DML_FEATURE_LEVEL_3_0 and above

Tensor Kind Supported dimension counts Supported data types
InputTensor Input 1 to 8 FLOAT32, FLOAT16, INT32, INT16, INT8, UINT32, UINT16, UINT8
OutputTensor Output 1 to 8 INT64, INT32, UINT64, UINT32

Requirements

Requirement Value
Minimum supported client Windows 10 Build 20348
Minimum supported server Windows 10 Build 20348
Header directml.h