OpenCL: 32-битная и 64-битная инструкция popcnt на GPU? - PullRequest
6 голосов
/ 04 февраля 2012

Я хочу написать программу для GPU (предпочтительно OpenCL), и большая часть вычислений состоит из подсчета количества единиц в массиве битов (упакованных как long или int).

Итак,современные процессоры, очевидно, я бы просто использовал нативную инструкцию __popcnt.Я читал в нескольких местах в Интернете, что современные графические процессоры, эта инструкция также присутствует в аппаратном обеспечении, что было бы огромным ускорением для меня.(хотя бы для 32-битной, не уверен насчет 64)

Однако я нигде не нахожу, как нам эту инструкцию.Итак:

1) как мне узнать, какие графические процессоры имеют эту инструкцию?(Мне все еще нужно купить мой GPU, так что это будет современный high-end… вероятно, серия Radeon HD7000 или nVidia Kepler)

2) как вызвать эту инструкцию из OpenCL (или подобного графического процессораязык)

1 Ответ

5 голосов
/ 04 февраля 2012

Это доступно как расширение cl_amd_popcnt. У меня есть карта Radeon 6870 и процессор Opteron 6128, оба поддерживают расширение.

Еще лучшая новость для вас - это то, что в 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

...