Apa sebenarnya yang bisa digunakan untuk shader?

8

Saya bukan benar-benar orang 3D, dan saya hanya menggunakan sedikit shader dalam beberapa contoh Three.js, dan sejauh ini saya mendapat kesan bahwa mereka hanya digunakan untuk bagian grafis dari persamaan.

Meskipun, artikel Wikipedia (sangat samar) dan beberapa sumber lain membuat saya percaya bahwa mereka dapat digunakan untuk lebih dari sekedar efek grafis, yaitu, untuk memprogram GPU ( Wikipedia ).

Jadi, GPU masih prosesor, kan? Dengan set instruksi yang lebih besar dan berbeda untuk manipulasi vektor yang lebih mudah dan lebih cepat, tetapi tetap sebuah prosesor. Bisakah saya menggunakan shader untuk membuat program reguler (asalkan saya punya akses ke memori video, yang mungkin)?

Sunting: program reguler == "Aplikasi", yaitu membuat program windows / konsol, atau setidaknya memiliki beberapa cara menggambar sesuatu di layar, bahkan mungkin mengambil input pengguna.

jcora
sumber
2
Apa yang Anda maksud dengan "program reguler"
kravemir
2
+1 Untuk pertanyaan pengembangan game paling lucu yang pernah saya lihat yang juga berhasil memikirkan kembali pandangan saya tentang dunia.
knight666
1
"==" adalah pembanding, bukan operator penugasan :)
kravemir
2
Ya, saya tahu, ini masih berlaku untuk digunakan. Saya tidak ingin "memberikan" penjelasan pada definisi tersebut, saya ingin menyamakan mereka.
jcora

Jawaban:

13

Awalnya, perangkat keras pemrosesan grafis yang berdedikasi memiliki serangkaian fungsi yang telah diperbaiki. Itu akan mengambil input geometri, melakukan hal-hal yang sangat spesifik untuk mengubahnya dan merasterasinya, dan kemudian meledakkan hasilnya ke layar. Seiring waktu, fungsi ini menjadi parameter dan akhirnya dapat diprogram. "Shaders" menjadi istilah yang digunakan untuk program yang berjalan pada GPU, karena mereka mengendalikan transformasi dan naungan geometri.

Seiring berkembangnya perangkat keras GPU, semakin banyak yang telah diprogram, jadi sekarang sebagian besar jenis shader yang dapat ditulis hanya berkontribusi secara tidak langsung ke naungan aktual apa pun yang ada di layar (saya merujuk pada hal-hal seperti geometri dan lambung lambung di sini ). Dengan itu muncul generalisasi GPU sebagai perangkat untuk melakukan pemrosesan berbasis aliran berskala besar yang sangat konkuren, sehingga sementara maksud GPU dan shader umumnya untuk menerapkan semacam efek grafis mewah, mereka juga dapat digunakan untuk melakukan beberapa jenis perhitungan tujuan umum (terutama yang cocok untuk dihitung secara paralel). Ini sering disebut sebagai pemrograman GPU tujuan umum, atau "GPGPU."

Namun, GPU masih sangat khusus dan tidak dapat melakukan banyak hal yang dapat dilakukan CPU. Ini memiliki konektivitas terbatas ke seluruh perangkat keras dalam suatu sistem, juga, sehingga Anda tidak dapat benar-benar menulis program "biasa" (dengan output konsol atau input mouse, dan sebagainya) sepenuhnya pada GPU. Anda dapat melakukan perhitungan pada GPU yang tidak dimaksudkan untuk ditafsirkan sebagai render, tetapi itu bukan CPU mandiri.


sumber
5

GPU tidak dapat memberi tahu CPU apa yang harus dilakukan. Itu hanya dapat memberikan hasil dalam memorinya yang akan dibaca CPU.

Shader / GPGPU tidak dapat digunakan untuk :

  • mengambil input pengguna secara langsung tanpa CPU , karena diimplementasikan sebagai gangguan CPU
  • pembuatan aplikasi apa pun , karena aplikasi dikelola oleh kernel dan itu dijalankan oleh CPU
  • pembuatan jendela apa saja , karena pengelola jendela / server dijalankan dalam CPU

