共用方式為


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.SizesDataType必須符合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_DESCDML_GATHER_OPERATOR_DESC不完全對稱。

可用性

這個運算子是在 中 DML_FEATURE_LEVEL_1_0 引進的。

Tensor 條件約束

  • IndexesTensorInputTensor、OutputTensorUpdatesTensor必須具有相同的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)
標頭 directml.h