使用するmakeスレッドはいくつありますか?


11

デスクトップ/ラップトップコンピューターで大規模なシステムを(再)ビルドするとき、次のようmakeに、複数のスレッドを使用してコンパイル速度を上げるように指示します。

$ make -j$[ $K * $C ]

どこ$Cの数を示すことになっているコアながら、マシンが持っている(私たちは一桁と番号であることを仮定することができ)$K、私は異なるものだ24、私の気分に応じました。

したがって、たとえば、make -j124つのコアがある場合、make最大12のスレッドを使用するように指示することができます。


私の理論的根拠は、私が$Cスレッドのみを使用する場合、プロセスがドライブからデータをフェッチするのにビジーである間、コアはアイドルになるということです。しかし、スレッドの数を制限しない場合(つまりmake -j)、コンテキストの切り替えに時間を浪費したり、メモリを使い果たしたり、さらに悪いことにリスクを冒したりします。マシンに$Mギグのメモリがあると仮定しましょう($Mは10のオーダーです)。

したがって、実行するスレッドの最も効率的な数を選択するための確立された戦略があるかどうか疑問に思っていました。


多くの場合、スレッド数の正解はコア数になります。しかし、確実に知る唯一の方法は、いくつかのテストを実行して、スイートスポットが見つかるまでスレッド数を変化させることです。
ロバートハーベイ

@RobertHarvey:はい、多分あらゆる種類の設定で一晩シェルスクリプトをコンパイルしますが、これについてある程度の知識があるかどうか質問したいと思いました。
ビットマスク

4
多くの人が$ cores + 1も提案しているため、4つのコンパイル中に1つのコンパイラプロセスがディスクから読み取ります。一般的な提案は難しく、コードベース(C ++テンプレートの過剰使用と、いくつかのC関数を含む小さなコンパイルユニット)、コンパイラチェーン(プリコンパイル済みヘッダーなど)、およびビルド構造(これは、終了または間にある複数の小さいもの)
ヨハネス2012

1
パフォーマンスを真剣に検討している場合は、RAMディスクの設定またはI / Oを軽減するその他の方法を検討することをお勧めします。CPU使用率がホットスポットだとは思いません。
TMN

@TMN:RAMディスクはどのように役立ちますか?Linuxは(あなたがものをキャッシュでかなり良いですやるドライブキャッシュはもちろんのこと、右、ヘッダファイルを意味ですか?)。最初にすべてを手動で、またはビルドスクリプトを変更することによって(完全にやりすぎになる)shmにロードする必要があります。
ビットマスク、

回答:


15

2つのコアと8 GBのRAMを搭載したマシンでllvmを(Debug + Assertsモードで)ビルドして、一連のテストを実行しました。

ジョブ数に応じたllvm時間のコンパイル

奇妙なことに、それは10まで上昇したように見え、その後、2つのジョブで構築するのにかかる時間を突然下回ります(1つのジョブは約2倍の時間がかかりますが、グラフには含まれていません)。

7*$coresこの場合、最低限のようです。


1
+1は実際のテストであり、推測ではありません。
Martin Wickman、

3

私はGentoo Linux(ソースベースのディストリビューション)を実行していて、私の経験から、(多かれ少なかれ最近のハードウェアを使用して)n*2 + x最も良い値であると言えます。これについて説明しましょう:

  • n*2:より遅いCPUでも、一度に2つのタスクを実行するのに十分な能力があります。ほとんどのコンパイルタスクは非常に速く完了します。
  • +xこの数はシステム(主にメモリとディスク)によって異なります。十分なRAMと高速なディスクがある場合は、を設定しx=nます。ただし、これはソースコード(Open Office、私が見ている!)と使用する言語(C / C ++のコンパイルはメモリを大量に消費する)によって異なります。

ただし、-j最良の数を得るには、いくつかの値でいくつかのテストを実行する必要があります。また、ビルドプロセスの他のステップ(開梱、実行configureなど)を並列化してみてください。


今のところ、私はC ++に主に関心がありますが、私のディスクは最速ではないと思います。
ビットマスク

次に、n * 1.5から始めて、コンパイル時間が減少しなくなるまで増やします(必ずディスクキャッシュ/コンパイルキャッシュをクリーンアップしてください)。また、ccache(ccache.samba.org)を使用してコンパイルを高速化することも検討してください。
ercpe
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.