GPU, ускорители и инфраструктура LLM · проверено по источникам

Группа потоков CUDA

Warp — группа из 32 потоков в модели NVIDIA CUDA, используемая при организации выполнения на SM. Это единица разбора планирования и активности потоков, а не универсальное число для всех производителей GPU и не число физических вычислительных ядер.

Также ищут: CUDA warp · warp · варп GPU

Практический смысл

Почему это важно

Два kernel с одинаковым числом потоков могут по-разному использовать GPU. Для объяснения нужно увидеть, какие потоки попадают в один warp, какие из них активны на каждой ветви и где алгоритм требует обмена данными. Число 32 без этих условий почти ничего не говорит о времени задачи.

Доказательная часть

Что подтверждено

  1. В описанной CUDA 12.6 модели NVIDIA warp состоит из 32 потоков. Это число относится к CUDA warp; его нельзя автоматически переносить на wavefront или иную группу выполнения другого ускорителя.

    Граница применимости: NVIDIA CUDA 12.6, SIMT architecture; размеры групп AMD и других производителей здесь не устанавливаются.

  2. CUDA формирует warp из последовательно нумеруемых потоков блока. В многомерном блоке линейный номер сначала изменяется по координате x, затем по y и z; геометрия блока влияет на то, какие обращения к данным оказываются в одной группе.

    Граница применимости: Индексация thread block CUDA 12.6; порядок выполнения разных warp из этого правила не выводится.

  3. Разные ветви потоков одного warp не превращаются в независимые полные warp. Выполняются нужные пути с соответствующими активными потоками; ветвление может оставить часть lanes без полезной работы на очередной инструкции.

    Граница применимости: CUDA SIMT, divergence внутри одного warp; конкретная стоимость зависит от путей, активных потоков и архитектуры.

  4. В примере CUDA блок из 33 потоков занимает две warp-группы: вторая содержит только один действительный поток блока. Это не группа из 33 одновременно полезных lanes; при оценке размещения и occupancy нужно учитывать неполный warp и реальные ограничения ресурсов.

    Граница применимости: Редакторский пример: обычный CUDA block с 33 потоками, warp size 32, без досрочно завершившихся потоков. Точный расход регистров и shared memory пример не задаёт.

  5. У CUDA warp intrinsics с суффиксом _sync маска задаёт участвующие потоки. Все незавершённые потоки, названные в маске, должны исполнить требуемую операцию с согласованной маской; чтение значения у неучаствующего потока не становится корректным только из-за соседства в warp.

    Граница применимости: Контракт синхронных warp intrinsics CUDA 12.6, например shuffle; дополнительные требования конкретной операции проверяют отдельно.

  6. __syncwarp синхронизирует указанную группу потоков warp и даёт предусмотренные гарантии порядка памяти между участниками. Он не является барьером для всех warp блока; для межгруппового обмена нужен подходящий block-level либо иной поддержанный механизм.

    Граница применимости: CUDA 12.6, warp synchronization и block synchronization; барьер выбирают по реальному набору участников.

  7. С Independent Thread Scheduling в NVIDIA Volta и последующих описанных CUDA архитектурах нельзя считать неявное синхронное продвижение потоков warp универсальной гарантией корректности. Старый код с такими предположениями требует проверки участия потоков и синхронизации.

    Граница применимости: CUDA 12.6, переход от прежних warp-synchronous предположений; не утверждение о фиксированном порядке выполнения отдельных потоков.

Граница терминов

Не путать

Выполнение одной инструкции несколькими потоками

SIMT объясняет программную модель потоков, а warp задаёт конкретную группу этой модели в CUDA. Свойство программы «много потоков» ещё не определяет, насколько заполнены warp и какие ресурсы ограничивают их размещение.

Тензорные ядра GPU

Warp — группа программных потоков, а Tensor Core — аппаратный ресурс для поддержанных матричных операций. Один warp может совместно выполнять матричную операцию через соответствующий интерфейс; это не делает 32 потока 32 тензорными ядрами.

Перед спецификацией

Что проверить

  1. Зафиксируйте, что обсуждается именно CUDA warp выбранной архитектуры.
  2. Постройте линейную нумерацию потоков для геометрии блока.
  3. Проверьте число полных и неполных warp в блоке.
  4. Разберите активные потоки каждого пути условного перехода.
  5. Для warp intrinsic проверьте маску и участие всех названных незавершённых потоков.
  6. Не заменяйте block-level барьер синхронизацией одного warp.
  7. Проверьте старые 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 года, заголовок документа сверен.

    Открыть первоисточник
Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие