Linux 在多核或分布式系统上编译程序

Linux 在多核或分布式系统上编译程序,linux,makefile,Linux,Makefile,linux中是否有可以在多核或分布式系统上并行编译包含大量文件的源代码的软件。像gcc或xserver这样的库在unicore/dual机器上进行编译需要花费大量的时间,大多数情况下,当您需要大量重新编译时,这是令人沮丧的。有什么技术可以并行编译这样的源代码吗 在分布式内存系统上,您可以使用将编译作业分发给其他机器。这需要一点设置,但是如果你碰巧有一些额外的机器,它确实可以加快你的构建速度 在共享内存多核系统上,您可以直接使用,它将尝试根据makefile中的依赖关系生成构建作业。您可以这样运行

linux中是否有可以在多核或分布式系统上并行编译包含大量文件的源代码的软件。像gcc或xserver这样的库在unicore/dual机器上进行编译需要花费大量的时间,大多数情况下,当您需要大量重新编译时,这是令人沮丧的。有什么技术可以并行编译这样的源代码吗

在分布式内存系统上,您可以使用将编译作业分发给其他机器。这需要一点设置,但是如果你碰巧有一些额外的机器,它确实可以加快你的构建速度

在共享内存多核系统上,您可以直接使用,它将尝试根据makefile中的依赖关系生成构建作业。您可以这样运行:

$ make -j
这将对生成的作业数没有限制,或者您可以使用整数参数运行:

$ make -j8

这将限制并发生成作业的数量。这里,限制为8个并发作业。通常,您希望这与系统上的内核数量接近。

GNU make(安装在Linux系统上的标准make)支持并行命令执行-请看一下也可以用来加速编译过程相关:ccache只有在您经常需要重建相同的工件时才真正有用,如果你真的需要这样做,那么你的构建系统一开始就是有缺陷的。一个是n+1,另一个是2n,其中n是芯数。两者的基本原理都是,一旦一个线程完成,总有一个线程在等待。。。就我个人而言,我没有看到在四核上使用-j5或-j8的真正区别。我也没有看到多核上使用n+1或2n的好处,但是我也没有看到性能上的下降。我怀疑您没有从这些选项中获得所有可能的好处b/c make没有为核心或套接字设置关联性,但我还没有真正测试过这一点(我甚至没有检查make是否设置了关联性,但我打赌不会)。构建通常是IO绑定的。要处理大量的小文件意味着要在磁盘上来回移动大量数据。。。另外,在linux上,叉子是便宜的,但它们确实需要一些成本,这有助于不可伸缩性。最后,递归make和其他糟糕的makefile实践可能会窃取很多东西。