Исследование работы Nvidia G8x в современных играх



Изначально данная статья задумывалась как продолжение исследования влияния количества исполнительных блоков на производительность архитектуры Nvidia G8x в современных играх. Мы планировали изменить параметры видеокарты на основе чипа G80 так, чтобы максимально приблизить её к стандартным вариантам на основе mid-end чипа G84, уравняв их в деталях. При помощи последней версии утилиты Riva Tuner Алексея Николайчука предполагалось оставить у Geforce 8800 рабочими лишь 32 универсальных блока, выполняющих шейдеры, отключив остальные, а также изменить тактовые частоты чипа и памяти.

Тактовую частоту GPU планировалось, по возможности, привести к частоте G84, а частоту локальной видеопамяти подобрать таким образом, чтобы пропускная способность памяти нашего варианта Geforce 8800 сравнялась с ПСП у Geforce 8600 (частота должна быть в три раза меньше, так как разрядность шины памяти отличается в 384/128=3 раза). Отличиями таких вариантов теоретически были бы разное количество блоков ROP: 24 против 8, а также — разные внутричиповые кэши и прочие оптимизации.

Целью задуманного исследования было определение того, насколько сильно повлияет разное количество блоков ROP на производительность, и того, насколько сильно отличаются исполнительные блоки в G84 и G80. Мы хотели провести подробное исследование производительности современных игр при помощи возможностей Nvidia PerfKit. К сожалению, нашему замыслу не суждено было сбыться — столь необходимые нам аппаратные счетчики производительности G80 не работают при отключении части шейдерных блоков, а без них толку в таком исследовании немного. Было решено не выкидывать собранный материал в мусорную корзину, сделав небольшой сравнительный анализ производительности и некоторых других технических особенностей современных 3D-игр на основе анализа собранных данных.

В процессе была отброшена ещё одна небольшая идея — показания счетчика stream_out_busy. Он оказался практически бесполезным, несмотря на то, что большая часть наших тестов была Direct3D 10 приложениями. Счетчик показал использование соответствующих блоков, ответственных за stream output, только в одном игровом проекте — Lost Planet: Extreme Condition, да и то — загрузка этих блоков в данном проекте была очень низкой, менее 1% в среднем, так что этот счетчик мы тоже не стали принимать во внимание.

Конфигурация и настройки тестовой системы

При тестировании использовалась следующая программно-аппаратная конфигурация:

  • Процессор: AMD Athlon 64 X2 4600+ Socket 939
  • Системная плата: Foxconn WinFast NF4SK8AA-8KRS (Nvidia nForce4 SLI)
  • Оперативная память: 2048 Мб DDR SDRAM PC3200
  • Видеокарты: Nvidia Geforce 8800 GTX 768MB и Nvidia Geforce 8600 GT 256MB
  • Жесткий диск: Seagate Barracuda 7200.7 120 Gb SATA
  • Операционная система: Microsoft Windows Vista Home Premium
  • Видеодрайвер: Nvidia ForceWare 163.16 (instrumented)

Использовался единственный режим видеонастроек — наиболее распространенное разрешение 1280x1024 (или ближайшее к нему 1280x960 для игр без поддержки такового) с включенными мультисэмплингом с четырьмя выборками (MSAA 4x) и анизотропной фильтрацией максимально возможного уровня — 16x. Обе возможности включались из игровых настроек, в конфигурационной панели видеодрайвера ничего не форсировалось.

Набор игр, использовавшихся в наших тестах, включает проекты, появившиеся не так давно. Предпочтение отдавалось играм с поддержкой Direct3D 10 или новым и интересным с точки зрения технологий 3D-графики. Это полный список: Call of Juarez DX10 benchmark, Company of Heroes, S.T.A.L.K.E.R.: Shadow of Chernobyl, Lost Planet: Extreme Condition DX10 benchmark, Colin McRae Rally: DiRT, Морской Охотник DX10 benchmark (PT Boats: Knights of the Sea), SEGA Rally Revo, Clive Barker's Jericho. В исследовании принимали участие несколько игр, не предоставляющих стандартных средств для запуска демок и повторов, поэтому приходилось тестировать приблизительно. Из дополнительного программного обеспечения использовались: Nvidia PerfKit 5, Riva Tuner 2.05 и Microsoft PIX for Windows из DirectX SDK.

К сожалению, в исследование не попали такие интересные приложения, как World in Conflict, BioShock, Medal of Honor: Airborne, Test Drive Unlimited, TimeShift, Call of Duty 4: Modern Warfare, Half-Life 2: Episode 2 и другие. Некоторые демо-версии и игры не успели попасть в обзор, а парочка проектов отказалась запускаться под отладчиком PIX: BioShock и Test Drive Unlimited.

Результаты тестирования

Lost Planet: Extreme Condition

Начинаем наше исследование с одной из наиболее технологичных игр 2007 года. Хотя Lost Planet: Extreme Condition пришла на ПК с Xbox 360, её высокая технологичность подтверждается множеством изменений, сделанных в движке специально для Direct3D 10 видеочипов настольных компьютеров. По сравнению с консольной версией, которая и так довольно технологична, в нашей появились: возможность использования FP16 буфера кадра, более качественные эффекты motion blur и depth of field, приличная визуализация меха (fur), большее количество сэмплов и улучшенная фильтрация карт теней, ambient occlusion, мягкие частицы (soft particles), продвинутый метод parallax mapping и некоторые другие нововведения.

Для тестирования в Lost Planet мы запускали встроенную демку, состоящую из демонстрации двух различных игровых уровней. Они действительно разные, если в первом количество объектов небольшое и производительность ограничена, прежде всего, видеокартой, то во втором, наоборот, объектов в сцене много, а производительность зависит и от CPU и от GPU.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 20.8 4.5
FPS (min) 11.0 2.1
video memory, Mb 507 505
batch count (avg) 738 799
batch count (max) 4375 4336
primitive count (avg) 497858 475061
primitive count (max) 2335540 2104705
setup triangle count (avg) 83318 82474
setup triangle count (max) 311494 292719
gpu_idle, % 0.1 0.1
rop_busy, % 7.9 5.2
texture_busy (avg), % 74.4 77.5
texture_busy (max), % 83.4 90.6
shader_busy (avg), % 84.6 88.3
shader_busy (max), % 89.0 98.0
geom_busy, % 0.2 1.2
input_assembler_busy, % 3.1 0.8


Для тестов использовалась DirectX 10 демо-версия игры со встроенным бенчмарком, которая не отражает производительности релиза со всеми установленными патчами. Поэтому частоту кадров можно оценивать лишь сравнительно, в релизе последней версии скорость рендеринга гораздо выше. Видим, что G84 сильно отстает от G80 по скорости, попробуем разобраться и найти ограничивающий производительность фактор. Во-первых, на скорости Geforce 8600 может отрицательно сказаться объем локальной видеопамяти, который вполовину меньше среднего объема, используемого игрой. Во-вторых, судя по полученным цифрам, на скорости рендеринга сказывается количество шейдерных блоков и блоков TMU, которых у G84 примерно во столько же раз меньше, во сколько ниже получилась производительность.

Разберем интересные цифры среди остальных параметров. Среднее количество вызовов функций отрисовки не совсем корректно отражает реальную картину, так как зависит от уровней: в первой сцене бенчмарка количество вызовов невелико, а во второй оно достигает цифры более 4000, что много, даже по современным меркам. Количество геометрии в игре выше среднего, хотя не совсем понятна разница между программным счетчиком primitive count и аппаратным setup triangle count. Оба видеочипа были постоянно заняты работой, налицо отсутствие зависимости производительности от центрального процессора. Геометрические блоки и блоки растровых операций не слишком загружены работой, а текстурные и шейдерные под завязку. Столь активного использования шейдерных блоков мы еще не видели ранее, вот что значит хорошая оптимизация, когда скорость полностью зависит от производительности видеочипа.

