在手臂2分钟内加速LLVM / CLANG

2021-05-13 08:07:19

在发布和分享上一篇关于IRC上的朋友后的工具链,我被问到我是否想尝试在160核心手臂机上做同样的事情。摘掉我的答案是留给读者的练习:-)

系统i' m使用此实验是bm.standard.a1.160来自Oracle云的裸金属,它具有双插座主板,具有两个80cores Ampere Altra CPU,总共160个核心,1024 GB ofram。这是我所知的最佳AARCH64 ServerMachine此时。

Uname -Alinux Benchmarks 5.4.17-2102.201.3.el8uek.aarch64#2 SMP Fri 4月23日09:42:46 PDT 2021 AARCH64 AARCH64 AARCH64 GNU / LINUX

不幸的是,软件包存储库中可用的CMake版本(3.11.4)太旧,无法构建LLVM GIT存储库的主分支,也可以使用Ninja Isnot。

git clone https://github.com/netbsd/pkgsrc.git cd pkgsrc / bootstrap。/ bootstrap --make-作业= 160 - 不平等===> Bootstrap启动:5月12日星期三12:23:34 GMT 2021 ===> Bootstrap结束:5月12日星期三12:26:08 GMT 2021

关于链接器,我们正在使用Binutils 2.30和LLD 10.0.1的GNU LD和GNU Gold。

对于所有以下运行,i' m建筑物从git存储库主分支机构cf4610d27bbb5c3a744374440e2fdf77caa12040404040404040404040每个运行之间的构建目录是完全删除的。

我不确定底层的存储是什么,但有1 TB的RAM没有理由不使用ramdisk。

CD LLVM-Project MKDIR构建CD BuildCmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = seleels \ -dllvm_enable_projects = clang \ ../lamvm time make -j160real 7m3.226suser 403m28.362ssys 6m41.331s

默认情况下,CMake会生成makefiles。如在&#34中的文件;入门LLVM系统"教程,大多数LLVM开发人员使用Ninja。

cmake -dcmake_c_compiler = clang \ -dcmake_cxxx_compiler = clang ++ \ -dcmake_build_type = -dllvm_enable_projects = clang \ -gninja ./llvm time ninja [4182/4182]链接Cxx可执行箱/ c-index-testreal 4m20.403suser 427m27.118ssys 7m2.320s.

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recely \ -dllvm_enable_projects = clang \ -dllvm_use_linker = gold \ -gninja ../llvm time ninja [4182/4182]链接Cxx可执行垃圾箱/ c-index-testreal 4m1 .062suser 427m1.648ssys 6m58.282s.

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recelety \ -dllvm_enable_projects = clang \ -dllvm_use_linker = lld \ -gninja ./llvm time ninja [4182/4182]链接Cxx可执行箱/ clang-scan-sup-deps-depsreal 3m58 .476Suser 428m3.807ssys 7m14.418s.

使用GNU黄金而不是GNU LD结果明显更快地构建,伴随着LLD刮掉了距离构建的几秒钟。

如果我们想要更快地构建,我们可以通过删除一些组件来妥协并开始剥离构建。

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recelay \ -dllvm_enable_projects = clang \ -dllvm_use_linker = lld \ -dllvm_targets_to_build =" aarch64" \ -gninja ../llvm time ninja [3195/3195]链接CXX可执行箱/ C-Index-Testreal 3M10.312Suser 326M54.898SYS 5M24.770S

Bin / Clang - intrint-targets注册目标:AARC64 - AARC64(小endian)AARCH64_32 - AARC64(小endian ILP32)AARC64_BE - AARC64(BIG ENDIAN)ARM64 - ARM64(小endian)ARM64_32 - ARM64(小endian ILP32)

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recelay \ -dllvm_enable_projects = clang \ -dllvm_use_linker = lld \ -dllvm_targets_to_build =" aarch64" \ -dclang_enable_static_Analyzer = Off \ -dclang_enable_arcmt = off \ -gninja./llvm time ninja [3146/3146]创建库symlink lib / libclang-cpp.soreal 3m6.474suser 319m25.914ssys 5m20.924s

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recelay \ -dllvm_enable_projects = clang \ -dllvm_use_linker = lld \ -dllvm_targets_to_build =" aarch64" \ -dclang_enable_static_Analyzer = Off \ -dclang_enable_arcmt = off \ -dllvm_build_tools = off \ -dllvm_build_utils = off \ -gninja ./lyvm time ninja [2879/2879]创建库symlink lib / libclang-cpp.soreal 2m59.659suser 298m47.482ssys 4m57.430s.

与以前的构建相比,以下二进制文件未构建:FileCheck,Count,LLI-Child-Target,LLVM-JITLINK-EXECUREL,LLVM-PESTERSHUFFLE,NOT,OBJ2YAML,YAML2OBJ和YAML-BECH。

我们在这里达到了我们的旅程结束。在这一点上,我们戴上事物。

cmake -dcmake_c_compiler = clang \ -dcmake_cxx_compiler = clang ++ \ -dcmake_build_type = recelay \ -dllvm_enable_projects = clang \ -dllvm_use_linker = lld \ -dllvm_targets_to_build =" aarch64" \ -dclang_enable_static_Analyzer = OFF \ -dclang_enable_arcmt = off \ -dllvm_build_tools = off \ -dllvm_build_utils = off \ -dcmake_cxx_flags_release =" -O0" \ -gninja ../llvm time ninja [2879/2879]链接CXX可执行箱/ C-Index-testreal 2m37.003suser 231m53.133ssys 4m56.675s 因此,这台机器可以构建完整的LLVM / CLANG释放构建INA少于四分钟,并在两分钟内使用优化的剥离压缩。 2分钟。 这绝对是令人兴奋的......未来现在!