Размеры рабочей группы
Для данного ядра, почему рабочие группы всегда имеют одинаковый размер? Я где-то читал (для случая, когда мы не указываем локальный размер работы), что openCL создает 3 рабочие группы (по 217 рабочих элементов в каждой) для ядра с 651 рабочим элементом (делится на 3), в то время как он создает 653 работы -группы по 1 рабочему элементу каждая, так как 653 - простое число.
Предположим, что мы указываем local_work_size(т. Е. Количество рабочих элементов в рабочей группе), скажем,5. И мы дали общее количество рабочих элементов (global_work_size) как 9. Как будут создаваться рабочие группы? Вот почему global_work_size должен быть кратным local_work_size? Если данные требуют только 9 рабочих элементов, как я могу увеличить их до 10(кратно local_work_size,5)?
Почему хост не может выделить память для массива результатов, если он не знает, сколько рабочих групп будет выполнять ядро?
Пожалуйста помоги. Я прочитал все это на этом: http://www.openclblog.com/2011/09/work-group-sizes.html
1 ответ
Размеры рабочих групп OpenCL не всегда должны быть одинаковыми. Размер глобальной рабочей группы часто зависит от размера проблемы. Размер локальной рабочей группы выбирается исходя из максимальной пропускной способности вычислительного блока и количества потоков, которые должны совместно использовать локальную память.
Давайте рассмотрим пару примеров;
A) Масштабируйте изображение от N до M по X до Y.
Б) Сумма N чисел.
Для)
Очевидный размер глобальной рабочей группы - X,Y, 1. Почему? Это дает 1 поток на каждый пиксель. Размер локальной рабочей группы следует выбирать в зависимости от количества входных пикселей, которые необходимо обработать для создания выходного пикселя.
Например.
A.1) Масштабирование изображения с 4K на 3,2K до 64 на 64. Размер GWG [64,64,1] Размер LWG 256 A.2) Масштабирование изображения с 4K на 3,2k до 800 на 600. Размер GWG [800,60,1] LWG Размер 256
Для б)
Очевидный размер глобальной рабочей группы - N/2,1,1. Почему? Таким образом, каждый поток начинается с суммирования 2 значений вместе. Локальная рабочая группа должна быть настроена на устройство макс.
Есть несколько предостережений;
1) Размер глобальной рабочей группы ограничен размером глобальной памяти и максимальным размером глобальной памяти.
2) Каждое устройство имеет максимальный размер локальной рабочей группы часто 256