Морской Охотник (PT Boats: Knights of the Sea)

Этот бенчмарк вышел не так давно, и он интересен нам по многим параметрам. Эта игра не из серии шутеров, которых в исследовании будет больше всего. Также, демка наглядно показала свою высокую технологичность, там одна из лучших (если не лучшая) реализаций водных поверхностей, геометрическая, с отличной динамикой, отражениями и преломлениями, да и всё остальное тоже на хорошем уровне: качественно отфильтрованные мягкие тени, активная постобработка, да и сложные геометрические модели техники. Демка написана для Direct3D 10 API и использует некоторые его возможности, такие, как геометрические шейдеры.

В процессе тестирования мы запускали доступный DirectX 10 бенчмарк с максимально возможными настройками в указанном разрешении. Интересно, что настройки, прежде всего, влияют на агрессивность геометрического изменения уровня детализации (LOD) и не так сильно ухудшают качество отрендеренного изображения.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 21.2 1.8
FPS (min) 3.3 0.5
video memory, Mb 820 782
batch count (avg) 551 610
batch count (max) 1280 1298
primitive count (avg) 686565 707890
primitive count (max) 1067049 1063914
setup triangle count (avg) 358759 372106
setup triangle count (max) 728364 697458
gpu_idle, % 38.7 0.0
rop_busy, % 13.0 4.6
texture_busy (avg), % 24.6 47.9
texture_busy (max), % 41.3 73.3
shader_busy (avg), % 46.6 56.2
shader_busy (max), % 76.0 77.7
geom_busy, % 0.2 0.9
input_assembler_busy, % 5.6 0.6

Производительность видеокарты Geforce 8600 в этом случае упала очень сильно. Что и говорить, на максимальных настройках скорость и у Geforce 8800 невелика, особенно, учитывая минимальную достигнутую частоту кадров, но у G84 получилась не скорость, а катастрофа. Конечно, учитываем, что драйвер был специальный и привносил определенное снижение производительности вместе с отладчиком PIX, но такая низкая скорость явно не объясняется только этим. Думается, что главным фактором была большая требовательность демки к объему видеопамяти, ведь при максимальных настройках она занимает до 800 мегабайт! Конечно, повлияли и другие характеристики видеочипов и карт на их основе, в определенные моменты могло не хватать вычислительной и текстурной производительности.

Интересно, что количество вызовов draw calls не такое большое, видимо, определенные оптимизации были проведены. Количество обрабатываемой геометрии велико даже для современного уровня, видимо, в этом виноват как раз почти отключенный LOD. Любопытно, что Geforce 8800 не работала в полную силу, она простаивала чуть ли не половину времени, а общая скорость явно ограничивалась центральным процессором в этом случае. Загрузка демкой блоков TMU и ALU достаточно велика, их возможности используются неплохо, но показатели не приближаются к 100% и чем-то одним производительность явно не ограничена. Нагрузка на геометрические блоки, несмотря на количество треугольников, судя по цифрам, невелика.

Colin McRae Rally: DiRT

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

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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 35.2 11.9
FPS (min) 5.3 1.9
video memory, Mb 402 397
batch count (avg) 1772 1798
batch count (max) 3274 3656
primitive count (avg) 597935 614332
primitive count (max) 1138591 1157551
setup triangle count (avg) 145346 149966
setup triangle count (max) 354265 375663
gpu_idle, % 15.1 0.3
rop_busy, % 10.2 10.6
texture_busy (avg), % 37.8 42.3
texture_busy (max), % 59.6 61.5
shader_busy (avg), % 60.0 82.0
shader_busy (max), % 80.4 87.3
geom_busy, % 0.8 3.8
input_assembler_busy, % 11.7 3.8


Достигнутая частота кадров в протестированной игре при ее максимальных настройках явно не содействует приятной игре. Если с видеокартой на базе G80 вполне можно поиграть, хотя производительность иногда и просаживается слишком сильно, то с Geforce 8600 GT для достижения плавности придется снижать игровые настройки. G84 в этой игре примерно в три раза медленнее G80, что подтверждает обычное соотношение сил между ними. Производительность DiRT на Geforce 8800 порой упирается в процессор, а Geforce 8600 полностью загружена работой всегда. Причина низкой производительности последней — как в меньшем количестве исполнительных блоков, так и в недостаточном для высоких настроек объеме локальной видеопамяти.

Причина процессорозависимости игры, на наш взгляд, кроется в большом количестве вызовов отрисовки, в экстремальных случаях достигающем 3600 штук. Если на G84 процессорозависимость скрадывается медлительностью видеокарты, то в случае G80 явно виден упор в CPU, простой видеочипа в среднем достигает 15%, а его блоки хоть и загружены работой, но не полностью. Количество геометрии в игре большое, выше среднего уровня, хотя блоки обработки геометрии загружены не слишком сильно. То же касается блоков растеризации. Чего не скажешь о текстурных и шейдерных, которые работают на 40-80% своих возможностей, в зависимости от их типа и рассматриваемого видеочипа. В этом случае нагрузка на шейдеры выше, чем на текстуры.

Call of Juarez

Это слегка устаревшая игра, но отличающаяся весьма технологичным игровым движком, особенно учитывая то, что в нашем материале использовался бенчмарк обновленной Direct3D 10 версии. Данный вариант технологически отличается от первоначальной версии игры множеством новых возможностей: большим количеством объектов и геометрии, улучшенными системами частиц, использующими геометрические шейдеры, более качественными мягкими тенями с улучшенной фильтрацией карт теней, новыми текстурами и более сложным parallax mapping, применением alpha to coverage.



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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 23.1 7.2
FPS (min) 4.5 1.2
video memory, Mb 541 530
batch count (avg) 412 428
batch count (max) 722 724
primitive count (avg) 1380734 1390771
primitive count (max) 2308458 2306383
setup triangle count (avg) 851683 851585
setup triangle count (max) 2920384 2753703
gpu_idle, % 0.2 0.1
rop_busy, % 12.8 13.1
texture_busy (avg), % 23.4 27.5
texture_busy (max), % 53.7 36.5
shader_busy (avg), % 69.6 77.8
shader_busy (max), % 91.7 96.7
geom_busy, % 4.4 4.8
input_assembler_busy, % 33.3 12.1


Обновление движка и поддержка новых эффектов сильно ударили по производительности и так не слишком шустрой игры. Конечно, это максимальные настройки и достаточно высокое разрешение, но менее 30 кадров в секунду на high-end видеокарте — это слишком… Впрочем, модификации проводились под надзором компании AMD и для их решений они подходят лучше, а на продукции Nvidia обновленный код все-таки слишком медлителен. Возможно, из-за того, что применены такие алгоритмы с геометрическими шейдерами, производительность которых лучше подходит именно для архитектуры AMD. Карта на G84 медленнее варианта на G80 примерно в три раза, в обоих случаях производительность не зависит от CPU, только от видеокарты.

