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

标签 opencl gpgpu

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

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

但是,我找不到如何使用此指令的地方。所以:

1) 我应该如何找出哪些 GPU 有此指令? (我仍然需要购买我的 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、charn、uchar、ucharn、short、shortn、ushort, ushortn、int、intn、uint、uintn、long、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

关于OpenCL:GPU 上的 32 位和 64 位 popcnt 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9140923/

相关文章:

c++ - OpenCL 计算与顺序算法的输出不匹配

c++ - 是否有 OpenCL std::queue 等价物

OpenCL 128位乘法结果

python - 安装了 beignet 以在 Intel 上使用 OpenCL,但 OpenCL 程序仅在以 root 身份运行时才有效

opencl - 在英特尔集成 GPU 上进行 GP 开发时,我可以选择哪些技术?

c++ - 为什么 GTX Titan 上的 cublas 比单线程 CPU 代码慢?

C++:不确定代码是否是多线程的

image - OpenCL 加载并模糊图像

memory-management - 在 OpenCL 内核中创建本地数组动态

gpgpu - C++ AMP 性能问题