2011-01-17 8 views
2

私は暇な時間に小さなインディーゲームを開発していて、不可解な問題を抱えています。ゲームのいくつかのビルドは、ランダムに他のビルドよりも遅い毎秒数百フレームを実行します。たとえば、テキストをレンダリングして3Dシーンを表示しない場合、自分のハードウェアで1800FPSを達成できます。 1つの3D球(10Kバーツ、ピクセルシェーディング)を追加し、1700FPSを達成します。 2つの球を追加して、800 FPSを達成します。すべての球を削除して、1100FPSを達成します。これは、以前は1800FPSで達成されたのと同じシーンをレンダリングしますが、これはレンダリングされるFPSカウンタだけです。私は、プロジェクトの再構築とクリーニングを試み、コンパイラをリブートしました。これはリリースモードであり、私は見つけることができるすべての最適化を有効にしました。原因に関する提案はありますか?ビルド間のパフォーマンスの問題

私はクイックプロファイルを実行し、Visual Studioは自分の時間の90%以上がD3D9_43.dllに費やされていると思っています。なぜなら、それがアプリのバグではないことを示唆しているからですいくつかのビルド。

私のマシンをリブートしたところ、最大1800FPSまで回復しました。私はDirectX SDKツールのバグだと思っています。この質問を削除しようとしています。

+0

私はスーパーフェッチとは関係ないと思いますか? (実行している場合はもちろん)。とにかく、このインディー・ゲームの書き込みをやめ、DeadMG ++、damnitをやり直してください。 –

答えて

0

MSVCがこれを行うかどうかわかりませんが、GCCは次のようになります。
GCCが最も可能性の高いブランチを特定できない場合は、サイコロがスローされます。

MSVCがそうした場合、各ビルドで重要な分岐ポイントが一方向または他の方法で予測され、違いが生じることがあります。

これはPGOビルドを行うことで修正できます:プロファイルガイドによる最適化。それは実行時にコードを検査し、すべてのブランチが正しく予測されるようにします。少なくとも、試運転が良いサンプルであれば正しいでしょう。

しかし、結果は通常はそれほど劇的ではありません。あなたがシーン上にもっと多くのオブジェクトを持っていて、より多くのコードが関わっていれば、その変更はさらに多くなります。

+0

PGOを適用しても変更はありません。 90%の時間がD3D9_43.dllにある場合、他の10%を削除しても、100%の増加は見られません。 – Puppy

0

別の可能性:CPUスピードスケーリング。

プログラムがGPUで実行する時間のほとんどを費やす場合、CPU使用率がCPUを最大速度に押し上げるほどには上がらないことがあります。

Windowsの電源管理をバランスのとれず最高速度に調整してください。何か変更があるかどうかを確認してください。

+0

リブートは既に問題を解決しました。しかし、私はすでに高性能電源プランを実行しています。 – Puppy