2009-01-05 148 views
139

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

非常感谢。

+0

它真的有帮助吗?我所有的编译作业都是I/O绑定的,而不是CPU绑定的。 – 2009-01-06 13:28:48

+4

即使它们是I/O限制,当CPU重位发生时(只有一个g ++实例会有暂停),可能会使I/O负载更高,如果调度程序有更多选择,可能会获得I/O效率关于下一步从磁盘读取什么内容。我的经验是,明智地使用`make -j`几乎总会导致一些改进。 – Flexo 2011-08-22 09:35:34

+1

@BrianKnoblauch但是在我的机器上(真实的还是在VirtualBox中),它是CPU绑定的,我发现编译时CPU通过'top'命令忙碌。 – 2013-07-19 09:07:27

回答

199

你可以用make来做到这一点 - 用gnu使它成为-j标志(这也将有助于单处理器机器)。

例如,如果你想从化妆4个并行作业:

make -j 4 

您可以在管道与

gcc -pipe 

这将管道中的编译阶段也运行gcc,这也将有助于保持核心繁忙。

如果您还有其他机器可用,您可能会检查出distcc,这也将编译出来。

7

make会为你做这个。调查手册页中的-j-l开关。我不认为g++是可并行化的。

2

我对g ++没有把握,但是如果您使用的是GNU Make,那么“make -j N”(其中N是make可以创建的线程数)将允许make在相同的时间运行多个g ++作业时间(只要文件不相互依赖)。

36

没有这样的标志,并且有违反Unix哲学的每一个工具只执行一个函数并且执行得很好的哲学。产生编译器进程在概念上是构建系统的工作。什么你可能寻找的是-j(工种)标志GNU做,一拉

make -j4

或者你可以使用pmake或类似的并行做系统。

11

人们已经提到make,但bjam也支持类似的概念。使用bjam -jx指示bjam建立最多x并发命令。

我们在Windows和Linux上使用相同的构建脚本,并使用此选项减少了两个平台上的构建时间。尼斯。

5

distcc还可用于不仅在当前机器上分配编译,而且还在已安装distcc的场中的其他机器上分配编译。