Kompiler Shader sangat agresif membuka gulungan karena HW awal sering tidak memiliki kontrol aliran dan biaya pada HW yang lebih baru dapat bervariasi. Jika Anda memiliki tolok ukur yang secara aktif Anda uji dan berbagai perangkat keras yang relevan, cobalah hal-hal untuk melihat apa yang terjadi. Perulangan dinamis Anda lebih bisa menerima intervensi pengembang daripada perulangan statis - tetapi menyerahkannya ke kompiler masih merupakan saran yang bagus kecuali Anda memiliki tolok ukur yang tersedia. Dengan tolok ukur, eksplorasi bermanfaat (dan menyenangkan).
BTW, kerugian terbesar dengan loop dinamis pada GPU adalah bahwa "utas" individu di wavefront / warp akan selesai pada waktu yang berbeda. Utas yang berhenti nanti memaksa semua yang selesai lebih awal untuk menjalankan NOP.
Nested loop harus dipikirkan dengan saksama: Saya menerapkan dekoder entropi berbasis blok yang mengkodekan proses nol (untuk kompresi seperti JPEG). Implementasi alami adalah untuk memecahkan kode run dalam loop batin yang ketat - yang berarti sering hanya satu thread yang membuat kemajuan; dengan meratakan loop dan secara eksplisit menguji di setiap utas apakah saat ini sedang mendekode run atau tidak, saya menjaga semua utas aktif melalui loop panjang tetap (blok yang didekodekan semuanya berukuran sama). Jika utasnya seperti utas CPU, perubahannya akan mengerikan, tetapi pada GPU yang saya jalankan, saya mendapat peningkatan kinerja 6 kali lipat (yang masih mengerikan - tidak ada cukup blok untuk membuat GPU sibuk - tapi itu bukti konsep).