Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengikat sekumpulan sumber daya sebagai tensor input.
Jika pengikatan untuk operator yang dikompilasi, jumlah pengikatan harus sama persis dengan jumlah input operator, termasuk tensor opsional. Ini dapat ditentukan dari deskripsi operator yang digunakan untuk membuat operator. Jika terlalu banyak atau terlalu sedikit pengikatan yang disediakan, penghapusan perangkat akan terjadi. Untuk tensor opsional, Anda dapat menggunakan DML_BINDING_TYPE_NONE untuk menentukan 'tanpa pengikatan'. Jika tidak, jenis pengikatan harus cocok dengan jenis tensor saat operator dibuat.
Untuk penginisialisasi operator, pengikatan input diharapkan berjenis DML_BINDING_TYPE_BUFFER_ARRAY dengan satu pengikatan input per operator untuk menginisialisasi, disediakan dalam urutan yang Anda tentukan operator selama pembuatan atau reset penginisialisasi. Setiap array buffer harus memiliki ukuran yang sama dengan jumlah input operator yang sesuai untuk diinisialisasi. Tensor input yang memiliki set bendera DML_TENSOR_FLAG_OWNED_BY_DML harus terikat selama inisialisasi—jika tidak, tidak ada yang harus terikat untuk tensor tersebut. Jika tidak ada yang terikat sebagai input untuk inisialisasi operator (artinya, tidak ada tensor dengan set bendera DML_TENSOR_FLAG_OWNED_BY_DML ) maka Anda dapat menyediakan nullptr atau DML_BUFFER_ARRAY_BINDING kosong untuk menunjukkan 'tidak ada pengikatan'.
Untuk membatalkan ikatan semua sumber daya input, berikan rangeCount 0, dan nilai nullptr untuk pengikatan.
Jika tensor input memiliki bendera DML_TENSOR_FLAG_OWNED_BY_DML yang ditetapkan, itu mungkin hanya terikat saat menjalankan penginisialisasi operator. Jika tidak, jika bendera DML_TENSOR_FLAG_OWNED_BY_DML tidak diatur, kebalikannya adalah true—tensor input tidak boleh terikat saat mengeksekusi penginisialisasi, tetapi harus terikat saat mengeksekusi operator itu sendiri.
Semua buffer yang terikat sebagai input harus memiliki jenis heap D3D12_HEAP_TYPE_DEFAULT, kecuali ketika bendera DML_TENSOR_FLAG_OWNED_BY_DML diatur. Jika DML_TENSOR_FLAG_OWNED_BY_DML diatur untuk tensor yang terikat sebagai input untuk penginisialisasi, jenis tumpukan buffer mungkin D3D12_HEAP_TYPE_DEFAULT atau D3D12_HEAP_TYPE_UPLOAD.
Beberapa pengikatan diizinkan untuk mereferensikan ID3D12Resource yang sama dalam beberapa kasus; namun, Anda harus berhati-hati ketika operator secara bersamaan membaca dan menulis ke wilayah sumber daya yang sama. Potensi bahaya pengikatan ada ketika: sepasang pengikatan mereferensikan ID3D12Resource yang sama, dan setidaknya salah satu pengikatan terlibat dalam penulisan, dan wilayah buffer berpotongan (tumpang tindih dengan setidaknya satu byte). Bahaya pengikatan divalidasi menggunakan aturan berikut, pada DirectML 1.7.0:
- Saat mengikat untuk inisialisasi, pengikatan input tidak pernah dapat mereferensikan sumber daya yang sama dengan pengikatan output—input disalin ke dalam sumber daya output (sumber daya persisten di masa mendatang untuk eksekusi), dan penyalinan mungkin memerlukan transisi status sumber daya.
- Saat mengikat eksekusi, pengikatan input dapat mereferensikan sumber daya yang sama dengan pengikatan output; namun, rentang pengikatan masing-masing hanya dapat berpotongan jika wilayah tersebut identik dan operator mendukung eksekusi di tempat.
- Jika ada, pengikatan persisten tidak boleh berpotongan dengan pengikatan output atau pengikatan sementara.
- Jika ada, pengikatan sementara tidak boleh berpotongan pengikatan input, pengikatan output, atau pengikatan persisten.
Aturan di atas mengasumsikan bahwa dua sumber daya tidak alias wilayah yang sama dari timbunan, sehingga diperlukan perhatian ekstra saat menggunakan sumber daya yang ditempatkan atau dipesan.
Sintaks
void BindInputs(
UINT bindingCount,
[in, optional] const DML_BINDING_DESC *bindings
);
Parameter
bindingCount
Jenis: UINT
Parameter ini menentukan ukuran array pengikatan (jika disediakan).
[in, optional] bindings
Jenis: const DML_BINDING_DESC*
Penunjuk opsional ke array konstanta DML_BINDING_DESC yang berisi deskripsi sumber daya tensor untuk mengikat.
Nilai kembali
Tidak ada
Keterangan
Contoh bahaya pengikatan
Dalam contoh di bawah ini, persegi mewakili sumber daya buffer yang direferensikan oleh setidaknya satu pengikatan dalam tabel pengikatan. Setiap baris menunjukkan rentang byte yang berpotensi dibaca (R) atau ditulis (W) oleh pengikatan bernama. Semua contoh mengasumsikan bahwa sumber daya tidak berbagi memori fisik yang sama.
Contoh 1
Contoh ini menunjukkan pengikatan input dan output yang mereferensikan sumber daya yang berbeda. Sepasang pengikatan yang mereferensikan sumber daya yang berbeda tidak pernah menjadi bahaya, jadi ini selalu merupakan pengikatan yang valid.
Resource A Resource B
+---------------+ +---------------+
Input 0: |RRRRRRRRRRRRRRR| | |
Output 0: | | |WWWWWWWWWWWWWWW|
+---------------+ +---------------+
Contoh 2
Contoh ini menunjukkan pengikatan input dan output yang mereferensikan berbagai wilayah dari sumber daya yang sama. Sepasang pengikatan dengan wilayah yang tidak tumpang tindih dari sumber daya yang sama bukanlah bahaya saat mengikat eksekusi. Ini adalah pengikatan yang valid saat mengikat untuk eksekusi, tetapi tidak valid saat mengikat inisialisasi.
Resource A
+---------------+
Input 0: |RRRRRRR |
Output 0: | WWWWWWWW|
+---------------+
Contoh: 3
Contoh ini menunjukkan dua pengikatan input yang tumpang tindih rentang. Sepasang pengikatan baca-saja (pengikatan input dan pengikatan persisten) tidak pernah bisa menjadi bahaya, terlepas dari persimpangan buffer-region, jadi ini selalu merupakan pengikatan yang valid.
Resource A Resource B
+---------------+ +---------------+
Input 0: |RRRRRRRRR | | |
Input 1: | RRRRRRRRR| | |
Output 0: | | |WWWWWWWWWWWWWWW|
+---------------+ +---------------+
Contoh 4
Contoh ini menunjukkan pengikatan input dan output dengan wilayah yang identik. Pengikatan ini valid jika dan hanya jika operator yang terikat mendukung eksekusi di tempat dan pengikatannya adalah untuk eksekusi.
Resource A
+---------------+
Input 0: |RRRRRRRRRRRRRRR|
Output 0: |WWWWWWWWWWWWWWW|
+---------------+
Contoh 5
Pengikatan berikut tidak pernah valid, terlepas dari dukungan eksekusi operator di tempat, karena melibatkan sepasang pengikatan dengan wilayah yang tumpang tindih yang tidak identik.
Resource A
+---------------+
Input 0: |RRRRRRRRRRRRR |
Output 0: | WWWWWWWWWWW|
+---------------+
Persyaratan
Persyaratan
| Target Platform | Windows |
| Header | directml.h |
| Pustaka | DirectML.lib |
| DLL | DirectML.dll |