Как найти узкое место графического конвейера

Я задавался вопросом об этой проблеме некоторое время. Как найти узкое место графического конвейера. Недавно я использовал программу для рисования огромного количества полигонов в простой сцене с альфа-смешением (сцена с травой). Я использовал две программы, одна использует статические координаты, а другая использует вращение и перемещение. Оба работают со скоростью 60 кадров в секунду без каких-либо других тяжелых процессов. Но когда я использую их вместе (два окна, каждое из которых имеет одинаковое количество трав и позиций травы), то одно, использующее перемещение и вращение, работает со скоростью 10 кадров в секунду, а другое - около 55 кадров в секунду. Мой вопрос: почему оба работают со скоростью 60 кадров в секунду, и когда такое происходит, почему второй (вращение и перемещение каждой травы) падает примерно на 50 кадров в секунду, а второй все еще 55? Звучит как узкое место для меня. Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи, или в более общем ответе, если у вас есть идея или документ о поиске узких мест в графическом процессоре (или GPGPU) или оптимизации графического кода для работы на графическом процессоре?


person Amir Zadeh    schedule 26.05.2011    source источник


Ответы (1)


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

Создание экземпляров было введено для решения этой конкретной проблемы, с которой вы столкнулись.

Чтобы ответить, как профилировать графический конвейер, есть ряд инструментов, которые вам помогут:

gDEBugger http://www.gremedy.com/

NVPerfkit http://developer.nvidia.com/nvidia-perfkit

GPU Perf Studio http://developer.amd.com/tools/PerfStudio/Pages/default.aspx

Также это помогает собрать некоторую статистику в вашей программе, в основном о порядке и количестве дорогостоящих вызовов (в основном переключение шейдеров, текстур).

person datenwolf    schedule 26.05.2011