7

"make"コマンドを使用して4コアマシンでコンパイルするのに1.5時間かかる ".c/.C++"コードをコンパイルしています。コンパイルに使用できるマシン私は指定された数のスレッドでコンパイルを配布する "make"の "-j"オプションを知っています。 "-j"オプションを指定すると、ネットワークに接続されている他の10台のマシンではなく、現在のマシンにのみスレッドが分散されます。複数のマシン上でタスクを分散できる "make"コマンドを並列化する方法

私たちはMPIまたは他の並列プログラミング技術を使用できますが、並列プログラミング言語に従って "MAKE"コマンド実装を書き直す必要があります。

コンパイルに利用できる他のマシンを使用できる方法はありますか? ありがとう

+0

[タグ:gnu-parallel]が表示されます。しかしなぜ[タグ:linux-kernel]?代わりに[tag:linux]を意味しましたか? –

+0

@ 4566976それは迷惑になってしまうのではない。 Linuxカーネルコンパイルのような異なるドメインにも同様の問題が存在するので、私はそれらの人に見てもらいたい、そして将来の参考にも役立つでしょう。タグを見るのではなく、問題文に集中してください。 – rahulk

+0

@BaummitAugenはい、タグにCやC++のコンパイルに関する質問が含まれていません。 – 4566976

答えて

5

はい、あります:distccです。

distccは、ネットワーク上の複数のマシン にCまたはC++コードのコンパイルを配布するプログラムです。 distccはローカルコンパイルと同じ結果を常に生成しなければならず、インストールと使用が簡単であり、しばしばローカルコンパイルよりも2倍以上高速です です。

他の分散ビルドシステムとは異なり、すべての マシンでファイルシステムを共有したり、クロックを同期させたり、同じライブラリまたはヘッダーファイルをインストールする必要はありません。マシンは互換性のあるバイナリ フォーマットまたはクロスコンパイラを持っている限り、 異なるオペレーティングシステムを実行することができます。デフォルトでは

、distccのは、ジョブごとに 間のネットワークを完全な前処理済みのソースコードを送信し、それがボランティアマシン の必要なすべてのは、彼らがあるdistccdデーモンを実行している、と彼らは 適切なコンパイラがインストールされていることをするということです。

しかし、gccはファイルを適切に整理して(プリプロセッサ、ヘッダー、...ローカルで実行しますが)、ネットワーク経由でオブジェクトコードへのコンパイルを手配します。

これまで私はこれを使用していましたが、セットアップは非常に簡単で、あなたの状況にも役立ちます。

2

https://github.com/icecc/icecream

アイスクリームはdistccのに基づいてSUSEによって作成されました。 distccと同様に、Icecreamはビルドからコンパイルジョブを取り出し、それをリモートマシンに配布して並列ビルドを可能にします。しかし、distccとは異なり、Icecreamはコンパイルジョブを動的にスケジューリングする中央サーバーを使用して、最速の空きサーバーにします。この利点は、主に共有コンピュータの場合に恩恵を受けます.xマシンの唯一のユーザーであれば、それらを完全に制御できます。

関連する問題