Как правильно формировать размеры групп для OpenGL шейдеров?
Добрый день, помогите разобраться, а то как-то совсем запутался. Решаю задачу трассировки лучей, для ускорения пытаюсь её реализовать на вычислительных шейдерах. Есть входные массивы лучей и треугольников сцены, размером ray_count и face_count, есть выходной массив размера ray_count*face_count. Очевидным образом задача хорошо параллелится, потому что поиск пересечения каждого луча с каждым треугольником не зависит от остальных (выбор ближайшего треугольника делается потом).
Запускаю как dispatchCompute(ray_count, face_count, 1), в самом шейдере пишу layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
Всё работает очень медленно, не знаю, как это проверить, но думаю, что я неправильно понял идею групп шейдеров.
Запускаются ли глобальные группы последовательно или их выполнение тоже будет распараллелено?
Правильно ли я понимаю, что локальные группы внутри глобальной запускаются параллельно?
Правильно ли я понимаю, что количество вызовов будет равно число глобальных групп*число локальных групп и для создания локальных групп мне надо как-то вычислять соотношение тех и других?
Можно ли сделать динамически вычисляемые размеры локальных групп?
Или здесь проблем нет и надо искать тормоза в алгоритме?
И заодно вопрос, каким инструментом можно вообще отладить\замерить производительность шейдера? (Вызываю из C++\OpenFrameworks если что).