关于warp线程束的相关操作求解答

请问:
__popc()、__ballot()、__any()函数功能是什么?
为什么我在vs2010中进行编程,编译器总是找不到这些函数,错误是:
错误 14 error : identifier “__any” is undefined
错误 15 error : identifier “__ballot” is undefined

LZ您好,您说的3个函数在CUDA Toolkit自带的手册中都有的

__popc(),可以在CUDA Toolkit Reference Manual里面找到,是用来统计unsigned int类型的参数里面非零的bit的数量的。

__ballot()和__any()是warp vote function,您可以在CUDA C Programming Guide B.12找到介绍。
前者是统计一个warp内部有哪些线程能满足要求,如满足要求,将函数返回值的对应bit置为1。
后者是统计一个warp内部是否有线程满足某要求,如有任何一个线程满足要求,即返回非零值。

具体介绍请参看上述指出的文档。

您编译为何出错我不清楚,可能是环境配置的问题。

祝您好运~

非常感谢非常感谢!学习了~

LZ您好,不客气的~

补充说明一下,可以使用__ballot和__popc联用,可以快速统计出一个warp内部满足某条件的线程的数量。

祝您编码顺利~

对的对的,刚按照您的解答学习了下,确实很方便!

再次恭喜您~

祝您编码愉快~

您好,打扰了,我找到了那些函数不能识别的原因,但不知道解决方法
vs中显示的计算能力只有1.0,但我的GPU是GRX660,应该是3.0的计算能力
这个问题怎么解决呢?

LZ您好,您的“GRX 660”估计应为“GTX 660”。

您需要在编译的时候指定硬件架构参数。
论坛近期此类帖子很多,您可以找来看看。在设定的时候,您可以设定为sm_30,因为您的GPU的计算能力是3.0版的。

大致如此,祝你好运~

是GTX,搭错了~谢谢谢谢,解决了,哈哈,其实就简单改下就好了,想复杂了。。。

恭喜LZ顺利解决问题,祝您编码愉快~