makeコマンドは -jオプションを付けると、並列で処理を行い、make時間を短縮できます。
しかし、いつも手動で -jオプションを付けるのは面倒なので、自動的に指定されるようにします。
~/.bashrc の末尾に次の行を追加しておくと、make 実行時にいつも -j4オプションが指定されたことになります。
export MAKEFLAGS=-j4 $MAKEFLAGS
-j には並列に動作させる処理数を指定するので、CPU数に応じて、-j4 を -j8 等に増やしてください。
なお、Makefile の中で -j オプションが指定されている場合は、そちらが優先して使用されます。
-j 指定でどの位速くなるのか
apache のビルド時間がどのように変わるか測定してみました。
なお、今回測定した PC の CPU数は 4 です。
まず、apacheをダウンロードし、make できるように準備します。
wget http://ftp.riken.jp/net/apache//httpd/httpd-2.2.32.tar.gz tar zxvf httpd-2.2.32.tar.gz cd httpd-2.2.32/ ./configure
make時間の測定は、次で行いました。
-jXX の XX を 1,2,4 の場合で、3回ずつ実行しました。
export MAKEFLAGS=-jXX $MAKEFLAGS make clean; time make
測定結果です。
real の時間が経過時間で、これに注目します。
user,sys は複数CPUで処理が走った際の、各CPUの時間の合計です。
-jで指定する処理数が増えると、make が並列に処理されて、時間が短くなっています。
-j1(デフォルト)での40秒程に比べて、-j4 では 16秒と 2.5倍速くなっています。
-j1 の場合(-j1 はmakeのデフォルトです)
real 0m40.914s user 0m31.504s sys 0m9.221s real 0m41.428s user 0m32.356s sys 0m9.168s real 0m40.425s user 0m31.644s sys 0m8.874s
-j2 の場合
real 0m23.948s user 0m33.879s sys 0m8.751s real 0m24.100s user 0m34.223s sys 0m8.807s real 0m23.938s user 0m33.985s sys 0m8.654s
-j4 の場合
real 0m16.256s user 0m34.209s sys 0m8.473s real 0m16.009s user 0m34.050s sys 0m8.485s real 0m16.426s user 0m34.311s sys 0m8.529s
参考
コンパイル(make)の高速化 – 元RX-7乗りの適当な日々
makeでジョブ数を増やしてビルドの高速化 – おし、プログラミング
「-j」オプションと「ccache」でコンパイル時間を400%高速化する方法 | OXY NOTES
Man page of MAKE
makeの-jオプション(ジョブの並列実行)をデフォルトに – 学生時代に頑張ったことが何もない
コメント