マルチコアなマシンで高速にビルドする方法

nkjm氏がこんな記事をブログに書いていた。

タイトルだけ見て一瞬「smpカーネルの話?」と思ったのだけれども、実はマルチコアなマシンでプログラムをmakeする際の高速化オプションの話。

make -j

このように"-j"を付けるとマルチコア環境では高速にビルドされるとか。さらに以下のように数値も指定できて、これはコア数*2を指定すると速いとのこと。

make -j4

man makeで-jオプションのところ見てみると、なーるほど。

-j jobs
  同時に実行できるジョブ(コマンド)の数を指定する。 -j オプションが複数個指定された場合は、最後の指定が有効になる。引き数無しで -j オプションが与えられた場合、make は同時に実行できるジョブの数を制限しない。

Makefileの内容にもよるけれども、実コア数に対して同時実行可能なジョブ数が多すぎる場合、限界速度よりもやや落ちることになるだろうから、-jの後に同時実行するジョブ数の上限値を決めておいた方がちょっとだけいいかも、みたいな感じですな。

会社のTritonn開発マシン(Dual Core Xeon 3.0GHz * 2発 = 合計4コア)で試してみたところこんな結果となった。

それぞれ、"make clean"した後、"time make"でオプションを付けたりつけなかったりしつつ計測した値。

"make"だけ(オプション無し)の場合。

real    5m30.266s
user    4m37.116s
sys     0m54.222s

"make -j"の場合。

real    1m25.557s
user    4m4.317s
sys     0m44.498s

"make -j8"の場合。

real    1m27.337s
user    4m4.827s
sys     0m45.489s

まぁ、とりあえず"-j"使っとけということでしょうか。自宅の開発サーバの場合、PentiumM 1.5GHz(もちろん1コア)なんだけれどもmake cleanした後のビルドがだいたい20分〜30分はかかってる気がする。コア数だけでなくコア単体の性能も大幅に負けてるからかな。

うーん、ここまでマルチコアでビルド速度があがるとなると、やっぱり自宅にも新しいマシンが欲しくなってきたw Core2Quadマシンかなー。家に帰って2時間くらい開発しようとおもった矢先、ヘッダファイル弄ってmake cleanする必要がでてきて30分ぼけーっと待つのはもう終わりじゃー。というかPentiumMでのビルド待ち時間に耐えられなくて日曜日に会社に来るのも終わりですな。