Saya menjelajahi algoritma isosurface pada GPU untuk proyek bujangan (khusus berkonsentrasi hanya pada data voxel biner masuk / keluar daripada bidang bernilai nyata). Jadi saya memiliki implementasi CPU dari kubus berbaris tua yang baik dan berjalan di OpenFrameworks, dan sekarang pada tahap mencoba untuk port ke shaders komputasi GLSL, dan mempertimbangkan perangkap sebelum saya menyelam. Saya hanya menulis shader vert dan frag sebelum jadi itu semua baru bagi saya.
Masalah pertama saya adalah bagaimana cara efisien menggunakan tabel pencarian di lusinan atau ratusan utas di workgroup? Saya mengerti GPU memiliki jenis memori yang berbeda untuk tugas yang berbeda tetapi tidak sepenuhnya yakin tentang bagaimana masing-masing beroperasi atau jenis yang digunakan.
Tabel copypasta klasik Paul Bourke adalah array 256 * 16 jadi jika menggunakan tipe byte skalar ini mungkin dapat dikemas ke dalam tekstur 4kb atau SSBO.
Pertanyaannya adalah, bagaimana cara menghentikan utas yang berbeda agar tidak saling tersandung? Banyak kubus di masing-masing kelompok kerja berpotensi memiliki konfigurasi yang sama karena itu mencoba mengakses lokasi yang sama di buffer pada saat yang sama. Apakah ada solusi atau optimasi untuk mengatasi ini?