Объем видеопамяти, используемый игрой, довольно велик и достигает 530-540 мегабайт, что дополнительно повлияло на низкую производительность Geforce 8600. Количество вызовов draw calls невелико, что объясняется определенными оптимизациями. А количество обработанных геометрических примитивов очень большое, в игре явно много геометрии, количество полигонов в кадре иногда доходит почти до трех миллионов! Блоки ROP и геометрические не слишком заняты работой, текстурные загружены лишь на четверть в среднем, зато виден явный упор производительности в мощность шейдерных блоков. Этим подтверждается, что скорость рендеринга игры зависит, прежде всего, от количества и частоты универсальных блоков, выполняющих вершинные, пиксельные и геометрические шейдеры.

Company of Heroes

Эта игра — еще одна из списка, не относящаяся к шутерам, это стратегия в реальном времени. К сожалению, использовалась Direct3D 9 версия игры, без поддержки некоторых возможностей Direct3D 10, пришедших с патчами позднее. Игра не блещет множеством современных эффектов, но всё самое популярное и необходимое в ней есть, движок для стратегии технологичный: мягкие тени, постобработка, бампмаппинг, качественное освещение и текстурирование, системы частиц.


Мы не раз уточняли, что встроенный бенчмарк в Company of Heroes не отражает игровую производительность, так как используется скриптовый ролик, а не запись геймплея. Но всё-таки интересно посмотреть разницу в скорости рендеринга кинематографических сцен движком игры на разных видеокартах.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 92.6 41.2
FPS (min) 6.9 5.6
video memory, Mb 614 601
batch count (avg) 205 214
batch count (max) 931 930
primitive count (avg) 74895 77411
primitive count (max) 231863 233044
setup triangle count (avg) 19645 20159
setup triangle count (max) 98149 91632
gpu_idle, % 36.1 0.4
rop_busy, % 9.2 11.9
texture_busy (avg), % 29.3 37.3
texture_busy (max), % 70.8 96.2
shader_busy (avg), % 49.8 86.9
shader_busy (max), % 91.0 96.4
geom_busy, % 0.4 7.5
input_assembler_busy, % 5.6 2.5

Сразу видно, что игра несколько устарела (учитываем, что патчи с поддержкой Direct3D 10 нами не были установлены и протестированы), достигнутая частота кадров сравнительно велика. Низкое минимальное значение FPS может объясняться динамической подгрузкой контента и соответствующими особенностями движка. G84 тут всего в два раза медленнее G80, а последняя, исходя из значений счетчика gpu_idle, простаивала более трети времени теста, и была ограничена мощностью центрального процессора системы.

Из значений других счетчиков больше всего удивляет очень низкое по современным меркам количество вершин и треугольников на кадр. В то же время объем занятой видеопамяти велик, вероятно, туда сразу же грузятся все текстуры и модели уровня. Количество батчей невелико, это косвенно подтверждается и по количеству геометрии. ROP, input assembler и блоки обработки геометрии традиционно не слишком загружены работой, а текстурные и шейдерные работают весьма активно, особенно в случае G84. Вероятно, в скриптовой сцене бенчмарка есть моменты, когда производительность ограничена скоростью текстурных блоков, и есть моменты с упором в шейдерные. Даже на G80 загрузка ALU была в некоторых моментах почти полной.

S.T.A.L.K.E.R.: Shadow of Chernobyl

Игра включена в тесты из-за своей популярности и технологической необычности, в ней используются некоторые новые и интересные технические решения: deferred shading, множество попиксельных источников света, качественно отфильтрованные мягкие тени от нескольких источников, несложный вариант parallax mapping на большом количестве поверхностей, активная постобработка и многое другое.


К счастью для тестеров, после нескольких патчей разработчики игры добавили возможность записи и проигрывания демок, а также соответствующего тестирования производительности, в котором геймплей не записывается, а производится «облёт» местности, что нельзя считать полноценным тестом, но лучше, чем ничего. Игра не позволяет использовать мультисэмплинг как раз из-за deferred shading, поэтому мы ограничились обычным режимом 1280x1024.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 69.7 23.0
FPS (min) 20.7 8.1
video memory, Mb 610 592
batch count (avg) 1887 2014
batch count (max) 3468 3545
primitive count (avg) 760388 783642
primitive count (max) 1334276 1330498
setup triangle count (avg) 230065 229739
setup triangle count (max) 436388 424331
gpu_idle, % 22.3 0.6
rop_busy, % 15.3 17.4
texture_busy (avg), % 35.5 50.7
texture_busy (max), % 60.8 66.4
shader_busy (avg), % 61.0 78.7
shader_busy (max), % 86.1 88.0
geom_busy, % 1.5 5.3
input_assembler_busy, % 20.8 8.5


Интересно, что при таких разных по мощности видеокартах разница в производительности была не столь велика, хотя примерное соотношение 3:1 в частоте кадров сохраняется и здесь. И это с учетом того, что скорость рендеринга видеокартой Geforce 8800 GTX в S.T.A.L.K.E.R. была ограничена мощностью центрального процессора, почти четверть времени его GPU простаивал без работы. Судя по цифрам FPS, с видеокартой на основе G80 вполне комфортно играть, а у G84 не хватает мощности на максимальные настройки. Производительность игры больше всего зависит от мощности CPU и шейдерных и текстурных блоков GPU.

Количество вызовов функций отрисовки D3D было достаточно велико, среднее количество под 2000 вызовов, максимальное — 3500. Обрабатываемое за кадр количество геометрии среднее по нынешним временам, но что интересно — блок input assembler загружен работой больше обычного. Это может говорить, например, о большом количестве данных, выбираемых из памяти остальными блоками GPU. Большая загрузка input assembler на G80 по сравнению с G84 объясняется большим количеством входных данных из-за большей частоты кадров.

Интересно, что игрой активно задействуются и текстурные и шейдерные блоки, но все же влияние производительности последних на общую скорость рендеринга значительнее, работы для них здесь нашлось больше. Даже с учетом того, что Direct3D 9 движок игры не позволяет использовать мультисэмплинг, загрузка блоков ROP игрой получилась выше средней, это говорит об активной постобработке и использовании нескольких буферов рендеринга.

SEGA Rally Revo

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


Игра не предоставляет возможности проведения тестов и не записывает повторы, поэтому пришлось воспользоваться той же схемой, что и в случае с DiRT, — одна и та же трасса проходилась по несколько раз, результаты усреднялись.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 73.6 33.5
FPS (min) 14.4 4.9
video memory, Mb 331 336
batch count (avg) 1424 1493
batch count (max) 2989 3047
primitive count (avg) 834790 854697
primitive count (max) 1777959 1661084
setup triangle count (avg) 214693 226801
setup triangle count (max) 780875 785677
gpu_idle, % 30.9 0.5
rop_busy, % 13.8 21.4
texture_busy (avg), % 28.1 36.9
texture_busy (max), % 49.1 53.7
shader_busy (avg), % 57.5 91.2
shader_busy (max), % 85.8 95.1
geom_busy, % 1.0 11.2
input_assembler_busy, % 16.1 7.9


Хорошо видно, что задачи, поставленные трехмерным движком игры перед видеокартами, были проще, чем в большинстве предыдущих случаев. Достигнутая частота кадров вполне комфортна на Geforce 8800 (низкий минимальный FPS не мешает игре в данном случае), производительность Geforce 8600 ниже, но не так сильно, как обычно, чуть более двух раз. Это объясняется упором производительности в мощность CPU, ведь судя по gpu_idle, G80 простаивал более 30% времени. Что интересно, в те моменты, когда скорость зависит от GPU, наблюдается явный упор в производительность шейдерных блоков, остальные части видеочипа рендеринг не сдерживают.

