构建之间的性能问题

时间:2011-01-17 17:11:55

标签: c++11 direct3d visual-studio-2010

我在业余时间一直在开发一款小型独立游戏,并且遇到了一个无法解释的问题。游戏的某些版本将比其他版本更慢地每秒运行几百帧。例如,在渲染一些文本而没有3D场景时,我可以在自己的硬件上实现1800FPS。添加一个3D球体(10k顶点,像素着色),实现1700 FPS。再添加两个球体,达到800 FPS。删除所有球体,达到1100FPS-即使代码现在渲染的场景与我之前在1800FPS处获得的场景相同,这只是正在渲染的FPS计数器。我已经尝试重建和清理项目并重新启动编译器。这是在发布模式,我打开了我能找到的所有优化。有关原因的任何建议吗?

我运行了一个快速的配置文件,Visual Studio似乎认为超过90%的时间花在D3D9_43.dll上,这表明它不是我的应用程序中的错误,这无法解释为什么它只出现在一些生成。

我重新启动了我的机器,它又回到了1800FPS。我认为这是DirectX SDK工具中的一个错误(在许多其他工具中)。要删除这个问题。

2 个答案:

答案 0 :(得分:0)

我不知道MSVC是否会这样做,但GCC会这样做:
当海湾合作委员会无法确定最可能的分支时,它会掷骰子。

如果MSVC这样做,可能是在每个构建中,一个重要的分支点正在以某种方式被预测,并且它会产生影响。

您可以通过执行PGO构建来修复此问题:配置文件引导优化。这将在运行时检查代码,它将使所有分支正确预测。至少,如果您的测试运行是一个很好的样本将是正确的。

那就是说,结果通常不那么引人注目。如果你在场景中有更多的对象并且涉及更多代码,那么更改会更多。

答案 1 :(得分:0)

另一种可能性:CPU速度缩放。

如果您的程序花费大部分时间在GPU上执行,则CPU使用率可能不会升高到足以使CPU全速运行。

尝试将Windows电源管理调整为全速而非平衡,看看它是否发生了任何变化。