首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >GNU make:作业的数量是否应该等于系统中CPU核心的数量?

GNU make:作业的数量是否应该等于系统中CPU核心的数量?
EN

Stack Overflow用户
提问于 2010-03-23 18:29:10
回答 7查看 67.5K关注 0票数 97

关于GNU make中的作业数量是否应该等于内核数量,或者是否可以通过添加一个额外的作业来优化构建时间,当其他作业“工作”时,似乎存在一些争议。

在四核系统上使用-j4-j5哪个更好?

你见过(或做过)任何支持其中之一的基准测试吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-03-23 19:53:48

我会说,最好的做法是根据您的特定环境和工作负载对其进行基准测试。似乎有太多的变量(源文件的大小/数量,可用内存,磁盘缓存,源目录和系统头文件是否位于不同的磁盘上,等等)一刀切的答案。

我的个人经验(在双核MacBook专业版上)是-j2比-j1快很多,但超过了-j3,-j4等。没有可测量的加速比。因此,对于我的环境来说,"jobs == number of cores“似乎是一个很好的答案。(YMMV)

票数 60
EN

Stack Overflow用户

发布于 2010-03-23 22:46:08

我个人使用make -j n,其中n是“核数”+ 1。

然而,我不能给出一个科学的解释:我已经看到很多人使用相同的设置,到目前为止,他们给了我相当好的结果。

无论如何,您必须小心,因为一些make-chain与--jobs选项不兼容,并可能导致意外的结果。如果你遇到奇怪的依赖错误,试着在没有--jobs的情况下使用make

票数 31
EN

Stack Overflow用户

发布于 2019-06-15 14:12:11

两者都不是错的。为了让你自己和你正在编译的软件的作者都心平气和(在软件级别上有不同的多线程/单线程限制),我建议你使用:

代码语言:javascript
复制
make -j`nproc`

注意:nproc是linux命令,它将返回系统上可用的核心/线程数(现代CPU)。把它放在ticks下面,就像上面一样,会把这个数字传递给make命令。

补充信息:正如有人提到的,使用所有内核/线程来编译软件可能会让你的机器几近死亡(没有反应),甚至可能比使用更少的内核花费更长的时间。正如我看到的一位Slackware用户在这里发布的帖子,他有双核CPU,但仍然提供到j8的测试,这在j2停止了不同(只有2个CPU可以使用的硬件核心)。所以,为了避免无响应框,我建议你这样运行它:

代码语言:javascript
复制
make -j`nproc --ignore=2`

这将把nproc的输出传递给make,并从其结果中减去2个内核。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2499070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档