Демо-версия игры использует чуть более 300 мегабайт видеопамяти, что почти входит в 256 мегабайт на Geforce 8600 и не должно сильно сказываться на её производительности. Количество батчей велико, это объясняется мультиплатформенностью игры и отсутствием особых оптимизаций для ПК. Число draw calls в среднем почти 1500, в экстремальных случаях — более 3000. Выделяется и количество обрабатываемой движком геометрии, при ничем не выдающейся картинке, количество вершин и полигонов довольно велико. Загрузка блоков ROP средняя, счетчики занятости геометрических блоков и input assembler показали странные и труднообъяснимые результаты, а с текстурными и шейдерными любопытно, как обычно. Текстурные блоки загружены примерно на треть, а шейдерные — наполовину у G80 и полностью у G84. Загрузка, на самом деле, полная, средний процент занятости ALU более 90% с пиками до 95%.

Clive Barker's Jericho

Последней в обзоре стала ещё одна игра, которая не слишком впечатляет своей картинкой и не ставит задачи идти впереди всех, на грани технологического прогресса. Это такой середнячок, но с довольно большим количеством новых технологий: parallax mapping, очень много видов постобработки (depth of field, motion blur, bloom), карты теней с фильтрацией, средние геометрия с текстурами и очень много попиксельной обработки. Посмотрим, как покажут себя тестируемые видеокарты в очередном мультиплатформенном проекте…


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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 31.7 9.9
FPS (min) 7.2 3.5
video memory, Mb 427 422
batch count (avg) 1137 1085
batch count (max) 2158 2208
primitive count (avg) 283826 268386
primitive count (max) 695568 683055
setup triangle count (avg) 89721 89926
setup triangle count (max) 283335 270695
gpu_idle, % 13.4 4.1
rop_busy, % 16.3 17.7
texture_busy (avg), % 39.1 34.7
texture_busy (max), % 48.5 41.6
shader_busy (avg), % 68.1 83.9
shader_busy (max), % 77.7 88.5
geom_busy, % 0.4 5.6
input_assembler_busy, % 6.1 1.7

Не получилось повторения ситуации с предыдущей игрой, тоже мультиплатформенной. Тут строго, как положено, — более чем трёхкратная разница между испытуемыми, производительность Geforce 8800 на грани играбельности, а Geforce 8600 максимальные настройки не тянет. Что интересно — частота кадров не ограничена только видеокартами в обоих случаях, даже G84 в процессе «отдыхал», хоть и недолго. Видимо, в определенные моменты теста скорость диктовал центральный процессор. А в остальных случаях — универсальные блоки исполнения шейдеров, которые были заняты работой 70-80% всего времени.

Остальные блоки GPU задействованы, как обычно, ROP — менее 20%, геометрический и input assembler — менее 10%, текстурные — на 30-40%. Очередная мультиплатформа уперлась в скорость шейдерных процессоров, в который раз производительность ограничена именно этими блоками. Требуемый игрой объем видеопамяти выше среднего уровня — более 400 мегабайт, количество draw calls и геометрии в кадре тоже чуть выше среднего, 1000 вызовов и менее 300000 примитивов, соответственно. Получился такой современный середнячок.

Выводы

Подведем итоги сразу по всем игровым проектам:

  • Большинство современных игр на максимальных настройках в наиболее распространенном разрешении экрана играбельны только на high-end видеокарте Geforce 8800 GTX, и то не всегда, минимальная частота кадров в некоторых случаях падает слишком низко.


  • Новые игры используют до 600-700 мегабайт видеопамяти. Это не значит, что все эти ресурсы должны быть в локальной памяти видеокарты, зачастую игры отдают таким образом менеджмент ресурсов (текстур и прочего) в управление API, тем более, что в Direct3D 10 используется виртуализация видеопамяти. Тем не менее, прослеживается чёткая тенденция к увеличению требуемых объемов локальной памяти на видеокартах, и объем 512 мегабайт на данный момент можно считать оптимальным. 256-320 Мбайт слишком мало, а 0.7-1 Гбайт пока что не востребованы в вышедших проектах. Но для high-end решений и такой объем памяти имеет смысл, так как они могут давать приемлемую частоту кадров и в больших разрешениях.


  • Наблюдается явное увеличение количества вызовов функции отрисовки, теперь игры не гнушаются средними значениями под 2000 вызовов на кадр, хотя наиболее оптимизированные обходятся меньшим количеством — 500-1000 вызовов на кадр. Увеличение этого количества влияет и на возрастающую процессорозависимость 3D-приложений, ведь при большем количестве вызовов отрисовки большая нагрузка ложится на центральный процессор системы.


  • Вместе с количеством вызовов draw calls растет и количество обрабатываемой геометрии. Цифры порядка 300000-500000 полигонов на кадр нас не удивляют, а наиболее продвинутые игры могут использовать до миллиона треугольников на средний кадр и до двух-трёх — в экстремальных случаях.


  • Во всех протестированных играх в наших тестовых условиях производительность системы с Geforce 8600 не была ограничена центральным процессором, зависела только от видеокарты. А видеочип Geforce 8800 GTX в наших условиях зачастую простаивал, порой, до четверти или даже трети всего времени. Вывод: для такой видеокарты нужен или более мощный центральный процессор или лучшая оптимизация игровых проектов, связанная со снижением количества вызовов функций отрисовки, прежде всего.


  • Загрузка блоков ROP всегда была достаточно низкой — до 10-20%, в обоих случаях. Конечно, нужно учитывать и разницу в FPS, но количество и возможности ROP в наших тестах явно не были основным ограничивающим фактором. Значения для G80 и G84 были схожи, за исключением одного случая — бенчмарка «Морского охотника», где, по-видимому, сказалась требовательность к объему видеопамяти.


  • Современные игры до сих пор достаточно сильно грузят текстурные блоки, наблюдается минимальная загрузка около 30% и максимальная — до 75% (и это на G80!). Становится понятно, что планы некоторых компаний на резкое изменение соотношения между количеством текстурных и шейдерных блоков были явно преждевременными, если даже такие технологичные проекты как Lost Planet: Extreme Condition используют TMU настолько активно.


  • Нагрузка на блоки обработки геометрии и input assembler (блок, выбирающий геометрические и другие данные из памяти для использования другими блоками) в играх очень невелика и никогда не ограничивает производительность рендеринга, хотя в некоторых проектах input assembler загружен работой больше, чем в среднем по всем проектам.


  • Универсальные шейдерные блоки во всех свежих игровых проектах являются основными ограничителями производительности. Их максимальная пиковая загрузка почти во всех играх достигает 70-90%, что говорит не только о полном использовании имеющихся ресурсов, но и об определенном ограничении скорости рендеринга производительностью этих блоков. Следовательно, возможности этих блоков для современных игр важнее всего, и именно их небольшое количество в G84 не дает видеокарте Geforce 8600 показывать лучшие результаты. Загрузка шейдерных блоков на G80 явно ниже, и у этого чипа есть определенный запас прочности по скорости унифицированных ALU.


  • Подтверждается найденная ранее зависимость от времени выхода игры, когда новые приложения более требовательны к мощности блоков, исполняющих шейдерные программы. Протестированные в рамках исследования игры отчетливо показали, что важность мощных вычислительных блоков в видеочипах растет, и в будущем расти продолжит (немного замедлившись в мультиплатформах по вполне понятным причинам). Тем более, если в последующих игровых проектах, кроме вершинных и пиксельных шейдеров, будут использоваться ещё и геометрические.





Дополнительно

Исследование работы Nvidia G8x в современных играх

Исследование работы Nvidia G8x в современных играх


