当前位置:  开发笔记 > 编程语言 > 正文

使用多个核心使用g ++进行编译

如何解决《使用多个核心使用g++进行编译》经验,为你挑选了6个好方法。

快速提问:什么是编译器标志,允许g ++生成自身的多个实例,以便更快地编译大型项目(例如,一次为多核CPU提供4个源文件)?

非常感谢.



1> frankodwyer..:

你可以用make做 - 用gnu make它是-j标志(这对单处理器机器也有帮助).

例如,如果您想要make中的4个并行作业:

make -j 4

您也可以在管道中运行gcc

gcc -pipe

这将管理编译阶段,这也将有助于保持核心繁忙.

如果您还有其他可用的计算机,您可以查看distcc,这也将为这些计算机编译.


你的-j数应该是你拥有的核心数的1.5倍.
为什么GNU Make的*-j*选项需要是CPU内核数量的1.5倍?
*1.5*数是因为注意到的*I/O绑定*问题.这是一个经验法则.大约1/3的作业将等待I/O,因此剩余的作业将使用可用的核心.比核心更大的数字更好,你甚至可以高达*2x*.另见:[Gnu make`-j`参数](http://stackoverflow.com/questions/2499070/gnu-make-should-j-equal-number-the-number-of-cpu-cores-in-a -系统)
@JimMichaels这可能是因为依赖项在您的项目中被严重设置,(即使目标尚未准备好,目标也会开始构建),这样只有顺序构建才能成功.

2> Mihai Limbăș..:

没有这样的标志,并且有一个针对Unix的哲学,即每个工具只执行一个功能并且执行得很好.产生编译器进程在概念上是构建系统的工作.您可能正在寻找的是GNU make的一个-j(作业)标志,一个la

make -j4

或者您可以使用pmake或类似的并行制作系统.


_"Unix的迂腐没有帮助"_好东西不是迂腐当时,匿名编辑.回滚.评论者请更多关注你正在做的事情.

3> MattyT..:

人们已经提到makebjam也支持类似的概念.使用bjam -jx指令bjam构建x并发命令.

我们在Windows和Linux上使用相同的构建脚本,使用此选项可在两个平台上将构建时间减半.尼斯.



4> rmeador..:

make会为你做这件事.调查-j-l切换手册页.我认为不可g++并行化.



5> 小智..:

distcc还可用于不仅在当前计算机上分发编译,还可以在已安装distcc的服务器场中的其他计算机上分发编译.



6> Havok..:

如果使用make,请发出-j。来自man make

  -j [jobs], --jobs[=jobs]
       Specifies the number of jobs (commands) to run simultaneously.  
       If there is more than one -j option, the last one is effective.
       If the -j option is given without an argument, make will not limit the
       number of jobs that can run simultaneously.

最值得注意的是,如果您要编写脚本或确定可用内核的数量(取决于您的环境,并且如果您在许多环境中运行,则可能会发生很大变化),则可以使用无处不在的Python函数cpu_count()

https://docs.python.org/3/library/multiprocessing.html#multiprocessing.cpu_count

像这样:

make -j $(python3 -c 'import multiprocessing as mp; print(int(mp.cpu_count() * 1.5))')

如果您问为什么1.5我会在上面的评论中引用用户虚假噪声:

1.5的数字是由于指出的I / O绑定问题。这是一个经验法则。大约1/3的作业将等待I / O,因此其余的作业将使用可用的内核。大于核心的数字更好,甚至可以高达2倍。


大多数Linux用户可能会更喜欢较短的代码:GNU Coreutils中的`make -j`nproc`和`nproc`。
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有