GPU, ускорители и инфраструктура LLM

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

Определение

Группа потоков CUDA (warp) — 32 подряд идущих потока блока, которые в модели NVIDIA CUDA планируются на мультипроцессоре (SM) как одна единица. При ветвлении часть потоков группы может остаться без полезной работы, а если размер блока не кратен 32, последняя группа окажется неполной.

Также ищут: 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 предположений; не утверждение о фиксированном порядке выполнения отдельных потоков.

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

Не путать

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

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

Группа потоков CUDA Тензорные ядра 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.
Открытые основания

Первоисточники

  • Документация3
  • Официальная документация
    CUDA C++ Programming Guide NVIDIA · CUDA C++ Programming Guide, CUDA 12.6, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен.

    Утверждения: 01 · 02 · 03 · 04 · 05 · 06 · 07

  • Официальная документация
    CUDA C++ Best Practices Guide NVIDIA · CUDA C++ Best Practices Guide, CUDA 12.6, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен.

    Утверждения: 04

  • Официальная документация
    NVIDIA Ampere GPU Architecture Tuning Guide NVIDIA · NVIDIA Ampere GPU Architecture Tuning Guide, CUDA 12.6, страница открыта 7 сентября 2026 года · проверено

    Открыт редактором 7 сентября 2026 года, заголовок документа сверен.

Карта знаний

Связанные понятия

Из знания — в навык

Курсы по теме

Подтвердите действие