次の方法で共有


DML_SCATTER_OPERATOR_DESC構造体 (directml.h)

入力テンソル全体を出力にコピーし、選択したインデックスを更新テンソルの対応する値で上書きします。 この演算子は、次の擬似コードを実行します。

output = input
output[index[i, j, k, ...], j, k, ...] = updates[i, j, k, ...] // if axis == 0
output[i, index[i, j, k, ...], k, ...] = updates[i, j, k, ...] // if axis == 1
output[i, j, index[i, j, k, ...], ...] = updates[i, j, k, ...] // if axis == 2
...

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

DML_SCATTER_OPERATOR_DESC は、 DML_GATHER_OPERATOR_DESCの逆関数です。

構文

struct DML_SCATTER_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *UpdatesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
};

メンバー

InputTensor

型: const DML_TENSOR_DESC*

読み取るテンソル。

IndicesTensor

型: const DML_TENSOR_DESC*

出力テンソルへのインデックスを含むテンソル。 [サイズ] は、を除くすべてのディメンションの InputTensor.Sizes と一致する必要があります。

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

UpdatesTensor

型: const DML_TENSOR_DESC*

対応するインデックスの既存の入力値を置き換える新しい値を含むテンソル。 このテンソルの サイズ、インデックスTensor.Sizesと一致している必要があります。 DataTypeInputTensor.DataType と一致する必要があります。

OutputTensor

型: const DML_TENSOR_DESC*

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

Axis

型: UINT

OutputTensor のインデックス作成に使用する軸の寸法 。範囲[0, OutputTensor.DimensionCount)は です。

例 1. 1D 散布図

Axis: 0

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

IndicesTensor: (Sizes:{4}, DataType:UINT32)
    [3,1,3,0]

UpdatesTensor: (Sizes:{4}, DataType:FLOAT32)
    [5,6,7,8]

// output = input
// output[indices[x]] = updates[x]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
    [8,6,2,7,4]

例 2. 2D 散布図

Axis: 0

InputTensor: (Sizes:{2,3}, DataType:FLOAT32)
    [[0.0, 0.0, 0.0],
     [0.0, 0.0, 0.0],
     [0.0, 0.0, 0.0]]

IndicesTensor: (Sizes:{2,3}, DataType:UINT32)
    [[1, 0, 2],
     [0, 2, 1]]

UpdatesTensor: (Sizes:{2,3}, DataType:FLOAT32)
    [[10, 11, 12],
     [20, 21, 22]]

// output = input
// output[indices[y, x], x] = updates[y, x]
OutputTensor: (Sizes:{3,3}, DataType:FLOAT32)
    [[20, 11,  0],
     [10,  0, 22],
     [ 0, 21, 12]]

解説

DML_SCATTER_OPERATOR_DESC は、DML_GATHER_ELEMENTS_OPERATOR_DESCに対応する適切な名前 DML_SCATTER_ELEMENTS_OPERATOR_DESC適切にエイリアス化されています。 これは、 DML_SCATTER_OPERATOR_DESC が実際には DML_GATHER_OPERATOR_DESCに対称でなかったためです。

可用性

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

テンソル制約

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

Tensor のサポート

DML_FEATURE_LEVEL_4_1以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 1 から 8 FLOAT64、FLOAT32、FLOAT16、INT64、INT32、INT16、INT8、UINT64、UINT32、UINT16、UINT8
IndicesTensor 入力 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
IndicesTensor 入力 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
IndicesTensor 入力 4 UINT32
UpdatesTensor 入力 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8
OutputTensor 出力 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_1_0以上

テンソル 種類 サポートされているディメンション数 サポートされるデータ型
InputTensor 入力 4 FLOAT32、FLOAT16
IndicesTensor 入力 4 UINT32
UpdatesTensor 入力 4 FLOAT32、FLOAT16
OutputTensor 出力 4 FLOAT32、FLOAT16

要件

   
サポートされている最小のクライアント Windows 10バージョン 2004 (10.0;ビルド 19041)
サポートされている最小のサーバー Windows Server バージョン 2004 (10.0;ビルド 19041)
Header directml.h