Hitung Shader vs CUDA / OpenCL

8

Jadi saya baru saja belajar tentang Compute Shader dan terlihat dari apa yang saya ambil ide yang sama dengan pemrograman paralel yang akan Anda lakukan dengan CUDA atau OpenCL, tetapi dalam pipa shader.

Jika saya ingin menggambar satu juta kubus dalam sebuah adegan saya harus menggunakan satu metode di atas yang lain atau keduanya. Jika keduanya, bagaimana Anda membaginya sehingga GPU tidak mencoba untuk paralel menghitung shader dan proses lain pada saat yang sama

FrickeFresh
sumber
2
Mengapa Anda ingin menggunakan GPGPU untuk menggambar juta kubus di tempat pertama?
Derag
3
Komputasi shader digunakan untuk menghitung beban kerja, bukan rendering. Aturan praktisnya adalah jika Anda memerlukan rasterisasi (yaitu pemrosesan geometri triangulasi menjadi piksel), Anda harus menggunakan pipa render; jika Anda hanya perlu memproses data dalam jumlah besar, Anda harus menggunakan komputasi. Saya juga tertarik pada argumen suara untuk dan melawan komputasi shader dan CUDA / OpenCL (dengan interop API grafis). Salah satu yang saya dengar adalah antrian yang lebih baik dari beban kerja komputasi dengan API khusus-komputasi, tetapi saya ingin tahu lebih banyak (yaitu bagaimana komputasi async masuk ke dalam gambar).
IneQuation
@Derag Hanya mencoba memberi makan jimat kubus saya secepat mungkin
FrickeFresh
Jika Anda ingin menggambar sejuta kubus, gunakan ray-marching :)
russ

Jawaban:

7

Ini tidak sepenuhnya benar, hari ini, untuk menganggap komputasi shader sebagai "dalam pipa shader" dalam arti yang sama bahwa vertex dan fragmen shader Anda secara harfiah dihubungkan ke dalam pipa. Komputasi shader tidak "terhubung" dengan apa pun saat ini, tidak dapat mendorong rasterisasi, atau secara langsung mengonsumsi output rasterisasi.

Apa yang memungkinkan Anda lakukan adalah mengkonsumsi dan menghasilkan sumber daya memori yang juga digunakan oleh panggilan dengan cara yang relatif efisien. OpenCL membuat ini agak sulit (lihat misalnya https://software.intel.com/en-us/articles/opencl-and-opengl-interoperability-tutorial ). Ini memungkinkan Anda untuk mengintegrasikan lintasan komputasi secara efisien dalam renderer Anda, tetapi tidak terintegrasi ke dalam jalur render

GroverManheim
sumber