Makefile 在GNU Make进程之间划分可用的内核是一个好主意吗?
有没有人见过这样一种情况,运行Makefile 在GNU Make进程之间划分可用的内核是一个好主意吗?,makefile,gnu-make,Makefile,Gnu Make,有没有人见过这样一种情况,运行nGNU使每个进程 $ make -j <number of cores / n> $make-j 比使用所有工具运行它们都要快 $ make -j < number of cores> $make-j 让GNU来处理它。在我的实践中,我从未见过这样的效果,在我看来,做前者是毫无意义的。也就是说,也许有可能编造出具体的非实际例子,说明这种效应会发生,但在现实世界中,不可能 我的问题是,有人在他们的实践中看到过这样的效果吗 补充:当然,
n
GNU使每个进程
$ make -j <number of cores / n>
$make-j
比使用所有工具运行它们都要快
$ make -j < number of cores>
$make-j
让GNU来处理它。在我的实践中,我从未见过这样的效果,在我看来,做前者是毫无意义的。也就是说,也许有可能编造出具体的非实际例子,说明这种效应会发生,但在现实世界中,不可能
我的问题是,有人在他们的实践中看到过这样的效果吗
补充:当然,假设不同的进程彼此独立,并且可以在逻辑上同时运行
补充:问题不是:手动分区通常会更快吗。我知道答案是:不。问题是,它在实践中会发生吗?有人看见了吗
我尤其对疯狂科学家的答案感兴趣:)
这个问题的主题是StackOverflow,因为上面的行都在程序中,即GNU Make的包装器脚本。(是的,我知道这可能不会成功,但至少我尝试过:)如您所述,手动分区可能会产生强烈的负面影响:
- 如果单独的make进程之间没有同步,它们可能会试图同时重建相同的文件,这不仅会导致工作浪费,而且会由于被覆盖的垃圾输入而导致构建失败
- 即使您能够在没有任何重叠的情况下对整个依赖项链进行分区,在第一个分区完成后,您也会有空闲的CPU
- 将“更昂贵”的目标(即链接最多的二进制)放在依赖项列表的前面,以防止在末尾出现空闲CPU
- 包含包含缓存依赖项的生成的makefile,而不是每次运行时重新计算它们,即使它们没有更改
- 使用系统避免在源文件更改时间戳而不是内容时重建文件。我只是开始研究在这里什么是可能的