Bagikan melalui


struktur DML_BUFFER_TENSOR_DESC (directml.h)

Menjelaskan tensor yang akan disimpan dalam sumber daya buffer Direct3D 12. Jenis tensor yang sesuai DML_TENSOR_TYPE_BUFFER, dan jenis pengikatan yang sesuai DML_BINDING_TYPE_BUFFER.

Sintaks

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;
};

Anggota

DataType

Jenis: DML_TENSOR_DATA_TYPE

Jenis nilai dalam tensor.

Flags

Jenis: DML_TENSOR_FLAGS

Menentukan opsi tambahan untuk tensor.

DimensionCount

Jenis: UINT

Jumlah dimensi tensor. Anggota ini menentukan ukuran array Ukuran dan Strides (jika disediakan). Di DirectML, jumlah dimensi dapat berkisar antara 1 hingga 8, tergantung pada operator. Sebagian besar operator mendukung setidaknya 4 dimensi.

Sizes

Jenis: const UINT*

Ukuran, dalam elemen, dari setiap dimensi dalam tensor. Menentukan ukuran nol dalam dimensi apa pun tidak valid, dan akan mengakibatkan kesalahan. Untuk operator di mana sumbu memiliki arti semantik (misalnya, batch, saluran, kedalaman, tinggi, lebar), anggota Ukuran selalu ditentukan dalam urutan {N, C, H, W} jika DimensionCount adalah 4, dan {N, C, D, H, W} jika DimensionCount adalah 5. Jika tidak, dimensi umumnya tidak memiliki arti tertentu.

Strides

Jenis: const UINT*

Opsional. Menentukan jumlah elemen (bukan byte) untuk melintasi secara linier untuk mencapai elemen berikutnya dalam dimensi tersebut. Misalnya, langkah 5 dalam dimensi 1 berarti bahwa jarak antara elemen (n) dan (n+1) dalam dimensi tersebut adalah 5 elemen saat melintasi buffer secara linier. Untuk operator di mana sumbu memiliki arti semantik (misalnya, batch, saluran, kedalaman, tinggi, lebar), anggota Strides selalu ditentukan dalam urutan {N, C, H, W} jika DimensionCount adalah 4, dan {N, C, D, H, W} jika DimensionCount adalah 5.

Stride dapat digunakan untuk mengekspresikan penyiaran (dengan menentukan langkah 0) serta padding (misalnya, dengan menggunakan langkah yang lebih besar dari ukuran fisik baris, untuk melengkungkan ujung baris).

Jika Strides tidak ditentukan, setiap dimensi dalam tensor dianggap dikemas secara berdekatan, tanpa padding tambahan.

TotalTensorSizeInBytes

Jenis: UINT64

Menentukan ukuran minimum dalam byte untuk buffer yang akan berisi tensor ini. TotalTensorSizeInBytes harus setidaknya sebesar ukuran tersirat minimum mengingat ukuran, langkah, dan jenis data tensor. Anda dapat menghitung ukuran tersirat minimum dengan memanggil fungsi gratis utilitas DMLCalcBufferTensorSize .

Menyediakan TotalTensorSizeInBytes yang lebih besar dari ukuran tersirat minimum dapat memungkinkan pengoptimalan tambahan dengan memungkinkan DirectML untuk memeriksa batas elida dalam beberapa kasus jika TotalTensorSizeInBytes menentukan padding yang memadai di luar akhir data tensor.

Saat mengikat tensor ini, ukuran rentang buffer harus setidaknya sebesar TotalTensorSizeInBytes. Untuk tensor output, ini memiliki efek tambahan dari mengizinkan DirectML untuk menulis ke memori apa pun dalam TotalTensorSizeInBytes. Artinya, aplikasi Anda tidak boleh berasumsi bahwa DirectML akan mempertahankan byte padding apa pun di dalam tensor output yang ada di dalam TotalTensorSizeInBytes.

Ukuran total tensor buffer tidak boleh melebihi (2^32 - 1) elemen—misalnya, 16GB untuk tensor FLOAT32 .

GuaranteedBaseOffsetAlignment

Jenis: UINT

Pilihan. Menentukan perataan minimum yang dijamin dalam byte untuk offset dasar rentang buffer yang akan berisi tensor ini, atau 0 untuk tidak memberikan perataan minimum yang dijamin. Jika ditentukan, nilai ini harus memiliki kekuatan dua yang setidaknya sebesar ukuran elemen.

Saat mengikat tensor ini, offset dalam byte rentang buffer dari awal buffer harus berupa kelipatan GuaranteedBaseOffsetAlignment, jika disediakan.

Tensor buffer selalu memiliki penyelarasan minimum 16 byte. Namun, memberikan nilai yang lebih besar untuk GuaranteedBaseOffsetAlignment dapat memungkinkan DirectML untuk mencapai performa yang lebih baik, karena penyelarasan yang lebih besar memungkinkan penggunaan instruksi beban/penyimpanan vektor.

Meskipun anggota ini bersifat opsional, untuk performa terbaik, kami sarankan Anda menyelaraskan tensor ke batas 32 byte atau lebih, jika memungkinkan.

Persyaratan

   
Header directml.h

Lihat juga

Pengikatan di DirectML