Компілятори шейдерів надзвичайно агресивно ставляться до розкручування, оскільки ранні HW часто не мали контролю над потоком, а вартість останніх HW може змінюватись. Якщо у вас є орієнтир, на який ви активно тестуєтесь, і ряд відповідних апаратних засобів, то спробуйте все, щоб побачити, що відбувається. Ваш динамічний цикл більше піддається втручанню розробника, ніж статичний цикл - але залишати його компілятору - це все-таки хороша порада, якщо у вас немає еталону. З еталоном, дослідження варто і (і цікаво).
До речі, найбільша втрата при динамічному циклі на графічному процесорі полягає в тому, що окремі "потоки" на хвилі / деформації закінчуються в різний час. Нитки, які зупиняються пізніше, змушують усіх, хто закінчує рано, виконувати NOP.
Вкладені петлі слід ретельно продумати: я реалізував блок-ентропійний декодер, який закодував прогони нулів (для JPEG, як стиснення). Природною реалізацією було декодування прогонів у тісному внутрішньому циклі - це означало, що часто лише одна нитка просувається; вирівнюючи цикл і явно перевіряючи в кожному потоці, чи був він в даний час декодуванням запуску чи ні, я підтримував всі потоки активними через цикл фіксованої довжини (декодовані блоки були однакового розміру). Якби потоки були схожі на потоки процесора, зміна була б жахливою, але на GPU, на якому я працював, я отримав 6-кратне підвищення продуктивності (що було все ще жахливо - не було достатньо блоків, щоб GPU був зайнятий - але це було доказом концепції).