Programlanabilir boru hattı (GLSL) neden sabit boru hattından daha hızlı?


27

Bu yüzden kendime GLSL öğretiyorum ve bunun neden sabit fonksiyon boru hattından daha hızlı olması gerektiğini tahmin etmeye çalışıyorum.

Sorunumun nedeni, anladığım kadarıyla, yarattığınız gölgelendiricilerin daha önce orada bulunan boru hattının bölümlerini değiştirmesidir. Peki, kendi versiyonunuzu işleri hızlandırarak nasıl sağlıyorsunuz?

Düşünebildiğim tek şey, daha önce kendi aydınlatma denkleminizi söylemek için sağlamaya çalıştıysanız, CPU üzerinde hesaplama yapmanız gerekecek, ancak şimdi daha hızlı olacak olan GPU'daki hesaplamaları yapabilirsiniz.

Bunu doğru anlıyor muyum?


Var olan işlevlerin kendi sürümlerini oluşturmanın daha hızlı olup olmadığını mı yoksa CPU'da hesapladığınız işlevleri boşaltmanın daha hızlı mı olduğunu mu soruyorsunuz?
MichaelHouse

Gamedev.net'te sorularıma cevap veren bir yazı buldum.
Joey Green,

2
Anlıyorum. Buraya bir cevap göndermelisin ki başkalarının faydalanabilsin. Belki de işlemdeki sorunuzu açıklığa kavuşturmak.
MichaelHouse

@ joey-green lütfen gamedev.net'i buraya bağlar mısınız ? Bu soruya rastlayacak insanlara yardımcı olurum.
Quazi Irfan

1
Meseleleri daha fazla karıştırmak için, testlerimde sabit boru hattı en azından basit durumlarda gölgelendiriciden daha hızlı olabilir; bkz. sol.gfxile.net/instancing.html
Jari Komppa

Yanıtlar:


27

Yarattığınız gölgelendiriciler, sabit işlevli boru hattınızın (FFP) kendi sürümünüz olmayacak, ancak serin ve karmaşık bir şey elde etmek için özel bir köşe ve piksel işleme işlemleri olacak.

Programlanabilir boru hattı (PP) üzerinden yaptığınız birçok şey, olası FFP uygulamalarından daha hızlı çalışacaktır, çünkü PP, FFP'de bu varsayımsal şeyleri yapmak için gereken geçiş sayısını veya miktar birleştirici ve küp sihrini azaltır.

FFP'de piksel başına ışıklandırma gibi ortak bir şeyi, yalnızca enterpolasyonlu vertex verileri ve ellerinizdeki örnek doku ile uyguladığınızı hayal edin. Dürüst olmak gerekirse, sadık önceden hesaplanmış küp boşluklarına ve bazı ciddi harmanlamalara bağlı olarak yalnızca özel durumlar için kesmek bile mümkün değildir. PP ile ışık yönü ile normal tepe arasında bir nokta ürünü renklendirme meselesi haline gelir.

Sonuç olarak, PP hızlı ve mümkün hale dönüşür yavaş ve imkansız. Ancak, FFP'de kullanılan aynı algoritmaları uygulamak için bir gölgelendirici yazmaya karar verirseniz, FFP'nin biraz daha hızlı olacağını göreceksiniz, çünkü donanım açısından oldukça optimize edildi.


1
Güzel cevap ... +1.
Amir Zadeh

@Green Bundan emin değilim. Bir şekilde noktayı özlüyor. Kylotan'ın cevabı asıl soru için çok daha uygun.
Chris, Monica

14

Teorik olarak, programlanabilir boru hattı sabit fonksiyon boru hattından daha yavaştır. Hiçbir genel amaçlı işlemci, özel bir kasa işlemcisi ile rekabet edemez. Orijinal sabit fonksiyon boru hattı, bir çizgideki teorik olarak mümkün olduğu kadar hızlı olan bir grup mantık kapısından biraz daha fazlaydı.

