如何在Visual Studio解决方案构建期间限制并行cl.exe进程的数量?

15
我最近注意到,一旦我开始构建我正在使用的Visual Studio解决方案(约200个C++项目),我会得到大量的cl.exe进程。 Task manager screenshot 我对并行运行多个cl.exe不感到惊讶,因为我的项目是使用/MP选项设置的。 Project settings in one of the projects 但是,我期望它们的数量将受到Visual Studio“选项”中以下设置的限制。 Visual Studio settings (Tools -> Options) 我认为在4核PC上并行运行数十个进程不是构建解决方案的最有效方式。
因此,基本上我有两个问题:
  • 为什么我会观察到这样的行为?
  • 是否可以限制cl.exe实例的数量?
P.S. 我通常使用Visual Studio 2013 Update 4编译我的解决方案,但是在Visual Studio 2017中也可以观察到相同的行为。

你正在并行构建8个项目。每个项目都是并行构建的。 - user2672107
@manni66 哦!好的,这回答了我的第一个问题。但我真的很好奇是否有可能限制总进程数,同时保持“/MP”选项(我经常需要构建单个或几个项目,其编译本身需要相当长的时间)。 - Vasiliy Galkin
限制并行构建的项目数量。尝试使用4个。 - user2672107
@manni66 坦白地说,这听起来更像是一种变通方法而不是解决方案。此外,它并没有太大的帮助 - 我的意思是,在解决方案构建期间的进程总数仍然是几十个。 - Vasiliy Galkin
那有什么不好的呢?只要它快就可以了,不是吗? - user2672107
@manni66,你的建议确实不错,谢谢。但同时,我来这里提出问题是希望学习是否有我不知道的通用解决方案,或者它是一个“已知问题”,只能通过解决方法来解决。 - Vasiliy Galkin
4个回答

6
为了限制cl.exe的数量,您应该使用此选项(至少在MSVC 2015中存在):
工具->选项->项目和解决方案->VC++项目设置\最大并发C++编译
默认情况下为零意味着“CPU数量”。

1
这个设置对我没有影响。cl.exe的数量增加到与处理器数量相等。当我将日志级别切换到详细时,我可以看到VS仍然只是传递一个简单的“/MP”而没有附加数字给cl.exe。(VS2015) - Mitten.O

5
我认为您需要阅读这篇文章,结论是您需要设置编译以适应VS的世界观。此外,在实际运行的PC上,将并行项目数量限制在2-3个之间。如果您的PC有16个或更多核心,您可能能够再增加1-2个。理想情况下,VS应该提供使用X线程的选项,但是遗憾的是没有这个选项。

嗯,我确实希望我只是忽略了一些VS设置来限制线程的总数,或者它可以以某种方式间接地完成。但无论如何,非常感谢您提供的链接,特别是在您回答另一个主题时对其进行了概述!(尽管我的希望似乎已经破灭了:)) - Vasiliy Galkin

2

确保您的项目中没有 /MP 开关。

然后设置最大并行项目构建将直接影响编译可执行实例的数量。

可能会更慢。 另一种选择是强制 Visual Studio/MSBuild 到特定的亲和性。这不会限制线程,但会为操作系统/其他程序保留一些备用核心。


-3
在“工具”菜单下,选择“选项”。然后在“项目和解决方案”下,构建和运行页面有一个字段“最大并行项目构建数”。

这正是我所拥有的,看最后一张截图。 - Vasiliy Galkin

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