Проблема производительности между сборками - PullRequest
2 голосов
/ 17 января 2011

В свободное время я разрабатывал небольшую инди-игру и столкнулся с необъяснимой проблемой. Некоторые сборки игры будут случайным образом работать на несколько сотен кадров в секунду медленнее, чем другие сборки. Например, при рендеринге некоторого текста без 3D-сцены, я могу достичь 1800FPS на моем собственном оборудовании. Добавьте одну трехмерную сферу (10 тыс. Вершин, затененных пикселями) и получите 1700 кадров в секунду. Добавьте еще две сферы, достигните 800 FPS. Удалите все сферы, достигните 1100FPS - даже несмотря на то, что код теперь воспроизводит ту же сцену, что и я, ранее достигнутую при 1800FPS, что является просто отображаемым счетчиком FPS. Я попытался пересобрать и очистить проект и перезагрузить компилятор. Это в режиме Release, и я включил все оптимизации, которые смог найти. Любые предложения относительно причины?

Я запустил быстрый профиль, и Visual Studio, кажется, думает, что более 90% моего времени было потрачено на D3D9_43.dll, предполагая, что это не ошибка в моем приложении, что не объясняет, почему это проявляется только в некоторых строит.

Я перезагрузил свою машину, и она вернулась к скорости 1800FPS. Я думаю, что это ошибка в инструментах DirectX SDK (среди многих других). Собираюсь удалить этот вопрос.

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Другая возможность: масштабирование скорости процессора.

Если ваша программа тратит большую часть своего времени на выполнение на графическом процессоре, загрузка ЦП может оказаться недостаточно высокой, чтобы запустить процессор на полной скорости.

Попробуйте настроить управление питанием Windows на полную скорость вместо сбалансированного, посмотрите, изменит ли оно что-либо.

0 голосов
/ 17 января 2011

Я не знаю, делает ли MSVC это, но GCC делает:
Когда GCC не может определить наиболее вероятную ветвь, он бросает кости.

Если MSVC делает это, это может быть такПостроение важной точки ветвления прогнозируется тем или иным способом, и это имеет значение.

Это можно исправить, выполнив сборку PGO: оптимизация на основе профилей.Это проверит код во время выполнения и сделает все ветви правильно предсказанными.По крайней мере, это будет правильно, если ваш тестовый тест будет хорошим примером.

Тем не менее, результаты, как правило, не столь впечатляющие.Если бы на сцене было больше объектов и задействовано больше кода, изменения выровнялись бы еще больше.

...