我想为GPU编写一个程序(最好是OpenCL),大部分计算包括计算位数组中的1的数量(打包为long或int).
因此,在现代CPU上,我显然只使用本机__popcnt指令.我在互联网上的几个地方读到了现代GPU,这个指令也存在于硬件中,对我来说这将是一个巨大的加速.(至少32位,不确定64位)
但是,我发现如何使用这条指令.所以:
1)我应该如何找出哪个GPU有这个指令?(我仍然需要购买我的GPU,因此它将是一款现代高端产品......可能是Radeon HD7000系列或nVidia Kepler)
2)如何从OpenCL(或类似的GPU语言)调用此指令?
这可以作为扩展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