Zit*_*rax 13 gcc load gnu-make command-line-arguments
在Make this flag中存在:
-l [load], - load-average [= load]指定如果有其他作业正在运行且负载平均值至少为load(浮点数),则不应启动新作业(命令).如果没有参数,则删除先前的加载限制.
您是否有一个很好的策略来确定负载限制的值?我的机器似乎差别很大.
我建议不要使用该-l选项。
原则上,-l似乎优于-j. -j说,开始这么多工作。 -l说,确保这么多作业正在运行。通常,这些几乎是同一件事,但是当您有 I/O 绑定作业是其他奇怪的事情时,那么-l应该会更好。
也就是说,平均负载的概念有点可疑。它必然是系统上发生的事情的样本。因此,如果您运行make -j -l N(对于某些N)并且您有一个编写良好的 makefile,那么即使在进行系统负载的第一个样本之前,make 也会立即启动大量作业并耗尽文件描述符或内存。此外,平均负载的计算因操作系统而异,有些晦涩的操作系统根本没有。
在实践中,您会很好地使用,-j并且不会那么头痛。要从构建中获得更多性能,请调整您的 makefile,使用编译器选项,并使用 ccache 或类似工具。
(我怀疑该-l选项的最初原因源于多处理器很少见且 I/O 非常慢的时代。)
可接受的负载取决于CPU核心的数量.如果有一个核心,则超过1的负载平均值会超载.如果有四个核心,则超过四个的负载平均值是过载.
人们通常只使用-j开关指定核心数.
请参阅此处的一些经验数据:https://stackoverflow.com/a/17749621/412080