我在 Debian 9 上使用 Ninja 1.8.2 来使用 llvm-5.0 构建 llvm-6.0。
当我检查系统的CPU使用率时,我发现CPU并没有100%使用,而且还有足够的内存。
检查 cmake 的输出后,我发现它将并行链接作业限制为 2 个,因为在我的机器上运行的 llvm 也是并行运行的。
我想尝试解除该限制是否会使我的构建速度更快,但几乎没有任何相关文档。
编辑:
我检查了构建目录中的rules.ninja 文件的内容,并发现了这些:
#############################################
# Pools defined by global property JOB_POOLS
pool link_job_pool
depth = 2
Run Code Online (Sandbox Code Playgroud)
我还检查了 build.ninja 的内容并发现了这一点:
build lib/libLLVMDemangle.a: CXX_STATIC_LIBRARY_LINKER__LLVMDemangle lib/Demangle/CMakeFiles/LLVMDemangle.dir/ItaniumDemangle.cpp.o
LANGUAGE_COMPILE_FLAGS = -Ofast -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -std=c++1y -Wal l -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wcovered-switch-default -W non-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fcolor-diagnostics -ffunction-sections -fdata-sections -flto=thin -O3 -D NDEBUG
OBJECT_DIR = lib/Demangle/CMakeFiles/LLVMDemangle.dir
POST_BUILD = :
PRE_LINK = :
TARGET_FILE = lib/libLLVMDemangle.a
TARGET_PDB = LLVMDemangle.a.dbg
pool = link_job_pool
Run Code Online (Sandbox Code Playgroud)
似乎其他用于链接的命令都有 arg pool。
将我的评论变成答案
默认情况下, ninja没有链接阶段限制。但ninja允许定义池来“分配一个或多个规则或边缘有限数量的并发作业,这比默认并行性受到更严格的限制”。
由于llvm使用cmake生成构建环境,我检查了那里的CMake 代码:
Run Code Online (Sandbox Code Playgroud)if(NOT LLVM_PARALLEL_LINK_JOBS AND uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") message(STATUS "ThinLTO provides its own parallel linking - limiting parallel link jobs to 2.") set(LLVM_PARALLEL_LINK_JOBS "2") endif()
LLVM_PARALLEL_LINK_JOBS因此,您可以从命令行覆盖/预设缓存变量:
> cmake -DLLVM_PARALLEL_LINK_JOBS=<your number of parallel link jobs here> ..
Run Code Online (Sandbox Code Playgroud)
参考
| 归档时间: |
|
| 查看次数: |
3875 次 |
| 最近记录: |