Урок 11: Расхождение warp
warp — это группа из 32 threads, которые выполняют одну и ту же инструкцию вместе (lockstep) в модели SIMT. Пока каждый thread в warp идёт по одному и тому же пути кода, оборудование выполняет их вместе за один шаг. Но что происходит, когда if/else отправляет одни threads по ветви if, а другие — по
Представь хор из 32 певцов, которые должны петь одну и ту же ноту в каждый момент. Если половине нужно петь 'ля', а половине 'до', дирижёр сначала даёт спеть всем певцам 'ля' (остальные молчат), а затем всем певцам 'до'. Это занимает вдвое больше времени. Но если один целый хор поёт 'ля', а второй целый хор поёт 'до', оба поют одновременно без потерь.
- расхождение warp (warp divergence)
- Когда threads в одном warp идут по разным ветвям if/else, оборудование выполняет пути последовательно — время равно сумме путей.
- lockstep
- Все 32 threads в warp выполняют одну и ту же инструкцию на одном и том же шаге. Это основа SIMT.
- предикация (predication)
- Когда только часть threads в ветви активна, остальные замаскированы: они выполняют ту же инструкцию, но не записывают результат.
- однородная ветвь (uniform branch)
- Условие, которое все threads в warp вычисляют одинаково (например, по warpId), поэтому нет ни расхождения, ни штрафа.