我一直在编译一个“.c / .c ++”代码,需要1.5小时才能使用“make”命令在4核心机器上编译。我还有10台机器可用于编译。我知道“make”中的“-j”选项,它在指定数量的线程中分配编译。但是“-j”选项仅在当前机器上分配线程,而不是在网络中连接的其他10台机器上分配线程。
我们可以使用MPI或其他并行编程技术,但我们需要根据并行编程语言重写“MAKE”命令实现。
还有其他方法可以利用其他可用的机器进行编译吗? 感谢
答案 0 :(得分:5)
是的,有:distcc。
distcc是一个分发C或C ++代码编译的程序 网络上的几台机器。 distcc应该始终生成相同的 结果作为本地编译,易于安装和使用,并且经常 比本地编译快两倍或更多。
与其他分布式构建系统不同,distcc并不需要全部 机器共享文件系统,具有同步时钟或具有 安装相同的库或头文件。机器可以运行 不同的操作系统,只要它们具有兼容的二进制文件 格式或交叉编译器。
默认情况下,distcc会发送完整的预处理源代码 每个工作的网络,所以它需要志愿者机器 是他们运行distccd守护进程,他们有一个 安装了适当的编译器。
他们的关键是你仍然保留你的单一品牌,但gcc正确排列文件(在本地运行预处理程序,标题,...),但安排编译到网络上的目标代码。
我过去曾经使用它,它很容易设置 - 并且可以帮助您完全掌控自己的情况。
答案 1 :(得分:2)
https://github.com/icecc/icecream
冰淇淋是由SUSE根据distcc创建的。与distcc一样,Icecream从构建中获取编译作业,并将其分发到允许并行构建的远程机器中。但与distcc不同,Icecream使用一个中央服务器,可以将编译作业动态调度到最快的免费服务器。这种优势主要用于共享计算机,如果您是x机器上的唯一用户,则可以完全控制它们。