что такое 1 fps low
Что означают 1 % и 0,1 % при тестировании видеокарт и процессоров в играх
Содержание
Содержание
Все чаще при измерении производительности ПК в играх можно заметить показатели «0.1 % Low» и «1 % Low». Большинство неопытных пользователей не придают этому значения и по старинке смотрят только на средний FPS. На самом деле эти показатели очень важны и на них стоит обращать внимание. И вот почему.
Что такое средний FPS и Frame Time
Время, требуемое для отрисовки одного кадра называется Frame time или же «время кадра». Измеряется оно в миллисекундах, но обычно используют частоту кадров (Frame rate), которая обозначает количество кадров, отрисованных за единицу времени. Частота кадров же измеряется в количестве кадров в секунду — Frames per second или же FPS.
Главная единица, используемая при измерении производительности — средний FPS (AVG FPS) за весь промежуток времени. Средний FPS находится по формуле FPS = n/t, где n — количество кадров, отрисованное за все время, а t — время проведения теста. У среднего FPS есть недостаток, который не позволяют ему быть единственной единицей измерения в бенчмарках.
0.1 % минимальный и 1 % низкий FPS
При измерении FPS его среднее значение не является точной величиной, поэтому внимание стоит уделить другим — 1 % низкий и 0.1 % минимальный FPS. В нашем случае важно понимать, что время отрисовки кадра зависит от его сложности. Во время игры могут встречаться карты с большим количеством предметов и NPC в поле видимости игрока, на отрисовку которых будет уходить больше времени. Такие кадры могут задерживаться на экране, в результате чего картинка может фризить и испортить впечатление от игры. Проблема среднего FPS заключается в том, что при замерах время «длинных» кадров усредняется с «быстрыми», поэтому информация о первых теряется.
К примеру, за секунду было отрисовано 30 кадров с таким временем отрисовки в мс:
33, 57, 23, 13, 34, 68, 34, 40, 44, 16, 90, 27, 66, 87, 23, 37, 17, 23, 31, 21, 23, 20, 37, 12, 32, 36, 22, 14, 20, 10
В данном случае средний FPS равен 30 кадрам в секунду, а среднее время отрисовки кадра — 33,3 мс. Общая картина достаточно неплоха, но если взглянуть пристальнее, то можно заметить четыре кадра, время отрисовки которых в два, а то и в три раза больше среднего. Как и было сказано ранее, при высчитывании среднего времени отрисовки кадра и среднего FPS «долгие» кадры теряются на фоне «быстрых», в результате чего значения получаются неточными.
Было принято решение как-нибудь дополнить значения среднего FPS, чтобы лучше описать все кадры.
Существует такое понятие как процентиль, с английского — percentile (в русском языке чаще встречаются персентиль или перцентиль). В нашем случае это можно трактовать как значение, ниже которого находится определенный процент данных из общего набора. У нас 99-процентиль — это значение, ниже которого находятся 99 % данных из общего числа. И, если он равен 90 мс, то 99 % значений времени кадра из примера меньше 90 мс, а 1 % больше или равен этому числу.
В бенчмарках по договоренности используются 99.9- и 99-процентили. Поскольку обычно в качестве единицы измерения применяются FPS, то в данном случае используются обратные 0.1- и 1-процентили FPS. В народе их принято называть 0.1 % минимальный и 1 % низкий FPS. Обычно эти значения оказываются ниже среднего FPS, так как это часть данных, которая описывает редкие игровые события с многочисленным количеством объектов. Это говорит о том, что сложность кадров в сцене непостоянна. Плохо это только тогда, когда 0.1 % минимальный и 1 % низкий FPS «просаживаются» до неиграбельного уровня в результате чего картинка начинает подлагивать. Правда, оценить этот неиграбельный уровень статистически невозможно — для каждого он свой в связи с особенностями человеческого глаза и привычками геймера.
Математические объяснения недостатков среднего FPS (для любознательных)
Между временем кадра и частотой кадров есть математическая связь: значение FPS после отрисовки кадра — мгновенный FPS — обратно времени отрисовки этого кадра:
Поскольку время кадра обычно измеряется в миллисекундах, а частота кадров в единицах в секунду, вышеуказанная формула будет выглядеть вот так:
Например, кадр был отрисован за 25 мс, тогда получается, что мгновенный FPS по окончании его отрисовки был равен 1000/25 = 40 FPS.
Как уже было сказано ранее, средний FPS находится по формуле FPS = n/t. Кроме нее средний FPS можно найти так:
Где t — среднее время кадра, равное t = (t1 + t2 + t3 + … + t-нное)/n
n — общее количество кадров, t1, t2, t3 и т. д. — время отрисовки каждого кадра
То есть, средний FPS — величина, обратная среднему времени кадра. Подтверждается это тем, что время бенчмарка равняется сумме времени отрисовки всех кадров:
t1 + t2 + t3 + … + t-нное = t
Но почему же средний FPS — недостаточно точный показатель измерений? Так происходит, потому что средний FPS не является средним арифметическим значений мгновенного FPS:
FPS ≠ (FPS1 + FPS2 + FPS3 + … + FPS-нное)/n
FPS ≠ (1000/t1 + 1000/t2 + 1000/t3 + … + 1000/t-нное)/n
Для подтверждения этому приведем одну из вышеперечисленных формул:
FPS = 1000n/(t1 + t2 + t3 + … + t-нное)
Значения среднего FPS и среднего значения мгновенного FPS будут равны только в том случае, когда все кадры были отрисованы за одинаковые промежутки времени – t1 = t2 = t3 = t-нное = t, что на практике практически невозможно. В этом и заключается главный недостаток среднего FPS.
Средний FPS далеко не идеален, и при измерении производительности системы в играх ориентироваться только на него не стоит. 0.1% минимальный и 1% низкий FPS наоборот являются очень важными единицами измерения. Если говорить простым языком, то они показывают самые большие просадки FPS за время теста, портящие общее впечатление от игры.
FPS-приговор. Что такое
частота кадров
в видеоиграх
и зачем её знать?
Чувствуете себя неловко, когда спрашивают «сколько у тебя фпс», а вы не знаете, что ответить? Хватит! Пора узнать, что такое фпс в играх и перестать испытывать геймерское смущение.
Что такое FPS
FPS — это сокращение от английского выражения Frames Per Second. В российских игровых сообществах уже привыкли писать fps или даже «фпс». На великий и могучий Frames Per Second переводят как «кадры в секунду». Благодаря этому понять, что такое fps в играх (и в видео в принципе) становится проще.
FPS показывает, сколько кадров (отдельных картинок) ваш монитор или телевизор демонстрирует каждую секунду. Чем выше частота кадров, тем плавнее и отзывчивее становится игра. С другой стороны, при низких показателях FPS играть становится менее приятно. Возможно, друзья иногда жаловались вам, что не могут играть из-за «слайд-шоу на экране». Это значит, что у них низкий показатель FPS, и они видят очень мало кадров в секунду.
Но как узнать, сколько фпс в игре? Может быть, вам комфортно играть, но, вдруг вас засмеют в приличных игровых сообществах, если вы расскажете о том, сколько кадров показывает ваша игра? Давайте разбираться.
Что влияет на fps в играх?
В видеоиграх частота кадров зависит как от разработчика, так и от самого геймера. Создатель игры должен обеспечить выпуск продукта без технических проблем, а покупатель — быть уверен, что у него есть платформа, которая позволит запустить игру с приемлемой частотой кадров (на текущий момент это 30 FPS, но ситуация стремительно меняется). Один из самых ярких примеров 2021 года — Cyberpunk 2077. Столь ожидаемая игра испытывала технические проблемы на консолях прошлого поколения (PlayStation 4 и Xbox One) и не могла обеспечить геймеру игру при стабильных 30 кадрах в секунду.
В то же время игрок должен быть уверен, что конфигурация его ПК позволяет запускать ту или иную игру. Так, на частоту кадров на ПК влияют:
Чаще всего проблемы с FPS возникают из-за неспособности видеокарты отрисовывать большое число отдельных кадров. Из-за этого частота кадров становится низкой, и игрок испытывает проблемы. Процессор и оперативная память оказывают меньшее влияние на FPS, но без них не добиться стабильности воспроизведения игры.
Разница между низким и высоким FPS
Представьте, что вы смотрите, как кто-то бежит. При 1 FPS вы будете видеть лишь 1 кадр в 1 секунду. Таким образом, для вас преодоление человеком 1 метра в видео при 1 FPS превратится в пытку. Чем выше FPS, тем плавнее будут становиться его движения. Пример можно найти в анимации. В «Человеке-пауке: Через вселенные» молодой и неопытный паук в лице Майлза Моралеса дёргается, в то время как Питер Паркер летает на паутине плавно. Так аниматоры хотели показать разницу в мастерстве героев.
Сколько FPS должно быть в играх
Так какая частота кадров необходима, чтобы было комфортно играть?
Чем лучше игры с высоким показателем FPS?
Как узнать FPS в играх?
Есть несколько способов узнать фпс в игре. Первый — запустить тестирование в самой игре. Часто разработчики добавляют в игру бенчмарк (тест производительности), запустить который можно в меню. В течение минуты или более, игра демонстрирует сцены в разной обстановке: ночью, днём, с толпой людей, пустые территории и так далее. После теста игра показывает результаты в виде частоты кадров.
Второй вариант — запустить специальную программу. Можно скачать Fraps. Даже бесплатная версия приложения выведет показатель FPS в любой удобный для вас угол экрана.
Также можно воспользоваться программами от производителей видеокарт: Nvidia или AMD. В обе встроен функционал для отслеживания частоты кадров в игре.
Как добиться высокого FPS в играх?
Если вас не устраивает частота кадров в игре, есть несколько вариантов решения проблемы. Самый простой: снижение настроек графики. Отключайте тени, сглаживание, снижайте качество текстур. Игра станет выглядеть хуже, но процесс прохождения станет комфортнее.
Вариант сложнее, а точнее — затратнее: обзавестись платформой, которая будет обеспечивать вас стабильным и высоким FPS. Возможно, стоит обратить внимание на консоли: PlayStation 5 и Xbox Series X, игры для которых адаптируются для 60 FPS.
Что в итоге?
FPS — это частота кадров в секунду, демонстрируемая игрой. Чем выше этот показатель, тем лучше. Движения героев станут плавнее, а проводить время за такой игрой будет приятнее. Если вы не киберспортсмен или почти не играете в соревновательные игры вроде Apex Legends, Call of Duty: Warzone, CS:GO — вам не обязательно добиваться 60 FPS. Для комфортной игры чаще всего нужно от 45 до 60 кадров в секунду. Добиться этого показателя можно снижением настроек графики или покупкой нового оборудования: комплектующих для ПК, игровых консолей.
Ещё раз о показателях игровой производительности — средние величины, процентили, 1% и 0.1% низкие FPS
реклама
В предыдущий раз мы познакомились с понятием времени кадра, а также с часто используемыми показателями игровой производительности, а именно, со средним, 1% и 0.1% низкими FPS, которые определённым образом характеризуют весь массив значений времени кадра на какой-либо игровой сцене. Необходимость использования указанных величин логических вытекает из двух простых, но важных утверждений:
Упрощённо, выброс (или промах) — это единичный результат измерений, сильно отличающийся от всех остальных результатов из всего массива данных. Выброс может быть обусловлен ошибкой измерений (устранимой или нет), а может просто отражать высокую вариативность значений измеряемой величины. И вся суть проблемы выбросов как раз и заключается в том, что мы, зачастую, не можем знать, какой из двух упомянутых вариантов имеет место быть. Так, например, в нашем случае аномально низкое значение величины минимального мгновенного FPS может как отражать реально низкую производительность конкретной компьютерной системы на самом сложном кадре игровой сцены, так и быть обусловленным сторонними факторами — как минимум, не стоит забывать, что мы пользуемся многозадачной операционной системой, в которой одновременной с игровым приложением запущено ещё огромное множество программ и сервисов, способных в определённый момент задействовать разделяемые с игрой аппаратные ресурсы компьютера.
Процентили
Конечно, можно взять и просто исключить выбросы из массива данных, руководствуясь каким-либо критерием, коих, вообще говоря, существует не так уж и мало. Однако, такой подход очевидно плох в случае, когда выбросы лишь отражают высокую вариативность измеряемой величины, а так как знать наверняка, так это или нет в нашем случае невозможно, подход с исключением выбросов — это однозначно не наш выбор. Альтернативный вариант действий предполагает использование только статистических величин и методов, способных работать в условиях наличия выбросов. В статистике такие величины и методы называют выбросоустойчивыми, или робастными (от англ. robust, устойчивый). Минимальное значение, очевидно, не является робастной характеристикой набора данных, так как является единичным значением из этого набора, которое может оказаться выбросом. А вот процентили, или перцентили, напротив, робастны.
реклама
Напомню, что n-ый процентиль, обозначаемый обычно Pn, можно определить как значение, ниже которого находится n процентов значений из всего набора данных. Так, например, 99-й процентиль — значение, ниже которого находятся 99% значений из набора. В нашем конкретном случае, если 99-й процентиль времени кадра равен, скажем, 33 мс, то это означает, что у 99% кадров значение времени кадра меньше либо равно 33 мс и лишь у 1% кадров значение времени кадра больше 33 мс. Интерпретировать эти значения можно следующим образом — можно ожидать, что у 99 из 100 кадров значение времени кадра будет меньше либо равно 33 мс и только у 1 кадра оно превысит 33 мс. Аналогично и с частотой кадров, только необходимо учитывать, что в случае частоты кадров нас в первую очередь интересуют малые, а не большие процентили, например, 1-ый процентиль FPS, значение которого таково, что лишь для 1% кадров мгновенный FPS оказывается ниже или равен 1-ому процентилю, а для 99% — выше. Иными словами, можно ожидать, что только для 1 из 100 кадров мгновенный FPS будет меньше или равен 1-ому процентилю FPS, а для остальных 99, соотвественно, больше, и, таким образом, 1-й процентиль FPS является робастной заменой минимального FPS.
Учитывая тот факт, что мгновенный FPS есть величина обратная времени кадра
можно показать, что процентили этих величин связаны соотношением
реклама
то есть, имея на руках массив значений времени кадра, для вычисления 1-ого процентиля FPS необязательно вычислять значения мгновенного FPS для каждого кадра и затем считать 1-й процентиль полученных чисел, а можно вычислить 99-й процентиль времени кадра и взять обратное значение. Напомню только, что с учётом того факта, что время кадра обычно исчисляется в миллисекундах, а частота кадров в единицах в секунду, в обеих формулах появляется множитель 1000. Кстати говоря, во многих программах 1-й процентиль FPS ошибочно обозначается как 99-й, что технически, конечно, неверно, но суть должна быть ясна.
И от ошибок чужих переходим к ошибкам собственным — в прошлой заметке значения 1% low FPS и 0.1% low FPS были неправильно отождествлены с соответствующим процентилями FPS. Это неверно, так как указанные величины представляют собой среднее арифметическое значений мгновенного FPS, попавших в соответствующий процентиль. То есть, например, что-бы посчитать 1% low FPS необходимо вначале вычислить 1-й процентиль FPS, затем выбрать из всего массива значений мгновенного FPS только те, которые в этот процентиль попадают и посчитать среднее арифметическое. Мне, признаться, такая схема обработки данных не нравится, так как весь смысл использования процентилей состоит в том, чтобы нивелировать влияние выбросов, а на величины 1% low FPS и 0.1% low FPS выбросы оказывают существенно большее влияние, чем на процентили. Так что продолжим вычислять и использовать именно процентили, просто теперь будем их правильно называть на диаграммах.
реклама
Осталось только определиться с тем, какие процентили FPS считать. И здесь, как уже говорилось в прошлый раз, всё определяется негласными соглашениями в какой-либо области, и конкретно в игровых бенчмарках де-факто стандартом стали 99-й и 99.9-й процентили времени кадра и соотвествующие им 1-й и 0.1-й процентили FPS, которые мы ранее и использовали в результатах, пускай и неправильно их именуя (см. выше). Однако, в ходе анализа получаемых данных я пришёл к выводу, что 0.1-й процентиль следует исключить из результатов по следующей причине. Дело в том, что среднее время используемых игровых бенчмарков составляет порядка 1 минуты (60 секунд), так что при среднем FPS порядка нескольких десятков (скажем, 60 FPS) на выходе получается всего несколько тысяч значений времени кадра (60 c * 60 кадров/с = 3600 кадров), а 0.1% от нескольких тысяч — это всего-навсего несколько кадров (чаще всего 1-2), которые могут являться выбросами, от влияния которых мы, вообще говоря, и хотим избавиться. Иными словами, нескольких тысяч кадров попросту недостаточно, для того чтобы величина 0.1-ого процентиля была робастной. С 1-ым процентилем такой проблемы нет, так как 1% от нескольких тысяч кадров составляет уже несколько десятков кадров — величину, достаточную для робастности 1-ого процентиля. Можно было бы, конечно, обрабатывать не каждый прогон отдельно, а все прогоны вместе взятые, но, во-первых, такая обработка данных некорректна, а во-вторых, даже в этом случае понадобилось бы порядка 10 прогонов для каждого бенчмарка, что чрезмерно затратно по времени.
И последнее о процентилях, точнее, об одном особом процентиле, а именно 50-м процентиле, известном так же как медиана. Медиана, будучи 50-м процентилем, представляет собой такое число, что половина элементов из некоторого набора больше него, а другая половина меньше либо равна. Медиана часто используется в качестве так называемой меры центральной тенденции, то есть одного единственного числа, служащего (для краткости) в целях описания всего множества значений. По-простому, меры центральной тенденции часто называют «средними», и, собственно, различные виды средних величин, например, среднее арифметическое так же могут быть использованы в качестве меры центральной тенденции. Ранее, мы так и поступали, считая средний FPS как среднее арифметическое значений мгновенного FPS. Однако, у среднего арифметического есть один важный недостаток, которого (отчасти) лишена медиана — среднее арифметическое не является робастной величиной, а оценки медианы (обычно) робастны.
Классическим примером ситуации, в которой неробастность среднего арифметического проявляет себе во всей красе является подсчёт среднего дохода. Будучи посчитанным как среднее арифметическое, средний доход зачастую будет выше, чем доходы большинства людей, так как высокий доход нескольких людей с большим отклонением от среднего делает сильный перекос среднего арифметического. Например, если 19 работников предприятия получают по 5000 ₽ в месяц, а генеральный директор — 1 млн ₽, то средняя зарплат, посчитанная как среднее арифметическое, составит чуть больше 50000 ₽. Прямо как в том анекдоте: чиновники едят мясо, простые люди — капусту, а в среднем мы все едим голубцы.
Медиана же, в отличие от среднего арифметического, справляется с наличием такого сильного перекоса — средний доход по медиане в указанном примере составляет 5000 ₽. Конечно, при большем количестве усредняемых значений влияние выбросов на среднее арифметическое будет снижаться, но тем не менее, скажем, в штате, где официально декларирует свой доход какой-нибудь Джефф Безос, влияние его дохода на среднее арифметическое значение всё ещё может быть существенным. В нашем случаем, с несколькими тысячами значений времени кадра, мне пока ни разу не довелось наблюдать существенного расхождения между средним арифметическим и медианой, однако, далее будем использовать именно медиану. Во-первых, потому, что робастность этой характеристики в целом выше, чем у среднего арифметического, а во-вторых, для единообразия — математический смысл медианы аналогичен таковому у 1-ого процентиля (так как медиана, собственно, тоже суть есть процентиль, только 50-й).
Время кадра
Обсудив, каким образом мы будем обрабатывать данные, переходим к описанию процесса их получения. И начнём, пожалуй, с того, что измерение чего-бы то ни было, во-первых, предполагает получение «на выходе» некоторого числового значения (или нескольких значений) совместно с используемой единицей измерения, а во-вторых, характеризуется определённой точностью. При этом точность измерений объединяет такие понятия как правильность измерений и их прецизионность, первое из которых описывает близость результата измерений к истинному значению измеряемой величины, а второе — близость результатов нескольких измерений друг к другу. При этом точность измерений (в обоих смыслах) зависит в первую очередь от метода измерений, так что с обсуждения метода измерений времени кадра мы и начнём.
Методы измерения времени кадра
Итак, мы измеряем время кадра, о котором уже писалось подробнее ранее. Измеряем используя программный метод, а именно, с помощью утилиты PresentMon. Что же можно сказать о правильности и прецизионности таких измерений? Начнём с правильности. Вообще говоря, тема правильности измерений времени кадра программным методом слишком обширна для подробного обсуждения, к тому же хорошо раскрыта в многочисленных обзорах программного-аппаратного комплекса NVIDIA FCAT, например в статьях на overclockers.ru (1, 2), а также на ixbt.com и hardwareluxx.ru (1, 2, 3). Интересующиеся могут ознакомиться с материалами по приведённым ссылкам, здесь же мы позволим себе лишь краткое резюме. С одной стороны, можно утверждать, что точно (в смысле правильно) измерить время кадра, т.е. разницу во времени между двумя реально выведенными на экран друг за другом кадрами, возможно только с помощью программно-аппаратных решений. С другой стороны, программно-аппаратные решения:
По поводу последнего утверждения, необходимо пояснить, что несмотря на то, что программная методика не является 100% точной в смысле истинности получаемых абсолютных значений времени кадра, она хорошо показывает себя для целей выяснения относительной производительности компьютерных систем, которая обычно и интересна. На этом, в принципе, можно было закрыть тему обсуждения программного метода измерения времени кадра, если бы не ещё один важный нюанс.
Время кадра: rendered vs. displayed
Рендеринг кадра — процесс технически сложный, включающий множество этапов, оформленных в конвейер. Вот, например, упрощенная блок-схема графического конвейера, взятая из руководства пользователя NVIDIA FrameView — одной из утилит мониторинга, основанной на PresentMon.
Упрощённо работу графического конвейера можно описать следующим образом:
Собственно, самым главным недостатком большей части чисто программных методов определения времени кадра (например, FRAPS) как раз и является та их особенность, что они измеряют лишь разницу во времени между отсылкой двух следующих друг за другом кадров на конвейер, то есть разницу между отметками времени в самом начале графического конвейера, в то время как программно-аппаратные комплексы измеряют время кадра в самом конце графического конвейера. На данный момент, впрочем, существуют и чисто программные решения, способные измерять время кадра по отметкам времени в конце графического конвейера. Так, например, используемый нами PresentMon умеет измерять не только T_present, но и T_display. Однако, повторим, что точно (в смысле правильно) измерять разницу во времени между реальным выводом на экран двух следующих друг за другом кадров возможно только с помощью программно-аппаратных решений. Всё дело в том, что чисто программные методы могут быть «обмануты» драйвером видеокарты, который легко может скрыть факт наличия «отброшенного» или «неполноценного» кадра, отрапортовав, что весь процесс рендеринга прошёл в штатном режиме и кадр был полностью выведен на экран. Единственный способ быть однозначно уверенным, что кадр был полностью выведен на экран — это тщательный анализ видеопотока, полученного путём захвата кадров с одного из выходных интерфейсов видеокарты. Но как уже было сказано выше, на практике для целей сравнительного анализа игровой производительности в большинстве случаев достаточно и точности чисто программных средств.
Итак, казалось бы, в теории отметки времени T_display лучше подходят для целей измерения времени кадра, чем отметки времени T_present, однако, в абсолютном большинстве случаев используют именно последние, так как в использовании первых имеется, как минимум, одно большое «но». И имя этому «но» —DirectX 12, или, точнее, отсутствие в нём классического эксклюзивного полноэкранного режима (exclusive fullscreen mode) и необходимость определённых манипуляций для запуска DirectX 12 приложений в ближайшем аналоге этого режима. Суть, вкратце, состоит в том, что в DirectX 12 есть возможность запускать полноэкранные приложения лишь в режиме окна без рамки (borderless windowed mode), при этом игра, запущенная в таком режиме не получает видеобуфер в своё безраздельное пользование, а как и любое другое оконное приложение записывает данные в свой собственный буфер, а затем диспетчер окон рабочего стола (англ. Desktop Window Manager, DWM) компонует буфер каждой программы в окончательное изображение, которое и выводится на экран.
С одной стороны такой подход позволяет легко использовать различные визуальные эффекты, которые объединяют элементы нескольких приложений, например прозрачность и оверлеи, а так же упрощает переключение между полноэкранным и остальными приложениями и использование многомониторных конфигураций. С другой — в работе DWM есть одна важная особенность, которую необходимо учитывать при проведении замеров времени кадра по выходу из графического конвейера: для предотвращения мерцаний и разрывов картинки DWM использует двойную буферизацию, меняя текущий первичный буфер (из которого осуществляется вывод информации на экран) на текущий вторичный буфер (в котором содержаться результаты обработки следующего кадра) только в момент завершения вертикальной развёртки монитора. Как результат значения времени кадра по выходу из графического конвейере, то есть посчитанные по отметке времени T_display, могут быть лишь числами, кратными величине, обратной частоте развёртки монитора. Так, например, для монитора с частотой развёртки 60 Гц, возможны лишь значения времени кадра, кратные 1/60=0.016(6) с, или 16.6(6) мс. Фактически кадровая частоты в таком случае оказывается синхронизирована с частотой вертикальной развёртки монитора аналогично ситуации с использованием вертикальной синхронизации (V-Sync), вот только в отличие от V-Sync выключить двойную буферизацию DWM невозможно.
На самом деле у разработчиков есть возможность обойти DWM при использовании DirectX 12, чтобы избавиться от вышеупомянутой синхронизации частоты кадров с частотой вертикальной развёртки монитора (необходимо использовать модель представления True Immediate Independent Flip), однако, многие DIrectX 12 игры эту возможность не используют. Как результат, на практике получаем такую картину:
На рисунке сверху отображены значения времени кадра, посчитанные по отметкам времени в начале (оранжевый график) и в конце графического конвейера (зелёный) для нескольких первых секунд встроенного бенчмарка Metro Exodus, запущенного в режиме DirectX 12. Так как данные получены на мониторе с частотой развёртки 60 Гц, а указанный выше механизм «обхода» DWM игра не использует, то время кадра по выходу из графического конвейера строго кратно 16.6(6) мс. Мало того, что на значения времени кадра в конце графического конвейера влияет такой абсолютно внешний фактор, как частота развёртки используемого монитора, так даже при использовании одного и того же монитора, накладываемое на значения времени кадра ограничение может сильно скрадывать разницу в производительности двух систем. В теории, конечно, можно использовать время кадра по выходу из графического конвейера, а влияние указанного ограничения нивелировать, используя монитор с высокой частотой развёртки, скажем, 240 Гц, но на практике большинство просто использует время кадра по входу в графического конвейера, так как в абсолютном большинстве случаев, когда указанного ограничения нет, разница между значениями, посчитанными по разным отметками незначительна.
Время кадра: прецизионность измерений
С точностью измерений, можно считать, разобрались, теперь скажем несколько слов об их прецизионности, которая, напомню, есть близость результатов нескольких измерений друг к другу. Конечно, оценивать близость результатов измерений значений времени каждого единичного кадра технически сложно да и бессмысленно, так как, строго говоря, получить идентичную последовательность кадров в двух тестовых прогонах практически невозможно. Так что прецизионность имеет смысл оценивать лишь по статистическим характеристикам всего набора значений времени кадра, то есть, например, по выбранным для анализа процентилям. В идеальной ситуации, то есть на хорошо повторяемой последовательности кадров (обычно реализуемой посредством встроенного бенчмарка) стандартное отклонение по 3-5 прогонам составляет максимум чуть больше 1 FPS для показателей медианы и 1-ого процентиля FPS. Таким образом даже в таком идеальном с точки зрения прецизионности измерений случае значения указанных величин имеет смысл приводить только в целочисленном виде, а о десятых (и уж тем более сотых) долях FPS не может идти и речи.
При тестировании же на случайных игровых сценах (ручная «пробежка» участка определённого игрового уровня) ситуация значительно хуже — статистические погрешности значительно выше, особенно на не самых производительных системах. Достаточно банально повернуть голову в сторону в одной конкретной сложной сцене на одном проходе и не повернут на другом, чтобы получить существенно различающиеся значения показателей игровой производительности. Страдают, конечно, в первую очередь малые процентили, но бывают и ситуации, когда от прогона к прогону сильно «гуляет» и значение медианного FPS, так что ему нельзя верить даже с точностью до целых. Фактически здесь приходится выбирать — либо максимальный охват актуальных игровых проектов при невысокой прецизионности результатов, либо высокая прецизионность результатов, но полученная лишь для небольшого числа проектов со встроенным бенчмарком. Можно сказать, что мы здесь выбираем что в первую очередь тестируем — игры или «железо»? Мне интересно тестирование именно «железа», так что хотелось бы иметь хорошо воспроизводимые результаты, в которых не приходилось бы сомневаться даже при сравнительно небольшом числе тестовых прогонов. Так что мой выбор пал на игры со встроенным бенчмарком. Кроме того, прогоны встроенного бенчмарка практически всегда возможно автоматизировать, что значительно снижает трудозатраты на тестирование.
Конечно, в теории всегда можно попытаться автоматизировать передвижение персонажа по игровому миру, так чтобы получить хорошо воспроизводимую последовательность кадров даже в играх без встроенного бенчмарка. Но это в теории, а на практике, реализовать это технически сложно, так что даже если не помешает античит или крупное обновление, которое сломает необходимые файлы сохранений или удалить используемую для тестов локацию, трудозатраты слишком велики. Каждый, как мне кажется, должен заниматься своим делом — написать встроенный бенчмарк разработчикам игры в разы проще, чем сторонним тестировщикам производительности. При том, что такой бенчмарк для внутреннего использования безусловно пишется почти в любом случае, а понять мотивы, побуждающие не делать его доступным для простых смертных крайне трудно.
В любом случае, пока, резюмируя: