Pemahaman saya saat ini adalah bahwa apa pun yang dilakukan dalam file shader dilakukan pada GPU, dan apa pun yang dilakukan dalam kode saya (Java, dalam kasus saya) dilakukan pada CPU.
Apakah ini deskripsi yang akurat?
Pemahaman saya saat ini adalah bahwa apa pun yang dilakukan dalam file shader dilakukan pada GPU, dan apa pun yang dilakukan dalam kode saya (Java, dalam kasus saya) dilakukan pada CPU.
Apakah ini deskripsi yang akurat?
Jawaban:
Itulah intinya.
Pada prinsipnya, platform itu bisa, menurut pikiran, melakukan apa pun yang diinginkannya. Orang bisa membayangkan sistem operasi canggih melakukan terjemahan kode kompilasi tepat waktu dari, katakanlah, x86 ke kode GPU. Demikian pula, driver OpenGL dapat menjalankan apa pun yang diinginkan pada host CPU.
Tapi sungguh, apa yang baru saja Anda gambarkan, adalah apa yang terjadi.
Secara umum, ya. Java digunakan untuk menulis program yang berjalan di cpu. Bahasa shader (cg, hlsl, et al) digunakan untuk menulis program yang berjalan di gpu.
Pengecualian untuk aturan tersebut akan menggunakan apis pihak ketiga yang dapat menjembatani kesenjangan.
david van brink menjawab pertanyaan Anda secara umum.
Tapi seperti katanya, driver OpenGL dapat menjalankan hal-hal pada CPU, dan itu sebenarnya sering terjadi. Terutama dengan konteks kompatibilitas, di mana beberapa fungsi warisan aneh tidak dapat diimplementasikan pada kartu grafis. Mereka memerlukan emulasi perangkat lunak. Sebagai contoh, saya pernah mendengar bahwa penetapan dijalankan pada CPU. Anda dapat mengharapkan kejutan dengan memilih.
Kejutan-kejutan ini dapat terjadi bahkan lebih pada MacOS menggunakan konteks 2.1, karena Apple telah menyatukan pandangan OpenGL dengan sangat baik di seluruh jajaran perangkat keras mereka, dan beberapa perangkat keras yang lebih kecil tidak memiliki beberapa hal yang harus ditiru. Sejauh ini benar-benar dimungkinkan untuk menjalankan spesifikasi SELURUH OpenGL 2.1 sepenuhnya pada CPU, jika kode pembuatan konteks menentukan perangkat perangkat lunak secara eksplisit.
Sebaliknya, kode yang dijalankan melalui perpustakaan komputasi seperti vexcl atau boost compute, atau AMP microsoft, atau dorongan nVidia, BISA dieksekusi pada GPU atau CPU tergantung pada flag pengaturan API.
Dan untuk sentuhan akhir, di dalam CPU Anda juga memiliki arsitektur DSP dengan bagiannya kami sebut SIMD. Kompiler ispc Intel memberikan bantuan dalam menghasilkan kode yang "dipastikan" untuk berjalan di jalur SIMD dengan banyak diagnostik kinerja pada waktu kompilasi untuk membantu Anda memanfaatkannya. Tambahkan OpenMP untuk itu dan Anda bisa mendapatkan SIMD multithreaded, yang mendekati konsep GPU. Jika Anda memiliki CPU high-end dan GPU low-end, ini sebenarnya bisa lebih berkinerja.
http://ispc.github.io/