Open GL ES локальные и глобальные отношения размера рабочей группы - PullRequest
0 голосов
/ 31 августа 2018

У меня есть шейдерная программа в Open GL ES. Я хочу настроить локальные / глобальные размеры рабочей группы для выполнения одномерной задачи с помощью Compute Shader.

У меня есть общий размер задачи (общее количество потоков, которые могут меняться между различными запусками), скажем, [task_size]. Скажем, я указываю размер локальной рабочей группы, пусть это будет [local_size]. А также я знаю, сколько у меня рабочих групп, скажем, [рабочих групп]. Я указываю локальный размер как здесь:

 layout(local_size_x = [local_size]) in;

И я указываю количество рабочих групп в glDispatchCompute:

glDispatchCompute([workgroups], 1, 1);

Если local_size * workgroups == task_size, я четко понимаю, что происходит. Каждая часть задачи вычисляется отдельной группой.

Но что произойдет, если task_size не делится равномерно на local_size? Я понимаю, что минимальное количество рабочих групп, которое мне нужно, это task_size / local_size + 1. Но как это работает? Последняя рабочая группа на самом деле меньше других? Влияет ли это на производительность? Это хорошая идея, чтобы сделать task_size равномерно делиться на local_size?

...