2011-08-30 26 views
13

Yalnızca yerel belleğin, kayıttaki iki bellek türü olan kayıt belleğinden daha yavaş olduğunu belirttim.Yerel bellek, CUDA'da paylaşılan bellekten daha yavaş mı?

Paylaşılan belleğin hızlı olması gerekiyordu, ancak yerel bellekten [thread] daha hızlı mı?

Yapmak istediğim, medyan bir filtredir, ancak medyan yerine belirli bir persentildir. Bu yüzden listenin parçalarını almam, sıralamalıyım ve sonra uygun olanı seçmem gerekiyor. Ama paylaşımlı bellek listesini veya yanlış giden şeyleri sıralamaya başlayamıyorum. Yerel belleğe kopyalayarak çok fazla performans kaybeder miyim?

+0

Bu gerçekten programlama ile ilgili değil, değil mi? Mathematica etiketine de güçlü bir bağlantı göremiyorum. –

+7

@Sjoerd C. de Vries: CUDA bağlamında, programlama ile ilgili bir soru - mimarinin eşit olmayan bir bellek alanı vardır ve programcı, hangi kod türlerinde ve hangi yöntemlerde kullanıldığını açık bir şekilde seçmelidir. yazıyor. CUDA programlamanın temel ilkesidir. – talonmies

+0

@talonmies Bunu anlıyorum, ama yine de bu soru programsal olarak belleği seçmekle ilgili değil, wrt API'ları, programlama yazmaçları ile programlama belleği vs arasındaki farklar. Temelde hangi bellek türünün daha hızlı olduğu. Bu bir donanım sorusu. OP'nin soruyu yeniden yorumlaması gerektiğini düşünüyorum, örneğin CUDA'da paylaşılan hafızayı kullanarak verilerin belirli bir yüzdesini bulma problemi doğrultusunda. –

cevap

23

Yerel bellek yalnızca yerel genel belleği işleyecektir. Kayıtlardan veya paylaşılan bellekten çok, çok daha yavaştır (hem bant genişliği hem de gecikme açısından). Ayrıca, global bellek işlemleri için mevcut olabilecek bellek denetleyicisi bant genişliğini de tüketir. Dökülmenin veya kasıtlı olarak yerel belleği kullanan performansın etkisi, kullandığınız donanıma ve yerel belleğin nasıl kullanıldığına bağlı olarak önemsizden ağırlığa kadar herhangi bir şey olabilir.

Vasily Volkov'un araştırmaya göre - paylaşılan bellek arasında etkili bant genişliği 8 farkının bir faktör hakkında var ve Fermi GPU'larının (paylaşımlı bellek ve 8000 Gb/s için yaklaşık 1000 Gb/s kayıt - Better performance at lower occupancy (pdf) bakınız kayıtlar için). Bu durum, CUDA dokümantasyonu ile çelişir, ki bu da paylaşılan hafızanın kayıtlara göre hız ile karşılaştırılabilir olduğunu ima eder.

+0

Evet, bu bilgiyi destekleyen deneysel bulgularımla daha da fazla ilgilenmek için teşekkür ederim, çünkü yerel bellekte çalışmam sorunumla gerçekten daha büyük bir yavaşlama emriydi. Programım zaten blok başına donanım paylaşımlı bellek boyutumun üzerinde çalıştığı için yeniden hesaplamalar için paylaşımlı bellek kullanamadım, bu yüzden yüzdeselimi aramak için çok fazla akıllı kayıt bellek algoritmaları kullanmak zorunda kaldım, bu oldukça hızlı çıktı neyse. – JohnKay

İlgili konular