2012-02-04 13 views
6

Chcę napisać program dla GPU (najlepiej OpenCL), a duża część obliczeń polega na zliczaniu liczby 1 w tablicy bitowej (zapakowane jako long lub int).OpenCL: 32-bitowa i 64-bitowa instrukcja popcnt na GPU?

Tak więc, na nowoczesnych procesorach oczywiście używałbym natywnej instrukcji __popcnt. Czytałem w kilku miejscach w Internecie, że nowoczesne GPU, ta instrukcja jest również obecna w sprzęcie, co byłoby dla mnie ogromnym przyspieszeniem. (przynajmniej dla 32-bitów, nie wiem o 64)

Jednak nigdzie nie wiem, jak nam to polecenie. A więc:

1) w jaki sposób powinienem się dowiedzieć, które GPU mają tę instrukcję? (Nadal muszę kupić mój GPU, więc będzie to nowoczesny high-endowy ... prawdopodobnie Radeon HD7000 lub nVidia Kepler)

2) jak nazwać tę instrukcję z OpenCL (lub podobnego języka GPU) ?

Odpowiedz

5

Jest to dostępne jako rozszerzenie cl_amd_popcnt. Mam kartę Radeon 6870 i opteron 6128 cpu, oba obsługują rozszerzenie.

Jeszcze lepszą wiadomością jest to, że od wersji OpenCL 1.2 nie jest to już rozszerzenie. Zobacz popcount instrukcji na karcie referencyjnej oraz w specyfikacji. Sprzęt z serii AMD 7xxx jest kompatybilny z OCL 1.2 i wyobrażam sobie, że nowy Nvidia też jest.

„T typu char Charn, uchar, ucharn, krótkie shortn, ushort, ushortn, int INTN, uint uintn długo, longn, Ulong lub ulongn, w którym n oznacza 2, 3, 4, 8 lub 16 "

T popcount (T x) zwraca liczbę wypełnionych (niezerowych) bitów wx.

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

Powiązane problemy