2014-12-15 7 views
1

Я хочу контролировать количество ядер GPU для проверки ускорения. Как я могу это сделать в OpenCL? Я понимаю, что могу контролировать размер группы для управления синхронизацией, но я запутался, так как размер группы может быть более ста, что намного больше, чем количество ядер GPU.OpenCL как управлять количеством процессоров для использования

+2

Использование деления устройства (OpenCL> = 1.2). –

+1

@ ParkYoung-Bae, пожалуйста, напишите ему как ответ, чтобы стереть этот вопрос с неотвеченной вкладки. –

ответ

3

То, что вы ищете, называется Устройство деления. Это расширение в OpenCL 1.1 и в базовой спецификации от OpenCL 1.2 и далее.

Чтобы предоставить вам отправную точку, вам необходимо использовать clCreateSubDevices. Например, чтобы ограничить ядро ​​для запуска только на одном вычислительном блоке, вы можете передать properties как таковую:

{ 
    CL_DEVICE_PARTITION_BY_COUNTS, 
    1, // Use only one compute unit 
    CL_DEVICE_PARTITION_BY_COUNTS_LIST_END 
} 

Это говорит водителю, чтобы создать один суб-устройство состоит из одного вычислительного блока. Затем вы можете запустить свое ядро ​​на этом под-устройстве, которое будет запланировано только на одном вычислительном блоке.

+0

По умолчанию будут использоваться все ядра? – ethanjyx

+1

Если вы запустите свое ядро ​​на * физическом * устройстве (те, которые возвращаются 'clGetDevices'), то да, будут использоваться все вычислительные единицы (термин« ядро ​​»имеет двусмысленное значение). Если вы запустите свое ядро ​​на * логическом * устройстве (под-устройстве), тогда будет использоваться только количество вычислительных единиц, которые вы указали. –

+0

Когда я использовал это на алгоритме nbody на fx8150, чтобы выбрать только 7-ядер вместо 8, производительность повысилась на% 50 -% 70, возможно, используя все ядра для opencl, это не позволяет запускать любой другой поток. –

Смежные вопросы