Ubuntuアプリ(make、cmake、gcc)のコンパイルを高速化する方法


11

ここでいくつかのプログラムをコンパイルしていますが、4つのコアがあります。伝える方法makecmakeまたはgccすべてのコアなどを使用してコンパイルする方法はありますか?

回答:


13

パッケージがサポートしている場合、-jフラグを使用して、並列ジョブの実行を許可できます。例:

make -j8

このフラグの詳細については、Stackoverflowの質問をご覧ください。利用可能なコアの数よりも大きい数を渡すと-jのパフォーマンスが向上するのはなぜですか?

分散コンパイル

複数のマシンがある場合は、distccを試してください。関与マシンでは、sudo apt-get install distcc。ビルドマシンが192.168.1.1であると仮定します。

  • ヘルパーマシンで、次を実行します。

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • ビルドマシン上で、実行する前に、configureまたはcmakeビルドプロセスに使用するホストを指定する必要があります。オプションで、スラッシュの後に同時ジョブの数を指定します(デフォルトは4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    コンパイラーにdistccを使用させます:

    export PATH="/usr/lib/distcc:$PATH"
    

    今、configureまたはcmakeアプリケーションとビルドで:

    make -j$(distcc -j)
    

    /usr/lib/distccPATH に2回入力すると、失敗することに注意してください。必ず/usr/lib/distcc一度だけ設定してくださいPATH

詳細については、distcc(1)およびdistccd(1)のマニュアルページを参照してください。


OMG、Jがいい。私は15分の1未満のおかげL.に行ってきました
ルイス・アルバラード

distccを使用すると高速になり、PHPのコンパイルは2分で完了し、カーネルは3分で完了しました(3台のi5マシン)
Lekensteyn

仕事に着いたらdistccを試してみます。昨日、これについて同様の質問をしていた。たぶん、あなたはここでそれを支援することができます:askubuntu.com/questions/106810/...
ルイス・アルバラード

rootとしてdistccdを実行するのは悪い計画のようです。いくつかの理由で使用しませんでしたが、使用したときには、それらのマシンに対する許可がなかったため、rootを使用できませんでした。
AMS

@amsルートとして実行する必要はありません。ルートとして実行し、ユーザーを切り替えたい場合は、を使用しますdistccd --user nobody。それ以外の場合は、実行したユーザーの下で実行されます。
-Lekensteyn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.