Modern GPU'lar üzerinde köşe verilerini düzenlemenin en etkili yolu


9

Ben köşe oluşan bir model, her var ki position, normal, tangent, ve texcoordüçgenler endeksi üçlüsü tarafından belirtilen nitelikler,.

Yalnızca köşe özelliklerine odaklanırsak, iki geniş stratejinin farkındayım: dizilerin yapısı ve yapı dizisi. Ayrıca belirli bir tepe için özniteliklerin bellek yerini (ve dolayısıyla önbellek yerini) arttırdığı için yapı dizisinin tercih edildiğini duydum.

Bunun performansı artırması gerçekten geçerli mi? Bunun gerçekleşebileceğini düşünebilmemin ana yolu, rasterleştiricinin uzun zamandan beri önbellekten çıkarılmış olan köşe verilerini almasını gerektiren köşe indeksleridir. Köşe veri erişimi bu şekilde rastgele ise, o zaman bir köşe için tüm öznitelikleri aynı önbellek satırında tutmak kesinlikle işleri daha hızlı hale getirecektir, ancak bu üçgen belirtiminin sırasını optimize ederek çoğunlukla hafifletilebilecek bir sorun değil mi?

Ayrıca, modern GPU'ların aynı tipteki uzun vektörlerin paketlenmesinde, birçok tipteki yapıların vektörlerinden daha iyi olabileceğini anlıyorum. Dizin sırası optimize edilirse, bir dizi yapı düzeninin aynı köşe verilerinin bir dizi yapı düzeninden sürekli olarak daha iyi performans göstermesi mümkün müdür?


4
Sadece denemek ve sizin durumunuz için hangisinin en hızlı olduğunu göremiyor musunuz?
user1118321 19:18

İndekslenmiş kafesler için, köşe gölgelendiricisinin tüm köşe özniteliklerini besleyeceği için yapı dizisinin daha verimli olacağını düşünürdüm, böylece bellekte birlikte gruplandırılmaları önbellek dostudur.
PaulHK

Yapıdaki veri türlerine bağlı olarak, vec4'ler ve şamandıralar birlikte güzelce paketlenir, diğer türler çok iyi değil
PaulHK

2
Bireysel kıyaslama deneyleri övgüye değer bir uygulama olsa da, daha geniş bir teorik tartışmada kesinlikle daha uzun vadeli bir değer vardır ve belki de tepe noktası çeken donanımın nasıl çalıştığına dayalı olarak genel uygulamaların oluşturulması.
Christian Rau

Yanıtlar:


2

Özür dilerim, soru dizinize bir yorum ekleyecektim ama çok fazla detaylandırdığımı fark ettim. Geliştirme deneyimim DX 11 perspektifinden geliyor, bu yüzden bunların bazıları OpenGL'de olmayabilir

Verilerin hafızadaki yeri kesinlikle önemli bir rol oynar. Ancak, bunu bilen birkaç öğe daha var, bildiğiniz gibi verilerin genişliği. Birkaç GPU'um vardı ve bazılarına belirli devrilme noktalarına dayanarak keskin bir performans gösterdim. Örneğin, eski AMD r290'ımda hatırlıyorsam, temelde 4'ten fazla float4'ü 1'den fazla ek maliyet olmadan köşe arabelleğine geçirebilirsiniz, ancak> 4'ü yayınladıktan sonra ölçülebilir bir düşüş vardı (çerçeve içinde) oranı). Bu tamamen hatırlamamın dışında ve bu yüzden en iyi anekdot. Ancak GPU mimarisinin her zaman değiştiğini ve bugün size bir performans avantajı sağlayan niş tekniklerin yarın performansınızın sıkıntısını çekebileceğini iddia ediyor. BEN'

Bunu söyledikten sonra, köşeleri sipariş etme sorusunu sordunuz ve bu kesinlikle marjinal olarak yardımcı olacaktır. Performans kazancı, bunu dizin arabellekleriyle birleştirdiğinizde donanımın zaten hesaplanmış köşeleri optimize etmesini ve önbelleğe almasını sağlar. Kesinlikle özellikle düşüncelerinize göre sipariş üçgen şeritler vb daha fazla kazanç elde edebilirsiniz. Yaptığım model oluşturmanın çoğu, indeksleme ile köşe / tepe tabanlı optimize edilmiş modellerdir, döngüsel hareket efektleri (örneğin ağaç dalları) için az miktarda arama kullanıyorum, bu durumlarda ağacın tüm dalı aynı değeri arıyor. Böylece önbellekleme burada da kullanılabilir.

Kendimden özet olarak söyleyebileceğim tek şey:

  • Oyunda / uygulamanızı hala geliştirirken zamanından önce optimize etmemeye çalışırken, optimizasyonu başlangıçta fazla düşünmemeye çalışın. Geri dönmeniz ve yeni özellikler eklemeniz gerekiyorsa, tüm çabayı kaybedebilirsiniz. Belki benim alışkanlığım var> <, en iyi performansı ve teknikleri almaya çalışmayı seviyorum
  • GPU mimarileri çeşitlidir ve birinin güçlü yönleri diğerinde zayıflıkları yansıtabilir. AMD ve Nvidia, oyunları mimarilerine göre optimize etmek için geliştiriciler almakla ünlüdür, bu nedenle her birinin avantajları / dezavantajları vardır. Geliştirme konusunda orta yolu kullanmak en iyi yer olabilir, herhangi bir donanım satıcısı tabanlı özellik kullanmayın (burada görüş). (buna ek olarak, bazı paketlenmiş biçimler yalnızca AMD'de bulunur).

Bunlar yaşadığım birkaç düşünce ve deneyimdi. Orada bu konuların etrafında ellerini almak gerekir bir sürü kitap var. Ne önerdiğinizi çok fazla reçete etmedim, ama bu onun yanlış olduğu anlamına gelmiyor. İyi şanslar.


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.