Я изучаю OpenCL, чтобы реализовать относительно сложный алгоритм обработки изображений, который включает в себя несколько подпрограмм, которые должны быть реализованы как ядра.
Реализация предназначена для графического процессора Mali T-6xx.
Я прочитал книгу «Программирование OpenCL на примерах» и документ «Оптимизация ядер OpenCL на графических процессорах Mali-T600».
В примерах книги они используют некоторый глобальный размер рабочих элементов, и каждый рабочий элемент обрабатывает несколько пикселей в циклах for.
В документе ядра написаны без циклов, так как каждый рабочий элемент в ядре выполняется один раз.
Поскольку максимальный глобальный размер рабочих элементов, которые можно создать на графических процессорах Mali T-600, составляет 256 (и это для простых ядер). И в большинстве изображений для обработки явно больше пикселей, в моем понимании ядро без циклов будет создаваться. больше потоков рабочих элементов как можно скорее, пока глобальный размер рабочих элементов не завершит выполнение ядра, а глобальный размер может быть просто количеством пикселей в изображении. Это правильно? Так что это своего рода цикл порождения потока сам по себе?
С другой стороны в кн. Общий рабочий размер меньше, чем количество обрабатываемых пикселей, но в ядре есть циклы, которые заставляют каждый рабочий элемент обрабатывать несколько пикселей при выполнении кода ядра.
Поэтому я хочу знать, какой способ является правильным для написания ядер обработки изображений или любых ядер OpenCL, если на то пошло, и в каких ситуациях один способ может быть лучше, чем другой, при условии, что я правильно понял оба способа...