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
...
如果兩個輸出元素索引重迭 () 無效,則不保證最後寫入會成功。
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*
包含索引到輸出張量中的張量。 除了Axis以外,大小必須符合每個維度的InputTensor.Sizes。
DML_FEATURE_LEVEL_3_0
從 開始,當搭配這個張量使用帶正負號整數型別時,這個運算子支援負數索引值。 負數索引會解譯為相對於座標軸維度的結尾。 例如,-1 的索引是指該維度的最後一個專案。
UpdatesTensor
類型:const DML_TENSOR_DESC*
包含新值的張量,以取代對應索引上的現有輸入值。 這個張 量的大小必須 符合 IndicesTensor.Sizes。 DataType必須符合InputTensor.DataType。
OutputTensor
類型:const DML_TENSOR_DESC*
要寫入結果的張量。 這個張量 的大小 和 資料類型 必須符合 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_SCATTER_ELEMENTS_OPERATOR_DESC ,作為與 DML_GATHER_ELEMENTS_OPERATOR_DESC的適當對應專案。 這是因為 DML_SCATTER_OPERATOR_DESC 與 DML_GATHER_OPERATOR_DESC不完全對稱。
可用性
這個運算子是在 中 DML_FEATURE_LEVEL_1_0
引進的。
Tensor 條件約束
- IndexesTensor、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) |
標頭 | directml.h |