Меня интересует реализация opencl ядра, которая считает множество (1) бит в unsigned int Я знаю, что существует такое расширение для opencl, и я не хочу его использовать, но сам реализуюреализация bitcount в opencl
1
A
ответ
0
Здесь также применяются большинство трюков на базе процессоров старой школы, хотя любой такой цикл не будет отличным на GPU. Вероятно, таблица (неглобальная память) будет работать лучше всего.
См:
How to count the number of set bits in a 32-bit integer?
2
Это не точная функция, которую вы ищете. Но поскольку никто не опубликовал OpenCL-код, я добавлю его. Это код подсчета кода OpenCL для 256-битных целых чисел, а не 32 бит по вашему запросу. Код от here. Он использует один из известных алгоритмов, обозначенных Dithermaster. Преобразование в 32-битное не должно быть сложно.
//
// popcnt256 - return population count for 256-bit value
//
uint popcnt256 (ulong4 vreg)
{
const ulong4 m1 = (ulong4)(0x5555555555555555,0x5555555555555555,0x5555555555555555,0x5555555555555555);
const ulong4 m2 = (ulong4)(0x3333333333333333,0x3333333333333333,0x3333333333333333,0x3333333333333333);
const ulong4 m4 = (ulong4)(0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f);
const ulong4 h01 = (ulong4)(0x0101010101010101,0x0101010101010101,0x0101010101010101,0x0101010101010101);
vreg -= (vreg >> 1) & m1;
vreg = (vreg & m2) + ((vreg >> 2) & m2);
vreg = (vreg + (vreg >> 4)) & m4;
vreg = (vreg * h01) >> 56;
return vreg.s0 + vreg.s1 + vreg.s2 + vreg.s3;
}
Смежные вопросы
- 1. Реализация в OpenCL
- 2. Метод BitCount
- 3. Реализация алгоритма сокращения на openCL
- 4. параллельная реализация сокращения сумма в OpenCL
- 5. Эффективно обмен буферами памяти в OpenCL: реализация
- 6. Быстрая реализация двоичной экспансионизации реализации в OpenCL
- 7. Стойкая стильная реализация OpenCL очень медленная
- 8. Реализация OpenCL для Intel Core i5 (linux)
- 9. Варианты использования для Redis SETBIT, GETBIT, BITCOUNT?
- 10. Как реализовать Bitcount используя только побитовые операторы?
- 11. Внедрить OpenCL в OpenGL
- 12. Есть ли реализация OpenCL функции unix crypt (3)?
- 13. Есть ли доступная реализация OpenCL, поддерживающая расширение fp16?
- 14. Intel OpenCL Vs. Khronos OpenCL
- 15. Реализация ParseInt метод
- 16. Указатели между буферами OpenCL
- 17. OpenCL local_work_size NULL
- 18. Операторы openCL cl_float4 переопределяют
- 19. OpenCL не находит платформы?
- 20. Использование растровых операций Redis, таких как BITCOUNT от .NET?
- 21. Может кто-нибудь объяснить, как работает этот код bitCount?
- 22. OpenCL/CPU. Проверьте, доступна ли среда OpenCL
- 23. Имитация OpenCL 1.1 с OpenCL 1.2
- 24. Ввод файлов в OpenCL?
- 25. форматирование строк в OpenCL?
- 26. Глубина резкости в OpenCL
- 27. Поддержка HyperQ в OpenCL
- 28. Строка в OpenCL
- 29. Самоуправляющий указатель в OpenCL
- 30. Преобразование типа в opencl