Анализ кадров на основе данных захвата GPU
Захваты GPU (или кадра) записывают все вызовы API Direct3D 12, которые делает ваше приложение, обычно в одном кадре (см. Захват GPU). PIX может воспроизводить эти вызовы API, чтобы отобразить сведения о параметрах вызова API, состояниях конвейера и ресурсах, содержимом ресурсов и т. д.
Совет
Недопустимые обращения игры к Direct3D 12 не всегда позволяют PIX успешно захватить данные с GPU. PIX прилагает все усилия, чтобы быть надежным даже в случае неправильных шаблонов использования, но это неизбежно иногда приводит к принципу "мусор на входе, мусор на выходе". Если у вас возникли трудности с захватом данных с GPU, попробуйте использовать уровень отладки D3D12 и проверку на основе GPU, чтобы найти и исправить любые плохие вызовы API.
Сделать захват GPU
В режиме подключения запустите или присоедините нужный процесс (убедитесь, что установлен соответствующий параметр для захвата GPU).
Настройте параметры записи GPU при необходимости. Чтобы сделать снимок экрана, нажмите кнопку "Записать GPU" в PIX или нажмите клавиши Alt+Print Screen (или F11, что можно настроить в параметрах PIX). Вы увидите эскиз записи в пользовательском интерфейсе PIX. На этом этапе можно завершить работу приложения при необходимости. Щелкните миниатюру, чтобы открыть изображение.
Программируемые захваты
Вы можете программно взять запись с помощью WinPixEventRuntime. Для получения подробностей см. публикацию в блоге о программном захвате.
Просмотр вызовов API с помощью представления событий
В представлении "События " отображаются все вызовы API, записанные в запись GPU. Существует отдельный список для каждой очереди Direct3D 12 (графической, вычислительной или копировальной), которая использовалась в игре.
Список событий можно отфильтровать, при необходимости с помощью регулярных выражений (нажмите кнопку с меткой .*). По умолчанию отображаются только события, которые привели к фактической отрисовке оборудования GPU, а не просто подготовке состояния для использования последующими операциями. Чтобы включить события, не относящиеся к GPU, нажмите кнопку с меткой !G.
Дополнительные сведения о каждом событии, например полном наборе параметров вызова API, доступны в представлении сведений о событиях. Это представление включается по умолчанию на вкладке "Конвейер" , но его также можно добавить в текущий макет с помощью кнопки "Режим макета" в правом верхнем углу главного окна PIX.
Профилирование фреймов
При открытии записи GPU перейдите на вкладку "Обзор". Здесь вы увидите некоторые основные сведения о захвате.
Чтобы начать профилирование, необходимо собрать временные данные. Для этого нажмите кнопку "Сбор данных о времени" в правом верхнем углу представления "События " или щелкните здесь, чтобы начать анализ и собрать текст данных о времени в представлении временной шкалы . Это воспроизводит работу GPU в захвате и собирает основные данные о времени, такие как длительность выполнения (аннотировано с помощью PixEvents, если ваш приложение содержит их). После завершения процесса вы можете собирать дополнительные данные для отображения на графике временной шкалы, такие как информация об использовании и другие счетчики GPU.
Совет
Для получения наилучших результатов не взаимодействуйте с компьютером, пока PIX собирает данные о времени; закройте все другие приложения, которые могут использовать GPU.
Счетчики можно также увидеть, разбитые по вызову API, в представлении "События". Чтобы включить или отключить счетчики, нажмите кнопку "Счетчики списков событий" (в правом верхнем углу представления "События ").
Данные о времени
Существует два источника сведений о времени gpu:
- Метки времени начала обработки показывают, когда GPU начинает обработку каждого задания. Обратите внимание, что эти данные доступны только при запуске Windows 10, сборке 14393 (или более поздней версии) с подходящим графическим драйвером (см. блог Требования). Сбор данных занимает больше времени, если метки времени начала процесса недоступны.
- Метки времени окончания обработки (EOP) сообщают, когда GPU завершил обработку каждой задачи.
Поскольку графические процессоры обладают высокой параллельностью и глубокой конвейерностью, часто происходит одновременное выполнение нескольких задач, а также перекрытие смежных операций. PIX измеряет время двумя разными способами, которые могут предложить представление о параллельной модели выполнения оборудования:
- Длительность выполнения измеряется от начала канала до метки времени окончания конвейера для каждой отдельной части работы. При измерении таким образом рабочие элементы GPU, которые выполняются параллельно с предыдущими, могут отображаться дольше из-за конкуренции на GPU, чем если бы они выполнялись в изоляции.
- Длительность EOP измеряется от метки времени конца предыдущего элемента (EOP) до метки времени конца трубопровода (EOP) для этого элемента. Поэтому рабочие элементы, которые выполняются параллельно с предыдущими элементами, будут отображаться короче, чем если они выполняются в изоляции, а некоторые элементы могут даже отображаться в виде нулевой длительности, если они полностью завершены параллельно с предыдущим элементом.
В представлении временной шкалы отображается одна или несколько полос, показывающая время каждой операции GPU. Существует отдельная линия, содержащая данные о длительности EOP для каждой очереди (графики, вычислений или копирования), используемой игрой, а также одна линия, показывающая данные о длительности исполнения, где это возможно, объединенные для всех очередей.
Совет
PIX на Windows в настоящее время не поддерживает параллельное выполнение задач GPU в разных очередях при анализе времени захвата GPU. Рассмотрите возможность захвата времени, если вы хотите увидеть перекрывающиеся асинхронные данные о времени вычислений. В захватах GPU, если игра использует асинхронные вычисления для одновременной отрисовки и вычислений, то PIX вместо этого будет последовательно измерять сначала один процесс, а затем другой. Это может привести к более короткой заявленной продолжительности каждой части работы по сравнению с тем, как она будет выполняться внутри исходной игры (из-за снижения нагрузки на GPU), но более длительному общему времени (из-за уменьшения параллелизации).
Счетчики GPU и заполнение
PIX предоставляет аппаратные счетчики производительности, предоставляемые IHV через подключаемый модуль GPU. Эти счетчики можно включить и собрать в представлении счетчиков списков событий (кнопка включить в правом верхнем углу представления событий) или в представлении счетчиков временной шкалы (кнопка включить в правом верхнем углу представления временной шкалы).
На некоторых GPU PIX также может собирать сведения о заполнении. Графические процессоры обычно создаются как иерархия повторяющихся блоков, где каждый уровень может совместно использовать ресурс. Например, мнимый GPU может быть структурирован таким образом.
Графические процессоры выполняют работу шейдера, разбивая её на волны (они также называются warps, или волновые фронты). На приведенной выше схеме каждый синий блок может выполнять одну волну. Каждый зеленый блок может выполнять до четырех волн.
Так как все блюз используют один набор регистров, если рабочая нагрузка нуждается во всех регистрах, то только одна волна одновременно может выполняться в зеленом блоке. В этом случае занятость зеленого блока будет 1 из возможных 4.
В любой момент все зеленые блоки могут выполнять различное количество волн. Из четырех зеленых блоков выше, один может выполнять 3 волны, другой выполняет 2 волны, а оставшийся — 1 волну. PIX обобщает все данные до одного значения — максимальная заполняемость, что в этом примере равняется 3.
Это представлено в PIX на полосе заполняемости, которая показывает максимальную заполняемость, разделенную по этапам шейдера. Это указывает на то, сколько работы GPU может выполняться параллельно, — более высокие полосы показывают лучшее использование GPU.
Отладка проблем с отрисовкой
При открытой записи GPU перейдите на вкладку «Конвейер». Эта вкладка содержит представление «События», несколько представлений состояния и инспектора ресурсов, а также представление «Конвейера».
Выбор события в представлении "События " заполняет различные представления, в частности представление конвейера, которое можно использовать для проверки корневых подписей, состояния конвейера и привязанных ресурсов. Представление конвейера также является точкой входа в отладку шейдера.
Подсказка
Для выполнения большинства функций необходимо начать анализ. Анализ заключается в том, как PIX собирает данные о времени, сведения о состоянии и ресурсы. Существует множество способов начать анализ, но самый универсальный — это использование кнопки "Начать анализ" в правом верхнем углу приложения. Убедитесь, что выбран нужный GPU.
Просмотр объектов, параметров и состояний Direct3D 12
После выбора события в представлении "События" представления "Состояние и Конвейер" (на вкладке "Конвейер") отображают сведения о состоянии Direct3D во время этого события. Там можно просмотреть, какие ресурсы привязаны к конвейеру, коду шейдера, входным данным, выходным данным и какие целевые поверхности(и) отрисовки в настоящее время привязаны.
Отладка шейдера
Выбрав соответствующее событие и выполнив анализ, можно отлаживать шейдеры. В представлении Пайплайн есть несколько способов начать отладку шейдера:
- В разделе Shader под нужным этапом выберите и нажмите зеленую кнопку запуска. Перед началом сеанса отладки убедитесь, что необходимо настроить соответствующие параметры шейдера (например, экземпляры и идентификаторы вершин для шейдеров вершин или координат пикселей для шейдеров пикселей).
- Щелкнув правой кнопкой мыши в средстве просмотра ресурсов (например, VS Output или SRV/UAV/RTV) и выбрав соответствующий параметр отладки.
- Нажмите кнопку "Отладка пикселя" в представлении "Сведения о пикселях" при просмотре соответствующего ресурса (например, SRV/UAV/RTV).
Совет
Если при отладке не удается просмотреть источник шейдера, скорее всего, отсутствует отладочная информация. Убедитесь, что вы создаете шейдерные PDF-файлы для приложения и что вы настроили PIX для загрузки этих PDF-файлов.
Редактирование и продолжение работы с шейдером
Код шейдера HLSL можно редактировать непосредственно внутри PIX, что позволяет сразу же увидеть влияние изменений на результаты отрисовки или производительность. Это может быть полезно для прототипирования и оптимизации шейдеров, так как оно может значительно сократить время выполнения при испытании различных идей.
Выбрав шейдер, вы можете изменить его код, как вам угодно, затем нажмите "Изменить>Применить". Другие представления (например, OM RTV 0) будут обновлены для отображения результата изменения. Вы можете найти полезным закрепить несколько экземпляров представления Pipeline рядом друг с другом, чтобы просматривать результаты отрисовки одновременно с редактированием кода шейдера.
Если вы перестаете следить за тем, что вы изменили, щелкните правой кнопкой мыши по коду шейдера и выберите Сравнить с оригиналом.
Совет
PIX в Windows еще не поддерживает сохранение измененных шейдеров обратно в файл записи.
Отладка визуализаторов
Визуализаторы целей рендеринга доступны в режиме конвейера при просмотре содержимого цели рендеринга. Визуализатор изображений по умолчанию просто отображает изображение как обычный и может быть изменен, выбрав другую визуализацию в представлении визуализации .
История пикселей
Для любого ресурса, аналогичного пикселям (например, RTV, UAV или буферов глубины), можно просмотреть все операции, которые повлияли на конкретный пиксель, с помощью Истории пикселей. К ней можно получить доступ, щелкнув правой кнопкой мыши нужный пиксель и выбрав "Показать историю пикселей" или нажав кнопку "Журнал пикселей" в представлении "Сведенияо пикселях".
Предостережения и другие заметки
- Если игра вызывает Direct3D 12 недопустимым способом, PIX не всегда может успешно принимать запись GPU. PIX старается быть надежным даже в случае неправильного использования, но это иногда неизбежно — что посеешь, то и пожнешь. Если у вас возникают трудности с захватом данных GPU, попробуйте использовать уровень отладки D3D12 и проверку, основанную на работе GPU, чтобы найти и исправить любые некорректные вызовы API.
- Записи GPU в Windows, как правило, не совместимы с различными аппаратными средствами и версиями драйверов GPU. В большинстве случаев захват, сделанный на одном компьютере, будет корректно воспроизводиться на других аналогичных GPU из той же аппаратной семьи, и захваты некоторых игр могут даже работать на GPU от совершенно разных производителей. Однако возможно, что даже такое простое действие, как обновление драйвера, может нарушить совместимость со старыми захватами. PIX может гарантировать успешное воспроизведение, только если GPU и драйвер точно одинаковы, поэтому PIX будет предупреждать перед началом анализа, если нет идеального совпадения. Продолжайте мимо этого предупреждения по вашему собственному риску.
- PIX имеет ограниченную поддержку нескольких GPU. Он всегда будет воспроизводить записи GPU на одном адаптере независимо от количества адаптеров, используемых приложением. PIX позволяет выбрать адаптер воспроизведения из выпадающего списка на панели инструментов PIX. PIX попытается автоматически выбрать адаптер воспроизведения, если приложение использовало только один адаптер.
- Для недетерминированных рабочих нагрузок ExecuteIndirect может потребоваться включить настройку буферов аргументов ExecuteIndirect для времени воспроизведения.