OpenCL / OpenGL Размеры взаимодействия буфера рендеринга с размерами рабочей группы

Я делаю некоторые тесты по взаимодействию OpenCL / OpenGL. Один из них состоит в создании OpenGL FBO с прикрепленным буфером рендеринга. Я пытаюсь записать пиксели в связанный объект памяти OpenCL (image2d_t) в ядре, сохраняя все в графическом процессоре и вставляя FBO в основной кадровый буфер OpenGL каждый кадр. Фрейм-буфер отображается в окне с изменяемыми размерами, поэтому его размер может варьироваться.

Если я пытаюсь запустить ядро, я получаю ошибку размера CL_INVALID_WORKGROUP_SIZE, если размеры ширины и высоты не кратны (локальным) размерам рабочей группы.

Это действительно необходимо? Мне не нравится заполнять дополнительную память, вводить параметры ширины / высоты и добавлять дополнительные проверки границ внутри ядра, если я могу избежать этого …
Я также не хотел бы использовать только размеры рабочей группы 1 😉

2

Решение

Да, в спецификации OpenCL, вплоть до 1.2, указано, что глобальный размер должен быть кратным локальному размеру. В 2.0 они ослабили это, но, конечно, пока нет реализаций 2.0.

Обычный обходной путь — округлить ваш глобальный размер работы до следующего кратного локального размера работы, но передать желаемый (реальный) глобальный размер в качестве параметров, а затем в вашем ядре проверить, если global_id (0) / global_id (1) ) меньше реального размера перед выполнением работы.

В качестве альтернативы, передайте NULL в качестве локального рабочего размера и выберите время выполнения (но локальный рабочий размер, настроенный для аппаратного обеспечения, обычно быстрее).

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]