次の方法で共有


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列挙の値の 1 つ。 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. 排他的合計

HasExclusiveSumTRUE に設定すると、出力テンソルに書き込むときに、実行中の集計から現在の要素の値を除外する効果があります。

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. 軸の方向

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

解説

この演算子はインプレース実行をサポートしています。つまり、バインド中に OutputTensorInputTensor のエイリアスを設定できます。

可用性

この演算子は で DML_FEATURE_LEVEL_2_1導入されました。

テンソル制約

InputTensorOutputTensor には、同じ DataTypeDimensionCount、および サイズが必要です。

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
Header directml.h