2012-06-19 2 views
3

Могу ли я получить максимальную деформацию/рабочую группу на одном вычислительном блоке с помощью некоторой функции, такой как clGetDeviceInfo. Из того, что я нашел, число зависит только от возможности вычисления. Есть ли какая-нибудь функция, которая может ее обнаружить?OpenCl max warp и рабочая группа на единицу расчета

ТНХ jikra

ответ

1

Я думаю, что вы ищете clGetKernelWorkGroupInfo.

В частности, CL_KERNEL_WORK_GROUP_SIZE и CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE помогут вам настроить размеры рабочей группы.

+0

Спасибо за ваш ответ, но мне нужно что-нибудь еще: Мне нужно установить желаемое занятие для некоторого тестирования. Так что мне нужно знать максимум. warp, который может работать на моем HW и рассчитать распределение размеров NDRange вблизи требуемой занятости. Поэтому мне нужно максимально возможное количество активных потоков в вычислительной единице, которая позволяет аппаратное обеспечение. Могу ли я найти это? – cizek

+0

по ссылке: «CL_KERNEL_WORK_GROUP_SIZE \t size_t \t - Это обеспечивает механизм для приложения для запроса максимального размера рабочей группы, который может использоваться для выполнения ядра на определенном устройстве, заданном устройством. Реализация OpenCL использует ресурс требования к ядру (использование регистра и т. д.), чтобы определить, какой должен быть этот размер рабочей группы. " – mfa

+0

Да, я понимаю это. Пример. У меня есть NVidia Qadro 3000M, поэтому я могу иметь максимум 48 бит и 8 рабочих групп на единицу измерения. Если у меня есть ядро ​​с регистрацией 63, CL_KERNEL_WORK_GROUP_SIZE возвращает 512. Если я выполняю NDRange (1,1,1) (1,32,16), будет в одном вычислительном блоке всего 16 активных деформаций. занятость будет 16/48 = 0,33 (33%), но если я выйду NDRange (2,1,1) (1,24,16), будет в одном вычислительном блоке всего 12 активных деформаций. Занятие будет 12/48 = 0,25 (25%). Для этого расчета мне нужно знать максимальную активную деформацию на вычислительной единице – cizek