gpt4 book ai didi

multithreading - GNU make-如何模拟多个同时作业

转载 作者:行者123 更新时间:2023-12-03 13:04:00 25 4
gpt4 key购买 nike

我知道为了允许make多线程,我使用了make --jobs=X命令,其中X通常等于内核数(或者两倍或更多)。

我正在调试一个makefile-实际上包含许多makefile-与--jobs=X选项一起使用。这是为什么当前不这样做的一个示例:

T1:
mkdir D1
output_makefile.bat > ./D1/makefile
T2:
cd D1
make

使用 --jobs=X执行此操作将导致争用情况,因为未将 T1指定为 T2的依赖项,并且最终 T2将在 T1之前构建;我需要修复的大多数错误都是这种错误。

如果 X中的 --jobs=X大于逻辑或物理数量?核心,同时执行的作业数量将以“逻辑或物理”数量为上限。核心。

我的机器具有4个物理/8逻辑内核,但是将要运行我们的构建的构建计算机将具有多达64个内核。

因此,我担心仅仅因为我的makefile(a)正确构建了最终输出(b)在具有 --jobs=4的计算机上运行没有错误并不意味着它会在64核计算机上正确运行并且在 --jobs=64上没有错误。

是否有一个工具可以模拟在内核比物理机多的环境中执行的make

如何创建一个具有64核的虚拟机并在我的4核计算机上运行它? VMPlayer甚至允许吗?

更新1

我意识到我对 make的理解是不正确的: job slots make创建的数量等于 --jobs=N参数,而不是我的PC拥有的内核或线程的数量。

但是,这本身并不一定意味着 make也将并行执行那些作业,即使我通过使用任务切换而内核比作业少时也是如此。

我需要确认所有作业都是并行执行的,而不仅仅是“排队”并等待 Activity 执行的作业完成。

因此,我创建了一个包含16个目标的makefile-超过了我拥有的线程数或内核数-每个配方仅对目标名称 echos进行了可配置的次数设置。

make.mk
all: 1 2 3 4 ... 14 15 16

<target X>:
@loop_output.bat $@

loop_output.bat
@FOR /L %%G IN (1,1,2048) DO @echo (%1-%%G)

输出将是这样的
(16-1)   <-- Job 16
(6-1400)
(12-334)
(1-1616) <-- Job 1
(4-1661)
(15-113)
(11-632)
(2-1557)
(10-485)
(7-1234)
(5-1530)

格式为 Job#X-Echo#Y。我在 (1-1616)之后看到 (16-1)的事实意味着 make确实与目标 16同时执行了目标 1

另一种选择是, make完成作业(1-#of内核/线程),然后再执行另一个等于#num内核/线程的作业,但这不是正在发生的事情。

最佳答案

参见我的“UPDATE 1”:

不需要特殊的软件或make技巧。无论您拥有多少内核,Make都会通过产生多个进程并使OS与其他进程一样多任务来真正并行地执行作业。

Windows PITFALL #1: The version of Gnu Make available on SourceForge is 3.81 which does NOT have the ability to even execute using --jobs. You'll have to download ver 4.2 and build it.



>

Windows PITFALL #2: make 4.2 source will fail to build because of some header that VS2008 (and older) doesn't have. The fix is easy: you have to replace the invocation of the "symbol not found" with its macro equivalent; it should be obvious what I'm talking about when you try to build it. (I forgot what the missing symbol was).

关于multithreading - GNU make-如何模拟多个同时作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734959/

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