Visual Studio 2010中C++并行构建调优(3)

发表于:2010-03-25来源:作者:点击数: 标签:StudioVisualvisualstudio构建
Visual Studio 2010中C++并行构建调优(3) 软件测试 本文将讨论的是Visual Studio 2010中C++并行构建调优,着重要谈的是MSBuild这样一个平台的主要功能。 并行数量太多了也不好 一般来说,利用完所有处理器或处理器核心就已经足够了,否则可能会导致机器变慢

  Visual Studio 2010中C++并行构建调优(3)   软件测试 

    本文将讨论的是Visual Studio 2010中C++并行构建调优,着重要谈的是MSBuild这样一个平台的主要功能。

  并行数量太多了也不好

  一般来说,利用完所有处理器或处理器核心就已经足够了,否则可能会导致机器变慢甚至崩溃,下图就显示了这样一个例子。

太多的并行构建进程很容易让机器崩溃

  图 15 太多的并行构建进程很容易让机器崩溃

  我是在一台8 CPU的机器上做的这个实验,我把解决方案中的所有项目全部开启/MP了,然后使用msbuild.exe /m进行构建(我使用命令行进行构建不会出现这个问题,但在Visual Studio中进行构建就会出现),如果相关依赖不能阻止它,MSBuild将立即启动8个项目,每个CL将会一次运行自己的8个实例,因此总共会有64个CL运行考验我们的处理器核心和磁盘,这样做不但不能提升速度,反倒会使性能急剧下降。

  你可能希望有一天系统能够实现自我调整,但如果现在遇到这样的问题,你不得不手工调整。下面是一些建议:

  ◆将全局值设小一点

  例如将/m:4减少到/m:3,或使用属性表将/MP修改为/MP2,如果你的构建中还有其它问题,如有许多的并行项目,但并行的CL不够,反之亦然,这个时候你都应该将全局并行构建参数调小。

  ◆为每个项目和配置调整/MP

  有些时候使用/MP可能不是最佳的办法,你也可以通过配置进行调整,Retail配置可能会使速度变得更慢,因为编译器要做的优化更多了,为Retail开启/MP而不是为Debug开启/MP可能更有意义。

  ◆获得超级定制

  在你的团队中,你可能有一系列硬件,也许你的开发人员使用的是双CPU机器,但夜间构建是在一台8 CPU的机器上进行的,两者构建时需要的来源是一样的,你希望两者的速度都不能太慢,在这种情况下,你可以使用环境变量,或是在MSBuild标签上设置条件,几乎所有MSBuild标签都可以设置条件。

  下面是一个例子,当“MultiprocCLCount”有一个大于零的值时,就可以使用这个值启用/MP。

通过环境变量调整处理器数量

  图 16 通过环境变量调整处理器数量

  MSBuild启动时将所有环境变量的值作为初始属性值,因此在我更快速的机器上,我将MultiprocCLCount的值设为8,而在我的开发用机上,我将其设为2。

  类似的方法还可以应用到MSBuild.exe的/m参数中,如/m:%MultiprocMSBuildCount%,

  在外来条件中还有其它属性可能很有用,如$(Number_Of_Processors)表示逻辑处理核心数量,它来自环境变量。$(MSBuildNodeCount)是传递给msbuild.exe /m参数的值,在Visual Studio中,这个值是通过“工具”*“选项”进行设置的。

  最后,我希望你能有效利用/m和/MP。希望你对我介绍的MSBuild功能能进一步深入学习,最好自己动手配置一次。

原文转自:http://www.ltesting.net