Ancak, bugünlerde programlanabilir boru hattı normdur. Böylece donanım programlanabilir boru hattına yönlendirilir. Belirli bir veri akışı için özel olarak yaratılmış bir devrenin ilk verimini kaybetmiş olması, en yaygın olanı gölgelendirici-temelli yaklaşıma uydurmalıdır. Bununla birlikte, geriye dönük uyumluluk seçenekleri için, sabit fonksiyon boru hattı hala kullanılabilir durumdadır - fakat maliyeti eski sabit fonksiyonların gölgelendiricilere dönüştürülmesidir, ki bu da bir maliyet gerektirebilir. Bu performans farkını açıklar.


1

Düşünebilmemin temel nedeni, sabit boru hattında, programınızın ihtiyaç duymadığı bir aşamadır. örneğin, tüm ışıkların statik olduğu bir oyun hayal edin, dinamik ışık için hesaplama yapmayı bile denemeyan bir gölgelendiriciyi kolayca uygulayabilirsiniz. Bu durumda, gölgelendirici, dinamik ışık (bazı genel amaçlı gölgelendirici) için bazı denklemleri kontrol eden önceden derlenmiş bir gölgelendiriciden daha hızlı çalışır. başka örnekler de var, sabit bir boru hattı için göz önünde bulundurulması gereken birçok yönü kolayca düşünebilirsiniz, ancak kendi GLSL kodlarınızda uygulamayı görmezden gelebilirsiniz.


1

İşte bu, gölgelendiricilerin boru hattının parçalarını değiştiriyor. Ancak çoğu kez gölgelendiricileriniz, elde etmek istediğiniz belirli bir etkiye yönelik olarak uzmanlaşır ve etkinleştirilebilecek her olası özelliği kullanmaz, bu nedenle de tüm sabit işlevli boru hattını taklit eden bir gölgelendiriciden daha basit olur. Sabit işlevli yol, pek çok şeyi hesaba katmak zorunda iken, kullanmak istemediğiniz (ya da hiç duymadığınız) OpenGL özelliklerini dikkate almanız gerekir.

Özel bir donanımda (tamamen programlanabilir bir donanımın karşısında) sabit işlevi yaptığınız günler sona erdi, sabit işlevli boru hattını kullandığınızda muhtemelen ne olduğu, sürücünüzün yalnızca kendi özel gölgelendiricilerini uygulayan gölgelendiricileri yüklemesidir. sabit işlevli yollar. Ancak bunlar sabit fonksiyonlu boru hattının sunduğu her bir özelliği sağlamak için çok karmaşık olabilir.


"Sabit işlevli boru hattını kullanırken muhtemelen olan şudur, sürücünüz yalnızca sabit işlevli yolları uygulayan kendi özel gölgelendiricilerini yükler." ..bundan emin misin? Lütfen güvenilir bir kaynak sağlayabilir misiniz? Teşekkürler.
Quazi Irfan

@iamcreasy Güvenilir bir kaynağa sahip değilim (bu nedenle muhtemelen), itiraf etmeliyim. Ancak, bugünün grafik kartlarının (bir çok küçük işlemciden sadece birkaçı olan), hala bilgisayar aydınlatması veya sis hesaplamaları için özel bir donanıma sahip olduğundan şüpheliyim. Bunun yerine, bunun için önceden derlenmiş programları sadece belirli gölgelendirici aşamalarına yüklerler (bunlar sürücüden mi yoksa bir ROM deposundan mı gelir, bilmiyorum).
Chris, Monica

@ nouveau wiki nouveau.freedesktop.org/wiki/CodeNames'e göre artan , GeForce 6xxx'te sabit boru hattı kaldırıldı.
DirtY iCE

"Sabit işlevli boru hattını kullanırken muhtemelen olan şudur, sürücünüz yalnızca sabit işlevli yolları uygulayan kendi özel gölgelendiricilerini yükler." Doğru. "Ancak bunlar sabit işlevli boru hattının sunduğu her bir özelliği sağlamak için çok karmaşık olabilir." İyi bir sürücü, yalnızca etkinleştirdiğiniz işlevsellik için gölgelendiriciler üretecektir.
Chris
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.