Перейти к основному содержимому

VRAM, GPU, текстуры и бенчмаркинг

Разработчику Инженеру

Когда игра тормозит, узкое место может быть на CPU (логика, draw call submission), на GPU (пиксели, шейдеры) или на передаче данных между ними. Глава про видеопамять, устройство GPU и профилирование.


VRAM

VRAM (Video RAM, видеопамять) — быстрая память на видеокарте. На Apple Silicon — unified memory с сегментом под GPU.

Типично в VRAM
Текстуры (изображения)
Vertex и index buffers
Color и depth frame buffers
Uniform и constant buffers
Compute buffers

Загрузка CPU → GPU

glTexImage, device.createBuffer, new Texture2D + Applyдорогие операции. Выполняйте при загрузке уровня, не каждый кадр.

Симптомы нехватки VRAM:

  • краши драйвера
  • чёрные или розовые текстуры
  • внезапный даунскейл в играх

Оценка бюджета

1920×1080 RGBA8 color ≈ 8 МБ. Depth 24 bit ≈ 8 МБ. Post-processing, shadow maps, MSAA — сотни МБ на кадр в современных играх.


Устройство GPU

GPU (графический процессор) — throughput-процессор: тысячи простых ядер, мало ветвлений.

ТерминСмысл
CUDA core / Stream processorALU для шейдера
SM (NVIDIA) / CU (AMD)блок ядер + shared memory
Warp / Wavefront32 (или 64) потока выполняют одну инструкцию синхронно

Divergence в шейдере

if (uv.x > 0.5) { /* ветка A */ } else { /* ветка B */ }

Разные пиксели в одном warp идут по разным веткам → GPU выполняет обе, маскируя — потеря скорости. Избегайте тяжёлых if в hot path fragment shader.

CPU и GPU — разные задачи

CPUGPU
низкая латентностьвысокая пропускная способность
сложная логика, ветвленияоднотипная работа на пиксель
8–16 потоковтысячи

См. Параллельные вычисления.


Текстуры

Текстура — 2D массив цветов. UV (0..1) — координаты на картинке для точки на mesh.

Mipmaps

Уменьшенные копии: 512→256→128… GPU выбирает уровень по расстоянию — меньше aliasing (мерцание), выше скорость.

Фильтрация

РежимВид
Nearestпиксель-арт, резкие границы
Linearсглаживание
Anisotropicчёткие текстуры под углом (полы, дороги)

Сжатие

BC/DXT, ASTC — меньше VRAM, быстрее sampling на mobile.


Узкие места CPU и GPU

СимптомВероятно
CPU 100%, GPU 40%физика, JS, draw call count
GPU 99%, CPU низкийтяжёлые шейдеры, 4K, overdraw
Лаг при спавне враговupload текстур, GC (JS/C#)
Просадка при resizefill rate (больше пикселей)

Инструменты

СредаИнструмент
WebChrome Performance, Spector.js
Native GL/VulkanRenderDoc
NVIDIA / AMDNsight, RGP
Unity / Unrealвстроенный Profiler
Любаяframe time в мс

Метрики

  • Frame time — 16.7 ms @ 60 FPS, 6.9 ms @ 144 FPS
  • Draw calls — считать и снижать
  • Triangles — LOD + culling (глава 4)

Overdraw

Overdraw — один пиксель перерисован много раз (прозрачные слои, частицы). Дорого для fill rate.

Порядок: сначала непрозрачные ближние объекты (Z-test отсекает дальние), прозрачность — в конце.


Roofline (интуиция)

Мало операций на байт памяти — memory bound (текстуры, bandwidth).

Много математики на пиксель — compute bound (сложные шейдеры).

Увеличение разрешения сильнее бьёт по fill rate, чем по CPU.


Связи