2015-12-11 137 views
2

这是一个理论问题。不同机器之间的拆分编译

比方说,我有1000台Raspberry Pi Zero计算机,我希望他们都能编译一个巨大的C++项目。我可以向每台机器发送一个源文件,以便编译所需的每个依赖项(头文件),并使本机仅编译一个单元以生成obj文件。在生成所有obj文件后,我需要将它们链接起来。我不确定我可以分割一个连接步骤,对我来说,它看起来像一个单一的过程,但我们可以说我有一个专用的强大的单机来做到这一点。

所以这个问题 - 它会在理论上起作用吗?我的项目编译速度会快1000倍吗?链接过程是否很重?与预处理器/编译步骤相比,需要多少时间?

+1

我们这样做(虽然与Raspberry Pi不同,但是具有全功能的计算机),并且每当需要重建巨大的代码库时,都可以加快编译速度。虽然不是1000x,但我们不使用那么多节点。此外,虽然我们使用一些家庭建立系统,但我不相信没有这种支持的标准构建系统存在。 – Petr

+1

是的,它们存在。我们使用IncrediBuild,但许可证实际上是昂贵的,正如我之前提到的,我的问题比理论更具理论性。 – nikitablack

回答

2

您可以使用诸如distcc之类的工具在多台计算机之间分配编译。你得到多少加速取决于你的特定项目(例如源文件的大小和复杂性,编译计算机的速度,网络延迟等)。您可以进行小规模测试并进行测量。

正如你所说,链接往往是一个单一的过程,可能是一个大型项目的瓶颈。另一种方法是将你的项目分成几个共享库。然后,每次进行小的更改时都不需要很大的链接步骤,但启动可执行文件可能会比较慢,因为必须在运行时执行某些链接。

如果对项目的几个部分进行更改,可以并行构建和链接这些库。

在编译与链接上花费多少时间取决于您的项目。

+0

是的,我看到了distcc项目,但自从上次更新源代码2年前完成后,我对此感到怀疑,我不确定它是否适用于现代编译器,但也许我错了。 – nikitablack

相关问题