DML_SCATTER_ND_OPERATOR_DESC結構 (directml.h)
將整個輸入張量複製到輸出,然後使用更新張量中的對應值覆寫選取的索引。 此運算符會執行下列虛擬程序代碼,其中 “...”表示一系列座標,其確切行為取決於座標軸和索引大小。
output = input
output[indices[...]] = updates[...]
如果兩個輸出元素索引重疊 (無效) ,則無法保證最後寫入會優先。
語法
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。 IndexesTensor 的最後一個維度實際上是每個索引元組的座標數目,而且不得超過 InputTensor.DimensionCount。 例如,具有 IndexesDimensionCount = 3 大小的{1,4,5,2}
索引張量表示索引為 InputTensor 的 4x5 陣列 2 值座標元組。
從 DML_FEATURE_LEVEL_3_0
開始,當搭配這個張量使用帶正負號整數型別時,這個運算元支援負數索引值。 負數索引會解譯為相對於個別維度結尾。 例如,-1 的索引會參考該維度的最後一個專案。
UpdatesTensor
類型: const DML_TENSOR_DESC*
包含新值的張量,以取代對應索引上的現有輸入值。 此張量的 DimensionCount 必須符合 InputTensor.DimensionCount。 預期的 UpdatesTensor.Sizes 是 IndexesTensor.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
忽略任何不相關的前置輸入維度之後, InputTensor 內的實際輸入維度數目,範圍為 [ 1,InputTensor.DimensionCount) 。 例如,假設 InputTensor.Sizes = {1,1,4,6} 和 InputDimensionCount = 3,實際的有意義索引為 {1,4,6}。
IndicesDimensionCount
類型: UINT
忽略任何不相關的前置索引維度之後, IndexesTensor 內的實際索引維度數目,範圍為 [ 1,IndicesTensor.DimensionCount) 。 例如,假設 IndexesTensor.Sizes = {1,1,4,6} 和 IndicesDimensionCount = 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
引進。
Tensor 條件約束
- IndicesTensor、 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 |
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 10 組建 20348 |
最低支援的伺服器 | Windows 10 組建 20348 |
標頭 | directml.h |