LoginSignup
18
20

More than 1 year has passed since last update.

コア数に応じた最適なmake実行

Last updated at Posted at 2019-01-12

make実行にいつも-j(無制限に並列実行)を指定していたらひどい負荷になったので反省。
おれは…反省すると強いぜ…。

並列数はいくつが最適か

参考: makeの並列オプションは何を指定するべきか - よーる

参考記事によれば、物理コア数+1が最速。
以下のような理由かと推測する。

  • 結局は物理コア数分だけしか並列動作できない
  • 並列動作数よりも多ければ、処理を終えた物理コアがすぐに次の処理に取り掛かれる
  • 並列動作数をあまり多くしすぎても、資源獲得のオーバーヘッドなどで遅くなる

物理コア数を調べる

参考: 物理 CPU、CPU コア、および論理 CPU の数を確認する

以下のコマンドで取得できる。
これはMSYS2でも使える。さすが!

対象 取得コマンド
物理CPU数 grep physical.id /proc/cpuinfo | sort -u | wc -l
物理コア数(CPUコア数) grep cpu.cores /proc/cpuinfo | sort -u
論理CPU数(スレッド数) grep processor /proc/cpuinfo | wc -l.

シェルスクリプトなどで指定するなら以下:

JOBS=$(($(grep cpu.cores /proc/cpuinfo | sort -u | sed 's/[^0-9]//g') + 1))
make -j${JOBS}

参考: いつも make で高速化する:パソコン鳥のブログ

↑の記事のように、~/.bashrcに指定するなら以下:

.bashrc
export MAKEFLAGS=-j$(($(grep cpu.cores /proc/cpuinfo | sort -u | sed 's/[^0-9]//g') + 1)) $MAKEFLAGS
18
20
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20