マルチコアなマシンで高速にビルドする方法
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でのビルド待ち時間に耐えられなくて日曜日に会社に来るのも終わりですな。