Страница 1: FCAT часть 1: теория

fcat-logoТехнология анализа захвата кадров FCAT (Frame Capture Analysis Tool) стала широко доступной всего несколько недель назад. При обсуждении технологии возникает немало вопросов. Как и что измерять? Если для измерения производительности системы не используются синтетические тесты, либо встроенный режим тестов в играх или движках, то большинство изданий, в том числе и наша тестовая лаборатория, опираются на результаты FRAPS. Эта утилита позволяет определять минимальную, максимальную и среднюю частоту кадров в играх. Но для более глубокого анализа она не подходит. Мы также использовали FRAPS для иллюстрации эффекта микро-подёргиваний, но, опять же, возникал вопрос: что именно измеряла утилита? Настало время перейти к более глубокому анализу, который мы будем выполнять с помощью технологии FCAT. Мы рассмотрим работу этой технологии в двух статьях. В первой обсудим теорию, во второй статье мы поговорим о механизмах работы с микро-подёргиваниями, обсудим разрывание (tearing) и другие эффекты, а также поделимся своими результатами.

Одно хотелось бы отметить сразу: движущей силой по продвижению технологии FCAT является NVIDIA. Но это на самом деле не принципиально, поскольку технология FCAT одинаково успешно работает и с видеокартами NVIDIA, и с видеокартами AMD. Если верить имеющейся у нас информации, NVIDIA потратила два года на разработку FCAT. Чтобы снять с себя потенциальные обвинения в подтасовке результатов, NVIDIA открыла исходный код утилит и скриптов, каждый может с ним при желании ознакомиться.

Зачем NVIDIA решила разрабатывать технологию Frame Capture Analysis Tool? Использование FRAPS, как мы уже отмечали раньше, позволяет измерять время вывода кадров и оценивать микро-подёргивания или рывки в системах с несколькими GPU, но только отчасти. Проблема в том, что человеческое зрение намного более чувствительно, поэтому субъективное восприятие отличается от результатов FRAPS.

Позвольте провести небольшой экскурс в принцип работы FCAT.

FCAT in der Theorie

Первое, что следует учесть: видеокарта даёт картинку в кадрах в секунду, при этом данная частота кадров отличается от частоты, выводимой на экран монитора. Дело в том, что на экран картинка выводится с фиксированной частотой 30, 60 или 120 Гц, а видеокарта вычитывает картинку с частотой, которая зависит от производительности системы (конечно, если частоты не синхронизированы через VSync).

FCAT in der Theorie

Также следует понимать участок конвейера, на котором утилита FRAPS выполняет измерения. FRAPS вклинивается программным образом к выводу игрового движка, до того, как данные будут передаваться на API DirectX. Затем данные будут проходить через ступени обработки DirectX, драйвер GPU и, наконец, они поступят на конвейер рендеринга видеокарты. Данные этапы не всегда выполняются с одинаковой задержкой, поэтому интервалы для T_present могут быть стабильными (на уровне 30 FPS или 33,3 мс), но разница между T_render и T_display может меняться, что повлияет на воспринимаемый результат.

NVIDIA указывает данные неравномерности в виде Drop и Runt:

Drop (выпадение): под выпадающим подразумевается кадр, который проходит через движок игры и передаётся на конвейер рендеринга, но на дисплей в конечном итоге не попадает. Утилита FRAPS этот кадр считает.

Runt (карлик): карликовый кадр выводится на дисплей, но в очень небольшой части экрана, поэтому он не представляет для геймера особой ценности. Данный кадр тоже считается FRAPS, хотя значимым не является.

FCAT in der Theorie

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

Слева показаны пять кадров, которые содержат упомянутый цветовой код в виде наложения (overlay). Справа показано, как те же пять кадров отображаются на дисплее. В данном примере отчётливо заметно, что время рендеринга и отображения кадров отличается. В интервале до первого обновления дисплея (Refresh1) выводятся игровые кадры Frame1 и часть кадра Frame2. В интервале до второго обновления дисплея (Refresh2) выводится остаток кадра Frame2 и почти полный кадр Frame3. Первый карликовый кадр наблюдается в интервале до третьего обновления дисплея (Refresh3). У кадра Frame3 отображается лишь небольшая верхняя часть, затем картинка на экране заменяется кадром Frame4.

FCAT in der Theorie

На иллюстрации выше показано, как выглядят несколько кадров после рендеринга. Цветовая маркировка, которая накладывается на кадры, имеет следующую последовательность:

  1. Белый
  2. Светло-зелёный
  3. Голубой
  4. Красный
  5. Сине-зелёный
  6. Тёмно-синий
  7. Зелёный
  8. Бирюзовый
  9. Красно-коричневый
  10. Серебристый
  11. Фиолетовый
  12. Оливковый
  13. Серый
  14. Пурпурный
  15. Желтый
  16. Оранжевый
FCAT in der Theorie

На приведенном выше примере отсутствует кадр, поскольку между кадрами 1 и 3 должен выводиться оливковый кадр 2. Подобное выпадение может быть связано с несколькими причинами. Вполне возможны ошибки в конвейере рендеринга, но, возможно, кадр был удален намеренно, так как драйвер и видеокарта не справляются с игровыми таймингами.

FCAT in der Theorie

"Карликовый" кадр показан на иллюстрации выше. Появление такого кадра может быть связано с двумя причинами. В теории системы с несколькими GPU высчитывают кадры равномерно. Но на практике возникают существенные отличия. Что более вероятно, тайминги рендеринга и дисплея не синхронизированы. "Карликовые" кадры выводятся за очень малое время, обычно 1-4 мс. NVIDIA считает кадры "карликовыми", если они составляют не больше 20 строчек из 1080 в разрешении 1920 x 1080 пикселей.