关于GNU make中的作业数量是否应该等于内核数量,或者是否可以通过添加一个额外的作业来优化构建时间,当其他作业“工作”时,似乎存在一些争议。
在四核系统上使用-j4
和-j5
哪个更好?
你见过(或做过)任何支持其中之一的基准测试吗?
发布于 2010-03-23 19:53:48
我会说,最好的做法是根据您的特定环境和工作负载对其进行基准测试。似乎有太多的变量(源文件的大小/数量,可用内存,磁盘缓存,源目录和系统头文件是否位于不同的磁盘上,等等)一刀切的答案。
我的个人经验(在双核MacBook专业版上)是-j2比-j1快很多,但超过了-j3,-j4等。没有可测量的加速比。因此,对于我的环境来说,"jobs == number of cores“似乎是一个很好的答案。(YMMV)
发布于 2010-03-23 22:46:08
我个人使用make -j n
,其中n是“核数”+ 1。
然而,我不能给出一个科学的解释:我已经看到很多人使用相同的设置,到目前为止,他们给了我相当好的结果。
无论如何,您必须小心,因为一些make-chain与--jobs
选项不兼容,并可能导致意外的结果。如果你遇到奇怪的依赖错误,试着在没有--jobs
的情况下使用make
。
发布于 2019-06-15 14:12:11
两者都不是错的。为了让你自己和你正在编译的软件的作者都心平气和(在软件级别上有不同的多线程/单线程限制),我建议你使用:
make -j`nproc`
注意:nproc
是linux命令,它将返回系统上可用的核心/线程数(现代CPU)。把它放在ticks下面,就像上面一样,会把这个数字传递给make命令。
补充信息:正如有人提到的,使用所有内核/线程来编译软件可能会让你的机器几近死亡(没有反应),甚至可能比使用更少的内核花费更长的时间。正如我看到的一位Slackware用户在这里发布的帖子,他有双核CPU,但仍然提供到j8的测试,这在j2停止了不同(只有2个CPU可以使用的硬件核心)。所以,为了避免无响应框,我建议你这样运行它:
make -j`nproc --ignore=2`
这将把nproc
的输出传递给make
,并从其结果中减去2个内核。
https://stackoverflow.com/questions/2499070
复制相似问题