Изначально данная статья задумывалась как продолжение исследования влияния количества исполнительных блоков на производительность архитектуры Nvidia G8x в современных играх. Мы планировали изменить параметры видеокарты на основе чипа G80 так, чтобы максимально приблизить её к стандартным вариантам на основе mid-end чипа G84, уравняв их в деталях. При помощи последней версии утилиты Riva Tuner Алексея Николайчука предполагалось оставить у Geforce 8800 рабочими лишь 32 универсальных блока, выполняющих шейдеры, отключив остальные, а также изменить тактовые частоты чипа и памяти.

Тактовую частоту GPU планировалось, по возможности, привести к частоте G84, а частоту локальной видеопамяти подобрать таким образом, чтобы пропускная способность памяти нашего варианта Geforce 8800 сравнялась с ПСП у Geforce 8600 (частота должна быть в три раза меньше, так как разрядность шины памяти отличается в 384/128=3 раза). Отличиями таких вариантов теоретически были бы разное количество блоков ROP: 24 против 8, а также — разные внутричиповые кэши и прочие оптимизации.

Целью задуманного исследования было определение того, насколько сильно повлияет разное количество блоков ROP на производительность, и того, насколько сильно отличаются исполнительные блоки в G84 и G80. Мы хотели провести подробное исследование производительности современных игр при помощи возможностей Nvidia PerfKit. К сожалению, нашему замыслу не суждено было сбыться — столь необходимые нам аппаратные счетчики производительности G80 не работают при отключении части шейдерных блоков, а без них толку в таком исследовании немного. Было решено не выкидывать собранный материал в мусорную корзину, сделав небольшой сравнительный анализ производительности и некоторых других технических особенностей современных 3D-игр на основе анализа собранных данных.

В процессе была отброшена ещё одна небольшая идея — показания счетчика stream_out_busy. Он оказался практически бесполезным, несмотря на то, что большая часть наших тестов была Direct3D 10 приложениями. Счетчик показал использование соответствующих блоков, ответственных за stream output, только в одном игровом проекте — Lost Planet: Extreme Condition, да и то — загрузка этих блоков в данном проекте была очень низкой, менее 1% в среднем, так что этот счетчик мы тоже не стали принимать во внимание.

Конфигурация и настройки тестовой системы

При тестировании использовалась следующая программно-аппаратная конфигурация:

  • Процессор: AMD Athlon 64 X2 4600+ Socket 939
  • Системная плата: Foxconn WinFast NF4SK8AA-8KRS (Nvidia nForce4 SLI)
  • Оперативная память: 2048 Мб DDR SDRAM PC3200
  • Видеокарты: Nvidia Geforce 8800 GTX 768MB и Nvidia Geforce 8600 GT 256MB
  • Жесткий диск: Seagate Barracuda 7200.7 120 Gb SATA
  • Операционная система: Microsoft Windows Vista Home Premium
  • Видеодрайвер: Nvidia ForceWare 163.16 (instrumented)

Использовался единственный режим видеонастроек — наиболее распространенное разрешение 1280x1024 (или ближайшее к нему 1280x960 для игр без поддержки такового) с включенными мультисэмплингом с четырьмя выборками (MSAA 4x) и анизотропной фильтрацией максимально возможного уровня — 16x. Обе возможности включались из игровых настроек, в конфигурационной панели видеодрайвера ничего не форсировалось.

Набор игр, использовавшихся в наших тестах, включает проекты, появившиеся не так давно. Предпочтение отдавалось играм с поддержкой Direct3D 10 или новым и интересным с точки зрения технологий 3D-графики. Это полный список: Call of Juarez DX10 benchmark, Company of Heroes, S.T.A.L.K.E.R.: Shadow of Chernobyl, Lost Planet: Extreme Condition DX10 benchmark, Colin McRae Rally: DiRT, Морской Охотник DX10 benchmark (PT Boats: Knights of the Sea), SEGA Rally Revo, Clive Barker's Jericho. В исследовании принимали участие несколько игр, не предоставляющих стандартных средств для запуска демок и повторов, поэтому приходилось тестировать приблизительно. Из дополнительного программного обеспечения использовались: Nvidia PerfKit 5, Riva Tuner 2.05 и Microsoft PIX for Windows из DirectX SDK.

К сожалению, в исследование не попали такие интересные приложения, как World in Conflict, BioShock, Medal of Honor: Airborne, Test Drive Unlimited, TimeShift, Call of Duty 4: Modern Warfare, Half-Life 2: Episode 2 и другие. Некоторые демо-версии и игры не успели попасть в обзор, а парочка проектов отказалась запускаться под отладчиком PIX: BioShock и Test Drive Unlimited.

Результаты тестирования

Lost Planet: Extreme Condition

Начинаем наше исследование с одной из наиболее технологичных игр 2007 года. Хотя Lost Planet: Extreme Condition пришла на ПК с Xbox 360, её высокая технологичность подтверждается множеством изменений, сделанных в движке специально для Direct3D 10 видеочипов настольных компьютеров. По сравнению с консольной версией, которая и так довольно технологична, в нашей появились: возможность использования FP16 буфера кадра, более качественные эффекты motion blur и depth of field, приличная визуализация меха (fur), большее количество сэмплов и улучшенная фильтрация карт теней, ambient occlusion, мягкие частицы (soft particles), продвинутый метод parallax mapping и некоторые другие нововведения.

Для тестирования в Lost Planet мы запускали встроенную демку, состоящую из демонстрации двух различных игровых уровней. Они действительно разные, если в первом количество объектов небольшое и производительность ограничена, прежде всего, видеокартой, то во втором, наоборот, объектов в сцене много, а производительность зависит и от CPU и от GPU.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 20.8 4.5
FPS (min) 11.0 2.1
video memory, Mb 507 505
batch count (avg) 738 799
batch count (max) 4375 4336
primitive count (avg) 497858 475061
primitive count (max) 2335540 2104705
setup triangle count (avg) 83318 82474
setup triangle count (max) 311494 292719
gpu_idle, % 0.1 0.1
rop_busy, % 7.9 5.2
texture_busy (avg), % 74.4 77.5
texture_busy (max), % 83.4 90.6
shader_busy (avg), % 84.6 88.3
shader_busy (max), % 89.0 98.0
geom_busy, % 0.2 1.2
input_assembler_busy, % 3.1 0.8


Для тестов использовалась DirectX 10 демо-версия игры со встроенным бенчмарком, которая не отражает производительности релиза со всеми установленными патчами. Поэтому частоту кадров можно оценивать лишь сравнительно, в релизе последней версии скорость рендеринга гораздо выше. Видим, что G84 сильно отстает от G80 по скорости, попробуем разобраться и найти ограничивающий производительность фактор. Во-первых, на скорости Geforce 8600 может отрицательно сказаться объем локальной видеопамяти, который вполовину меньше среднего объема, используемого игрой. Во-вторых, судя по полученным цифрам, на скорости рендеринга сказывается количество шейдерных блоков и блоков TMU, которых у G84 примерно во столько же раз меньше, во сколько ниже получилась производительность.

Разберем интересные цифры среди остальных параметров. Среднее количество вызовов функций отрисовки не совсем корректно отражает реальную картину, так как зависит от уровней: в первой сцене бенчмарка количество вызовов невелико, а во второй оно достигает цифры более 4000, что много, даже по современным меркам. Количество геометрии в игре выше среднего, хотя не совсем понятна разница между программным счетчиком primitive count и аппаратным setup triangle count. Оба видеочипа были постоянно заняты работой, налицо отсутствие зависимости производительности от центрального процессора. Геометрические блоки и блоки растровых операций не слишком загружены работой, а текстурные и шейдерные под завязку. Столь активного использования шейдерных блоков мы еще не видели ранее, вот что значит хорошая оптимизация, когда скорость полностью зависит от производительности видеочипа.

