2012-05-11 14 views

cevap

4

__ballotCUDA-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.

1

__ballot prototipi predicate sıfır ise, __ballotN 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 Kaufmann

0

bakı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.

Here the paper. In-k Stream Compaction

+0

Bu kulağa ilginç geliyor. Bakabileceğim bir uygulama var mı? – aatish

+0

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. –

+0

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