Мы привыкли воспринимать видеокарты как дополнение к основному процессору. А бывают даже интегрированные видюхи. Но на самом деле. Видеокарта — это компьютер в компьютере, который выполняет намного больше операций, чем остальные компоненты системы. Смотрите сами:

  • В центральном процессоре — 4, 8, ну может 16 ядер. В видеокарте вычислительных блоков — тысячи!
  • В ней миллиарды транзисторов, гигабайты своей видеопамяти с пропускной способностью до терабайта в секунду.
  • И всё это потребляет мощности, весит и стоит как отдельный комп!

Вот например характеристики GeForce RTX 3090:

  • Ядра CUDA: 10496 | Тензорные ядра : 328 | Ядра трассировки лучей: 82
  • 28 млрд. транзисторов
  • Видеопамять: 24 ГБ GDDR6X
  • Пропускная системной памяти: > 1 ТБ/с
  • Цена: от 136 990 руб.

Но раз видюхи такие производительные, зачем нам вообще центральный процессор? И в чем всё-таки отличия CPU от GPU?

А чем видеокарты отличаются между собой? Как такая бандура помещается в ноутбук? И главное выясним, можно ли в играть в Cyberpunk 2077 на ноутбуке на ультра-настройках. Поговорим об этом и о многом другом в большом разборе!

Сейчас видеокарты много чего умеют делать и часто делают некоторые задачи куда быстрее и эффективнее CPU? Но к такому положению вещей мы пришли не сразу. Первые видеокарты было бы справедливо назвать ASIC-ками (Application-Specific Integrated Circuit), то есть интегральными схемами специального назначения. Что это значит?

Центральный процессор — это универсальный чип. Он может выполнять совершенно разного рода задачи. Всё потому, что каждое ядро центрального процессора — это много разных блоков, каждый из которых умеет делать свой тип вычислений.

Это удобно, потому как на центральном процессоре мы можем сделать любое вычисление. И в принципе, один огромный ЦП может заменить собой вообще все остальные чипы. Но естественно, это будет неэффективно. Поэтому для специфических задач на помощь центральному процессору часто приходят сопроцессоры или ASIC-ки то есть отдельные чипы, заточенные под эффективное решение какой-то конкретной задачи.

Так в середине 90-х такой конкретной задачей стало ускорение первых 3D-игр вроде Quake!

Первые видеокарты

Без ускорения Quake выглядел достаточно постредсвенно. Всё очень пиксельное и тормозное.

Но стоило прикупить себе волшебный 3D-акселератор. Подключить его к вашей основной 2D-видеокарте снаружи коротким VGA кабелем. Да-да, раньше это делалось так. И Quake превращался в нечто запредельное. Игра становилась, плавной, красочной, а главное работала в высоком для того времени разрешении и соответственно никаких пикселей.

Тогда это воспринималось практически как магия. Но за счет чего происходило такое кардинальное улучшение картинки? Чтобы ответить на этот вопрос, давайте разберемся как работает видеокарта поэтапно.

Как работает видеокарта?

Этап 1. Растеризация.

Трёхмерный объект изначально векторный. Он состоит из треугольников, которые можно описать вершинами. То есть, по сути, объект — это набор вершин, со своими координатами в трехмерном пространстве.

Но ваш экран двумерный, да ещё и состоит из пикселей. Так как нам отобразить векторный 3D объект в двухмерном пространстве? Правильно — спроецировать его!

Мы переносим координаты вершин на плоскую поверхность соединяем их при помощи уравнений прямых на плоскости и заполняем пикселями плоскости треугольников. На этом этапе мы получаем двухмерную проекцию объекта на экране.

Этап 2. Текстурирование

Дальше нам нужно как-то раскрасить модельку. Поэтому на растрированный объект по текстурным координатам натягивается текстура.

Но просто натянуть текстуру недостаточно, ее нужно как-то сгладить. Иначе при приближении к объекту вы просто будите видеть сетку текселей. Прям как в первых 3D-играх типа DOOM. Поэтому дальше к текстуре применяются различные алгоритмы фильтрации.

На первых видеокартах применялась билинейная интерполяция. Её вы и видели на примере с Quake. Всё, что она делает — это линейно интерполирует промежуточные цвета между четырьмя текселями, а полученное значение становится цветом пикселя на экране.

Такую интерполяцию активно используют используют и сейчас. Но в дополнении к ней также делают трилинейную интерполяцию — это еще более продвинутая версия сглаживания, но используют её только на стыках разных уровней детализации текстур, чтобы их замаскировать.

