首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于warp投票函数

关于warp投票函数
EN

Stack Overflow用户
提问于 2012-05-12 03:10:04
回答 4查看 6.5K关注 0票数 9

CUDA编程指南介绍了warp投票函数、"_all“、"_any”和"__ballot“的概念。

我的问题是:哪些应用程序将使用这3个函数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-12 04:07:11

CUDA-histogram和CUDA NPP库中使用__ballot来快速生成位掩码,并将其与__popc内部特性相结合,以非常有效地实现布尔约简。

在引入__ballot之前,__all__any被用在了reduction中,尽管我想不出还有其他的用法。

票数 5
EN

Stack Overflow用户

发布于 2013-07-25 05:06:36

__ballot的原型如下

unsigned int __ballot(int predicate);

如果predicate不为零,则__ballot返回一个设置了N第th位的值,其中N是线程索引。

结合使用atomicOr__popc,它可以用来累计每个具有真谓词的warp中的线程数。

实际上,atomicOr的原型是

int atomicOr(int* address, int val);

atomicOr读取address指向的值,使用val执行逐位OR操作,然后将该值写回address,并将其旧值作为返回参数返回。

另一方面,__popc返回使用32-bit参数设置的位数。

相应地,说明

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]));

可用于计算谓词为true的线程数。

有关更多详细信息,请参阅Morgan Kaufmann CUDA Programming的Shane Cook

票数 6
EN

Stack Overflow用户

发布于 2015-05-13 18:24:28

作为使用__ballot应用编程接口的算法的一个例子,我会提到D.M.Hughes等人的内核内流压缩。它在流压缩的前缀sum部分中使用,以计算(每扭曲)通过谓词的元素的数量。

Here the paper. In-k Stream Compaction

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10557254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档