デスクトップ/ラップトップコンピューターで大規模なシステムを(再)ビルドするとき、次のようmake
に、複数のスレッドを使用してコンパイル速度を上げるように指示します。
$ make -j$[ $K * $C ]
どこ$C
の数を示すことになっているコアながら、マシンが持っている(私たちは一桁と番号であることを仮定することができ)$K
、私は異なるものだ2
と4
、私の気分に応じました。
したがって、たとえば、make -j12
4つのコアがある場合、make
最大12のスレッドを使用するように指示することができます。
私の理論的根拠は、私が$C
スレッドのみを使用する場合、プロセスがドライブからデータをフェッチするのにビジーである間、コアはアイドルになるということです。しかし、スレッドの数を制限しない場合(つまりmake -j
)、コンテキストの切り替えに時間を浪費したり、メモリを使い果たしたり、さらに悪いことにリスクを冒したりします。マシンに$M
ギグのメモリがあると仮定しましょう($M
は10のオーダーです)。
したがって、実行するスレッドの最も効率的な数を選択するための確立された戦略があるかどうか疑問に思っていました。