Makefile 最大配方使运行?

Makefile 最大配方使运行?,makefile,Makefile,在进行内核编译时,我遇到了make for parallel execution上的-j选项。据说,同时运行尽可能多的配方 I was wondering, there should be a maximum limit for parallel execution. Does it depend upon the cores ?? 最大实际并行执行数由内核数给出 但是,make会在给定数量的线程上拆分计算,该数量甚至可能高于可用内核的数量。在这种情况下,多个线程由同一个内核执行,而执行实际上

在进行内核编译时,我遇到了make for parallel execution上的
-j
选项。据说,
同时运行尽可能多的配方

I was wondering, there should be a maximum limit for parallel execution.
Does it depend upon the cores ??
最大实际并行执行数由内核数给出

但是,make会在给定数量的线程上拆分计算,该数量甚至可能高于可用内核的数量。在这种情况下,多个线程由同一个内核执行,而执行实际上并不是并行的(它只是多线程的,这意味着更多线程由同一个内核并发运行,从而产生并行执行的假象)

通常,给定N个核,将-j设置为N+1是一种好的做法。最大实际并行执行数由核数给出

但是,make会在给定数量的线程上拆分计算,该数量甚至可能高于可用内核的数量。在这种情况下,多个线程由同一个内核执行,而执行实际上并不是并行的(它只是多线程的,这意味着更多线程由同一个内核并发运行,从而产生并行执行的假象)

通常,给定N个核,将-j设置为N+1是一种好的做法。最大实际并行执行数由核数给出

但是,make会在给定数量的线程上拆分计算,该数量甚至可能高于可用内核的数量。在这种情况下,多个线程由同一个内核执行,而执行实际上并不是并行的(它只是多线程的,这意味着更多线程由同一个内核并发运行,从而产生并行执行的假象)

通常,给定N个核,将-j设置为N+1是一种好的做法。最大实际并行执行数由核数给出

但是,make会在给定数量的线程上拆分计算,该数量甚至可能高于可用内核的数量。在这种情况下,多个线程由同一个内核执行,而执行实际上并不是并行的(它只是多线程的,这意味着更多线程由同一个内核并发运行,从而产生并行执行的假象)


通常,给定N个内核,将-j设置为N+1是一个好的做法,只是为了非常清楚:make(至少GNU make)不是多线程的。但是,由于make实际上不做任何工作(它启动其他程序来完成该工作),因此它仍然可以并行运行多个作业:虽然make本身以单线程方式运行,但它启动其他程序并允许它们在后台运行,同时继续寻找更多要启动的作业

Make没有“芯数”的概念。如果没有任何参数而给出
-j
,make将只启动作业,直到它找不到更多可以启动的作业为止:也就是说,直到makefile中没有更多可以独立构建的目标为止。在大型构建环境中,这很容易导致整个系统崩溃;例如,尝试使用
-j
构建Linux内核而不受任何限制,基本上是一个叉炸弹

通常,您应该始终为
-j
提供参数

一个选项:您可能希望在
-l
(根据系统负载限制作业)旁边使用
-j
(无参数)。这将允许您运行尽可能多的作业,只要系统负载不高于某个值。这很有用,但不是很精确,因为make启动作业的速度比系统识别负载变化的速度快得多。代码中有一些技巧试图缓解这种情况;值得一试


当然,您始终可以使用
-jN
-l
来提供最大数量的作业和最大系统负载,这只是为了非常清楚:make(至少GNU make)不是多线程的。但是,由于make实际上不做任何工作(它启动其他程序来完成该工作),因此它仍然可以并行运行多个作业:虽然make本身以单线程方式运行,但它启动其他程序并允许它们在后台运行,同时继续寻找更多要启动的作业

Make没有“芯数”的概念。如果没有任何参数而给出
-j
,make将只启动作业,直到它找不到更多可以启动的作业为止:也就是说,直到makefile中没有更多可以独立构建的目标为止。在大型构建环境中,这很容易导致整个系统崩溃;例如,尝试使用
-j
构建Linux内核而不受任何限制,基本上是一个叉炸弹

通常,您应该始终为
-j
提供参数

一个选项:您可能希望在
-l
(根据系统负载限制作业)旁边使用
-j
(无参数)。这将允许您运行尽可能多的作业,只要系统负载不高于某个值。这很有用,但不是很精确,因为make启动作业的速度比系统识别负载变化的速度快得多。代码中有一些技巧试图缓解这种情况;值得一试


当然,您始终可以使用
-jN
-l
来提供最大数量的作业和最大系统负载,这只是为了非常清楚:make(至少GNU make)不是多线程的。但是,由于make实际上不做任何工作(它启动其他程序来完成该工作),因此它仍然可以并行运行多个作业:虽然make本身以单线程方式运行,但它启动其他程序并允许它们在后台运行,同时继续寻找更多要启动的作业

Make没有“芯数”的概念。如果您给出
-j
w