2012-10-28 18 views
7

Kodu yeniden yazmak mantıklı mıdır, böylece doku önbelleğindeki veriyi yükler (filtreleme ve diğer doku birimi seçeneklerine gerek duymadığım varsayılır) veya aynı mıdır? L1 önbellek ve bazı oluk tekstüre ünitesinden veri yükleme hakkında ne dersiniz? Böyle bir stratejiyi kullanabileceğim bir kod var ama hiç mantıklı değil mi?CUDA: FERMI'deki doku önbelleği, L1 önbelleğinden ayrı mı?

Bunu açıklığa kavuşturmak için, "FERMI'de L1 önbellek donanımından ayrı bir donanım önbellek var" demek istedim, başka bir deyişle, kodum için L1 + doku önbellek hacmini akıllıca alabilir miyim?

cevap

11

Ayrıdır. Bir doku yükü L1'den geçmez. Tekstüre edici olmayan uygulamalar için (yani, enterpolasyon ve kenetleme gibi özellikleri kullanmıyorsanız), tekstüre etmenin temel faydası, potansiyel olarak önbelleğe alınabilecek (lokalite ve yeniden kullanım varsayımı) bozmadan büyük miktarda küresel bellek eklemenize izin vermesidir. L1'de neler oluyor. Küçük veri kümeleri için, tekstüre L1'den daha iyi bir perfüzyon vermez. Bazı konumların ve yeniden kullanımın olduğu, ancak doku önbelleği tarafından kapsanan bölgeden gelen yüklerin, L1 (önbellek yapılandırmasına bağlı olarak, Fermi'deki SM başına 16 KB'a kadar küçük olabilir) olabileceği büyük veri kümeleri için, Doku önbelleği genel olarak uygulamaya bir yarar sağlayabilir. Kullanıcıların doku kullanmanın, L1'de önbelleğe alınabilecek kadar hızlı olmadığı, ancak yükü olmayan yüklerden çok daha hızlı olduğu ya da L1'i çökerten dağılmış yükler kadar hızlı olmadığı görülüyor. Çok fazla erişim paternine ve ilgili veri boyutuna bağlı olacaktır. Doku önbelleğinin boyutu, SM başına 8 KB düzeyindedir. Çok daha büyük bir bölgeyi önbelleğe alabilirsiniz, ancak yüksek düzeyde yeniden kullanım ve yerellik, doku önbelleğinin performansını kesinlikle artıracaktır. Ayrıca doku belleğinin salt okunur olduğunu unutmayın. Bu webinar ile ilgilenebilirsiniz.

+0

Tam olarak aradığım cevap, teşekkür ederim. –