SIMT объясняет программную модель потоков, а warp задаёт конкретную группу этой модели в CUDA. Свойство программы «много потоков» ещё не определяет, насколько заполнены warp и какие ресурсы ограничивают их размещение.
Почему это важно
Два kernel с одинаковым числом потоков могут по-разному использовать GPU. Для объяснения нужно увидеть, какие потоки попадают в один warp, какие из них активны на каждой ветви и где алгоритм требует обмена данными. Число 32 без этих условий почти ничего не говорит о времени задачи.
Что подтверждено
В описанной CUDA 12.6 модели NVIDIA warp состоит из 32 потоков. Это число относится к CUDA warp; его нельзя автоматически переносить на wavefront или иную группу выполнения другого ускорителя.
Граница применимости: NVIDIA CUDA 12.6, SIMT architecture; размеры групп AMD и других производителей здесь не устанавливаются.
CUDA формирует warp из последовательно нумеруемых потоков блока. В многомерном блоке линейный номер сначала изменяется по координате x, затем по y и z; геометрия блока влияет на то, какие обращения к данным оказываются в одной группе.
Граница применимости: Индексация thread block CUDA 12.6; порядок выполнения разных warp из этого правила не выводится.
Разные ветви потоков одного warp не превращаются в независимые полные warp. Выполняются нужные пути с соответствующими активными потоками; ветвление может оставить часть lanes без полезной работы на очередной инструкции.
Граница применимости: CUDA SIMT, divergence внутри одного warp; конкретная стоимость зависит от путей, активных потоков и архитектуры.
В примере CUDA блок из 33 потоков занимает две warp-группы: вторая содержит только один действительный поток блока. Это не группа из 33 одновременно полезных lanes; при оценке размещения и occupancy нужно учитывать неполный warp и реальные ограничения ресурсов.
Граница применимости: Редакторский пример: обычный CUDA block с 33 потоками, warp size 32, без досрочно завершившихся потоков. Точный расход регистров и shared memory пример не задаёт.
У CUDA warp intrinsics с суффиксом _sync маска задаёт участвующие потоки. Все незавершённые потоки, названные в маске, должны исполнить требуемую операцию с согласованной маской; чтение значения у неучаствующего потока не становится корректным только из-за соседства в warp.
Граница применимости: Контракт синхронных warp intrinsics CUDA 12.6, например shuffle; дополнительные требования конкретной операции проверяют отдельно.
__syncwarp синхронизирует указанную группу потоков warp и даёт предусмотренные гарантии порядка памяти между участниками. Он не является барьером для всех warp блока; для межгруппового обмена нужен подходящий block-level либо иной поддержанный механизм.
Граница применимости: CUDA 12.6, warp synchronization и block synchronization; барьер выбирают по реальному набору участников.
С Independent Thread Scheduling в NVIDIA Volta и последующих описанных CUDA архитектурах нельзя считать неявное синхронное продвижение потоков warp универсальной гарантией корректности. Старый код с такими предположениями требует проверки участия потоков и синхронизации.
Граница применимости: CUDA 12.6, переход от прежних warp-synchronous предположений; не утверждение о фиксированном порядке выполнения отдельных потоков.
Не путать
Warp — группа программных потоков, а Tensor Core — аппаратный ресурс для поддержанных матричных операций. Один warp может совместно выполнять матричную операцию через соответствующий интерфейс; это не делает 32 потока 32 тензорными ядрами.
Что проверить
- Зафиксируйте, что обсуждается именно CUDA warp выбранной архитектуры.
- Постройте линейную нумерацию потоков для геометрии блока.
- Проверьте число полных и неполных warp в блоке.
- Разберите активные потоки каждого пути условного перехода.
- Для warp intrinsic проверьте маску и участие всех названных незавершённых потоков.
- Не заменяйте block-level барьер синхронизацией одного warp.
- Проверьте старые warp-synchronous предположения и измерьте kernel на целевой GPU.
Первоисточники
CUDA C++ Programming Guide
NVIDIA · CUDA C++ Programming Guide, CUDA 12.6, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточникCUDA C++ Best Practices Guide
NVIDIA · CUDA C++ Best Practices Guide, CUDA 12.6, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточникNVIDIA Ampere GPU Architecture Tuning Guide
NVIDIA · NVIDIA Ampere GPU Architecture Tuning Guide, CUDA 12.6, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен.
Открыть первоисточник