Я пишу вычислительный шейдер в Unity. Я понимаю, что набор потоков внутри рабочей группы может выполняться в любом порядке / полностью параллельно на оборудовании. Что я не уверен в том, что набор рабочих групп выполняется в определенном порядке?
Если мое ядро помечено numthreads(256, 1, 1)
, означает ли это, что ноль SV_GroupID
сначала выполняется с его потоками SV_GroupIndex
от 0 до 255 (в любом порядке), затем SV_GroupID
номер один и т. Д.
Если не по умолчанию, есть ли способ обеспечить его соблюдение ...? Могу ли я установить количество потоков, равное количеству, доступному на аппаратном обеспечении, чтобы гарантировать, что оно может выполнять только одну группу за раз или что-то? (звучит глупо!)
Контекст: у меня есть редкий массив упорядоченных данных, и я пытаюсь сжать их в плотный массив, сохраняя при этом порядок. Использовать преимущества существующего порядка с использованием параллельного алгоритма - это сложно!