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.anti-gravitydesign.com