共用方式為


DML_GATHER_OPERATOR_DESC結構 (directml.h)

使用 IndicesTensor座標軸上的輸入張量收集元素,以重新對應索引。 此運算符會執行下列虛擬程序代碼,其中 “...”代表一系列座標,其確切行為取決於座標軸和索引維度計數:

output[...] = input[..., indices[...], ...]

語法

struct DML_GATHER_OPERATOR_DESC {
  const DML_TENSOR_DESC *InputTensor;
  const DML_TENSOR_DESC *IndicesTensor;
  const DML_TENSOR_DESC *OutputTensor;
  UINT                  Axis;
  UINT                  IndexDimensions;
};

成員

InputTensor

類型: const DML_TENSOR_DESC*

要從中讀取的張量。

IndicesTensor

類型: const DML_TENSOR_DESC*

包含索引的張量。 此張量的 DimensionCount 必須符合 InputTensor.DimensionCount

DML_FEATURE_LEVEL_3_0開始,當搭配這個張量使用帶正負號整數型別時,這個運算元支援負數索引值。 負數索引會解譯為相對於座標軸維度結尾。 例如,-1 的索引會參考該維度的最後一個專案。

無效的索引會產生不正確的輸出,但不會發生失敗,而且所有讀取都會安全地固定在輸入張量記憶體中。

OutputTensor

類型: const DML_TENSOR_DESC*

要寫入結果的張量。 此 Tensor 的 DimensionCountDataType 必須符合 InputTensor.DimensionCount。 預期的 OutputTensor.SizesInputTensor.Sizes 的串連,其開頭和尾端區段會分割在目前 上,並在兩者之間插入 IndicesTensor.Sizes

OutputTensor.Sizes = {
    InputTensor.Sizes[0..Axis],
    IndicesTensor.Sizes[(IndicesTensor.DimensionCount - IndexDimensions) .. IndicesTensor.DimensionCount],
    InputTensor.Sizes[(Axis+1) .. InputTensor.DimensionCount]
}

維度靠右對齊,因此會裁剪輸入大小中的任何前置 1 個值,否則會溢位輸出 DimensionCount

這個張量中的相關維度數目取決於 IndexDimensionsInputTensor的原始排名。 原始排名是任何以前置間距填補之前的維度數目。 輸出中相關維度的數目可以透過 InputTensor + IndexDimensions - 1 的原始排名來計算。 此值必須小於或等於 OutputTensorDimensionCount

Axis

類型: UINT

要收集的 InputTensor 軸維度,範圍為 [0, *InputTensor.DimensionCount*)

IndexDimensions

類型: UINT

忽略任何不相關的前置索引維度之後的實際索引維度 IndicesTensor 數目,範圍為 [0, IndicesTensor.DimensionCount) 。 例如,假設 IndicesTensor.Sizes = { 1, 1, 4, 6 }IndexDimensions = 3,實際的有意義索引為 。{ 1, 4, 6 }

範例

範例 1. 1D 重新對應

Axis: 0
IndexDimensions: 1

InputTensor: (Sizes:{4}, DataType:FLOAT32)
    [11,12,13,14]

IndicesTensor: (Sizes:{5}, DataType:UINT32)
    [3,1,3,0,2]

// output[x] = input[indices[x]]
OutputTensor: (Sizes:{5}, DataType:FLOAT32)
    [14,12,14,11,13]

範例 2. 2D 輸出、1D 索引、軸 0、串連數據列

Axis: 0
IndexDimensions: 1

InputTensor: (Sizes:{3,2}, DataType:FLOAT32)
    [[1,2], // row 0
     [3,4], // row 1
     [5,6]] // row 2

IndicesTensor: (Sizes:{1, 4}, DataType:UINT32)
    [[0,
      1,
      1,
      2]]

// output[y, x] = input[indices[y], x]
OutputTensor: (Sizes:{4,2}, DataType:FLOAT32)
    [[1,2], // input row 0
     [3,4], // input row 1
     [3,4], // input row 1
     [5,6]] // input row 2

範例 3. 2D,軸 1,交換數據行

Axis: 1
IndexDimensions: 2

InputTensor: (Sizes:{3,2}, DataType:FLOAT32)
    [[1,2],
     [3,4],
     [5,6]]

IndicesTensor: (Sizes:{1, 2}, DataType:UINT32)
    [[1,0]]

// output[y, x] = input[y, indices[x]]
OutputTensor: (Sizes:{3,2}, DataType:FLOAT32)
    [[2,1],
     [4,3],
     [6,5]]

範例 4. 2D、軸 1、巢狀索引

Axis: 2
IndexDimensions: 2

InputTensor: (Sizes:{1, 3,3}, DataType:FLOAT32)
    [ [[1,2,3],
       [4,5,6],
       [7,8,9]] ]

IndicesTensor: (Sizes:{1, 1,2}, DataType:UINT32)
    [ [[0,2]] ]

// output[z, y, x] = input[z, indices[y, x]]
OutputTensor: (Sizes:{3,1,2}, DataType:FLOAT32)
    [[[1,3]],
     [[4,6]],
     [[7,9]]]

範例 5. 2D、軸 0、巢狀索引

Axis: 1
IndexDimensions: 2

InputTensor: (Sizes:{1, 3,2}, DataType:FLOAT32)
    [ [[1,2],
       [3,4],
       [5,6]] ]

IndicesTensor: (Sizes:{1, 2,2}, DataType:UINT32)
    [ [[0,1],
       [1,2]] ]

// output[z, y, x] = input[indices[z, y], x]
OutputTensor: (Sizes:{2,2,2}, DataType:FLOAT32)
    [[[1,2], [3,4]],
     [[3,4], [5,6]]]

可用性

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

Tensor 條件約束

  • IndicesTensorInputTensorOutputTensor 必須具有相同的 DimensionCount
  • InputTensorOutputTensor 必須具有相同 的 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
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
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
OutputTensor 輸出 4 FLOAT32、FLOAT16、INT32、INT16、INT8、UINT32、UINT16、UINT8

DML_FEATURE_LEVEL_1_0和更新版本

種類 支援的維度計數 支援的資料類型
InputTensor 輸入 4 FLOAT32、FLOAT16
IndicesTensor 輸入 4 UINT32
OutputTensor 輸出 4 FLOAT32、FLOAT16

規格需求

   
標頭 directml.h