2009-03-18 9 views
0

今朝コンパイルしているうちに、私は思考をしました。コンパイル時の相対CPU使用量の見積もり

専用のLinuxマシン(Fedoraを実行している場合など)は、シンボリックリンクにリンクされた自分のマシン(小さなLAN上)に保存されているC++ソフトウェアをリモートでログインしてコンパイルしますLinuxボックス。

各ユーザーが今のところ同じコードをコンパイルしているとします。 1人のユーザーがコードをコンパイルして10分でリンクできます。

同時にコンパイルするには2人のユーザーが合計20分かかります 約3人、または10人のユーザーですか?

ユーザーが増加するにつれてリターンが低下するオーバーヘッドはありますか?

この設定でコンパイル効率を向上させるためのヒントを教えてください。

答えて

0

プロジェクトのソースのサイズによっては、コンパイルする前にすべてのファイルをローカルにビルドマシンにコピーすることがあります。コンパイラがネットワーク上のすべてのファイルを必要に応じてプルする必要がある場合、ネットワークアクセスがディスクアクセスよりもかなり遅いため、オーバーヘッドが発生します。

変更したファイルのみをビルドマシンにコピーするスクリプトを作成したりツールを使用した場合、オーバーヘッドが大幅に減少します。この場合、ビルドマシンは基本的にソースファイルのローカルミラーを保持し、コンパイルするたびに、変更されたファイルを更新してコンパイルします。明らかに、たくさんのユーザーや大きなプロジェクトファイルがある場合は、ストレージ/スペースの問題にぶつかります。ネットワークとして、

  • スケジューリングが最後のものは、あなたのために最も重要なものになります

  • 時間の矛盾をI/O操作の必要があります:

  • 0

    は常にのために伴うオーバーヘッドがありますアクセスは、例えばディスクアクセスよりも著しく遅い。プリキャッシング(最初にすべてのファイルをローカルにフェッチしてからコンパイルを開始する)がここで役に立ちます。すでに起動しているビルドは、新しい同時ユーザーによって妨げられることはありません。

    +0

    それでは、起動していたビルドは、新しいビルド接続の影響を受けず、あらかじめ並行して起動していますか? – Krakkos

    +0

    新しいビルドのプリキャッシュによって深刻な影響を受けることはありません。ただし、新しいビルドのCPU使用率によって影響を受けます。アイデアは、IO待機のためにCPU使用率が低下しないということです。 – ypnos

    2

    私はdistccを提案します。

    +0

    ccacheも便利です。 –

    +0

    私はコンパイルにdistcc3を使用しています。私の新しい開発ワークステーションが到着するまで、私はWindowsのボックスでフルスクリーンのVMを使って作業しています。物事をスピードアップするために、私はデスクの下で2台のP4 Dell Optiplexesにdistccをインストールしました。そうしないと、ほとんどの場合アイドル状態になり、結果に非常に満足しています。 – MrEvil

    0

    コンパイルにはCPUがほとんどないため、十分なRAMがあると仮定すると、コンパイル時間はおおよそ(タスクあたりの時間)*(タスク数)/(システム内のCPU /コア数) 。 (奇妙なことに、私のプロジェクトで3つのコアシステムに「make -j」を実行し、3倍以上の速度を上げていたので、連続したmakeが完全な速度で動作するのを妨げる何らかのブロッキング問題があるかもしれません)。

    なぜユーザーは自分のコンピュータで自分のプログラムをコンパイルしないのですか?

    +0

    私たちはマルチプラットフォームコードを書いているので、ウィンドウを使ってローカルにビルドし、ターゲットのLinuxマシンでコンパイルするだけです。 – Krakkos

    関連する問題