C++如何限制visual studio多处理器编译

Pha*_*ino 16 c++ visual-studio

每次我使用visual studio进行编译时,我的计算机的其余部分都会爬行,因为visual studio正在占用所有处理器.有没有办法限制visual studio正在使用的处理器数量,所以我仍然可以在编译期间完成一些工作?

顺便说一下,我正在使用visual studio 2013和2015以及用C++编程.

谢谢!

Eri*_*ill 15

如果您有一个包含大量.cpp文件的单个C++项目并且您不希望同时进行8个构建,则设置"最大并行项目构建数"不是答案.要控制它,请转到" 工具" >" 选项" >" 项目和解决方案" >" VC++项目设置",然后在" 构建"部分中,将" 最大并发C++编译"设置为要并行编译的最大.cpp文件数.默认设置显示为0,这显然表示没有最大值.我有4个内核/ 8个线程,并将此值设置为4,VS现在一次只编译4个文件而不是8个.

这些说明基于Visual Studio 2017,但我认为对于一些版本来说就是这种方式.

设置最大并发C++编译

  • 是的,似乎是一个巨大的疏忽,您只能限制项目数量和每个项目的编译线程数量,但不能限制线程总数。 (3认同)
  • 恐怕这还不够,因为 VS 还并行化了项目构建(参见 Digital_Reality 的回答)。每个项目都会产生这个数量的 `cl.exe`。 (2认同)

Dig*_*ity 11

对于Visual Studio 2015,将" Maximum number of parallel project builds" 更改为所需的数字.(可能是你m/c中处理器数量的一半)

菜单>工具>选项>项目和解决方案>构建和运行.编辑价值.

  • 这似乎毫无意义。它限制了同时构建项目的数量,但它仍然可以一次启动 8 个 cl.exe 实例。因此,我在编译时得到 100% 的 CPU 使用率,而不是恒定的 100% CPU 使用率,而在链接时却非常低。 (3认同)
  • 更改“并行项目构建的最大数量”并没有帮助,因为一个项目中的 cpp 文件是并行编译的。我将此值设置为 1,但在构建期间我的 PC 上的 CPU 负载仍然是 100%。 (2认同)

Mik*_*ail 9

我找到了一个真正适合我的解决方法。手动限制 VS 进程的亲和性。打开任务管理器,转到详细信息选项卡,右键单击devenv.exe,选择“设置关联”。在对话框中取消勾选几个核心。就是这样。所有衍生的cl.exe进程都将继承亲缘关系,因此不会在未勾选的核心上运行。

在此处输入图片说明 在此处输入图片说明

另外,去为 Visual Studio 的功能请求投票:https : //developercommunity.visualstudio.com/content/idea/436208/limit-cpu-usage-of-visual-studio.html


小智 6

供 C++ 使用

*msbuild /p:CL_MPCount=X 
Run Code Online (Sandbox Code Playgroud)

其中 X 是编译器驱动程序的编号。我在编译 Tensorflow 源代码时使用它来限制 CPU 利用率。

阅读更多细节:ms's blog on vs2010 c++ parallel building


O'R*_*ney 5

更优化的答案来自 Mikhail Virovets,网址为 https://developercommunity.visualstudio.com/comments/497084/view.html

将编译器进程优先级降低到正常以下。这意味着它将使用尽可能多的 CPU,但不会干扰您尝试使用的其他内容。

定义一个注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cl.exe\PerfOptions
Run Code Online (Sandbox Code Playgroud)

然后创建一个名为 = 5 的 DWORD 值CpuPriorityClass(5 表示“低于正常值”)。

请注意,这会影响所有名为“cl.exe”的进程。