2017-08-01 71 views
0

我正在用Visual Studio编译大约100个C++项目的大型解决方案。在编译过程中,内存,CPU,磁盘和以太网都不会使用到接近100%的任何地方(根据任务管理器性能选项卡)。 CPU通常低至25%,内存磁盘利用率似乎低至5-10%。为什么在Visual Studio编译过程中某些资源不能达到100%?

因此,如果没有资源被100%利用,瓶颈是什么?什么限制了我的编译速度?我真的希望它是CPU。但它似乎不是。

我可能测量不正确?编译时我应该期望什么是限制性资源?我怎样才能加快速度?如果还有其他限制(比如RAM,但是通过缓存或其他方式进行I/O),那么测量瓶颈的正确工具/方法是什么?

附加信息:我当然使用并行项目最大数目来构建 = 8.还汇编所有Visual C++的项目被使能的多处理器。我的机器有8个逻辑处理器。所以我真的认为我不只是最大化一个核心。这将在我的机器上表现为12.5%的使用率(我通常会看到单线程应用程序)。

+0

https://i.imgur.com/CRLzESV.png –

+0

4核机器上的25%可能意味着一个内核已被占用。您是否启用了[多处理器编译](https://blogs.msdn.microsoft.com/vcblog/2017/02/14/vcpkg-recent-enhancements/)或[here](https://msdn.microsoft.com/ EN-US /库/ bb385193.aspx)? –

+1

我刚刚尝试用一些100个文件重建一个C项目。花了25s。多处理器选项没有太大影响(低于5%)。在我的8核心机器上,4个核心处于活动状态,但其中没有一个接近100%。整体利用率保持在25%左右。所以,你的问题是有道理的。 –

回答

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/

大问题。

+0

它是8核心。所以25%不是来自单个核心的最大化。并行构建已启用(8),并启用了多线程编译。所以我不认为就是这样。 – Wyck

0

内存不太可能成为编译的瓶颈。通常这是CPU密集型的过程。事实上,您的CPU使用25%而不是100%,这可能表示您的项目是使用1个内核按顺序编译的。

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

您可能会发现连接到类似主题我recent question的截图,但相反的问题 - 在并行,而不是太少:)

+0

并行构建肯定启用。设置为8.也启用了多线程编译。所以它不是四分之一的单线程事物。 – Wyck

1

只设置编译并行运行的所有项目,你只得到太多的事情与@VasiliyGalkin相同的结果,你的设置工作太多。

但由于VS编译每个项目的方式,您需要一定的重叠,因此根据您运行的实际PC,将并行项目的数量限制为2-3。如果你的电脑是拥有16核以上的怪物,你可能会去1-2。由于VS中的其他限制,您可能会对结果感到高兴或发现它没有完全使用您的CPU。

This文章深入分析了为什么它的速度很慢,结论是你需要设置你的编译来适应VS的世界观。

文章的简要

我猜你的设置是一样的东西

多进程编译过

给你以下性能

enter image description here

设置它并设定

启用最少重建关

给你

enter image description here

还有一个项目,因为你的单位你的编译时间是这样

enter image description here

由于不同的编译标记/预编译头文件,请参阅文章以获取更多信息。修复它可以让你像

enter image description here

和3进展对方

enter image description here

后,现在增加最大项目2或3使用的所有能力。

理想情况下,VS应该提供使用X线程的选项,这样问题就会消失,因为没有更多的线程开始使用,而且只有在有空闲资源时才会从下一个项目中选择下一个任务。

相关问题