Морской Охотник (PT Boats: Knights of the Sea)

Этот бенчмарк вышел не так давно, и он интересен нам по многим параметрам. Эта игра не из серии шутеров, которых в исследовании будет больше всего. Также, демка наглядно показала свою высокую технологичность, там одна из лучших (если не лучшая) реализаций водных поверхностей, геометрическая, с отличной динамикой, отражениями и преломлениями, да и всё остальное тоже на хорошем уровне: качественно отфильтрованные мягкие тени, активная постобработка, да и сложные геометрические модели техники. Демка написана для Direct3D 10 API и использует некоторые его возможности, такие, как геометрические шейдеры.

В процессе тестирования мы запускали доступный DirectX 10 бенчмарк с максимально возможными настройками в указанном разрешении. Интересно, что настройки, прежде всего, влияют на агрессивность геометрического изменения уровня детализации (LOD) и не так сильно ухудшают качество отрендеренного изображения.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 21.2 1.8
FPS (min) 3.3 0.5
video memory, Mb 820 782
batch count (avg) 551 610
batch count (max) 1280 1298
primitive count (avg) 686565 707890
primitive count (max) 1067049 1063914
setup triangle count (avg) 358759 372106
setup triangle count (max) 728364 697458
gpu_idle, % 38.7 0.0
rop_busy, % 13.0 4.6
texture_busy (avg), % 24.6 47.9
texture_busy (max), % 41.3 73.3
shader_busy (avg), % 46.6 56.2
shader_busy (max), % 76.0 77.7
geom_busy, % 0.2 0.9
input_assembler_busy, % 5.6 0.6

Производительность видеокарты Geforce 8600 в этом случае упала очень сильно. Что и говорить, на максимальных настройках скорость и у Geforce 8800 невелика, особенно, учитывая минимальную достигнутую частоту кадров, но у G84 получилась не скорость, а катастрофа. Конечно, учитываем, что драйвер был специальный и привносил определенное снижение производительности вместе с отладчиком PIX, но такая низкая скорость явно не объясняется только этим. Думается, что главным фактором была большая требовательность демки к объему видеопамяти, ведь при максимальных настройках она занимает до 800 мегабайт! Конечно, повлияли и другие характеристики видеочипов и карт на их основе, в определенные моменты могло не хватать вычислительной и текстурной производительности.

Интересно, что количество вызовов draw calls не такое большое, видимо, определенные оптимизации были проведены. Количество обрабатываемой геометрии велико даже для современного уровня, видимо, в этом виноват как раз почти отключенный LOD. Любопытно, что Geforce 8800 не работала в полную силу, она простаивала чуть ли не половину времени, а общая скорость явно ограничивалась центральным процессором в этом случае. Загрузка демкой блоков TMU и ALU достаточно велика, их возможности используются неплохо, но показатели не приближаются к 100% и чем-то одним производительность явно не ограничена. Нагрузка на геометрические блоки, несмотря на количество треугольников, судя по цифрам, невелика.

Colin McRae Rally: DiRT

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

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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 35.2 11.9
FPS (min) 5.3 1.9
video memory, Mb 402 397
batch count (avg) 1772 1798
batch count (max) 3274 3656
primitive count (avg) 597935 614332
primitive count (max) 1138591 1157551
setup triangle count (avg) 145346 149966
setup triangle count (max) 354265 375663
gpu_idle, % 15.1 0.3
rop_busy, % 10.2 10.6
texture_busy (avg), % 37.8 42.3
texture_busy (max), % 59.6 61.5
shader_busy (avg), % 60.0 82.0
shader_busy (max), % 80.4 87.3
geom_busy, % 0.8 3.8
input_assembler_busy, % 11.7 3.8


Достигнутая частота кадров в протестированной игре при ее максимальных настройках явно не содействует приятной игре. Если с видеокартой на базе G80 вполне можно поиграть, хотя производительность иногда и просаживается слишком сильно, то с Geforce 8600 GT для достижения плавности придется снижать игровые настройки. G84 в этой игре примерно в три раза медленнее G80, что подтверждает обычное соотношение сил между ними. Производительность DiRT на Geforce 8800 порой упирается в процессор, а Geforce 8600 полностью загружена работой всегда. Причина низкой производительности последней — как в меньшем количестве исполнительных блоков, так и в недостаточном для высоких настроек объеме локальной видеопамяти.

Причина процессорозависимости игры, на наш взгляд, кроется в большом количестве вызовов отрисовки, в экстремальных случаях достигающем 3600 штук. Если на G84 процессорозависимость скрадывается медлительностью видеокарты, то в случае G80 явно виден упор в CPU, простой видеочипа в среднем достигает 15%, а его блоки хоть и загружены работой, но не полностью. Количество геометрии в игре большое, выше среднего уровня, хотя блоки обработки геометрии загружены не слишком сильно. То же касается блоков растеризации. Чего не скажешь о текстурных и шейдерных, которые работают на 40-80% своих возможностей, в зависимости от их типа и рассматриваемого видеочипа. В этом случае нагрузка на шейдеры выше, чем на текстуры.

Call of Juarez

Это слегка устаревшая игра, но отличающаяся весьма технологичным игровым движком, особенно учитывая то, что в нашем материале использовался бенчмарк обновленной Direct3D 10 версии. Данный вариант технологически отличается от первоначальной версии игры множеством новых возможностей: большим количеством объектов и геометрии, улучшенными системами частиц, использующими геометрические шейдеры, более качественными мягкими тенями с улучшенной фильтрацией карт теней, новыми текстурами и более сложным parallax mapping, применением alpha to coverage.



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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 23.1 7.2
FPS (min) 4.5 1.2
video memory, Mb 541 530
batch count (avg) 412 428
batch count (max) 722 724
primitive count (avg) 1380734 1390771
primitive count (max) 2308458 2306383
setup triangle count (avg) 851683 851585
setup triangle count (max) 2920384 2753703
gpu_idle, % 0.2 0.1
rop_busy, % 12.8 13.1
texture_busy (avg), % 23.4 27.5
texture_busy (max), % 53.7 36.5
shader_busy (avg), % 69.6 77.8
shader_busy (max), % 91.7 96.7
geom_busy, % 4.4 4.8
input_assembler_busy, % 33.3 12.1


Обновление движка и поддержка новых эффектов сильно ударили по производительности и так не слишком шустрой игры. Конечно, это максимальные настройки и достаточно высокое разрешение, но менее 30 кадров в секунду на high-end видеокарте — это слишком… Впрочем, модификации проводились под надзором компании AMD и для их решений они подходят лучше, а на продукции Nvidia обновленный код все-таки слишком медлителен. Возможно, из-за того, что применены такие алгоритмы с геометрическими шейдерами, производительность которых лучше подходит именно для архитектуры AMD. Карта на G84 медленнее варианта на G80 примерно в три раза, в обоих случаях производительность не зависит от CPU, только от видеокарты.

