如何并行化“make”命令,可以在多台机器上分配任务

时间:2015-09-06 12:41:47

标签: compilation parallel-processing linux-kernel makefile gnu-parallel

我一直在编译一个“.c / .c ++”代码,需要1.5小时才能使用“make”命令在4核心机器上编译。我还有10台机器可用于编译。我知道“make”中的“-j”选项,它在指定数量的线程中分配编译。但是“-j”选项仅在当前机器上分配线程,而不是在网络中连接的其他10台机器上分配线程。

我们可以使用MPI或其他并行编程技术,但我们需要根据并行编程语言重写“MAKE”命令实现。

还有其他方法可以利用其他可用的机器进行编译吗? 感谢

2 个答案:

答案 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机器上的唯一用户,则可以完全控制它们。