GNU make可以使用-jN参数来处理并行任务,通常使用的任务数N是用于构建的计算机上硬件线程数的1到2倍。

例如。在双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个线程进行编译?

最佳答案

使用-j选项不会对您造成任何伤害。它仅用于调整make应当使用的并发进程数,以使系统获得最佳性能以进行构建。

您可以将其设置为小于4,每个内核2个x超线程,如果您想让CPU时间更多地用于您正在做的其他事情(也许浏览速度更快)。

您可以将其设置为4以上,以便其中一个进程正在利用每个执行单元,而其他处理器正在等待I/O。

如果您有足够的内存,则-j32应该不会对您造成任何伤害,但这也无济于事。请参阅注释,了解为什么您不想过度使用。

如果只有一个软件包,您可以一直进行试验,然后看看可以进行最快设置而又不影响交互性能的设置。调整的另一种方法是查看最高输出,并查看大多数情况下将CPU利用率保持在接近100%的-j多处理级别。

Greg Kroah-Hartman在他的《 Nutshell的Linux内核》一书中,建议在设置-j选项时将执行单元的数量加倍。对您来说,这就是-j8

[1]简而言之,Linux内核,Greg Kroah-Hartman,第1页。 26. [http://www.kroah.com/lkn/]

09-04 13:45
查看更多