【问题标题】:Compile programs on multicore or distributed system在多核或分布式系统上编译程序
【发布时间】:2010-12-30 07:17:31
【问题描述】:

Linux 中是否有任何软件可以在多核或分布式系统上并行编译包含大量文件的源代码。像 gcc 或 xserver 这样的库在单核/双机上编译需要很长时间,而且在大多数情况下,当您需要大量重新编译时,这会令人沮丧。是否有任何技术可以并行编译此类源代码?

【问题讨论】:

标签: linux makefile


【解决方案1】:

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

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

$ make -j

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

$ make -j8

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

【讨论】:

  • AFAIK 有两个关于“工作数量”的学校。一个是 n+1,另一个是 2n,其中 n 是核心数。两者的基本原理是,一旦一个线程完成,总会有一个线程在等待......就我个人而言,无论我将 -j5 还是 -j8 放在四核上,我都没有看到真正的区别
  • 我也没有看到 n+1 或 2n 在多核上的好处,但我也没有看到它们的性能下降太多。我怀疑你没有从这些选项中获得所有好处 b/c make 没有设置内核或套接字的亲和力,但我还没有真正测试过这个(我什至没有检查过 make设置亲和力,但我敢打赌它不会)。
  • 构建通常是 IO 绑定的。处理大量小文件意味着将大量数据移入和移出磁盘……另外,fork 在 linux 上很便宜,但它们确实会花费一些东西,这会导致不可扩展。最后,递归 make 和其他糟糕的 makefile 做法会窃取很多
【解决方案2】:

ccache也可以用来加速编译过程

【讨论】:

  • ccache 只有在您经常需要重建相同的工件时才真正受益,如果您确实需要这样做,那么您的构建系统一开始就是缺陷。
【解决方案3】:

GNU make(安装在 Linux 系统上的标准 make)支持并行命令执行 - 看看 http://www.gnu.org/software/make/manual/make.html#Parallel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多