Объем видеопамяти, используемый игрой, довольно велик и достигает 530-540 мегабайт, что дополнительно повлияло на низкую производительность Geforce 8600. Количество вызовов draw calls невелико, что объясняется определенными оптимизациями. А количество обработанных геометрических примитивов очень большое, в игре явно много геометрии, количество полигонов в кадре иногда доходит почти до трех миллионов! Блоки ROP и геометрические не слишком заняты работой, текстурные загружены лишь на четверть в среднем, зато виден явный упор производительности в мощность шейдерных блоков. Этим подтверждается, что скорость рендеринга игры зависит, прежде всего, от количества и частоты универсальных блоков, выполняющих вершинные, пиксельные и геометрические шейдеры.

Company of Heroes

Эта игра — еще одна из списка, не относящаяся к шутерам, это стратегия в реальном времени. К сожалению, использовалась Direct3D 9 версия игры, без поддержки некоторых возможностей Direct3D 10, пришедших с патчами позднее. Игра не блещет множеством современных эффектов, но всё самое популярное и необходимое в ней есть, движок для стратегии технологичный: мягкие тени, постобработка, бампмаппинг, качественное освещение и текстурирование, системы частиц.


Мы не раз уточняли, что встроенный бенчмарк в Company of Heroes не отражает игровую производительность, так как используется скриптовый ролик, а не запись геймплея. Но всё-таки интересно посмотреть разницу в скорости рендеринга кинематографических сцен движком игры на разных видеокартах.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 92.6 41.2
FPS (min) 6.9 5.6
video memory, Mb 614 601
batch count (avg) 205 214
batch count (max) 931 930
primitive count (avg) 74895 77411
primitive count (max) 231863 233044
setup triangle count (avg) 19645 20159
setup triangle count (max) 98149 91632
gpu_idle, % 36.1 0.4
rop_busy, % 9.2 11.9
texture_busy (avg), % 29.3 37.3
texture_busy (max), % 70.8 96.2
shader_busy (avg), % 49.8 86.9
shader_busy (max), % 91.0 96.4
geom_busy, % 0.4 7.5
input_assembler_busy, % 5.6 2.5

Сразу видно, что игра несколько устарела (учитываем, что патчи с поддержкой Direct3D 10 нами не были установлены и протестированы), достигнутая частота кадров сравнительно велика. Низкое минимальное значение FPS может объясняться динамической подгрузкой контента и соответствующими особенностями движка. G84 тут всего в два раза медленнее G80, а последняя, исходя из значений счетчика gpu_idle, простаивала более трети времени теста, и была ограничена мощностью центрального процессора системы.

Из значений других счетчиков больше всего удивляет очень низкое по современным меркам количество вершин и треугольников на кадр. В то же время объем занятой видеопамяти велик, вероятно, туда сразу же грузятся все текстуры и модели уровня. Количество батчей невелико, это косвенно подтверждается и по количеству геометрии. ROP, input assembler и блоки обработки геометрии традиционно не слишком загружены работой, а текстурные и шейдерные работают весьма активно, особенно в случае G84. Вероятно, в скриптовой сцене бенчмарка есть моменты, когда производительность ограничена скоростью текстурных блоков, и есть моменты с упором в шейдерные. Даже на G80 загрузка ALU была в некоторых моментах почти полной.

S.T.A.L.K.E.R.: Shadow of Chernobyl

Игра включена в тесты из-за своей популярности и технологической необычности, в ней используются некоторые новые и интересные технические решения: deferred shading, множество попиксельных источников света, качественно отфильтрованные мягкие тени от нескольких источников, несложный вариант parallax mapping на большом количестве поверхностей, активная постобработка и многое другое.


К счастью для тестеров, после нескольких патчей разработчики игры добавили возможность записи и проигрывания демок, а также соответствующего тестирования производительности, в котором геймплей не записывается, а производится «облёт» местности, что нельзя считать полноценным тестом, но лучше, чем ничего. Игра не позволяет использовать мультисэмплинг как раз из-за deferred shading, поэтому мы ограничились обычным режимом 1280x1024.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 69.7 23.0
FPS (min) 20.7 8.1
video memory, Mb 610 592
batch count (avg) 1887 2014
batch count (max) 3468 3545
primitive count (avg) 760388 783642
primitive count (max) 1334276 1330498
setup triangle count (avg) 230065 229739
setup triangle count (max) 436388 424331
gpu_idle, % 22.3 0.6
rop_busy, % 15.3 17.4
texture_busy (avg), % 35.5 50.7
texture_busy (max), % 60.8 66.4
shader_busy (avg), % 61.0 78.7
shader_busy (max), % 86.1 88.0
geom_busy, % 1.5 5.3
input_assembler_busy, % 20.8 8.5


Интересно, что при таких разных по мощности видеокартах разница в производительности была не столь велика, хотя примерное соотношение 3:1 в частоте кадров сохраняется и здесь. И это с учетом того, что скорость рендеринга видеокартой Geforce 8800 GTX в S.T.A.L.K.E.R. была ограничена мощностью центрального процессора, почти четверть времени его GPU простаивал без работы. Судя по цифрам FPS, с видеокартой на основе G80 вполне комфортно играть, а у G84 не хватает мощности на максимальные настройки. Производительность игры больше всего зависит от мощности CPU и шейдерных и текстурных блоков GPU.

Количество вызовов функций отрисовки D3D было достаточно велико, среднее количество под 2000 вызовов, максимальное — 3500. Обрабатываемое за кадр количество геометрии среднее по нынешним временам, но что интересно — блок input assembler загружен работой больше обычного. Это может говорить, например, о большом количестве данных, выбираемых из памяти остальными блоками GPU. Большая загрузка input assembler на G80 по сравнению с G84 объясняется большим количеством входных данных из-за большей частоты кадров.

Интересно, что игрой активно задействуются и текстурные и шейдерные блоки, но все же влияние производительности последних на общую скорость рендеринга значительнее, работы для них здесь нашлось больше. Даже с учетом того, что Direct3D 9 движок игры не позволяет использовать мультисэмплинг, загрузка блоков ROP игрой получилась выше средней, это говорит об активной постобработке и использовании нескольких буферов рендеринга.

SEGA Rally Revo

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


Игра не предоставляет возможности проведения тестов и не записывает повторы, поэтому пришлось воспользоваться той же схемой, что и в случае с DiRT, — одна и та же трасса проходилась по несколько раз, результаты усреднялись.

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 73.6 33.5
FPS (min) 14.4 4.9
video memory, Mb 331 336
batch count (avg) 1424 1493
batch count (max) 2989 3047
primitive count (avg) 834790 854697
primitive count (max) 1777959 1661084
setup triangle count (avg) 214693 226801
setup triangle count (max) 780875 785677
gpu_idle, % 30.9 0.5
rop_busy, % 13.8 21.4
texture_busy (avg), % 28.1 36.9
texture_busy (max), % 49.1 53.7
shader_busy (avg), % 57.5 91.2
shader_busy (max), % 85.8 95.1
geom_busy, % 1.0 11.2
input_assembler_busy, % 16.1 7.9


Хорошо видно, что задачи, поставленные трехмерным движком игры перед видеокартами, были проще, чем в большинстве предыдущих случаев. Достигнутая частота кадров вполне комфортна на Geforce 8800 (низкий минимальный FPS не мешает игре в данном случае), производительность Geforce 8600 ниже, но не так сильно, как обычно, чуть более двух раз. Это объясняется упором производительности в мощность CPU, ведь судя по gpu_idle, G80 простаивал более 30% времени. Что интересно, в те моменты, когда скорость зависит от GPU, наблюдается явный упор в производительность шейдерных блоков, остальные части видеочипа рендеринг не сдерживают.

