CUDA programlama rehberi, "_ hepsi", " _any" ve "__ballot" gibi warp oylama işlevi kavramını tanıttı.Çözülme oyu işlevi hakkında
Soruma sorum: bu 3 işlevi hangi uygulamalar kullanacak?
CUDA programlama rehberi, "_ hepsi", " _any" ve "__ballot" gibi warp oylama işlevi kavramını tanıttı.Çözülme oyu işlevi hakkında
Soruma sorum: bu 3 işlevi hangi uygulamalar kullanacak?
__ballot
CUDA-histogram ve değerleri bir bit maskesi hızlı nesil için CUDA NPP kütüphanesinde kullanılmakta ve içsel __popc
birleştirerek boolean azalma çok verimli olarak yürütülebilmesi amacıyla.
__all
ve __any
, __ballot
girişinden önce indirgemede kullanıldı, ancak bunların başka bir kullanımını düşünemiyorum.
__ballot
prototipi predicate
sıfır ise, __ballot
N
iplik endeksidir N
inci bit kümesi, bir değer döndürür aşağıdaki
unsigned int __ballot(int predicate);
olduğunu.
atomicOr
ve __popc
ile birlikte, her bir çözgüdeki iş parçacığı sayısını gerçek bir yüklemeye sahip olarak biriktirmek için kullanılabilir.
Nitekim atomicOr
prototipi
int atomicOr(int* address, int val);
ve atomicOr
, değer address
tarafından işaret okur val
ile arasında ikilik OR
işlemi gerçekleştirir ve address
geri değerini yazar ve bir şekilde eski değerini döndürür dönüş parametresi.
Diğer tarafta, __popc
, 32
-bit parametresiyle ayarlanan bit sayısını döndürür.
Bu duruma göre, kullanım talimatları
volatile __shared__ u32 warp_shared_ballot[MAX_WARPS_PER_BLOCK];
const u32 warp_sum = threadIdx.x >> 5;
atomicOr(&warp_shared_ballot[warp_num],__ballot(data[tid]>threshold));
atomicAdd(&block_shared_accumulate,__popc(warp_shared_ballot[warp_num]));
yüklemi doğru olduğu parçacığı sayısını saymak için kullanılabilir.
fazla ayrıntı için, i D.M. Hughes ve Al tarafından In-Çekirdek Akışı Kompaksiyonu söz ediyorum __ballot API kullanır algoritmanın bir örnek olarak Shane Cook, CUDA Programlama Morgan Kaufmannbakın. Önek toplamını, önceliği geçen öğelerin sayısını (çözgü başına) saymak için akış sıkıştırmasının bir parçası olarak kullanılır.
Bu kulağa ilginç geliyor. Bakabileceğim bir uygulama var mı? – aatish
evet, bu algoritmanın geliştirilmiş bir sürümünü yazdım. https://github.com/knotman90/cuStreamComp. Lütfen açıklama veya karşılaştırma ölçütlerine ihtiyacınız varsa sorun. –
Aslında, itme kütüphanesine karşı bazı kriterleriniz varsa güzel olurdu. Ayrıca, cuCompactor.cuh satırının 78'inde, d_output_index adında başka bir global dizinin olması ve özgün verilerin nereden geldiğini gösteren idx değerini içermesi gerekir. Doğrumuyum? – aatish