次の方法で共有


DML_SCATTER_ND_OPERATOR_DESC 構造体 (directml.h)

入力テンソル全体を出力にコピーし、選択したインデックスを更新テンソルの対応する値で上書きします。 この演算子は、次の擬似コード ("..." ) を実行します。は一連の座標を表し、軸とインデックスのサイズによって正確な動作が決まります。

output = input
output[indices[...]] = updates[...]

2 つの出力要素インデックスが重複している場合 (無効です)、最後の書き込みが優先される保証はありません。

構文

struct DML_SCATTER_ND_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *UpdatesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  InputDimensionCount;
  UINT                  IndicesDimensionCount;
};

メンバー

InputTensor

型: const DML_TENSOR_DESC*

読み取るテンソル。

IndicesTensor

型: const DML_TENSOR_DESC*

インデックスを含むテンソル。 このテン ソルの DimensionCount、InputTensor.DimensionCount と一致する必要があります。 IndexsTensor の最後のディメンションは、実際にはインデックス タプルあたりの座標の数であり、InputTensor.DimensionCount を超えることはできません。 たとえば、IndexsDimensionCount = 3 のサイズ{1,4,5,2}のインデックス テンソルは、InputTensor にインデックスを作成する 2 値座標タプルの 4x5 配列を意味します。

以降では、このテンソルで DML_FEATURE_LEVEL_3_0符号付き整数型を使用する場合、この演算子は負のインデックス値をサポートします。 負のインデックスは、それぞれのディメンションの末尾を基準として解釈されます。 たとえば、-1 のインデックスは、そのディメンションに沿った最後の要素を参照します。

UpdatesTensor

型: const DML_TENSOR_DESC*

対応するインデックスの既存の入力値を置き換える新しい値を含むテンソル。 このテン ソルの DimensionCount、InputTensor.DimensionCount と一致する必要があります。 想定される UpdatesTensor.Sizes は、インデックスの先頭のセグメントと InputTensor.Sizes の末尾セグメントを連結したもので、次のようになります。

indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
UpdatesTensor.Sizes = [
    1...,
    IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndicesDimensionCount) .. (IndicesTensor.DimensionCount - 1)],
    InputTensor.Sizes[(InputTensor.DimensionCount - indexTupleSize) .. InputTensor.DimensionCount]
]

これらのディメンションは右揃えで、 UpdatesTensor.DimensionCount を満たすために必要に応じて先頭に 1 つの値が付加されます。

次に例を示します。

InputTensor.Sizes = [3,4,5,6,7]
InputDimensionCount = 5
IndicesTensor.Sizes = [1,1, 1,2,3]
IndicesDimensionCount = 3 // can be thought of as a [1,2] array of 3-coordinate tuples

// The [1,2] comes from the indices tensor (ignoring last dimension, which is the tuple size),
// and the [6,7] comes from input tensor, ignoring the first 3 dimensions
// since the index tuples are 3 elements (from the indices tensor last dimension).
UpdatesTensor.Sizes = [1, 1,2,6,7]

OutputTensor

型: const DML_TENSOR_DESC*

結果を書き込むテンソル。 このテンソルの サイズDataType、InputTensor.Sizes と一致している必要があります。

InputDimensionCount

型: UINT

[1, InputTensor.DimensionCount ] の範囲の無関係な先行ディメンションを無視した後の 、InputTensor 内の実際の入力ディメンションの数。 たとえば、 InputTensor.Sizes = {1,1,4,6} と InputDimensionCount = 3 を指定すると、実際の意味のあるインデックスは です {1,4,6}。

IndicesDimensionCount

型: UINT

[1, IndexsTensor.DimensionCount ] の範囲の、無関係な先行ディメンションを無視した後の IndexsTensor 内の実際のインデックス ディメンションの数。 たとえば、 IndexsTensor.Sizes = {1,1,4,6} と IndexsDimensionCount = 3 を指定すると、実際の意味のあるインデックスは です {1,4,6}。

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

IndicesTensor: (Sizes:{4,1}, DataType:FLOAT32)
    [[4], [3], [1], [7]]

UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
    [9, 10, 11, 12]

// output = input
// output[indices[x, 0]] = updates[x]
OutputTensor: (Sizes:{8}, DataType:FLOAT32)
    [1, 11, 3, 10, 9, 6, 7, 12]

可用性

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

テンソル制約

  • インデックスTensOrInputTensorOutputTensorUpdatesTensor は、同じ DimensionCount を持つ必要があります。
  • InputTensorOutputTensorUpdatesTensor は同じ DataType である必要があります。

Tensor のサポート

DML_FEATURE_LEVEL_4_1以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 1 から 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
インデックスTensor 入力 1 から 8 INT64、INT32、UINT64、UINT32
UpdatesTensor 入力 1 から 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
OutputTensor 出力 1 から 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_3_0以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 1 から 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
インデックスTensor 入力 1 から 8 INT64、INT32、UINT64、UINT32
UpdatesTensor 入力 1 から 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 出力 1 から 8 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_2_1以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
インデックスTensor 入力 4 UINT32
UpdatesTensor 入力 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 出力 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

要件

要件
サポートされている最小のクライアント Windows 10 ビルド 20348
サポートされている最小のサーバー Windows 10 ビルド 20348
Header directml.h