GPU referans mevkisi endişelenmeye değer mi?


9

Does referans yerelliği CPU performansı yaptığı gibi GPU performansı bir fark olarak marka?

Örneğin, GPU'ya 200 çizim komutu gönderirsem, her komutun verisi arabelleklerin / doku haritalarının etrafında atlamak yerine bellekte bitişikse (potansiyel olarak) fark edilebilir bir fark görecek miyim?

Yan soru: GPU'nun, kaynakların çoğunun değiştirilememesi nedeniyle yanlış paylaşım sorunlarına karşı güvence verdiğini varsayıyorum. Ama olmadıkları durumda, iplikler neden her zaman dört parçanın işini yapıyor?

Yanıtlar:


10

Referansın yeri önemlidir, ancak bu kadar endişelenmenize gerek yoktur ... çünkü mutlak kontrolünüz yoktur.

OpenGL / DirectX kullanırken genellikle bellek düzeni üzerinde sınırlı kontrole sahipsiniz, gerisini sürücü yapacak. Örneğin, araya eklenmiş veya araya eklenmemiş tepe noktası verilerinin kullanılması ve verilerinize / sürücünüze / GPU performansınıza bağlı olarak birden çok tepe noktası arabellek düzenini deneyebilirsiniz. Profil oluşturun ve uygulamanıza en uygun olanı seçin.

Örneğin, GPU Gems Pipeline optimizasyonunda, referansın lokasyonundan iki kez bahsedilir , birincisi:

Tepe verilerine nispeten ardışık bir şekilde erişin. Modern GPU'lar, köşeleri getirirken bellek erişimini önbelleğe alır. Herhangi bir bellek hiyerarşisinde olduğu gibi, uzamsal referans konumu önbellekteki isabetlerin en üst düzeye çıkarılmasına yardımcı olur, böylece bant genişliği gereksinimlerini azaltır.

Ve ikinci

T & L sonrası köşe önbelleği için optimize edin. Modern GPU'lar, en son dönüştürülmüş köşelerin sonucunu saklayan küçük bir ilk giren, ilk çıkar (FIFO) önbelleğe sahiptir; bu önbellekteki bir vuruş, tüm dönüşüm ve aydınlatma işlerini ve daha önce boru hattında yapılan tüm çalışmaları kaydeder. Bu önbellekten yararlanmak için dizine alınan ilkel öğeleri kullanmanız ve kafes üzerindeki referansın yerini en üst düzeye çıkarmak için köşelerinizi sipariş etmeniz gerekir. D3DX ve NVTriStrip (NVIDIA 2003) dahil olmak üzere bu görevde size yardımcı olabilecek araçlar vardır.

Bence bu öneriler konuştuğum şeyleri takip ediyor ve bellek düzeni üzerinde mutlak bir kontrole sahip olmadığınızı, ancak her bir VBO tepe noktasının nasıl düzenlendiğini kontrol edebileceğinizi ima ediyor performans üzerinde etkili olabilir.

Uygulamanız bir performans isabeti yaşıyorsa, önce darboğazı tespit etmelisiniz, referansın sorunlu bir veri konumu olmayabilir, ancak bunun nedeni, culling olmadan çok büyük miktarda veri olması, örneğin frustum culling yapmamanızdır. vs Cevabımı buradan kontrol edebilirsiniz.

Bellek düzeni üzerinde sık sık mutlak bir kontrolünüz varsa, OpenCL / CUDA kullanırken referans yerellik hakkında daha fazla endişelenmeniz gerektiğini düşünüyorum .


3

Başlangıçta, GPU'lar yalnızca çok az veri yeniden kullanımı gösteren multimedya uygulamaları için kullanılıyordu. GPU'lar genel amaçlı uygulamalar için giderek daha fazla kullanıldıkça (dolayısıyla GPGPU terimi), şimdi büyük boyutlu donanım tarafından yönetilen önbelleklere sahip olduklarından, örneğin, Fermi GPU'nun 768 KB son düzey önbelleği vardır, Kepler GPU'su 1536 KB son düzey önbellek ve Maxwell GPU'da 2048 KB son düzey önbellek bulunur. Bu, GPU önbellekleri hakkında geniş bir araştırma grubu ile birlikte, veri yerinin GPU'lar için kesinlikle önemli olduğunu göstermektedir. Yukarıdaki ayrıntılar ve referanslar için anket kağıdına bakın .

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.