Bagikan melalui


Preemption GPU

Model preemption GPU yang lebih baru tersedia dimulai dengan Windows 8. Dalam model ini, sistem operasi tidak lagi memungkinkan pemisahan paket akses memori langsung (DMA) GPU dinonaktifkan, dan menjamin bahwa permintaan preemption akan dikirim ke GPU sebelum proses Deteksi dan Pemulihan Batas Waktu (TDR) dimulai.

Persyaratan Deskripsi
Versi Minimum Windows Display Driver Model (WDDM) 1.2
Versi Windows minimum 8
Implementasi driver—Grafik lengkap dan Render saja Wajib
Persyaratan dan pengujian WHLK Device.Graphics... Uji Preemption, Device.Graphics... FlipOnVSyncMmIo

Jika paket yang berjalan lama tidak dapat berhasil didahulukan, pekerjaan GPU berprioritas tinggi, seperti pekerjaan yang diperlukan oleh Desktop Window Manager (DWM), dapat tertunda, yang mengakibatkan gangguan selama transisi jendela dan animasi. Selain itu, paket GPU jangka panjang yang tidak dapat didahulukan dapat menyebabkan proses TDR berulang kali mengatur ulang GPU, dan akhirnya pemeriksaan bug sistem dapat terjadi.

Catatan Semua driver miniport tampilan WDDM 1.2 harus mendukung model preemption Windows 8. Namun, ketika beroperasi, driver WDDM 1.2 juga dapat menolak model preemption Windows 8 dan mempertahankan perilaku Windows 7 oleh penjadwal subsistem kernel grafis Microsoft DirectX.

Antarmuka driver perangkat preemisi GPU (DDI)

Antarmuka driver perangkat (DDI) berikut tersedia untuk driver miniport tampilan untuk mengimplementasikan model preemption GPU Windows 8.

Menampilkan implementasi driver miniport

Ikuti langkah-langkah umum ini untuk mengimplementasikan model preemption GPU Windows 8 di driver miniport tampilan Anda:

  1. Kompilasi driver Anda terhadap header yang memiliki DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8.
  2. Deklarasikan dukungan untuk model preemption GPU Windows 8 dengan mengatur anggota PreemptionAware dan MultiEngineAware dari struktur DXGK_VIDSCHCAPS ke 1. Untuk mendukung model preemption Windows 7, atur PreemptionAware ke nol.
  3. Tentukan tingkat granularitas preemption yang didukung dalam struktur D3DKMDT_PREEMPTION_CAPS , yang mengambil nilai konstan dari enumerasi D3DKMDT_GRAPHICS_PREEMPTION_GRANULARITY dan D3DKMDT_COMPUTE_PREEMPTION_GRANULARITY .
  4. Jika perangkat keras mendukung pengalihan konteks malas, kirimkan buffer panjang nol ke fungsi DxgkDdiSubmitCommand dan atur anggota pSubmitCommand-Flags-ContextSwitch>> ke 1. Perhatikan diskusi di bawah anggota ContextSwitch dari struktur DXGK_SUBMITCOMMANDFLAGS .
  5. Atur alokasi konteks GPU dan alokasi konteks perangkat dengan memanggil fungsi DxgkCbCreateContextAllocation . Perhatikan instruksi dan batasan spesifik yang diberikan dalam Keterangan untuk fungsi tersebut.
  6. Panggil fungsi DxgkCbDestroyContextAllocation untuk menghancurkan alokasi konteks GPU dan alokasi konteks perangkat yang dibuat dengan DxgkCbCreateContextAllocation.
  7. Saat menyiapkan buffer DMA sebagai respons terhadap panggilan ke fungsi DxgkDdiBuildPagingBuffer , inisialisasi sumber daya konteks dengan mengisi struktur internal InitContextResource dalam struktur DXGKARG_BUILDPAGINGBUFFER . Jika sumber daya konteks dikeluarkan atau direlokasi, manajer memori video akan mempertahankan konten sumber daya konteks.
  8. Driver harus mendukung flip I/O yang dipetakan memori pada sinkronisasi vertikal berikutnya. Dalam Windows 8, penjadwal GPU mencoba untuk mendahului perangkat keras bahkan jika flip tertunda. Oleh karena itu, untuk mencegah merobek dan merender artefak, driver harus mendukung model flip I/O yang dipetakan memori dan harus mengatur anggota FlipOnVSyncMmIo dari struktur DXGK_FLIPCAPS ke 1 dan mendukung operasi yang dijelaskan di bawah FlipOnVSyncMmIo.

