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?
Jawaban:
Tempat terbaik untuk meletakkan tabel pencarian untuk penghitung komputasi GPU tergantung pada ukuran tabel pencarian, dan frekuensi / koherensi akses. Dalam kasus Anda (Anda menyebutkan 4kb), memori lokal bersama mungkin yang terbaik (dengan asumsi Anda tidak memerlukan memori ini untuk keperluan lain di kernel yang sama). Memori ini memiliki nama yang berbeda di API yang berbeda, tetapi merupakan hal arsitektur yang sama dan mengikuti pedoman kinerja yang sama:
Menyimpan tabel pencarian dalam memori global sebagai buffer hanya-baca dapat bekerja dengan baik, tergantung pada ukuran cache GPU tertentu yang Anda jalankan.
Perhatikan bahwa saya menganggap ini adalah tabel pencarian hanya-baca. Tabel pencarian baca-tulis adalah binatang yang sama sekali berbeda, dan Anda tidak memiliki opsi yang bagus di sana.
sumber