Visual Studio 2010中的多进程构建:值得吗?

4
我已经开始使用VS2010测试我们的C++软件,但是构建时间非常长(30-45分钟,大约是VS2005时间的两倍)。我一直在研究用于多进程编译的/MP开关。不幸的是,它与一些我们经常使用的功能(如#import、增量编译和预编译头)不兼容。
你是否有类似的项目,在关闭预编译头等功能后尝试使用/MP开关?你的构建速度更快了吗?
我的机器运行64位Windows 7,有4个核心和4GB的RAM以及快速的SSD存储。病毒扫描程序已禁用,并且软件环境相当简洁。
编辑:Martin和jdehaan指出,MP与预编译头并不不兼容。详情请参见此处

2
我从未成功使用预编译头文件,但是使用 /MP 在 Core i7 上加速了大约 5 倍(四核心超线程)。 - Michael Myers
你是否正在使用预编译头文件?你的库在构建之间是否会更改?你是否比必要的更频繁地重新构建任何内容? - Guy
4个回答

3
你确定pch与/MP不兼容吗?
你可以在vs2008上使用pch进行多核构建(尽管奇怪的是只能在IDE内而不是命令行中进行)。

1
你是对的,pch 不应该有任何问题。它在第一个非 MP 步骤中创建,并且在每个编译单元的整个构建过程中都是只读的。 - jdehaan
谢谢澄清。我再次阅读了http://msdn.microsoft.com/en-us/library/bb385193.aspx,并注意到此时MP与创建pch不兼容,而不是使用它。所以Martin和jdehaan是绝对正确的。 - criddell

2

我个人的经验是使用VS2005和VS2008。对于我们的大型项目,我们关闭并行构建,因为它不能可靠地工作。同时,在这两个版本中启用PCH可以带来很好的性能优势。虽然如果你在VS2008中不使用PCH,与VS2005相比,编译时间会非常长。但我不知道这些在VS2010中有多少相关性。

编辑:我们在VS2010中遇到了同样的问题...但是后来我们从WinXP升级到Win7,所有的Visual Studio问题都消失了,包括稳定性和性能。在我的先前的回答中,并行构建是指msbuild项目并行性,并且这里的“大型”是指大型解决方案。


Chris,请您详细说明一下您的答案好吗?我们正在研究/MP开关,并试图找出它是否会影响Visual C++在构建时的“稳定性”。您写道:“我们关闭并行构建”--您是指项目并行性,还是实际上指由/MP标志指定的编译器并行性? - Martin Ba
当您说“不适用于大型项目”时,是指具有许多项目的解决方案中的“大型”,还是指单个vcproj项目包含大量cpp文件的“大型”? - Martin Ba
@MartinBa:我编辑了我的回答,希望能对你的问题有所帮助。 - Chris O
谢谢,这真的很有帮助。有趣的是,我们多年来一直在使用VS2005中的项目并行处理,而且从没有出现过任何问题(毕竟它是VS的默认设置,所以我们使用它,而且由于它没有破坏任何东西,所以它仍然存在)。另一方面,/MP不是默认选项,因此我们尚未在整个系统上使用它,但是我们正在研究它,因为它确实可以*加快速度。虽然我们曾经怀疑我们是否应该使用它,但从您的写作中得知,实际上是项目并行处理导致了您的问题,而不是/MP,而最后一个我们已经在使用了 :-) - Martin Ba

2
肯定是“是”。我曾经参与过一个大型应用程序的开发,在修改时构建需要大约35分钟(在Visual Studio中)。我们使用IncrediBuild来加速编译过程,从35分钟缩短到5分钟,这样可以真正实现分布式编译。在你的情况下,/MP开关可能会有所帮助,但与distcc(适用于Unix或兼容环境)或IncrediBuild相比,效果不会那么明显。

使用IncrediBuild需要35分钟?没有使用它的话,构建需要多长时间? - criddell
没有使用IncrediBuild时需要35分钟。使用IncrediBuild(使用15-20台计算机)大约需要5-6分钟(快了7倍)。我编辑了答案让它更加清晰。 - INS

1

对我们来说,使用IncrediBuild进行多机构建是值得的。因此,在单台计算机上进行多进程构建很可能是值得的。


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