Pertimbangan pemetaan memori dalam implementasi Anda

Buat driver yang kuat yang mendukung model preemption GPU Windows 8 dan memberikan pengalaman pengguna yang berkualitas dengan mengikuti panduan ini:

  • Minta preemption buffer mid-DMA dari GPU saat penjadwal kernel grafis DirectX (Dxgkrnl) mengirimkan perintah preemption. Perangkat keras yang memiliki granularitas preemption buffer mid-DMA yang lebih baik harus menghasilkan pengalaman pelanggan yang lebih baik.
  • Izinkan ID pagar perintah penomoran digunakan kembali: jika permintaan pemindahan menghasilkan perintah penomoran halaman sebelumnya dalam antrean perangkat keras, penjadwal Dxgkrnl akan mengirim ulang perintah penomoran halaman sebelumnya dengan ID pagar yang sama yang awalnya digunakan untuk mereka, dan perintah penomoran akan dijadwalkan sebelum perintah lain pada mesin tersebut. Perintah non-halaman akan dikirim ulang dengan ID pagar yang baru ditetapkan.
  • Berikan daftar lokasi patch untuk buffer DMA terpisah—lihat Memisahkan Buffer DMA.
  • Mode verifikasi, yang disebut deteksi kebocoran pengikatan, tersedia yang berjalan melalui daftar lokasi patch dan menolak paket yang tidak mengikat, atau yang tidak memprogram ulang alokasi untuk setiap paket terpisah. Beberapa perangkat keras mendukung alamat virtual, memungkinkan tingkat tidak langsung tambahan yang dapat membuat verifikasi ini tidak perlu. Dalam kasus seperti itu, untuk menunjukkan bahwa driver memilih keluar dari mode verifikasi, atur anggota NoDmaPatching dari struktur DXGK_VIDSCHCAPS ke 1.
  • Di Windows 7, penjadwal Dxgkrnl menjamin bahwa semua paket DMA terpisah yang sesuai dengan perintah render yang sama dijalankan secara berurutan tanpa beralih ke konteks render lain. Dalam model preemption Windows 8, penjadwal dapat menjalankan paket render dari konteks yang berbeda antara dua paket terpisah yang sesuai dengan perintah render yang sama. Sebagai konsekuensinya, driver yang menyadari preemption harus menangani pengiriman paket DMA terpisah/parsial dengan cara yang sama seperti pengiriman paket penuh biasa. Secara khusus, status GPU harus disimpan atau dipulihkan di batas untuk pengiriman tersebut.
  • Driver yang sadar preemption tidak boleh mengubah konten buffer DMA terpisah saat disiarkan ke beberapa adaptor dalam mode adaptor tampilan tertaut (LDA), di mana beberapa GPU fisik ditautkan untuk membentuk GPU virtual tunggal yang lebih cepat. Ini karena, dalam model preemption Windows 8, penjadwal Dxgkrnl tidak lagi menjamin eksekusi sinkron dari urutan paket terpisah tanpa beralih ke konteks lain. Driver yang mengubah konten paket DMA terpisah akan membahayakan integritas data paket karena jika paket dijalankan pada mesin lain, paket akan beroperasi pada salinan data buffer DMA yang sama.
  • Dalam model preemption GPU Windows 8, penjadwal Dxgkrnl memungkinkan pemindahan untuk paket yang telah mengaitkan primitif sinkronisasi "sinyal saat mengirimkan". Jika perangkat menggunakan primitif sinkronisasi "sinyal saat dikirim" bersama dengan status tunggu berbasis perangkat keras, perangkat harus mendukung kemampuan untuk mendahului instruksi tunggu sebelum kondisi tunggu terpenuhi.

Persyaratan sertifikasi perangkat keras

Untuk informasi tentang persyaratan yang harus dipenuhi perangkat keras saat menerapkan fitur ini, lihat dokumentasi WHCK yang relevan di Device.Graphics... Uji Preemption dan Device.Graphics... FlipOnVSyncMmIo.

Lihat fitur WDDM 1.2 untuk ulasan fitur yang ditambahkan dengan Windows 8.