共用方式為


DML_BUFFER_TENSOR_DESC結構 (directml.h)

描述將儲存在 Direct3D 12 緩衝區資源的張量。 對應的張量類型 DML_TENSOR_TYPE_BUFFER,且對應的系結類型 DML_BINDING_TYPE_BUFFER

語法

struct DML_BUFFER_TENSOR_DESC {
  DML_TENSOR_DATA_TYPE DataType;
  DML_TENSOR_FLAGS     Flags;
  UINT                 DimensionCount;
  const UINT           *Sizes;
  const UINT           *Strides;
  UINT64               TotalTensorSizeInBytes;
  UINT                 GuaranteedBaseOffsetAlignment;
};

成員

DataType

類型: DML_TENSOR_DATA_TYPE

張量中的值型別。

Flags

類型: DML_TENSOR_FLAGS

指定張量的其他選項。

DimensionCount

類型: UINT

張量維度的數目。 如果提供) ,這個成員會決定 sizeStrides 陣列的大小 (。 在 DirectML 中,維度計數的範圍可能從 1 到 8,視 運算子而定。 大部分運算子至少支援 4 個維度。

Sizes

類型:const UINT*

張量中每個維度的大小,以元素為單位。 在任何維度中指定零的大小無效,並會導致錯誤。 對於軸具有語意意義的運算子 (,例如批次、通道、深度、高度、寬度) ,如果DimensionCount 為 4,則大小成員一律會以 {N、C、H、W} 的順序指定,如果DimensionCount為 4,則為 {N、C、D、H、W}。 否則,維度通常沒有任何特定意義。

Strides

類型:const UINT*

選擇性。 決定 (不是位元組數,) 以線性方式周遊,以到達該維度中的下一個專案。 例如,維度 1 中的 5 個間距表示線上性周遊緩衝區時,該維度中元素之間的距離 (n) 和 (n+1) 為 5 個元素。 對於軸具有語意意義 (的運算子,例如批次、通道、深度、高度、寬度) ,如果DimensionCount為 4,則一律會以 {N、C、H、W} 的順序指定Strides成員,如果DimensionCount為 4,則為 {N、C、D、H、W}。

跨階 可用來表示廣播 (,方法是指定 0 個) 的寬限以及填補 (,例如使用大於資料列實體大小的步幅來填補資料列的結尾) 。

如果未指定 Strides ,則張量中的每個維度都會被視為連續封裝,而不會有額外的邊框間距。

TotalTensorSizeInBytes

類型: UINT64

為將包含這個張量的緩衝區定義位元組大小下限。 TotalTensorSizeInBytes 必須至少與根據張量的大小、步進和資料類型,最小隱含大小相同。 您可以呼叫 DMLCalcBufferTensorSize 公用程式免費函式來計算隱含大小下限。

提供大於最小隱含大小的 TotalTensorSizeInBytes ,可能會允許 DirectML 在某些情況下進行滑動界限檢查,如果 TotalTensorSizeInBytes 定義超出張量資料結尾的足夠填補,可能會啟用額外的優化。

系結此張量時,緩衝區範圍的大小必須至少與 TotalTensorSizeInBytes相同。 對於輸出張量,這有額外的效果,可讓 DirectML 寫入 TotalTensorSizeInBytes中的任何記憶體。 也就是說,您的應用程式不得假設 DirectML 會在 TotalTensorSizeInBytes內的輸出張量內保留任何填補位元組。

緩衝區張量的大小總計不能超過 (2^32 - 1 個) 元素,例如, FLOAT32 張量為 16GB。

GuaranteedBaseOffsetAlignment

類型: UINT

選擇性。 針對將包含此張量或 0 的緩衝區範圍基底位移,以位元組為單位定義最小保證的對齊方式,或 0 以提供不保證的最小對齊方式。 如果指定,這個值必須是至少大於元素大小的兩個乘冪。

系結此張量時,如果提供,緩衝區開頭的緩衝區範圍位元組位移必須是 GuaranteedBaseOffsetAlignment的倍數。

緩衝區張量一律有 16 個位元組的最小對齊方式。 不過,為 GuaranteedBaseOffsetAlignment 提供較大的值可能會讓 DirectML 達到更好的效能,因為較大的對齊方式可讓您使用向量化載入/存放區指令。

雖然這個成員是選擇性的,但為了達到最佳效能,我們建議您盡可能將張量對齊 32 個位元組以上的界限。

規格需求

   
標頭 directml.h

另請參閱

在 DirectML 中繫結