DML_CUMULATIVE_SUMMATION_OPERATOR_DESC 结构 (directml.h)

沿轴对张量元素求和,将求和的运行计分写入输出张量。

语法

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

成员

InputTensor

类型: const DML_TENSOR_DESC*

包含要求和的元素的输入张量。

OutputTensor

类型: const DML_TENSOR_DESC*

要向其写入生成的累积求和的输出张量。 此张量的大小和数据类型必须与 InputTensor 相同。

Axis

类型: UINT

要对元素求和的维度的索引。 此值必须小于 InputTensorDimensionCount

AxisDirection

类型: DML_AXIS_DIRECTION

DML_AXIS_DIRECTION枚举的值之一。 如果设置为 DML_AXIS_DIRECTION_INCREASING,则通过升序元素索引沿指定轴遍历张量进行求和。 如果设置为 DML_AXIS_DIRECTION_DECREASING,则相反为 true,并且通过按索引降序遍历元素进行求和。

HasExclusiveSum

类型: BOOL

如果 为 TRUE,则在将正在运行的计值写入输出张量时,将排除当前元素的值。 如果 为 FALSE,则当前元素的值将包含在正在运行的计算中。

示例

本部分中的示例都使用以下属性的输入张量。

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

示例 1。 跨水平条的累积求和

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

示例 2。 独占总和

HasExclusiveSum 设置为 TRUE 的效果是,在写入输出张量时,将从正在运行的计票表中排除当前元素的值。

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

示例 3。 轴方向

AxisDirection 设置为 “DML_AXIS_DIRECTION_DECREASING ”的效果是,在计算正在运行的计算时,会反转元素的遍历顺序。

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

示例 4. 沿不同轴求和

在此示例中,求和垂直发生,沿高度轴 (维度 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 ...]

备注

此运算符支持就地执行,这意味着 允许 OutputTensor 在绑定期间为 InputTensor 别名。

可用性

此运算符是在 中引入的 DML_FEATURE_LEVEL_2_1

张量约束

InputTensorOutputTensor 必须具有相同的 DataTypeDimensionCountSize

Tensor 支持

DML_FEATURE_LEVEL_5_0及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32
OutputTensor 输出 1 到 8 FLOAT32、FLOAT16、INT64、INT32、UINT64、UINT32

DML_FEATURE_LEVEL_4_0及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 1 到 8 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 输出 1 到 8 FLOAT32、FLOAT16、INT32、UINT32

DML_FEATURE_LEVEL_2_1及更高版本

种类 支持的维度计数 支持的数据类型
InputTensor 输入 4 FLOAT32、FLOAT16、INT32、UINT32
OutputTensor 输出 4 FLOAT32、FLOAT16、INT32、UINT32

要求

   
最低受支持的客户端 Windows 10内部版本 20348
最低受支持的服务器 Windows 10内部版本 20348
标头 directml.h