2015-03-17 13 views
8

GLSL'yi modern (GL3.3 +) GPU'larda kullanırken, tekdüze dallanma olasılığı nedir?Modern GPU'larda üniformalarda dallanma maliyeti

Motorumda çok fazla gölgelendiriciye sahip olduğum noktaya ulaşıyorum. Ve bunların çoğu için birkaç farklı kalite ön ayarım var. Şu anda, farklı kalite ön ayarlarını seçmek için gölgelendiricilerde if() ile üniforma kullanıyorum. Ancak, gölgelendiricileri yeniden derleyerek ve #ifdef kullanarak daha iyi bir performans elde edebileceğime dair endişelerim var. Sorun şu ki, bir gölgelendiriciyi yeniden derlerken diğer üniformaların izlenmesi ve sıfırlanması konusunda endişelenme ihtiyacı.

Temelde bilmem gereken şey, korkularım temelsiz ise. Modern GPU'larda üniform bir ucuzluk var mı? Kendimi birkaç test yaptım ve her iki yolda da çok az fark var, ama sadece nVidia 680 üzerinde test ettim.

+0

Sürücü, aksi takdirde dallanma maliyetinin çok büyük olacağına karar verirse, gölgelendiriciyi düzlemsel üniformalarla yeniden derlemekte serbesttir. –

+0

Gölgelendiricinin paralel girişimleri farklı kontrol yolları aldığında, ipucu farklılığı modern GPU'larda önemli bir konudur. Üniformalar bir programdaki tüm davetlere uygulanır, ancak bu bir sorun değildir. Köşe özniteliklerinde veya başka bir şekilde dinamik verilerde dallanmadan kaçınmak, zamanınızın daha iyi bir kullanımıdır. –

+0

Tamam, pratikte, modern bir GPU'da sabitler ile yeniden derlenmekten daha yavaş olma olasılığı yoktur, çünkü ya şubeler CPU'lardan biraz farklıdır, ya da derleyici, gölgelendiriciyi otomatik olarak yeniden derleyecektir. Doğru anlıyor muyum? – Jagoly

cevap

5

Ben uzman olmadığımı itiraf edeyim, ama belki benim spekülasyonum hiç yoktan iyidir.

Üniformalar üzerinde dallanmanın gerçekten ucuz olduğunu düşünürdüm. SIMD'deki tüm ALU'lar gölgelendiriciden aynı kod yolunu izleyeceğinden, doku veya öznitelik verisi üzerinde dallanmadan açıkça farklıdır, bu yüzden bir yürütme maskesi yerine "gerçek" bir daldır. Shader işlemcilerinin boru hattındaki dallanma kabarcıklarından nasıl muzdarip olduklarından emin değilim, ancak boru hattı genel amaçlı CPU'lara göre daha sığ olacak (özellikle de çalıştıkları çok düşük saat hızları göz önüne alındığında).

Keşke daha fazla yardımcı olabilirdim ve bir başkasının daha otoriter bir şekilde cevap verebilmesini isterim. Bununla birlikte, birincisi, üniformalarda dallanma konusunda çok fazla endişelenmem. Ama her zaman olduğu gibi, eğer sizde bir olasılık varsa, gölgelendiricinizi profilleyin ve fark edilir bir fark yaratıp yaratmadığını görün.

İlgili konular