Shader / GPGPU dapat digunakan untuk :

  • menggambar barang di layar / jendela, tetapi harus dikontrol oleh CPU
  • decoding / pengkodean video
  • pemrosesan gambar dalam editor grafis profesional - berbagai efek paralel yang dapat dieksekusi efek seperti blur, mempertajam tepi, ...
  • perhitungan fisika

Lihat OpenCL . Itu dapat memanfaatkan shader untuk perhitungan non-grafis.

Edit berdasarkan komentar:

Shader digunakan hanya untuk merender gambar. Melakukan perhitungan non-grafis dalam GPU disebut GPGPU .

kravemir
sumber
Poin terakhir tidak sepenuhnya benar, Anda tidak menggunakan shader untuk menghitung fisika, Anda menggunakan API GPGPU seperti OpenCL dan CUDA.
dreta
@dreta Ya. Itu benar. Berdasarkan pertanyaannya, saya pikir maksudnya shader adalah unit pemrosesan perangkat keras. Dia berkata "tapi masih prosesor".
kravemir
2
baik kalau begitu perbaiki dia karena salah, mengapa kamu tahu kesalahpahamannya, dia bilang dia bukan guru rendering, shaders tidak ambigu, mereka memiliki peran khusus
dreta
-4

Sederhana. Unit pemrosesan grafis akhirnya mendapat shader, yang efek panty mewah untuk shading. Ini menjadi diprogram sehingga efeknya semakin mewah. Akhirnya seluruh GPU menjadi unit SIMD.

SIMD berarti Data Muliple Instruksi Tunggal. Saat ini GPU seperti pohon. Ini memiliki X banyak core, masing-masing memiliki Y banyak core, memiliki Z banyak core. Semakin jauh Anda turun pohon, semakin cepat dan kecil memori, semakin paralel dan menyederhanakan perhitungan.

Jadi GPU telah menjadi semacam GPU Tujuan Umum. Itu tidak disebut CPU karena itu bukan unit pemrosesan pusat, meskipun dapat menangani I / O, manajemen dan penjadwalan memmory.

Tidak perlu dikatakan bahwa kekuatan dari GPGPU berasal dari keharusan melakukan beberapa operasi paralel yang dapat dibagi pada banyak data sekaligus. Karena itu tidak berguna untuk sebagian besar perangkat lunak umum, nVidia bekerja membuat GPGPU menjadi CPU. Mereka percaya bahwa mereka dapat mengekspos GPU sebagai CPU ARM. Teknik terjemahan ini juga di dalam CPU x86, yang merupakan RISC pada intinya.

OpenCL, CUDA dan DirectX seperti bahasa pemrograman split personality. OpenCL misalnya berjalan pada CPU, tetapi melepaskan 'bom' ("kernel") yang diuntungkan dari SIMD, ke GPU.

Tidak akan lama sebelum itu semua gaya Fusion / Sandy Bridge CPU-GPU.

Vincent
sumber
3
-1. Pilihan kata-kata Anda secara drastis menurunkan kualitas jawaban itu.
bummzack
Pilihan kata-kata itu sendiri tidak berarti: en.wikipedia.org/wiki/On_Denoting Oleh karena itu tidak menurunkan kualitas jawaban, karena kualitas tidak ada hubungannya dengan pertanyaan, tetapi logika. Ini sebenarnya jawaban yang paling benar.
Vincent
2
Pilihan kata sangat penting. Jika Anda menggunakan bahasa yang tidak sopan, maka jawaban Anda tidak akan dianggap baik. Seseorang dengan jawaban yang berharga akan menghabiskan waktu memastikan itu fasih dan elegan.
Jonathan Pitre
Jika Anda memiliki masalah dengan bahasa, maka edit jawabannya. Terserah semua orang untuk membuat situs lebih baik.
Tetrad
Jika permintaan untuk pemahaman logis berasal dari zombie filosofis bikameralistik, itu akan memuaskan saya, karena pengetahuan sama dengan kekuatan. Saya tidak suka memberikan pengetahuan kepada para bikameral yang lebih menghargai emosi daripada logika. Itu hanya meningkatkan jawabannya.
Vincent