编译AOSP
AOSP(Android Open Source Project)是由谷歌主导一个开源项目,旨在提供一个开放、可自由定制的Android操作系统版本。2021年10月,Google发布Android12,以android-12.0.0_r4为例,代码版本号30e228b,源代码约94GB,代码行数有约1.16亿行,加上注释和空行合计约1.5亿行。
完整编译AOSP项目需要花费大量的时间,据官网数据,使用 72 核机器,内置RAM为64GB,完整编译过程大约需要40分钟,而RAM大小相近的6核机器执行完整编译过程则需要3个小时。
编译LLVM
LLVM(Low Level Virtual Machine)是一个开源的编译器基础设施项目,它提供了一套用于构建编译器和相关工具的模块化和可扩展的框架。2023年6月最新代码版本号807adcf 仅代码近1000万行,加上注释和空行约1700万行。
LLVM是一个庞大而复杂的项目,编译它需要处理大量的源代码文件和执行多个编译任务。在8核心的物理机上完整编译LLVM需要30分钟,对于开发者来说,等待LLVM的编译完成可能会导致工作流程的延迟,特别是在频繁地进行代码修改和构建的情况下。开发者修改代码的时间相比于编译时间只占很小一部分,收到修改反馈的时间被大大延长,这严重影响了开发效率。
编译加速
对于这些规模庞大的软件项目,其编译过程需要较长的编译时间,消耗大量的计算资源,对开发和维护都是一项挑战。编译时间过长会对系统的开发和维护造成额外的负担,为提高编译效率,一方面是不断提高计算机硬件性能,另一方面是发展高效的编译技术。
为了满足软件系统的算力需求,传统的单核处理器逐步发展为单芯片多核
处理器,并行编译技术也应运而生。并行编译是指在一台计算机的多个处理器核心上同时执行编译任务,在编译过程中可以分配不同的编译任务给不同的处理器核心来并行执行。现代计算机通常具有多核处理器,使用并行编译方法可以充分利用多核心的计算能力,以获取更高的性能。
软硬件技术的发展,能够在一定程度上提高软件编译的速度和开发的效率,但随着软件项目规模几何级增长,项目需要更加庞大的编译资源,如内存、CPU 等。而面对日益庞大的软件规模,编译资源确显得捉襟见肘,一方面多核CPU价格高昂,另一方面,当编译项目规模庞大时,也容易出现单机满载的情况。因此,单纯的并行编译无法有效满足大规模软件的编译需求。
分布式编译技术的诞生可以在并行编译的基础上进一步提升编译效率。