DML_GATHER_ND_OPERATOR_DESC 構造体 (directml.h)
インデックス テンソルを使用して入力テンソルから要素を収集し、インデックスを入力のサブブロック全体に再マップします。 この演算子は、次の擬似コード ("..." ) を実行します。は一連の座標を表し、正確な動作は入力とインデックスのディメンション数に依存します。
output[...] = input[indices[...]]
構文
struct DML_GATHER_ND_OPERATOR_DESC {
const DML_TENSOR_DESC *InputTensor;
const DML_TENSOR_DESC *IndicesTensor;
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 のインデックスは、そのディメンションに沿った最後の要素を参照します。
OutputTensor
型: const DML_TENSOR_DESC*
結果を書き込むテンソル。 このテン ソルの DimensionCount と DataType は 、InputTensor.DimensionCount と一致する必要があります。 想定される OutputTensor.Sizes は、インデックスの先頭のセグメントと InputTensor.Sizes の末尾セグメントを連結したもので、次の結果が得られます。
indexTupleSize = IndicesTensor.Sizes[IndicesTensor.DimensionCount - 1]
OutputTensor.Sizes = {
1...,
IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndicesDimensionCount) .. (IndicesTensor.DimensionCount - 1)],
InputTensor.Sizes[(InputTensor.DimensionCount - indexTupleSize) .. InputTensor.DimensionCount]
}
出力ディメンションは右揃えで、 OutputTensor.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).
OutputTensor.Sizes = {1, 1,2,6,7}
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}
。
例
例 1. 1D 再マップ
InputDimensionCount: 2
IndicesDimensionCount: 2
InputTensor: (Sizes:{2,2}, DataType:FLOAT32)
[[0,1],[2,3]]
IndicesTensor: (Sizes:{2,1}, DataType:UINT32)
[[1],[0]]
// output[y, x] = input[indices[y], x]
OutputTensor: (Sizes:{2,2}, DataType:FLOAT32)
[[2,3],[0,1]]
例 2. 2D 再マップ
InputDimensionCount: 3
IndicesDimensionCount: 2
InputTensor: (Sizes:{1, 2,2,2}, DataType:FLOAT32)
[ [[[0,1],[2,3]],[[4,5],[6,7]]] ]
IndicesTensor: (Sizes:{1,1, 2,2}, DataType:UINT32)
[[ [[0,1],[1,0]] ]]
// output[y, x] = input[indices[y, 0], indices[y, 1], x]
OutputTensor: (Sizes:{1,1, 2,2}, DataType:FLOAT32)
[[ [[2,3],[4,5]] ]]
注釈
この演算子の新しいバージョンである DML_OPERATOR_GATHER_ND1
が で DML_FEATURE_LEVEL_3_0
導入されました。
可用性
この演算子は、 で DML_FEATURE_LEVEL_2_1
導入されました。
テンソル制約
- インデックスTensor、 InputTensor、 および OutputTensor は、同じ DimensionCount を持つ必要があります。
- InputTensor と OutputTensor の 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 |
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 |
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 |
OutputTensor | 出力 | 4 | FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8 |
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 ビルド 20348 |
サポートされている最小のサーバー | Windows 10 ビルド 20348 |
Header | directml.h |