gpt4 book ai didi

ninja - 如何消除 Ninja 对并行链接作业的限制?

转载 作者:行者123 更新时间:2023-12-04 01:57:15 31 4
gpt4 key购买 nike

我在 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

我还查看了 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

似乎其他用于链接的命令都有参数 pool .

最佳答案

把我的评论变成答案

没有来自 的链接阶段限制默认情况下。但是ninja允许定义 pools “为一个或多个规则或边缘分配有限数量的并发作业,这比默认并行性受到更严格的限制。”

用途 为了生成构建环境,我检查了 CMake 代码 there :

 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> ..

引用
  • Building LLVM with CMake: LLVM-specific variables
  • 关于ninja - 如何消除 Ninja 对并行链接作业的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49748783/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com