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

テンソルの寸法の数。 このメンバーは、 Size 配列と Strides 配列のサイズを決定します (指定されている場合)。 DirectML では、演算子に応じて、ディメンション数の範囲は 1 から 8 までです。 ほとんどの演算子では、少なくとも 4 つのディメンションがサポートされています。

Sizes

型: const UINT*

テンソル内の各ディメンションのサイズ (要素単位)。 ディメンションに 0 のサイズを指定すると無効になり、エラーが発生します。 軸が意味を持つ演算子 (バッチ、チャネル、深さ、高さ、幅など) の場合、DimensionCount が 4 の場合は常に {N、C、H、W} の順序で Sizes メンバーが指定され、DimensionCount が 5 の場合は {N、C、D、H、W} が指定されます。 それ以外の場合、通常、ディメンションには特に意味はありません。

Strides

型: const UINT*

省略可能。 その次元の次の要素に到達するために直線的に走査する要素の数 (バイト数ではない) を決定します。 たとえば、次元 1 のストライドが 5 の場合、バッファーを直線的に走査する場合、その次元の要素 (n) と (n+1) の間の距離は 5 要素になります。 軸に意味 (バッチ、チャネル、深さ、高さ、幅など) がある演算子の場合、 Strides メンバーは常に、 DimensionCount が 4 の場合は {N、C、H、W}、 DimensionCount が 5 の場合は {N、C、D、H、W} の順序で指定されます。

ストライド は、ブロードキャスト (ストライド 0 を指定) とパディング (たとえば、行の物理サイズよりも大きいストライドを使用して行の末尾を埋め込む) を表現するために使用できます。

Strides が指定されていない場合、テンソル内の各ディメンションは連続してパックされていると見なされ、追加のパディングはありません。

TotalTensorSizeInBytes

種類: UINT64

このテンソルを含むバッファーの最小サイズをバイト単位で定義します。 TotalTensorSizeInBytes は、テンソルのサイズ、ストライド、データ型を指定すると、暗黙的な最小サイズと同じ以上である必要があります。 DMLCalcBufferTensorSize ユーティリティ free 関数を呼び出すことで、暗黙的な最小サイズを計算できます。

TotalTensorSizeInBytes を最小暗黙のサイズより大きくすると、TotalTensorSizeInBytes でテンソル データの末尾を超える十分なパディングが定義されている場合に、DirectML が境界チェックを省略できるようにすることで、追加の最適化が可能になる場合があります。

このテンソルをバインドする場合、バッファー範囲のサイズは TotalTensorSizeInBytes 以上である必要があります。 出力テンソルの場合、 DirectML が TotalTensorSizeInBytes 内の任意のメモリに書き込むという追加の効果があります。 つまり、アプリケーションでは、 DirectML が TotalTensorSizeInBytes 内にある出力テンソル内のパディング バイトを保持することを想定しないでください。

バッファー テンソルの合計サイズは、(2^32 - 1) 要素 ( たとえば、FLOAT32 テンソルの場合は 16 GB) を超えることはできません。

GuaranteedBaseOffsetAlignment

型: UINT

省略可能。 このテンソルを含むバッファー範囲のベース オフセットの最小保証アラインメントをバイト単位で定義します。最小保証アラインメントを提供しない場合は 0 を定義します。 指定する場合、この値は、少なくとも要素サイズと同じ大きさの 2 の累乗である必要があります。

このテンソルをバインドする場合、バッファーの先頭からのバッファー範囲のオフセットは、 GuaranteedBaseOffsetAlignment の倍数である必要があります (指定されている場合)。

バッファー テンソルの最小アラインメントは常に 16 バイトです。 ただし、 GuaranteedBaseOffsetAlignment に大きな値を指定すると、配置が大きいほどベクター化された読み込み/ストア命令を使用できるため、DirectML のパフォーマンスが向上する可能性があります。

このメンバーは省略可能ですが、最適なパフォーマンスを得るには、可能であれば、テンソルを 32 バイト以上の境界に合わせることをお勧めします。

要件

   
Header directml.h

関連項目

DirectML でのバインド