А вот чтобы вернуть четкости текстурам под углами к камере используют анизотропную интерполяцию. Чем выше её коэффициент тем четче получается картинка, так как для получения цвета каждого пикселя делается до 16 выборок. Особенно это заметно на поверхностях, находящихся под острым углом к камере. То есть, к примеру, на полу.

Окей, теперь мы получили цветное изображение. Но этого всё ещё недостаточно, потому как в сцене нет освещения. Поэтому переходим к следующему этапу с интригующим названием пиксельный шейдер или затенение пикселей.

Этап 3. Пиксельный шейдер.

Вообще шейдер — это штука, которая позволяет программисту что-то делать с вершинами, треугольниками и пикселями на программном уровне. В случае Пиксельных Шейдеров — это даёт разработчикам разработчиком возможность динамически менять цвет каждого пикселя экрана по программе.

Кстати, впервые поддержка простых шейдеров появились в 2001 году, когда появилась NVIDIA GeForce 3. До этого освещение тоже делалось, но аппаратными средствами и разработчики особо не могли влиять на результат. Так вот сегодня это самый ресурсоемкий этап, на котором для каждого пикселя нужно просчитать как он отражает, рассеивает и пропускает свет. Как ложатся тени по поверхности модели и прочее. То есть иными словами рассчитывается финальный цвет пикселя.

Каждый объект сцены описывается при помощи нескольких текстур:

  • Карта нормалей, текстура, в которой хранятся векторы нормалей для каждой точки поверхности. При помощи этих векторов рассчитывается попиксельное освещение.
  • Карта зеркальности, которая описывает сколько света отражается от поверхности.
  • Карта шероховатостей (roughness mapbump map), которая описывает микрорельеф поверхности или то, как поверхность будет рассеивать свет.
  • Альбедо карта, то есть карта диффузии или естественный цвет объекта.
  • И прочие.

Этап 4. Сохранение

После кучи вычислений при помощи информации из всех вышеперечисленных текстур наступает последний этап. Мы получили финальный цвет пикселя и сохраняем его в видеопамять. А после обработки всей сцены мы уже можем выводить картинку на экран.

Мощность

Все эти вычисления нужно проводить очень быстро и главное параллельно. Например, чтобы вывести 60 раз в секунду 4К-изображение нужно посчитать цвет примерно полумиллиарда пикселей. А если мы хотим 120 FPS — то целый миллиард. Именно поэтому видеокарты отличаются по структуре от центрального процессора.

Центральный процессор заточен под последовательное, но очень быстрое выполнение множества разнообразных вычислений. Поэтому ядер в центральном процессоре мало, но зато они умеют быстро щелкать любые задачи. А вот в GPU вычислительных блоков тысячи, они не умеют максимально быстро выполнять задачи с небольшим количеством данных последовательно как процессор, но очень быстро делают параллельные вычисления с большим количеством данных. Например, NVIDIA GeForce RTX 3090 в пике может делать до 38 триллионов операций с плавающей точкой в секунду.

Так как видеокартам нужно постоянно загружать и выгружать огромное количество данных в память, то у них используется и свой тип памяти — GDDR. У неё выше задержки, чем в обычной DDR, поэтому такую память не имеет смысла использовать в качестве оперативной. Но у GDDR существенно выше ширина канала и пропускная способность, которая уже сейчас доходит до 1 ТБ в секунду.

Это позволяет видеокартам обрабатывать сотни миллиардов пикселей в секунду.

CUDA

Вся эта мощь нужна только для того чтобы в игры играть? На самом деле — нет. Видеокарты уже давно используется для профессиональных задач.

Но стало это возможно только в 2006 году, когда вышла карточка GeForce 8800, в которой впервые появились ядра CUDA — Compute Unified Device Architecture. Это унифицированные ядра, которые впервые позволяли использовать видеокарту не только для игр, но и для любых массивных параллельных вычислений: типа рендеринга видео, симуляции воды, дыма, ну или майнинга крипты, если вдруг это еще актуально.

А в 2018 году, произошла другая революция — появилась архитектура Turing, а вместе с ней новые типы ядер и, конечно же, технологии трассировки лучей. Поговорим сначала о ней.

Трассировка лучей

Что такое трассировка лучей? Несмотря, на то что видеокарты за годы своей эволюции обросли поддержкой кучи эффектов. Игры действительно стали выглядеть впечатляюще круто. Но всё равно, остались выглядеть как игры. Почему?

