OpenCL:GPU上的32位和64位popcnt指令?

use*_*929 6 gpgpu opencl

我想为GPU编写一个程序(最好是OpenCL),大部分计算包括计算位数组中的1的数量(打包为long或int).

因此,在现代CPU上,我显然只使用本机__popcnt指令.我在互联网上的几个地方读到了现代GPU,这个指令也存在于硬件中,对我来说这将是一个巨大的加速.(至少32位,不确定64位)

但是,我发现如何使用这条指令.所以:

1)我应该如何找出哪个GPU有这个指令?(我仍然需要购买我的GPU,因此它将是一款现代高端产品......可能是Radeon HD7000系列或nVidia Kepler)

2)如何从OpenCL(或类似的GPU语言)调用此指令?

mfa*_*mfa 5

这可以作为扩展cl_amd_popcnt使用.我有一个Radeon 6870卡和opteron 6128 cpu,都支持扩展.

对你来说更好的消息是,从OpenCL 1.2开始,它不再是一个扩展.请参阅参考卡和规范中的指令popcount.AMD 7xxx系列硬件兼容OCL 1.2,我想新的Nvidia也是如此.

"T是char类型,赞,UCHAR,ucharn,短,shortn,USHORT,ushortn,INT,INTN,UINT,uintn,长,longn,ulong或ulongn,其中n是2,3,4,8,或16 "

T popcount(T x)返回x中填充(非零)位的数量.

http://www.khronos.org/registry/cl/sdk/1.2/docs/OpenCL-1.2-refcard.pdf

http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf