DirectX 12 memperlihatkan antrian perintah untuk grafik (disebut "Direct"), menghitung atau menyalin tugas. Dalam hal fungsionalitas yang disediakan, masing-masing adalah super-set yang berikut ini. The Spesifikasi menyatakan bahwa antrian perintah dapat dijalankan secara bersamaan oleh perangkat. Namun, API tidak membatasi jumlah antrian perintah dengan cara apa pun (setidaknya saya tidak mengetahui adanya batasan).
Tampaknya, berbagai vendor menangani ini sangat berbeda:
- Intel menyatakan dalam presentasi baru - baru ini (slide 23) bahwa saat ini GPU mereka tidak mampu menangani Grafik & Komputasi secara paralel dan bahwa mesin fotokopi memiliki throughput yang lemah. Mereka menyarankan agar tidak menggunakan banyak grafik / menghitung antrian.
- AMD mulai sejak lama untuk mengiklankan penggunaan antrian / "asynchronous shaders" yang dimulai dengan Mantle dan konsol gen saat ini. Ada juga beberapa pengembang ( contoh ) yang mengkonfirmasi keuntungan kinerja yang signifikan dengan menjalankan tugas komputasi dan grafik secara paralel.
- Baru-baru ini ada beberapa keributan tentang Nvidia yang tidak mendukung asynchronous shader di perangkat keras: Menggunakan grafik yang terpisah dan antrian Compute secara bersamaan tampaknya membuat hal-hal lebih lambat yang menunjukkan emulasi driver. Operasi penyalinan paralel, di sisi lain, telah didukung oleh CUDA untuk waktu yang sangat lama, yang membuatnya jelas bahwa mesin DMA dapat bekerja secara independen.
Apakah ada cara untuk memutuskan pada saat runtime jika itu berarti untuk melakukan CommandLists ke beberapa CommandQueues alih-alih satu? (mengingat bahwa kasus sebelumnya tidak melibatkan banyak overhead teknik)
Walaupun saya dapat dengan mudah melihat bagaimana melakukan operasi memori secara paralel untuk menghitung / operasi grafis, saya merasa sangat rumit untuk menjalankan banyak proses komputasi dan grafik secara paralel (kecuali tidak ada manfaat utama perf). Juga tidak jelas bagi saya, bagaimana hal ini dapat menyebabkan kinerja yang jauh lebih baik; kecuali untuk kasus patologis di mana banyak tugas sekuensial kecil tidak dapat menghasilkan beban GPU yang cukup.
Jawaban:
Kirimkan aplikasi Anda dengan urutan tolok ukur menguji platform yang sebenarnya. (Kemungkinan jawabannya untuk banyak pertanyaan, kurasa ...)
Saya menduga kinerjanya sangat tergantung pada bagaimana Anda menggunakan perangkat keras. Karena perangkat keras tidak mungkin untuk menginstruksikan aplikasi Anda ke belakang, memberi tahu Anda apa yang harus dilakukan, saya akan menggunakan apa pun yang terlihat bagus dalam desain Anda.
Kata kunci adalah CAN. Saya tidak melihat alasan mengapa vendor mana pun akan mengacaukannya. Pada akhirnya itu adalah penyedia platform (Intel / AMD / Nvidia) yang bertanggung jawab membuat Anda driver yang cukup baik bagi Anda untuk tidak mempertimbangkan beralih vendor. Jika mereka memang memiliki "masalah pengetahuan" dengan fungsi ini (yang omong-omong tidak memiliki arti fungsional, hanya kinerja) maka mereka juga harus menyelesaikannya menggunakan apa yang mereka ketahui. Maksud saya untuk menangis dengan keras, fallback adalah sesuatu yang telah mereka terapkan; eksekusi selaras.
Perangkat keras sudah cukup voodoo bagi kami pengembang.
sumber