> > > > FCAT часть 2: AFR и задержка ввода

FCAT часть 2: AFR и задержка ввода

Опубликовано:

fcat-logoВ первой части статьи, посвященной FCAT, мы рассмотрели технологию и методику захвата кадров Frame Capture Analysis Tool. Но при этом мы опустили часть подробностей. Перед тем, как мы перейдём к рассмотрению результатов тестов, необходимо поговорить о некоторых деталях. В частности, о микро-подёргиваниях, выравнивании кадров и вертикальной синхронизации.

Сначала давайте поговорим о том, почему проблема микро-подёргиваний вообще появляется. AMD и NVIDIA чаще всего в конфигурациях с несколькими GPU используют метод поочередного рендеринга кадров Alternate Frame Rendering (AFR). При данной нагрузке два или больше GPU выполняют рендеринг кадров по очереди. Собственно, об этом можно догадаться по названию технологии. Кадр 1 рассчитывается GPU1, кадр 2 - GPU2 и так далее. То же самое касается наличия в системе трёх или четырёх GPU. Конфигурации Crossfire и SLI теоретически поддерживают и другие способы рендеринга, включая разделение кадра, но их сложнее реализовать, да и масштабируемость производительности у них, в среднем, не такая хорошая.

Балансировка нагрузки между двумя GPU кажется простой в теории, но на практике производитель сталкивается с серьёзными проблемами. Даже рендеринг одного кадра превращается в сложную задачу, которая решается параллельной обработкой на уровне блоков и пикселей. Причём подобные параллельные процессы никогда не повторяются, даже для последовательных кадров. Игровой движок передает данные для расчета видеокарте, которая, в свою очередь, пытается как можно быстрее вывести кадр. В зависимости от сложности сцены, на это уходит разное время. При частоте 60 кадров в секунду каждый кадр должен просчитываться, в среднем, за 16,7 мс. Но данный уровень является средним, в реальности время расчета кадров можно серьёзно отличаться. Например, кадр 1 может уже покидать конвейер рендеринга через 10 мс, а на расчет кадра 2 может требоваться целых 40 мс.

FCAT in der Theorie

Также не стоит забывать и о том, что в системах с несколькими GPU к монитору подключается одна видеокарта. Так что каждый второй кадр придётся сначала передать с GPU2 на GPU1. Данная передача осуществляется в конфигурациях AMD и NVIDIA через мостик Crossfire или SLI. Видеокарты с двумя GPU, подобные Radeon HD 7990 и GeForce GTX 690, решают эту проблему через внутренний канал PCI Express (как и некоторые low-end конфигурации с несколькими GPU). Но передавать нужно не только готовый кадр, также необходимо синхронизировать информацию рендеринга с игровым движком, что происходит через интерфейс PCI Express и тоже вносит задержки.

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

Выравнивание кадров (Frame Metering, Frame Pacing)

AMD и NVIDIA знают о проблеме и работают над решением или уже его реализовали. NVIDIA описывает свое решение довольно детально, но AMD держит молчание. В любом случае, мы скоро сможем поделиться результатами тестов "прототипа драйвера", который AMD представила нам - он использует выравнивание кадров (Frame Pacing) для более плавного вывода картинки. NVIDIA также упоминает об аппаратных доработках на GPU, позволяющих минимизировать микро-подёргивания и другие эффекты. Система высчитывает среднюю частоту кадров, после чего компенсирует разницу по времени вывода кадров - технология называется Frame Metering. Она реализована ещё с момента выхода на рынок поколения NVIDIA G80 (семейство GeForce 8000).

Как и в случае технологии AFR, принцип работы кажется простым, но на самом деле он имеет ряд недостатков. GPU представляет собой конвейер рендеринга, который призван выводить кадры как можно быстрее, но в случае выравнивания кадров мы добавляем искусственную задержку. Слабым звеном здесь являются конец конвейера рендеринга и вывод на дисплей. Всё это приводит не только к задержке кадров, но и к задержке реакции на действия пользователя - задержке ввода. В данном отношении выравнивание кадров Frame Metering не всегда позитивно сказывается на результате, как и включение Vsync.

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

Задержка ввода

Немного теории:

FCAT in der Theorie

Задержка ввода наблюдается не только в системах с несколькими GPU, но и в обычных конфигурациях. Задержки при выводе кадров в игре и при обработке ввода с устройства (например, мыши), отличаются и не синхронизированы друг с другом. На иллюстрации выше показан сценарий худшего случая. Ввод Input 1 фиксируется до рендеринга кадра Frame n. Так что на кадре Frame n уже будут видны результаты ввода Input 1. В данном случае ввод и вывод на дисплей разделяют несколько миллисекунд. Ввод Input 2 фиксируется сразу же после того, как будет начат рендеринг кадра Frame n, поэтому последствия ввода уже будут видны на следующем кадре Frame n+1. Подобную задержку пользователь как раз и воспринимает как задержку ввода.

FCAT in der Theorie

При выключенной VSync, но активном выравнивании кадров (Frame Metering) мы получаем следующий результат: ввод Input 1 фиксируется и выводится вместе с кадром Frame n, он высчитывается на GPU0. Поэтому от ввода до вывода проходит только задержка рендеринга. Ввод Input 2 фиксируется чуть позднее, он уже не может учитываться при рендеринге кадра Frame n. Поскольку GPU1 благодаря технологии AFR может начинать рендеринг с кадра Frame n+1, результаты ввода Input 2 будут видны на результате рендеринга. В отличие от ввода Input 2 в случае одного GPU, результаты отрабатываются примерно на 50 процентов быстрее.

Всё это, конечно, верно только теоретически. При переходе с одного GPU на два GPU частота кадров удваивается, и после выравнивания Frame Metering мы получаем совсем иной результат.

FCAT in der Theorie

Без выравнивания Frame Metering мы получаем сценарий, который знаком нам по теоретическому рассмотрению рендеринга на одном GPU. Ввод Input 2 фиксируется слишком поздно, чтобы вывести его в кадрах Frame n и Frame n +1. Результаты ввода Input 2 в данном случае будут представлены пользователю только в кадре Frame n + 2.

Технология Vsync призвана уменьшить задержку ввода. Однако и здесь не все так просто. Напомним, что Vsync ограничивает частоту кадров фиксированной планкой, например, 60 или 30 fps. Монитор обновляет картинку на экране именно с такой частотой, так что видеокарте приходится выдавать кадры с такой же скоростью, либо задерживать кадры, что приводит и к задержкам ввода.

Наше заключение по проблеме задержки ввода будет следующим: как и в случае микро-подергиваний, проблемы с задержками ввода менее заметны, если частота кадров составляет 50-60 fps. При меньшей частоте кадров одиночный GPU и несколько GPU без технологии выравнивания кадров приводят к появлению задержек, которые не только заметны визуально, но и сказываются на скорости обработки ввода пользователя - всё это может раздражать в игре. Вместе с тем эти задержки ввода очень сложно измерить. Следует разработать интерфейс, подобный системе измерений FCAT, который позволил бы определять задержку между вводом пользовательской информации и выводом картинки с её учетом. Возможно, тоже с использованием цветового наложения. Но мы пока не знаем о существовании подобных систем - для их разработки требуется тесное сотрудничество между производителями GPU и разработчиками игровых движков.

В следующей части нашей статьи мы рассмотрим результаты тестов FCAT. В третьей части мы сравним работу одной видеокарты GeForce GTX Titan с конфигурацией SLI из двух таких карт, а также оценим результаты Radeon HD 7970 и 7990 с новым "прототипом драйвера" с технологией выравнивания кадров и без неё.