Модель выполнения вычислительного шейдера позволяет количеству вызовов (значительно) превышать количество отдельных исполнительных блоков в варп / волновом фронте.Например, аппаратные размеры деформации / волнового фронта имеют тенденцию быть между 16 и 64, в то время как количество вызовов в рабочей группе (GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS
) требуется в OpenGL, чтобы быть не менее 1024.
barrier
вызовы и использование переменных данных shared
, когда рабочая группа охватывает несколько деформаций / волновых фронтов, по сути, останавливает прогресс всех деформаций / волновых фронтов, пока каждый из них не пройдет эту конкретную точку.А затем выполнить различные операции очистки памяти, чтобы они могли обращаться к переменным друг друга (конечно, на основе использования барьера памяти).Если все вызовы в рабочей группе укладываются в одну деформацию, таких вещей можно избежать.
По сути, вы не можете контролировать, как вызовы CS группируются в деформации.Вы можете предположить, что реализация не пытается быть медленной (то есть она обычно группирует вызовы из одной и той же рабочей группы в одну и ту же основу), но вы не можете предполагать, что все вызовы в одной рабочей группебудет находиться в той же деформации.
Также не следует предполагать, что каждая деформация выполняет вызовы только из одной и той же рабочей группы.