Visual Studio 2010對并行計(jì)算的支持
軟件是運(yùn)行在硬件之上的。當(dāng)硬件發(fā)展了,軟件也要做相應(yīng)的變化,才能跟上時(shí)代的步伐。面對多核時(shí)代的到來,軟件世界的并行計(jì)算開始興盛起來。如何更加充分地利用CPU的多個(gè)核心?如何發(fā)揮多核的威力,帶來軟件性能上的提升?如何改造現(xiàn)有的程序,讓她更好地適應(yīng)多核時(shí)代?如何簡便地實(shí)現(xiàn)并行計(jì)算,使自己開發(fā)的應(yīng)用程序充分地利用硬件升級所帶來的性能提升?這些問題,無不困擾著我們這些多核時(shí)代的程序員們。
現(xiàn)在嶄新的Visual Studio 2010為我們帶來了完整的并行計(jì)算解決方案,讓我們可以從容面對多核時(shí)代的到來。
天下不再有“免費(fèi)的午餐”
在以往的計(jì)算機(jī)發(fā)展歷史中,硬件技術(shù)的發(fā)展,特別是CPU頻率的不斷提高,總是給軟件帶來免費(fèi)的性能提升。從386到586,從賽揚(yáng)到奔騰,每次CPU頻率的提升,都帶來軟件性能的大幅提升,而軟件無需做任何變動(dòng)。如果有客戶抱怨你的軟件性能不佳,我們無需著急,只需要坐等Intel或者AMD推出更高頻率的CPU就可以了。程序員們把這形象地稱為“免費(fèi)的午餐”。
圖1,多核時(shí)代
當(dāng)單核CPU的頻率發(fā)展到3G之后,再往上發(fā)展就遇到了技術(shù)瓶頸,單核心CPU的發(fā)展已經(jīng)到達(dá)一個(gè)極限,硬件廠商不得不轉(zhuǎn)而向多核芯CPU發(fā)展,在一顆芯片中加入兩個(gè)甚至多個(gè)運(yùn)算核心,通過核心的增加,來提高芯片總的頻率。雖然在硬件廠商看來,這仿佛是一個(gè)創(chuàng)舉,但是卻給軟件廠商帶來了無盡的煩勞。程序員們發(fā)現(xiàn),進(jìn)入多核時(shí)代后,這種“免費(fèi)的午餐”再也沒有了。這其中最主要的原因就是當(dāng)前的應(yīng)用程序幾乎都是針對一個(gè)運(yùn)算核心而設(shè)計(jì)的,當(dāng)硬件通過增加運(yùn)算核心來提高性能時(shí),由于受到其架構(gòu)的影響,軟件并不能充分地利于多個(gè)運(yùn)算核心所帶來的性能提升,甚至有的時(shí)候性能還有所下降。在這種情況下,開發(fā)者不得不改變應(yīng)用程序的架構(gòu)和開發(fā)方法,以應(yīng)對這種多核的趨勢,使得自己的軟件可以充分利于硬件升級所帶來的性能提升。開發(fā)者希望有一個(gè)工具能夠幫助他們分析應(yīng)用程序中的性能瓶頸,能夠簡便地將現(xiàn)有的業(yè)務(wù)邏輯并行化處理,從而更好地利用硬件,提升軟件的性能。面對這樣的需求,作為下一代開發(fā)平臺,Visual Studio 2010加大了對并行運(yùn)算的支持。微軟正在使得盡量大的范圍內(nèi)的開發(fā)者都能高效而簡便地進(jìn)行并行計(jì)算的開發(fā),不管他使用的是非托管代碼還是.NET Framework。從而將開發(fā)者從繁瑣而復(fù)雜的多線程開發(fā)中解放出來,將更多的精力放到業(yè)務(wù)邏輯上。在Visual Studio 2010中,我們將看到:
• Visual Studio IDE對并行計(jì)算開發(fā)的大量支持。比如,Visual Studio 2010的調(diào)試器知道代碼的并行特性,并且能夠在調(diào)試程序的不同執(zhí)行單元的時(shí)候,表現(xiàn)應(yīng)用程序的狀態(tài)。
• 非托管的C++庫和編譯器對并行計(jì)算的支持
• .NET Framework 4.0對并行計(jì)算的大量支持,包括PLINQ、并行語言語句等等
另外,Visual Studio 2010還提供了一個(gè)“并行性能分析器”,它可以幫助我們分析應(yīng)用程序的性能瓶頸,找到需要并行處理和可以進(jìn)行并行處理的地方,并以圖形化的形式表現(xiàn)出來。這樣,“并行性能分析器”配合著Visual Studio 2010,我們就可以輕松地實(shí)現(xiàn)應(yīng)用程序的并行化。
微軟的面對并行計(jì)算的解決方案
面對多核時(shí)代的到來,最為全球最大的軟件公司,微軟當(dāng)然不會(huì)坐著等天上掉餡餅。在上圖中我們可以看到,微軟為并行計(jì)算提供了完整的解決方案。
圖2,微軟對并行計(jì)算的支持
首先在開發(fā)工具上,在即將發(fā)布的Visual Studio 2010中,它提供了并行計(jì)算調(diào)試工具和性能分析工具,開發(fā)者可以利用這些工具輕松地完成應(yīng)用程序的并行化工作。在庫的層次上,針對非托管代碼,微軟提供了Parallel Pattern Library(PPL)和Agent Library,而對于托管代碼,微軟則在.NET Framework中提供了豐富的并行計(jì)算擴(kuò)展,其中包括Parallel LINQ(PLINQ), #p#page_title#e#Task Parallel Library(TPL)和Coordination Data Structures,在運(yùn)行時(shí)層次上,有使用非托管代碼開發(fā)應(yīng)用程序時(shí)可用的并發(fā)運(yùn)行時(shí)(Concurrency Runtime),也有托管代碼的任務(wù)調(diào)度器(Task Scheduler)。有了這些豐富的開發(fā)工具,函數(shù)庫和運(yùn)行時(shí)的支持,我們可以輕松地將合適的業(yè)務(wù)邏輯并行化,從而充分地利用多核心CPU的性能。
除了上文所提到的微軟應(yīng)對并行計(jì)算的解決方案,實(shí)際上,微軟在并行計(jì)算開發(fā)的整個(gè)生命周期,都提供了相應(yīng)的工具和Framework對其進(jìn)行很好的支持,從設(shè)計(jì)和建模到應(yīng)用程序的調(diào)試,從應(yīng)用程序的性能優(yōu)化到最后的性能驗(yàn)證。
圖3,完整的生命周期支持
總之,借助Visual Studio 2010所泰來的微軟并行計(jì)算解決方案,我們可以輕松實(shí)現(xiàn)軟件的并行化,充分利用多核CPU所帶來的性能提升,從而再次吃上“免費(fèi)的午餐”。