いつも make で高速化する

ALL
スポンサーリンク

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オプション(ジョブの並列実行)をデフォルトに – 学生時代に頑張ったことが何もない

コメント