【问题标题】:Why isn't some resource maxed out to 100% during Visual Studio compile?为什么在 Visual Studio 编译期间某些资源没有达到 100%?
【发布时间】:2017-08-01 20:10:00
【问题描述】:

我正在使用 Visual Studio 编译一个包含大约 100 个 C++ 项目的大型解决方案。在编译期间,内存、CPU、磁盘和以太网都没有达到接近 100% 的利用率(根据任务管理器性能选项卡)。 CPU 通常低至 25%,内存磁盘利用率似乎低至 5-10%。

那么,如果没有 100% 的资源被利用,那么瓶颈是什么?是什么限制了我的编译速度?老实说,我希望它是CPU。不过好像不是。

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

附加信息:我确实使用最大并行项目数来构建 = 8。多处理器编译也启用了所有 Visual C++ 项目。我的机器有 8 个逻辑处理器。所以我真的认为我不只是最大化一个核心。这将在我的机器上显示为 12.5% 的使用率,(我经常在单线程应用程序中看到这种情况。)

【问题讨论】:

  • 4 核机器上的 25% 可能意味着一个核被完全占用。您是否启用了multiprocessor compilationhere
  • 我刚刚尝试用大约 100 个文件重建一个 C 项目。花了25秒。多处理器选项没有太大影响(低于 5%)。在我的 8 核机器上,有 4 个内核处于活动状态,但没有一个接近 100%。总体利用率保持在 25% 左右。所以,你的问题是有道理的。
  • 我的机器是8核的。并且确实启用了并行构建和多线程编译。请参阅我的“附加信息”。

标签: performance visual-c++


【解决方案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) 并启用多线程编译。所以我不认为是这样。
【解决方案2】:

只需将编译设置为并行运行所有项目,您就会得到与@VasiliyGalkin 相同的结果,您的设置工作量太大。

但由于 VS 编译每个项目的方式,您需要一定的重叠,因此将并行项目的数量限制为 2-3 个,具体取决于您运行它的实际 PC。如果您的 PC 是具有 16 个以上内核的怪物,您可能会上升 1-2 个。您可能会对结果感到满意,或者发现由于 VS 中的其他限制,它并没有完全使用您的 CPU。

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

文章简介

我猜你的设置类似于

多进程编译关闭

给你以下表现

将其设置为开启并设置

启用最小重建关闭

给你

仍然是一个项目,因为您的单元的编译时间是这样的

由于不同的编译标志/预编译头文件,请参阅文章了解更多信息。修复它会给你类似的东西

和3个级数接二连三

现在添加最大项目 2 或 3 以使用所有容量。

理想情况下,VS 应该提供使用 X 线程的选项,这样问题就会消失,因为启动的线程数不超过可用线程数,当有空闲资源时,它只会从下一个项目中选择下一个任务。

【讨论】:

    【解决方案3】:

    内存不太可能成为编译的瓶颈。通常它是 CPU 密集型进程。您的 CPU 用于 25% 而不是 100% 的事实可能表明您的项目是使用 4 个内核中的 1 个按顺序编译的。

    尝试在 Visual Studio 菜单 Options -> Projects and Solutions -> Build and Run 中检查“最大并行构建数”。

    您可能会发现我的recent question 所附的屏幕截图与类似主题相关,但问题相反 - 并行进行的太多而不是太少:)

    【讨论】:

    • 并行构建肯定是启用的。设置为 8。也启用了多线程编译。所以这不是 4 个单线程中的 1 个。
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2013-06-21
    相关资源
    最近更新 更多