2012-02-04 18 views
6

Voglio scrivere un programma per GPU (preferibilmente OpenCL) e gran parte del calcolo consiste nel contare il numero di 1 in un array di bit (impacchettato quanto lungo o int).OpenCL: istruzione popcnt a 32 e 64 bit su GPU?

Quindi, su CPU moderne ovviamente utilizzerei solo l'istruzione nativa __popcnt. Ho letto su diversi siti su Internet che le moderne GPU, questa istruzione è presente anche nell'hardware, il che sarebbe un enorme aumento di velocità per me. (almeno per 32-bit, non sono sicuro di 64)

Tuttavia, non trovo da nessuna parte come noi questa istruzione. Quindi:

1) come devo scoprire quali GPU hanno questa istruzione? (Ho ancora bisogno di acquistare la mia GPU, quindi sarà una moderna high-end ... probabilmente la serie Radeon HD7000 o nVidia Kepler)

2) come chiamare questa istruzione da OpenCL (o un linguaggio GPU simile) ?

risposta

5

Questo è disponibile come estensione cl_amd_popcnt. Ho una scheda Radeon 6870 e una CPU opteron 6128, entrambe supportano l'estensione.

Ancora una notizia migliore per voi è che a partire da OpenCL 1.2, non è più un'estensione. Vedere il popolamento delle istruzioni sulla scheda di riferimento e nelle specifiche. L'hardware della serie AMD 7xxx è compatibile con OCL 1.2 e immagino che sia anche il nuovo materiale Nvidia.

"T è di tipo char, charn, uchar, ucharn, breve, shortn, ushort, ushortn, int, INTN, uint, uintn, lungo, longn, ulong o ulongn, dove n è 2, 3, 4, 8 o 16 "

T popcount (T x) restituisce il numero di bit (non zero) popolati in 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

Problemi correlati