2011-09-08 10 views
2

私はいくつかのプロジェクトのビルドの改善に取り組んでいます。私はビルド時間を大幅に改善しました。私は現在、ボトルネックがより微妙だと思うところです。ボトルネックを特定するためのビルド時間の測定

ビルドでは、GNUスタイルのmakefileが使用されます。私は一連の依存関係ファイル(.d)を生成し、makefileにインクルードします。そうでなければ、あらかじめコンパイルされたヘッダーやその他のキャッシング機構はありません。

32コアのsparc ultraでは、並列に16スレッド実行して約95秒かかります。ビルドが実行されている間、空き時間は約80%、カーネル時間は8〜10%です。私は/ tmpにコードを入れましたが、コンパイラサポートファイルのほとんどはNFSマウントされており、パフォーマンスのボトルネックが発生する可能性があります。

&これらの種類の問題を追跡するツールはありますか?

+0

プリコンパイル済みヘッダーを使用していない理由は何ですか?私の経験では、それらは劇的に全プロセスをスピードアップすることができます。 – Voo

+0

私の場合、リンクには約2分かかります。それだけで。完全なコンパイルは5分以上かかることがあります。完全最適化ビルドを実行すると、すべてのモジュールが1つに統合され、完全なIPOが可能になります。私は通常、これらのビルドのうちの5〜10個を、異なるアーキテクチャに対して同時に実行します。 (モジュールがマージされてからマルチコアをコンパイルするのは唯一の方法です)。 – Mysticial

+0

@Voo - それは議事録の上にあります。 –

答えて

1

私自身の経験から、C/C++コードをコンパイルするには、Cプリプロセッサで多くのヘッダファイルを読み込む必要があります。私は完全な翻訳単位を生成するためにg ++の実行時間が50%以上かかる状況を経験しました。

言いましたように、コンパイル時に80%がアイドルになると、I/Oを待つ必要があります。 iostatとDTraceは良い出発点です。

関連する問題