为什么在Visual Studio编译过程中,某些资源没有达到100%的最大利用率?

6
我正在使用Visual Studio编译一个大约包含100个C++项目的解决方案。在编译过程中,根据任务管理器性能选项占用率显示,内存、CPU、磁盘和以太网都没有达到接近100%的使用率。CPU占用率通常仅有25%,而内存磁盘利用率似乎只有5-10%。
那么如果没有任何资源使用率达到100%,是什么成了瓶颈?是什么限制了编译速度?我最初的想法是CPU,但现在看来并不是这样。
我可能测量错误吗?在编译过程中,应该期望哪种资源是限制因素?如何加快编译速度?如果存在其他限制因素(例如通过缓存等I/O的RAM),则正确的工具/方法是什么来测量瓶颈?
附加信息:我肯定使用了“最大并行构建项目数”= 8。所有Visual C++项目均启用了“多处理器编译”。我的机器有8个逻辑处理器,因此我真的认为我不仅仅是最大化一个核心的使用。这将在我的机器上呈现出12.5%的使用率(我经常在单线程应用程序中看到这种情况)。

1
https://i.imgur.com/CRLzESV.png - Grady Player
在4核机器上的25%可能意味着一个核心已经完全占用。您是否启用了多处理器编译此处 - Axel Kemper
1
我刚刚尝试重新构建一个由大约100个文件组成的C项目。这个过程花了25秒。多处理器选项对性能没有太大影响(不到5%)。在我的8核机器上,只有4个核心处于活动状态,但是没有一个核心接近100%的利用率。整体利用率保持在25%左右。所以,你的问题是合理的。 - Axel Kemper
我的机器是8核的。并行构建和多线程编译确实已启用。请查看我的“附加信息”。 - Wyck
3个回答

1

就内存而言,也许您的应用程序不会使用太多内存。

至于CPU使用情况,您的程序可能在一个线程上工作,或者更具体地说,在CPU的一个单独核心上工作;

因此,如果您有四核CPU,则应用程序不会使用超过25%的资源。

至于网络使用情况,我认为任务管理器显示计算机的以太网能力,因此您的网速可能为10 Mb / s,但您的以太网的速度为50 Mb / s。

这是我刚查找的链接:https://askleo.com/why_wont_my_program_use_more_than_25_of_the_cpu/

好问题。


它有8个核心。因此,25%并不是来自单个核心的最大化。并行构建已启用(8),多线程编译也已启用。所以我认为不是这个问题。 - Wyck

1

只是将编译设置为并行运行所有项目,您将获得与@VasiliyGalkin相同的结果,对于您的设置来说工作量太大了。

但由于VS编译每个项目的方式,您需要一定的重叠,因此将并行项目的数量限制为2-3,具体取决于您运行它的实际PC。如果您的PC有16个以上的核心,则可以增加1-2个。您可能会对结果感到满意,或者发现它由于VS中的其他限制而无法充分利用您的CPU。

这篇文章深入分析了为什么速度慢,结论是您需要设置编译以适应VS对世界的看法。

文章简述如下:

我猜想您的设置类似于

关闭多进程编译

这将给您带来以下性能

enter image description here

将其设置为“on”并将

启用最小重建关闭

会给你

enter image description here

由于您的单元编译时间如此之长,因此仍需为一个项目进行优化。

enter image description here

由于不同的编译标志/预编译头,请参阅文章了解更多信息。修复它可以让你得到类似于以下内容:

enter image description here

并且这3个进程一个接一个地进行

enter image description here

现在添加最大项目2或3以使用全部容量。
理想情况下,VS应该提供一个选项来使用X线程,这样问题就会基本上消失,因为不会启动比可用的更多的线程,它只会在有空闲资源时从下一个项目中选择下一个任务。

0

内存很少会成为编译的瓶颈。通常这是一个CPU密集型的过程。你的CPU使用率只有25%而不是100%,可能表明你的项目是顺序编译,只使用了4个核中的1个。

尝试在Visual Studio菜单选项->项目和解决方案->生成和运行中检查“最大并行构建数”。

你可以在我的最近的问题中找到相关主题的截图,但问题相反——并行度太高而不是太低 :)


并行构建已经启用。设置为8。多线程编译也已启用。因此,它不是1个单线程的东西中的4分之1。 - Wyck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接