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}
↑の記事のように、~/.bashrc
に指定するなら以下:
.bashrc
export MAKEFLAGS=-j$(($(grep cpu.cores /proc/cpuinfo | sort -u | sed 's/[^0-9]//g') + 1)) $MAKEFLAGS