Графическое профилирование - PullRequest
5 голосов
/ 12 мая 2009

У меня есть приложение, которое падает примерно до 10 кадров в секунду. Я профилировал его с помощью xperf, который показал, что мое приложение использует только 20% процессорного времени, и ни один из моих методов не использовал большее, чем ожидалось, значение этих 20%.

Это, кажется, указывает на то, что резкое падение частоты кадров происходит из-за того, что видеокарта не может справиться с рендерингом фрейма, в результате чего моя программа останавливается, пока она догоняет ...

Есть ли какой-нибудь способ профилировать, что делает видеокарта, и выяснить, что моя программа говорит ей, что замедляет ее, чтобы я мог попытаться улучшить частоту кадров?

Ответы [ 5 ]

7 голосов
/ 12 мая 2009

Для отладки / профилирования графики попробуйте Nvidia PerfHUD

NVIDIA PerfHUD - это мощный инструмент анализа производительности в реальном времени для приложений Direct3D.

Существует также решение ATI, которое называется GPU PerfStudio

GPU PerfStudio - это инструмент для анализа производительности в режиме реального времени, который был разработан, чтобы помочь настроить графическую производительность приложений DirectX 9, DirectX 10 и OpenGL. Графический процессор PerfStudio отображает в реальном времени данные API, драйвера и оборудования, которые можно визуализировать с помощью чрезвычайно гибких механизмов построения графиков и гистограмм. Профилируемое приложение может быть выполнено локально или удаленно по сети. Графический процессор PerfStudio позволяет разработчику в реальном времени переопределять ключевые состояния рендеринга для быстрого обнаружения узких мест. Окно автоматического анализа можно использовать для выявления проблем с производительностью на различных этапах графического конвейера. Для использования графического процессора PerfStudio не требуется никаких специальных драйверов или модификаций кода.

Вы можете найти больше информации и ссылки для скачивания здесь:

4 голосов
/ 13 мая 2009

Кроме того, проверьте эту статью на FPS:

FPS против времени кадра

По сути, это говорит о том, что падение с 200 кадр / с до 190 кадр / с незначительно, тогда как падение с 30 кадр / с до 20 кадр / с НАМНОГО больше. Для лучшего измерения производительности вы должны рассчитывать время кадра, а не FPS.

Вы никогда не говорили нам, что такое ваш fps или что вообще делает программа, так что ваше "огромное падение" может не иметь большого значения.

Для DirectX существует PIX для профилирования операций процессора и графического процессора. Это может дать очень подробную информацию, и, возможно, стоит изучить.

Надеюсь, это поможет!

1 голос
/ 27 апреля 2010

Вы можете попробовать использовать dxprof (поиск в Google). Это легкое приложение, которое рисует полосы в реальном времени, каждая полоса соответствует одному событию DirectX (например, отрисовка вызова или копирование ресурса) Вы можете заморозить бары и проверить стек вызовов, чтобы выяснить, откуда происходит розыгрыш.

1 голос
/ 12 мая 2009

Не нужно угадывать. Просто сделайте паузу несколько раз под IDE, и он покажет вам именно то, чего он ждет.

0 голосов
/ 12 мая 2009

Вы разрабатываете для Windows? Если это так, избегайте использования Video for Windows, так как это ограничит вас описанным способом. Вместо этого используйте DirectX.

...