Демо-версия игры использует чуть более 300 мегабайт видеопамяти, что почти входит в 256 мегабайт на Geforce 8600 и не должно сильно сказываться на её производительности. Количество батчей велико, это объясняется мультиплатформенностью игры и отсутствием особых оптимизаций для ПК. Число draw calls в среднем почти 1500, в экстремальных случаях — более 3000. Выделяется и количество обрабатываемой движком геометрии, при ничем не выдающейся картинке, количество вершин и полигонов довольно велико. Загрузка блоков ROP средняя, счетчики занятости геометрических блоков и input assembler показали странные и труднообъяснимые результаты, а с текстурными и шейдерными любопытно, как обычно. Текстурные блоки загружены примерно на треть, а шейдерные — наполовину у G80 и полностью у G84. Загрузка, на самом деле, полная, средний процент занятости ALU более 90% с пиками до 95%.

Clive Barker's Jericho

Последней в обзоре стала ещё одна игра, которая не слишком впечатляет своей картинкой и не ставит задачи идти впереди всех, на грани технологического прогресса. Это такой середнячок, но с довольно большим количеством новых технологий: parallax mapping, очень много видов постобработки (depth of field, motion blur, bloom), карты теней с фильтрацией, средние геометрия с текстурами и очень много попиксельной обработки. Посмотрим, как покажут себя тестируемые видеокарты в очередном мультиплатформенном проекте…


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

Счетчик Nvidia PerfKit Geforce 8800 GTX (G80) Geforce 8600 GT (G84)
FPS (avg) 31.7 9.9
FPS (min) 7.2 3.5
video memory, Mb 427 422
batch count (avg) 1137 1085
batch count (max) 2158 2208
primitive count (avg) 283826 268386
primitive count (max) 695568 683055
setup triangle count (avg) 89721 89926
setup triangle count (max) 283335 270695
gpu_idle, % 13.4 4.1
rop_busy, % 16.3 17.7
texture_busy (avg), % 39.1 34.7
texture_busy (max), % 48.5 41.6
shader_busy (avg), % 68.1 83.9
shader_busy (max), % 77.7 88.5
geom_busy, % 0.4 5.6
input_assembler_busy, % 6.1 1.7

Не получилось повторения ситуации с предыдущей игрой, тоже мультиплатформенной. Тут строго, как положено, — более чем трёхкратная разница между испытуемыми, производительность Geforce 8800 на грани играбельности, а Geforce 8600 максимальные настройки не тянет. Что интересно — частота кадров не ограничена только видеокартами в обоих случаях, даже G84 в процессе «отдыхал», хоть и недолго. Видимо, в определенные моменты теста скорость диктовал центральный процессор. А в остальных случаях — универсальные блоки исполнения шейдеров, которые были заняты работой 70-80% всего времени.

Остальные блоки GPU задействованы, как обычно, ROP — менее 20%, геометрический и input assembler — менее 10%, текстурные — на 30-40%. Очередная мультиплатформа уперлась в скорость шейдерных процессоров, в который раз производительность ограничена именно этими блоками. Требуемый игрой объем видеопамяти выше среднего уровня — более 400 мегабайт, количество draw calls и геометрии в кадре тоже чуть выше среднего, 1000 вызовов и менее 300000 примитивов, соответственно. Получился такой современный середнячок.

Выводы

Подведем итоги сразу по всем игровым проектам:

  • Большинство современных игр на максимальных настройках в наиболее распространенном разрешении экрана играбельны только на high-end видеокарте Geforce 8800 GTX, и то не всегда, минимальная частота кадров в некоторых случаях падает слишком низко.


  • Новые игры используют до 600-700 мегабайт видеопамяти. Это не значит, что все эти ресурсы должны быть в локальной памяти видеокарты, зачастую игры отдают таким образом менеджмент ресурсов (текстур и прочего) в управление API, тем более, что в Direct3D 10 используется виртуализация видеопамяти. Тем не менее, прослеживается чёткая тенденция к увеличению требуемых объемов локальной памяти на видеокартах, и объем 512 мегабайт на данный момент можно считать оптимальным. 256-320 Мбайт слишком мало, а 0.7-1 Гбайт пока что не востребованы в вышедших проектах. Но для high-end решений и такой объем памяти имеет смысл, так как они могут давать приемлемую частоту кадров и в больших разрешениях.


  • Наблюдается явное увеличение количества вызовов функции отрисовки, теперь игры не гнушаются средними значениями под 2000 вызовов на кадр, хотя наиболее оптимизированные обходятся меньшим количеством — 500-1000 вызовов на кадр. Увеличение этого количества влияет и на возрастающую процессорозависимость 3D-приложений, ведь при большем количестве вызовов отрисовки большая нагрузка ложится на центральный процессор системы.


  • Вместе с количеством вызовов draw calls растет и количество обрабатываемой геометрии. Цифры порядка 300000-500000 полигонов на кадр нас не удивляют, а наиболее продвинутые игры могут использовать до миллиона треугольников на средний кадр и до двух-трёх — в экстремальных случаях.


  • Во всех протестированных играх в наших тестовых условиях производительность системы с Geforce 8600 не была ограничена центральным процессором, зависела только от видеокарты. А видеочип Geforce 8800 GTX в наших условиях зачастую простаивал, порой, до четверти или даже трети всего времени. Вывод: для такой видеокарты нужен или более мощный центральный процессор или лучшая оптимизация игровых проектов, связанная со снижением количества вызовов функций отрисовки, прежде всего.


  • Загрузка блоков ROP всегда была достаточно низкой — до 10-20%, в обоих случаях. Конечно, нужно учитывать и разницу в FPS, но количество и возможности ROP в наших тестах явно не были основным ограничивающим фактором. Значения для G80 и G84 были схожи, за исключением одного случая — бенчмарка «Морского охотника», где, по-видимому, сказалась требовательность к объему видеопамяти.


  • Современные игры до сих пор достаточно сильно грузят текстурные блоки, наблюдается минимальная загрузка около 30% и максимальная — до 75% (и это на G80!). Становится понятно, что планы некоторых компаний на резкое изменение соотношения между количеством текстурных и шейдерных блоков были явно преждевременными, если даже такие технологичные проекты как Lost Planet: Extreme Condition используют TMU настолько активно.


  • Нагрузка на блоки обработки геометрии и input assembler (блок, выбирающий геометрические и другие данные из памяти для использования другими блоками) в играх очень невелика и никогда не ограничивает производительность рендеринга, хотя в некоторых проектах input assembler загружен работой больше, чем в среднем по всем проектам.


  • Универсальные шейдерные блоки во всех свежих игровых проектах являются основными ограничителями производительности. Их максимальная пиковая загрузка почти во всех играх достигает 70-90%, что говорит не только о полном использовании имеющихся ресурсов, но и об определенном ограничении скорости рендеринга производительностью этих блоков. Следовательно, возможности этих блоков для современных игр важнее всего, и именно их небольшое количество в G84 не дает видеокарте Geforce 8600 показывать лучшие результаты. Загрузка шейдерных блоков на G80 явно ниже, и у этого чипа есть определенный запас прочности по скорости унифицированных ALU.


  • Подтверждается найденная ранее зависимость от времени выхода игры, когда новые приложения более требовательны к мощности блоков, исполняющих шейдерные программы. Протестированные в рамках исследования игры отчетливо показали, что важность мощных вычислительных блоков в видеочипах растет, и в будущем расти продолжит (немного замедлившись в мультиплатформах по вполне понятным причинам). Тем более, если в последующих игровых проектах, кроме вершинных и пиксельных шейдеров, будут использоваться ещё и геометрические.