Дело в том, что до появления технологии трассировки лучей, в играх не было настоящего глобального освещения. Оно рассчитывалось для каждого объекта по отдельности, причем поочередно. Соответственно, мы не могли рассчитать как объекты влияют друг на друга, как преломляется и отражается свет между разными объектами. А всё глобальное освещение сцены просто заранее «запекалось» в текстуру в графическом редакторе игры. Есть еще зонды и куча других техник, которые позволяют получить грубую имитацию глобального освещения с кучей недостатков — протеканием света сквозь объекты, повышенными требованиями к объему видеопамяти, отсутствием физики, так как если изменится положение объектов в сцене, то и освещение придется заново считать, а с использованием заранее подготовленных ресурсов — это невозможно.

А вот трассировка лучей впервые позволила, построить освещение по законам природы и сняла кучу ограничений. Ну практически. Как это работает?

Вместо того, чтобы поочередно считать освещение для каждого объекта Сначала выводится вся трехмерная сцена и упаковывается в BVH коробки для ускорения трассировки. После чего из камеры в упакованную 3D-сцену запускается луч и мы смотрим с какой поверхностью он пересечется. А дальше от этой точки строится по одному лучу до каждого источника освещения. Так мы понимаем где свет, а где тень.

А если луч попал на отражающий объект, то строится еще один отраженный луч и так мы можем считать переотражения. Чем больше переотражений мы считаем, тем сложнее просчет, но реалистичнее результат.

Всё практически как в жизни, но для экономии ресурсов, лучи запускаются не от источника света а из камеры. Иначе бы пришлось просчитывать много лучей, которые не попадают в поле зрения игрока, то есть делать бесполезные, отнимающие ресурсы GPU вычисления.

Новые ядра

Для реализации трассировки лучей, помимо ядер CUDA пришлось придумать ядра нового типа. Это RT-ядра, что собственно и значит ядра трассировки лучей и тензорные ядра.

RT-ядра выполняют тот самый поиск пересечений между лучом и полигонами сцены. И делают это очень эффективно для благодаря алгоритму BVH — Bounding Volume Hierarchy.

Суть алгоритма: Каждый полигон вкладывается в несколько коробок разного размера, как в матрешку. И вместо того, чтобы проверять пересечения с каждым полигоном сцены, коих миллионы, сначала проверяется попал ли луч в небольшое количесчтво коробок, в которые упакованы треугольники сцены, На последнем уровне BVH матрешки содержится коробка с несколькими треугольниками сцены. Коробок намного меньше, чем треугольников, поэтому на тестирование сцены уходит намного меньше времени, чем если бы мы перебирали каждый треугольник сцены.

Тензорные ядра — это вообще необычная вещь для видеокарты. Такие ядра используется для операций матричного перемножения. То есть могут умножать много чисел одновременно. Это очень полезно для обучения глубоких нейронных сетей. Поэтому как правило, нейросети сейчас обучают и используют именно на видеокартах.

Но и в играх тензорные ядра имеют высокий вес. Во-первых, очищение рейтрейснутой картинки от шума в профессиональных пакетах с поддержкой OptiX.

Но в первую очередь, для реализации фирменной технологии DLSS — Deep Learning Super Sampling. Это технология сглаживания и апскейлинга картинки при помощи нейросетей. Например, у вас 4K-монитор, но видеокарта не тянет 4К на ультрах. Что в этом случае делает DLSS. Картинка рендерится в более низком разрешении 1440P или 1080P, а потом несколько соседних кадров объединяются нейросетью в новый кадр более высокого разрешенияи. Да так, что часто выглядит даже лучше чем в нативном разрешении. При этом мы получаем огромный прирост фреймрейта.

Многовато технологий! В таком можно и запутаться, поэтому чтобы упорядочить мысли давайте пройдёмся по этапам того как работает видеокарта.

Чем отличаются видеокарты?

Окей, кажется с принципом работы видеокарты разобрались. Теперь давайте поговорим почему одни видеокарты работают быстрее, а другие медленнее.

Во-первых, на скорость и возможности видеокарты влияет поколение. Например, до появления серии GeForce RTX 20-серии вообще не было трассировки лучей и прочих плюшек. Но если говорить о производительности в рамках одного поколения, то нас интересуют 4 параметра:

  • Количество ядер и прочих исполнительных блоков
  • Скорость и объём памяти
  • Частота ядра
  • Дизайн

Допустим, сравним 20-ю серию.

