2009-05-28 22 views
10

MS Visual Studio C++(2005)のリンク時間を最適化する方法はありますか? Xoreax Incredibuildを使用してコンパイル速度を上げていますが、リンクには何もありません。C++のリンク時間を短縮する方法

現在、すべてのリンクに約30秒かかります。増分リンクをオンにすると、35〜40秒かかる。 (私はincredibuildの有無にかかわらずプロジェクトをコンパイルするかどうかにかかわらず)

リンカをプロファイルしてどのくらいの時間がかかるかを調べる方法はありますか?パラレルリンク用のツールですか?リンカをスピードアップするためのコード最適化のヒント

最初の回答のおかげで、および追加情報:回答 Ludek Vodicka


編集用

おかげ

  • プログラム全体の最適化とリンク時コード生成をオフにすでにあります。
  • 可能であればPIMPLイディオムが既に使用されています
  • #pragma comment(lib、 "pathToLib")で他の静的ライブラリが既に組み込まれています。 (ためにも容易にメンテナンス]
  • HW:あなたは最適化せずに生きることができる場合はクアッドコアQ6600は、8GBのRAM、3倍WDの猛禽のRAID 0、Windows Vistaの64ビット版
+0

30秒ほど聞こえません。あなたが合理的な開発を行う場合、どのくらいの頻度でコンパイル/リンクサイクルを実行しますか?あなたが速いなら、たぶん10〜30分ごとに。 30秒待たなければならないかどうかは本当に重要ですか? – lothar

+0

並列コンパイルフェーズはどのくらいの時間がかかりますか?一度にいくつのターゲットを作成しますか?コンパイル・フェーズで10秒かかる場合、ターゲットを1つしか作成しないと、私はあなたの状況にはまったく同感できません。 :) – bk1e

+0

新しい機能を開発するときは、あなたが言ったように10〜20分ごとにコンパイルしていますが、バグを検索して修正するときには毎分になります;-( プロジェクト全体のコンパイルには約2分かかります。 1つだけ変更されたファイル、filコンパイルには約3秒かかり、約35秒間リンクします;-( –

答えて

8

私は並列リンクツールについて知らない。私はIncredibuildが許可していないことを知っています。

リンク時間を避けるためにツールボックスで最大のツールは、適切な抽象レベルです。リンク時間が長いと、オブジェクトが他のオブジェクトについてあまりにも多くの情報を知っている可能性があります。それらを切り離すことは、抽象的なインターフェース(おそらくPIMPLパラダイムを使用して)を介して、あるいはイベントパッシングなどの他の方法を介してキーとなります。

プロジェクト依存関係を介してプロジェクトをリンクするためのオーバーヘッドも非常に高いです。ターゲットプラットフォームがWin32のみの場合、または主にヘッダを使用して#pragma comment(lib、 "pathToLib")を介して依存ライブラリをリンクすることを検討することができます。

+0

プロジェクトの依存関係を設定する|リンカ|プラグマコメントの入力または経由は同じです。 kに対して(私は以前のバージョンでそれを使用していたと思います)、それは最初のビルドが2番目のビルドの前に必要です。 –

7

、(リンク時のコード生成をオフにします/ GLスイッチを削除するか、プロパティc/C++ - >最適化 - >全体プログラムの最適化でリンカの削除/ ltcgを使用するか、リンクタイムコード生成設定を使用してください)これにより、コンパイラは遅くなります。コンパイル時間

私は、/ GL +/LTCGでビルドするのに数時間かかる単なる秒数(これは例:http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/750ed2b0-0d51-48a3-bd9a-e8f4b544ded8

+0

はい、リンク時間は短縮されますが、コンパイル時間は遅くなります。 –

1

あなたはハードウェアの改善を考えましたか?
ビルドに別の物理ハードドライブを使用していますか?どのようなドライブを使用していますか?

一般的な提案として:いくつかのメモリをスローし、Velociraptorを取得し、そこにソースのみを置いてディレクトリを構築し、再度測定します。それが助けてくれれば、RAID 0を考えてみてください。

私は、XPコアからW2K3コアへのアップグレードが、おそらくメモリ管理とキャッシュの改善により、ビルド時間が大幅に改善されたという報告を聞いてきました。

コードを変更するための提案として、いくつかの機能をDLLに移行し、並列にリンクすることができます。しかし、ビルド時間を改善するだけの変更はしていません。

0

また、あなたはIncrediLink

を使用してそれらを配布しないだろう静的LIBSのリンクをスキップすることができますImproving link time with IncrediBuild

上のいくつかの一般的な設定の提案があり、我々は、署名ポストビルドステップの追加がIncrediBuildを停止することがわかりました次のプロジェクトに取り組んでから、ビルドを投稿するコメントを追加する

rem IncrediBuild_AllowOverlap 

IncrediBuild_AllowOverlap doc

を見るのを助けることになっていました
関連する問題