ビルド高速化してみた
数日前から作っていたミニゲームを公開。ソースもあるよ!
http://d.hatena.ne.jp/kyubuns/20110321/1300708060
というわけでソースに飛びついてきました。DirectXのコードは書いたことないのでちょっとわくわくします。しました。
だいぶ読みやすいコードだとは思うのですが、コンパイルの長いこと。i7でも一分かかってます。なんとかならないの?(バンバン
なんとかしました。
まずはビルド環境の構築
まず今日使う材料はこちら。適当なところで調達してきて下さいね。
ライブラリ類はプロパティシートでパスを切っておきましょう。Microsoft.Cpp.**.userというデフォルトのシート、もしくは新しく作っても構いません。
高速化するまえにビルドできることを確認。フルビルドに48秒でした。
マルチコアを活かす
さて、最近のCPU、それこそi7なんかではコア数が増えています。デフォルト設定のままだと直列にコンパイルされるので、マルチコアがあまり活かせていません。そこでプロジェクト設定を変更します。
プロジェクトのプロパティから[構成プロパティ][C/C++][全般]とたどり、[複数プロセッサによるコンパイル]を「はい」に変更します。
これで48秒→11秒。もう少し頑張りましょう。
プリコンパイル済みヘッダを使う
ソースを眺めてみると随所でStandard.hをインクルードしています。直接的・間接的合わせるとほとんどのソースがこのヘッダに依存しています。
このヘッダはWinSDK、DirectXSDK、Boost、STLといった多くのライブラリを一気にインクルードする物ですが、これらのヘッダはプリプロセス・コンパイルに時間がかかることでも有名です。それを数十あるソースが個別にインクルードするのはもったいないですね。
そこで一通り展開したヘッダ、プリコンパイル済みヘッダを使います。
- Standard.hをインクルードするだけのソース、Standard.cppを作成
- プロジェクトのプロパティ[構成プロパティ][C/C++][プリコンパイル済みヘッダー]で、[プリコンパイル済みヘッダー]を「使用(/Yu)」に変更、ファイルにStandard.hを設定
- Standard.cppのプロパティでも同じようにして[プリコンパイル済みヘッダー]を「作成(/Yc」に変更
- プロジェクト内の全.cppファイルの頭でStandard.hをインクルード
できあがり。
Standard.cppはプリコンパイル済みヘッダを生成するため、全ファイルでインクルードするのはお約束、といったところのようです。
これでStandard.hのプリプロセス処理が簡略化されるはずです。
結果は・・・11秒→5秒。きたあああああっ!