Ответ 1
В стандарте OpenCL не указывается, как модель абстрактного исполнения, предоставляемая OpenCL, сопоставляется с оборудованием. Вы можете присвоить любое число T потоков (рабочих элементов) и предоставить размер рабочей группы (WG), по крайней мере, следующие ограничения (подробнее см. В описании OpenCL spec 5.7.3 и 5.8):
- WG должна делить T
- РГ должна быть не более
DEVICE_MAX_WORK_GROUP_SIZE
- РГ должна быть не более
KERNEL_WORK_GROUP_SIZE
, возвращеннойGetKernelWorkGroupInfo
; он может быть меньше размера рабочей группы max, если ядро потребляет много ресурсов.
Реализация управляет выполнением ядра на оборудовании. Все потоки одной рабочей группы должны быть запланированы на одном "многопроцессорном", но один мультипроцессор может одновременно управлять несколькими рабочими группами.
Потоки внутри рабочей группы выполняются группами из 32 (NVIDIA warp) или 64 (фронт волны AMD). Каждая микро-архитектура делает это по-другому. Более подробную информацию вы найдете на форумах NVIDIA и AMD, а также в различных документах, предоставляемых каждым поставщиком.
Чтобы ответить на ваш вопрос: количество потоков не ограничено. В реальном мире ваша проблема ограничена размером входов/выходов, то есть размером памяти устройства. Для обработки буфера с плавающей запятой объемом 4 ГБ вы можете вставить очереди 1G, например WG = 256. Устройство должно будет запланировать 4M рабочих групп на своем небольшом числе (например, от 2 до 40) мультипроцессоров.