2012-02-04 45 views
6

我想寫一個GPU(最好是OpenCL)的程序,並且大部分的計算包括對位數組中的1進行計數(打包爲long或int)。OpenCL:GPU上的32位和64位popcnt指令?

因此,在現代CPU上,我顯然會使用本地的__popcnt指令。我在互聯網上的幾個地方閱讀了現代GPU,這個指令也出現在硬件中,這對我來說將是一個巨大的加速。 (至少對於32位,不確定約64)

但是,我找不到如何給我們這條指令。所以:

1)我該如何找出哪些GPU有這個指令? (我仍然需要購買我的GPU,所以它將成爲現代高端...可能是Radeon HD7000系列或nVidia Kepler)

2)如何從OpenCL(或類似的GPU語言)調用此指令, ?

回答

5

這可作爲擴展cl_amd_popcnt使用。我有一個Radeon 6870顯卡和opteron 6128 cpu,都支持擴展。

對你來說更好的消息是,從OpenCL 1.2開始,它不再是一個擴展。請參閱參考卡和規範中的說明彈出窗口。 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