在不同的机器之间拆分编译
Split compilation among different machines
这是一个理论问题。
比方说,我有1000台Raspberry Pi Zero计算机,我希望所有这些计算机都能编译一个巨大的C++项目。我可以向每台机器发送一个源文件,用它需要的每个依赖项(头)进行编译,并使这台机器只编译一个单元来生成obj
文件。生成所有obj
文件后,我需要将它们链接起来。我不确定我是否可以分割一个链接步骤,对我来说,这看起来像是一个整体的过程,但假设我有一台专用的强大的单机来完成
那么问题来了——它在理论上可行吗?我的项目编译速度会快1000倍吗?链接过程是否繁重?与预处理器/编译步骤相比需要多少时间?
您可以使用distcc等工具在多台计算机上分发编译。你能得到多少加速将取决于你的特定项目(如源文件的大小和复杂性、编译计算机的速度、网络延迟等)。你可以做一个小规模的测试并进行测量。
正如你所说,链接通常是一个单一的过程,可能是大型项目的瓶颈。另一种选择是将项目拆分为几个共享库。然后,您不需要每次进行小更改时都执行大的链接步骤,但启动可执行文件的速度可能会较慢,因为某些链接必须在运行时执行。
如果对项目的多个部分进行更改,则可以并行构建和链接这些库。
编译和链接所花费的时间取决于您的项目。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- C++将向量的向量拆分为向量的N个子向量
- 在线程之间拆分任务总是值得的吗?
- C++声明和定义之间拆分默认参数值
- 如何将字符串拆分为一组 3 个字符,它们之间有空格
- 如何在标题和CPP之间拆分静态/模板类
- 在空格之间拆分字符数组
- 如何在单独的 Boost.Python 模块之间拆分继承关系
- 在不同的机器之间拆分编译
- 函数重载在基类和派生类之间拆分的可见性
- 在几个函数之间拆分任务