В RTX 2060 — 1920 ядер CUDA , а в 2080 Ti — 4352. Соответственно в общих задачах мы можем рассчитывать на производительность примерно в 2 раза выше. С частотой ядра и объёмом памяти думаю тоже всё понятно. Чем больше, тем лучше.

Дизайн

Но причем тут дизайн?

Дело в том, что NVIDIA производит только чипы и показывает референсный дизайн видеокарты. А дальше каждый производитель сам решает какую систему охлаждения поставить и в каком размере сделать видеокарту. Соответственно, чем лучше охлаждение, тем выше будет частота работы, и больше производительность.

Но также под дизайном имеется ввиду формфактор. Дело в том что большие видеокарты, например, просто физически не влезут в ноутбук. А если даже влезут, энергопотребление в них будет запредельным. Поэтому существуют мобильные модификации видеокарт, которые просто распаиваются на материнской плате. Мобильные модификации карточек отличаются сниженными частотами и энергопотреблением.

Существуют две разновидности мобильных дизайнов:

  1. Просто Mobile. Это версии для жирных игровых ноутов. они не сильно отличаются по производительности от десктопных версий. Иногда такие карточки называют Max-P, типа performance. А иногда вообще ничего не приписывают. Но не обольщайтесь в ноутбуке не может стоять не мобильная версия.
  2. А бывает дизайн Max-Q. Такие карточки ставя в тонкие игровые ноуты. В них существенно ниже энергопотребление, но и частоты сильнее порезаны.
RTX 2080 Super RTX 2080 Super Mobile (Max-P) RTX 2080 Super Max-Q
CUDA ядра 3072 3072 3072
Частота яда 1650 МГц 1365 МГц 975 МГц
Частота в режиме Boost 1815 МГц 1560 МГц 1230 МГц
Энергопотребление (TDP) 250 Вт 150 Вт 80 Вт

Проверим на практике

Производительность игровых лэптопов приблизилась к десктопной. Но ноутбуки более удобны в силу форм-фактора. GeForce GTX — это ок, нормальный начальный уровень. RTX — оптимальный выбор для любителей игр. Кроме того, RTX GPU — это еще и ускорение более 50 рабочих приложений. Рптимальный выбор для работы и игр. Но хватит теории. Давайте проверим на практике, чем отличаются по производительности разные карточки.

У нас есть 3 ноутбука. Вот с таким железом.

ASUS ROG Zephyrus G15
Ryzen 7 4800HS
NVIDIA GeForce GTX 1650 Ti 4ГБ

ASUS ROG Zephyrus G14
Ryzen 9 4900HS
NVIDIA GeForce RTX 2060 Max-Q 6ГБ

ASUS ROG Zephirus DUO
Intel Core i9-10980HK
GeForce RTX 2080 SUPER Max-Q 8ГБ

Во всех трёх вариантах установлены разные процессоры, но они все мощные, поэтому не должны сильно повлиять на результат тестов. По крайней мере бутылочным горлышком они точно не будут.

GTX 1650 Ti Mobile RTX 2060 Max-Q RTX 2080 Super Max-Q
CUDA ядра 1024 1920 3072
Частота ядра 1350 МГц 975 МГц 975 МГц
Частота в режиме Boost 1485 МГц 1185 МГц 1230 МГц
Тензорные ядра 240 384
RT-ядра 30 48
Объем видеопамяти 4 ГБ 6 ГБ 8 ГБ
Энергопотребление (TDP) 65 Вт 50 Вт 80 Вт

И, для начала, немного синтетических тестов. Судя по тесту 3DMark Time Spy, 2080 Super в дизайне Max-Q опережает 2060 на 25%, а 1650 Ti на 51%. А значит мы ожидаем, что 2080 будет выдавать примерно в 2 раза больший фреймрейт. Посмотрим так ли это на практике.

  • GTX 1650 Ti Mobile — 3948 (-51.7%)
  • RTX 2060 Max-Q — 6090 (-25.5%)
  • RTX 2080 Super Max-Q — 8170

Тест Cyberpunk 2077

Мы всё проверяли на Cyberpunk 2077 с версией 1.04 на не самой загруженной сцене, в закрытой локации. Тем не менее с наличием экшэна. Все ноутбуки работали в режиме производительности турбо.

Итак, в Cyberpunk 2077 есть 6 стандартных пресетов графики: низкие, средние, высокие, впечатляющие. И еще две настройки с трассировкой лучей: это впечатляющие настройки + среднее качество трассировки или ультра качество. В пресетах с трассировкой сразу же включен DLSS в режиме Авто. Это стоит учитывать.

