2

GNU make は -jN 引数を使用して並列タスクを処理できます。ビルドに使用されているコンピューターのハードウェア スレッド数の 1 から 2 倍の数のタスク N を使用するのが一般的です。

たとえば、デュアル E5520 マシン (2 CPU、CPU ごとに 4 コア、コアごとに 2 スレッド) では、make -j16 と make -j32 の間のコマンドで最速のビルドが作成されます。

現在、ビルドサーバーについてあまり知りませんが、実行するとcat /proc/cpuinfo

4つのプロセッサがあり、各情報は次のようになっています

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i3 CPU         530  @ 2.93GHz
stepping    : 2
cpu MHz     : 2933.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat tpr_shadow vnmi flexpriority ept vpid
bogomips    : 5851.87
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

質問:

1>ここで、ビルドの N を計算するにはどうすればよいですか?

2>自分のシステムが最大 8 つのスレッドをサポートできるとしたらどうしmake -j32ますか?

3>make だけを使用すると、コンパイルのために 1 つのスレッドのみが実行されますか?

4

1 に答える 1

2

-j オプションを使用しても問題はありません。ビルドを実行するためにシステムから最大のパフォーマンスを得るために、make が使用する必要がある同時プロセスの数を調整するためにのみ使用されます。

実行している他のことにより多くの CPU 時間を使用したい場合 (おそらく、ブラウジングの応答を速くしたい場合) は、2 コア x 2 ハイパースレッドでそれぞれ 4 未満に設定できます。

他のプロセッサが I/O を待機している間に、プロセスの 1 つが各実行ユニットを使用するように、4 以上に設定できます。

十分なメモリがある場合、 -j32 は何も害を及ぼすべきではありませんが、助けにもなりません。無理をしたくない理由については、コメントを参照してください。

常に作成するソフトウェア パッケージが 1 つある場合は、インタラクティブなパフォーマンスを損なうことなく、どの設定が最も速くビルドできるかを実験して確認できます。調整するもう 1 つの方法は、上位の出力を調べて、どの -j マルチプロセッシング レベルでほとんどの場合 CPU 使用率を 100% 近くに維持しているかを確認することです。

Greg Kroah-Hartman は、彼のLinux Kernel in a Nutshell book [1] で、-j オプションを設定するときに実行ユニットの数を 2 倍にすることを提案しています。あなたにとってそれは-j8.

[1] Linux カーネルの概要、Greg Kroah-Hartman、pg. 26. [ http://www.kroah.com/lkn/]

于 2012-05-25T04:32:39.347 に答える