Gölgelendirici derleyicileri açma konusunda son derece agresiftir, çünkü erken HW genellikle akış kontrolüne sahip değildir ve daha yeni HW'nin maliyeti değişebilir. Aktif olarak test ettiğiniz bir kıyaslama ölçünüz ve bir dizi ilgili donanımınız varsa, neler olduğunu görmek için bir şeyler deneyin. Dinamik döngünüz geliştirici müdahalesine statik bir döngüden daha uygundur - ancak karşılaştırmalı bir testiniz yoksa bunu derleyiciye bırakmak hala iyi bir tavsiyetir. Bir ölçütle, keşif yapmaya değer (ve eğlenceli).
Bir GPU'da dinamik bir döngü ile en büyük kayıp olan BTW, bir dalga önü / çözgüdeki bireysel "iş parçacıklarının" farklı zamanlarda biteceğidir. Daha sonra duracak olan iş parçacıkları, erken bitenleri NOP'ları yürütmeye zorlar.
İç içe döngüler dikkatlice düşünülmelidir: Sıfırları kodlayan (JPEG benzeri sıkıştırma için) blok tabanlı bir entropi kod çözücü uyguladım. Doğal uygulama, çalışmaların sıkı bir iç döngüde kodunu çözmekti - bu da genellikle sadece bir ipliğin ilerleme kaydettiği anlamına geliyordu; Döngüyü düzleştirerek ve şu anda bir çalışmanın kodunu çözüp çözmediğini her bir iş parçacığında açıkça test ederek, tüm iş parçacıklarını sabit uzunluktaki döngü boyunca aktif tuttum (kod çözülmüş blokların hepsi aynı boyutta). İş parçacıkları CPU iş parçacıkları gibi olsaydı, değişiklik korkunç olurdu, ancak üzerinde çalıştığım GPU'da, performansta 6 kat bir artış elde ettim (hala korkunçtu - GPU'yu meşgul edecek yeterli blok yoktu - ama bu bir kavram kanıtıydı).