Почему два таймера нельзя вычитать напрямую
В графическом профилировании временные отметки GPU и CPU могут иметь разные шкалы и начало отсчёта. Поэтому прямое вычитание сырых чисел не даёт корректную задержку. Сначала устанавливают частоту, область и правила сопоставления. Большая разница значений сама по себе не доказывает зависание или долгую работу видеокарты.
Здесь рассматривается принцип чтения timestamp в контексте Direct3D 12. Материал не является инструкцией разработки профайлера и не повторяет статью о TSC процессора. У каждого интерфейса свои гарантии. Нельзя переносить формулу или единицу из одной системы на другую только потому, что обе называются временными отметками.
Частота счётчика
Timestamp frequency позволяет перевести разность предусмотренных отметок в длительность при выполнении условий API. Это не обязательно текущая частота графических вычислительных блоков. Поэтому число нельзя использовать как замену GFX Clock или как доказательство постоянного тактового режима. Таймер и исполнительная часть выполняют разные функции.
Не следует также предполагать одинаковую частоту для всех очередей и устройств без проверки. Источник нужно сохранить вместе с отметками. Если программа показывает уже пересчитанные микросекунды, повторный перевод создаст ошибку. В отчёте раздельно указывают сырые значения, единицу и произведённый расчёт, когда эти данные доступны.
Область измерения
Две отметки ограничивают определённый участок выполнения в модели команд. Они не включают автоматически всё время от нажатия кнопки до изображения на панели. Подготовка CPU, ожидание очереди и вывод относятся к другим этапам. Поэтому результат одной GPU-операции нельзя подписывать как полную задержку приложения без дополнительной методики.
Даже слово «время кадра» требует определения. Один инструмент может измерять участок GPU, другой — интервал презентации, третий — работу CPU. Сходные графики не делают показатели тождественными. Для сравнения нужно знать границы каждого. Иначе корректные результаты разных программ будут ошибочно объявлены взаимным противоречием.
Калибровка часов
API может предоставлять способ сопоставить временные базы. Но калибровка не означает, что любые числа после этого можно смешивать без ограничений. Важны точность, момент и условия получения. Конкретные гарантии читают по документации. Нельзя самостоятельно обещать абсолютную синхронность по одному удачно совпавшему образцу.
Если требуется оценить задержку между CPU и GPU, сохраните метод сопоставления и источники. Простая подгонка графиков на глаз не является измерением. Неизвестное смещение лучше оставить неизвестным, чем убрать его произвольным сдвигом и затем публиковать точные миллисекунды. Визуальное удобство не заменяет корректную временную модель.
Очереди и параллелизм
Графическая работа может быть распределена между очередями и перекрываться. Сумма длительностей отдельных участков не всегда равна полному времени выполнения. Если операции идут параллельно, механическое сложение даёт другой смысл. Для выводов нужен порядок зависимостей, а не только список чисел профайлера.
Обратная ошибка — считать небольшой отдельный участок доказательством отсутствия узкого места. Задача могла ожидать данные или другую очередь за пределами выбранных отметок. Поэтому наблюдение полезно только в контексте конвейера. Нельзя объяснить весь пользовательский рывок одним коротким графиком, если граница измерения не включает нужное событие.
Накладные расходы
Само профилирование может менять режим работы. Частота сбора, объём данных и инструменты имеют значение. Это не делает измерение бесполезным, но требует одинаковой методики при сравнении. Результат с тяжёлой трассировкой не следует автоматически считать обычным поведением приложения без соответствующей оговорки.
Для потребительского обзора не обязательно собирать низкоуровневые метки самостоятельно. Можно использовать проверенный источник с ясной методикой. Важно не переименовывать его показатель. Если опубликовано время GPU-участка, так и пишут. Оно не становится задержкой ввода только потому, что статья посвящена игровому ноутбуку.
Что запросить у автора теста
Уточните API, устройство, очередь, границы и способ перевода в время. Попросите отдельно описать калибровку, если сравнивались CPU и GPU. Для результатов важны версия приложения, нагрузка и условия питания. Неизвестный параметр сохраняют в ограничениях, а не заменяют типичным значением другой конфигурации.
Если два инструмента расходятся, сначала сопоставьте определения и окна. Не нужно сразу выбирать меньший результат как более правильный. Разница может быть объяснена корректно разными областями. Для сильного вывода о производительности нужна одна согласованная метрика, а не подбор самого удобного числа из нескольких несопоставимых графиков.
Источниковая граница
Актуальные гарантии timestamp и калибровки требуют NEEDS_FACTCHECK_LATER. Документация Direct3D не задаёт одинаковые правила всем графическим API. Главный вывод: тики GPU, частота таймера и часы CPU различаются; длительность вычисляют в своей области, а полную задержку подтверждают отдельной методикой.
Пауза между измерениями
Изменение сеанса, устройства или очереди требует проверить применимость прежней калибровки. Не продолжайте график автоматически только потому, что приложение не закрылось. Если временная связь после события не подтверждена, отметьте разрыв. Это честнее произвольного выравнивания и помогает не приписать GPU задержку, которая возникла в обработке журналов или смене контекста измерения.