Максимальное количество одновременных вычислений при использовании OpenCL

Осваиваю вычисления на GPU через OpenCL. Прочитал множество материалов по этой теме, но нигде так и не увидел конкретный ответ на вопрос: как загрузить GPU по максимуму? Понятно, что есть ограничения по памяти и т.п., но это я сейчас в расчет не беру, будем считать что данные для обработки требуют малое количество памяти.

Опытным путем я пришел к следующему:

CL_DEVICE_MAX_COMPUTE_UNITS: 6
CL_DEVICE_MAX_WORK_ITEM_SIZES: [1024, 1024, 64]
CL_KERNEL_WORK_GROUP_SIZE: 256

Никаких сложностей с размерностью сейчас не нужно (в kernel будем использовать get_global_id(0)), значит определяем размер группы одним числом - 1024 (CL_DEVICE_MAX_WORK_ITEM_SIZES[0]). Но, т.к. размер группы не может быть больше CL_KERNEL_WORK_GROUP_SIZE - используем 256. Глобальный размер задачи получается: 256 * 6 (CL_DEVICE_MAX_COMPUTE_UNITS) = 1536. Т.е. при использовании данного глобального размера и кратных ему (3072, 6144, 12288 и т.д.), мощности GPU будут задействованы по полной, не будет простоев/работы в холостую, всегда будет максимальное число операций/секунду, только увеличивается время выполнения в 2 раза. Верны ли мои выводы? Если нет, прощу объяснить, как добиться максимального количества одновременных операций?


Ответы (0 шт):