Итак, на что способны наши видеокарты?

Во-первых, 1650 Ti показала себя очень неплохо, потому, что выдала супер играбельный фреймрейт на высоких настройках графики — стабильные 30+ FPS с редкими просадками до 25. А уж совсем играбельными оказались средние настройки — это уже 35-40 FPS.

Full HD, стандартные настройки

Настройки графики GTX 1650 Ti Mobile RTX 2060 Max-Q RTX 2080 Super Max-Q
Впечатляющее + RT: ультра + DLSS Auto ~34 FPS ~ 49 FPS
Впечатляющее + RT: средне + DLSS Auto ~ 43 FPS ~ 63 FPS
Впечатляющее ~29 FPS ~48 FPS ~68 FPS
Высокое ~34 FPS ~ 55 FPS
Среднее ~38 FPS ~ 65 FPS
Низкое ~45 FPS

В этой карточке нет тензорных и RT-ядер, поэтому трассировка не поддерживается. GeForce GTX — это графика начального уровня. Но на удивление тут работает технология DLSS. Она дает не очень большой прирост, примерно +4 FPS. Но этого вполне достаточно чтобы комфортно играть на высоких настройках в разрешении FHD. Считаю, это победа.

GTX 1650 Ti Mobile FHD

Настройки графики 1080P GTX 1650 Ti Mobile
Впечатляющее + RT: ультра + DLSS Auto
Впечатляющее + RT: средне + DLSS Auto
Впечатляющее ~29 FPS
Высокое ~34 FPS
Среднее ~38 FPS
Низкое ~43 FPS
Впечатляющее + DLSS Качество ~32 FPS
Впечатляющее + DLSS Ультрапроизводительность ~40 FPS
Высокое + DLSS Сбалансированное ~38 FPS
Среднее + DLSS Сбалансированное ~42 FPS

На 2060 можно играть вообще на всех настройках. На ультрах с рей трейсингом получаем стабильные 30 кадров. А на средних настройках уже больше 60 FPS без просадок.

А при включении DLSS мы получаем огромный прирост. Тут стабильные 60 кадров на впечатляющих настройках, но без трассировки лучей.

RTX 2060 Max-Q FHD

Настройки графики RTX 2080 Super Max-Q
Впечатляющее + RT: ультра (без DLSS) ~8 FPS
Впечатляющее + RT: ультра + DLSS Auto ~47 FPS
Впечатляющее + RT: средне + DLSS Auto ~ 60 FPS
Впечатляющее ~ 21 FPS

RTX 2080 вообще особо не напрягается в разрешении FHD и выдает 60 FPS почти на максимальных настройках, а если отключить трассировку лучей и того выше. RTX 2080 и даже если отключить DLSS vs получаем играбельный фремрейт в районе 40 FPS на среднем качестве трассировки лучей.

RTX 2080 Super Max-Q FHD

Настройки графики RTX 2080 Super Max-Q
Впечатляющее + RT: ультра (без DLSS) ~8 FPS
Впечатляющее + RT: ультра + DLSS Auto ~47 FPS
Впечатляющее + RT: средне + DLSS Auto ~ 60 FPS
Впечатляющее ~ 21 FPS

Поэтому для такой мощной карточки мы также запустили игру в 4K-разрешении и вот тут DLSS выступил во всейкрасе. Потому как без него мы получили слайдшоу меньше 10 FPS. А вот с DLSS 60 стабильных кадров на средних настройках трассировки. Отсюда делаем вывод что без DLSS в 4К-разрешении вообще играть нельзя.

RTX 2080 Super Max-Q 4K

Настройки графики RTX 2080 Super Max-Q
Впечатляющее + RT: ультра (без DLSS) ~8 FPS
Впечатляющее + RT: ультра + DLSS Auto ~47 FPS
Впечатляющее + RT: средне + DLSS Auto ~ 60 FPS
Впечатляющее ~ 21 FPS

Итоги

Что в итоге? Несколько выводов. Во-первых Cyberpunk 2077 для ПК вполне играбелен даже на ноутбуках на железе позапрошлого поколения. Во-вторых, DLSS очень крутая технология. Раньше нам приходилось понижать разрешение или отрубать эффекты, чтобы поднять фреймрейт. Теперь же можно просто поменять режим DLSS и радоваться.

А сегодняшний тест мы подготовили в том числе благодаря магазину Ситилинк. Главные преимущества Ситилинк – приятные цены и широкий ассортимент. Выбирайте свой ноутбук мечты на базе Nvidia на Ситилинк.