Sabit bir koşul, gölgelendiricilerin anahtarlanmasından daha maliyetli midir?


14

Genel olarak, gölgelendiricilerde dallanma iyi bir fikir değildir. Ama şimdi tüm çizim çağrısı ile ilgili sabit bir koşula sahip bir gölgelendiricim var. Böylece, yürütülen şube bir beraberlik çağrısı için her zaman aynıdır.

Böyle bir dallanma, bu dallar olmadan birden fazla gölgelendiriciden ve aralarında geçiş yapmaktan daha maliyetli mi?



Yanıtın soruma açıkladığı gibi, parçalar "çözgü" ya da "dalga önleri" olarak gruplandırılır ve böyle bir gruptaki tüm parçalar aynı dalı kullanırsa, yalnızca o dal yürütülür.
Martin Ender

Peki ya parçadan farklı gölgelendiriciler?
nikitablack


1
Bunun bir kopya olmadığından şüpheleniyorum, ancak bunun belirlenebilmesi için neyin sorulduğunu açıkça belirtmek için düzenlenmesi gerekiyor. Bazı örnek kodlar veya karşılaştırılan iki seçeneğin açıklaması çok yardımcı olacaktır.
trichoplax

Yanıtlar:


13

Modern donanımda, bir gruptaki tüm çağrılar aynı yolu izlerse kullanılmayan yol değerlendirilmez.

sözde kodda:

if(cond){
   res = ...
}else{
   res = ...
}

olur

if(anyInvocationARB(cond)){
    res1 = ...
}
if(anyInvocationARB(!cond)){
    res2 = ...
}
res = cond?res1:res2;

anyInvocationARBGölgelendiricinin herhangi bir çağrılması cond(opengl uzantısı ARB_shader_group_vote ) ile doğru olacaksa, nerede doğru olacaktır .

Eğer kondisyon sadece üniformalardan türetilebiliyorsa, sürücü render işlemine başlamadan önce durumu optimize edebilir ve değerlendirebilir ve if'i doğru dala bir goto ile değiştirebilir. OpenGL, muntazam alt programlar olarak adlandırılan bir özelliği vardır.


4
Bu doğrudur, ancak performans için dikkate almanız gereken tek şey bu değildir . GPU'lar hala gölgelendirici başına kaynakları statik olarak zamanlar, bu nedenle bu, her iki dalı da yürütüyormuşsunuz gibi doludur; bu da doluluk oranına zarar verebilir.
John Calsbeek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.