Архитектура компьютера

Архитектура GPU: SIMD и массивный параллелизм

ChatGPT обрабатывает ваш запрос за 1 секунду. Без GPU это заняло бы 10 минут. Нейронные сети - это огромные матрицы. GPU - это машина для умножения матриц с тысячами ядер. Архитектура GPU - фундамент AI-революции.

  • GPT-4 обучен на тысячах NVIDIA A100 GPU
  • Stable Diffusion: генерация изображения за ~1 сек на GPU (vs 5 мин на CPU)
  • 3D рендеринг: raytracing на GPU в реальном времени
  • Майнинг криптовалют - массово-параллельный хеш

CPU vs GPU: разные философии

**CPU** оптимизирован для последовательных задач с низкой задержкой: 8-64 сложных ядра, глубокий OoO, большой кэш. **GPU** оптимизирован для пропускной способности: тысячи простых ядер, простой pipeline, высокая пропускная способность памяти.

**Amdahl's Law:** Если 5% программы строго последовательно, максимальное ускорение = 20×, независимо от числа GPU-ядер. Bottleneck - sequential код на CPU.

Почему GPU имеет во много раз большую полосу памяти, чем CPU?

SIMT и варпы

**SIMT (Single Instruction, Multiple Threads)** - все потоки в группе (warp) выполняют одну инструкцию, но с разными данными. Это ключевая идея GPU-программирования.

**Warp Divergence:** Если в одном варпе часть потоков идёт по `if`, а часть по `else` - обе ветви выполняются последовательно с маскированием неактивных потоков. При возможности - выносить ветвления на уровень блоков.

В варпе из 32 потоков половина идёт по ветке if, половина по else. Как долго это займёт относительно варпа без ветвлений?

Иерархия памяти GPU

**GPU имеет свою иерархию памяти**, оптимизированную для высокой пропускной способности. Правильное использование памяти - ключ к производительности.

**GPU для ML:** Трансформеры (GPT, BERT) - это в основном матричные умножения. Tensor Cores в NVIDIA GPU выполняют 4×4 матричное умножение за 1 такт. H100: 3958 TFLOPS для FP8 - именно поэтому AI требует GPU.

GPU быстрее CPU потому что в нём больше вычислительных ядер. Чем больше FP32-юнитов, тем быстрее любая программа.

Производительность GPU упирается в иерархию памяти, не в количество ядер. HBM bandwidth, shared memory, coalesced access, register pressure определяют реальные FLOPS больше, чем теоретический peak. Tensor Cores ускоряют не «вычисления», а конкретный паттерн matmul - вне его GPU простаивает.

Интуиция «больше параллелизма = быстрее» забывает про memory wall. Naive CUDA kernel часто получает 5-10% от заявленных TFLOPS, потому что warp ждёт данные из global memory (400-800 cycles latency). Roofline-анализ показывает, что почти все ML-нагрузки memory-bound, а не compute-bound. Поэтому FlashAttention переписывает attention под минимизацию HBM-обращений и ускоряет в 2-4 раза без новых FLOPS.

Зачем в CUDA-ядрах использовать shared memory вместо прямого доступа к global memory?

Ключевые идеи

  • GPU: тысячи простых ядер vs десятки сложных у CPU
  • SIMT: 32 потока (варп) выполняют одну инструкцию с разными данными
  • Warp Divergence: ветвления внутри варпа - главный враг производительности
  • Shared memory: быстрая on-chip память для данных блока (явное управление)
  • Coalesced access: соседние потоки должны читать соседние адреса

Связанные темы

GPU архитектура дополняет CPU - гетерогенные системы.

  • I/O и DMA — GPU работает через PCIe DMA для копирования данных CPU↔GPU
  • Иерархия памяти — GPU имеет свою многоуровневую иерархию памяти

Вопросы для размышления

  • Почему GPU плохо подходит для задач с нерегулярным доступом к памяти (например, обход графа)?
  • Как Tensor Cores отличаются от обычных CUDA ядер? Почему они важны для AI?
  • Что такое occupancy в CUDA и почему высокий occupancy не всегда означает лучшую производительность?

Связанные уроки

  • ca-14 — Многоядерные CPU - базис перед SIMD масштабом GPU
  • arch-14-multicore — GPU доводит параллелизм до тысяч лёгких потоков
  • arch-16-multicore-programming — CUDA/OpenCL - прикладной уровень поверх SIMT архитектуры
  • ml-01-intro — Весь deep learning зависит от матричных вычислений на GPU
  • par-01
Архитектура GPU: SIMD и массивный параллелизм

0

1

Войти