2013-09-30 16 views
6

Her zaman dal ayrışmasının sadece "if", "else", "for", "switch" vb. Gibi dallanma kodlarından kaynaklandığını düşünmüştüm. Bununla birlikte, yakın zamanda yazdığı bir makaleyi okudum:CUDA'da, birleştirilmemiş bellek erişimleri dal ayrılmasına neden olur mu?

Her bir ilk keşif tabanlı algoritmada iş parçacıkları tarafından alınan ıraksak dalların sayısının, tam keşif stratejisinden en az iki kez daha önemli olduğunu açıkça gözlemleyebiliriz: Bu, tipik olarak ek birleşik olmayan erişimden alınan sonuçların sonucudur. Bu nedenle, bu tür bir diş sapması, serileştirilmesi gereken birçok bellek erişimine yol açarak, çalıştırılan toplam komut sayısını arttırmaktadır.

Birleştirilmemiş erişimleri kullanan sürüm için warp serileştirme sayısının, karşılığı için yedi ile on altı arasında daha önemli olduğunu gözlemleyebiliriz. Gerçekten de, , birleşik olmayan erişimlerin neden olduğu bir ileti dizisi ayrışması, serileştirilmesi gereken bir çok bellek erişimine yol açarak, yürütülecek yönergeleri artırır. "

Bu yazara göre, gibi görünüyor olmayan coalesced erişimler farklı dalları neden olabilir. Gerçek? Sorum tam olarak şube ayrışmada kaç nedeni olduğunu var mı? Peşin teşekkür ederiz.

+1

Orijinal referansa bağlanabilir misiniz? – talonmies

+1

+1 Gerçekten bir bellek erişim stratejisinin farklı branşlamalardan nasıl sorumlu olacağını bilmek istiyorum. Lütfen referansı ekleyin. –

+1

Bu tez referans olmalıdır. 2 paragraf, sırasıyla p80 ve p107'den gelir. http://mistic.heig-vd.ch/luong/thesis.pdf – kangshiyin

cevap

3

Ben yazar kavram ve/veya terminoloji belirsiz olduğunu düşünüyorum.

sapma ve serileştirme iki kavramın

yakından ilişkilidir. bir çözgü ipliği farklı grupları seri idam edilmeli olarak Iraksama, seri neden olur Ancak serileştirme ayrışmaya neden olmaz, divergence ref Özellikle farklı kod yollarını çalıştıran bir çözgü içinde iş parçacıklarına dönüşür. Serileştirme (ancak ayrışma değil) neden olan diğer şeyler banka çakışmaları ve atomik işlemlerdir.

+1

Başka bir şube ayrışması olmayan serileştirme örneği, __constant__ belleğe eşit olmayan erişim olacaktır. – njuffa

+0

İki kavramı temizlediğiniz için teşekkürler. Yani algoritmanın/kodun birleşik olmayan bellek erişim örüntüsü, şube sapması ile kesinlikle bir ilgisi yok, daha spesifik olarak, NVIDIA Profiler'den alınan "şube verimliliği" sonucuyla? – Ben

+0

@Ben: Bu doğru. CUDA Profiler doktorları şunları söylüyor: “Şube Verimliliği = ({Branches} - {Diverged Branches})/{Branches} ve Diverged Branches = bir warp üzerinden farklı değerlendirilen dallar ve" Branşlar = şube talimatları ". Diğer bir deyişle, “Şube Verimliliği”, özellikle bir çözgüdeki şube talimatlarıyla ilgilidir ve birbirlerinden uzaklaştıkları örnekleri (bazıları alınır ve bazıları alınmaz) saymaktadır. –

İlgili konular