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と一致している必要があります。 DataType は InputTensor.DataType と一致する必要があります。
OutputTensor
型: const DML_TENSOR_DESC*
結果を書き込むテンソル。 このテンソルの サイズ と DataType は InputTensor と一致している必要があります。
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
導入されました。
テンソル制約
- インデックスTensor、 InputTensor、 OutputTensor、 UpdatesTensor は同じ DimensionCount を持つ必要があります。
- InputTensor、 OutputTensor、 UpdatesTensor は同じ 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 |