詳解.NET 4.0并行計(jì)算支持歷史
本文將為大家總結(jié)從.NET 3.5到.NET 4.0并行計(jì)算支持歷史。并行計(jì)算大家應(yīng)該比較熟悉,.NET 4.0并行計(jì)算的使用能提升硬件利用效率。
#T#
在以往的計(jì)算機(jī)發(fā)展歷史中,硬件技術(shù)的發(fā)展,特別是CPU頻率的不斷提高,總是給軟件帶來更強(qiáng)的性能提升。從386到586,從賽揚(yáng)到奔騰,每次CPU頻率的提升,都帶來軟件性能的大幅提升,而軟件無需做任何變動(dòng)。如果有客戶抱怨你的軟件性能不佳,我們無需著急,只需要升級(jí)到更高頻率的CPU就可以了。當(dāng)單核CPU的頻率發(fā)展到3G之后,再往上發(fā)展就遇到了技術(shù)瓶頸,單核心CPU的發(fā)展已經(jīng)到達(dá)一個(gè)極限,硬件廠商不得不轉(zhuǎn)而向多核芯CPU發(fā)展,在一顆芯片中加入兩個(gè)甚至多個(gè)運(yùn)算核心,通過核心的增加,來提高芯片總的頻率。當(dāng)硬件通過增加運(yùn)算核心來提高性能時(shí),由于受到其架構(gòu)的影響,軟件并不能充分地利于多個(gè)運(yùn)算核心所帶來的性能提升,甚至有的時(shí)候性能還有所下降。在這種情況下,開發(fā)者不得不改變應(yīng)用程序的架構(gòu)和開發(fā)方法,以應(yīng)對(duì)這種多核的趨勢(shì),使得自己的軟件可以充分利于硬件升級(jí)所帶來的性能提升。
作為下一代開發(fā)平臺(tái),Visual Studio 2010加大了對(duì)并行運(yùn)算的支持。微軟正在使得盡量大的范圍內(nèi)的開發(fā)者都能高效而簡便地進(jìn)行并行計(jì)算的開發(fā),不管他使用的是非托管代碼還是.NET Framework。從而將開發(fā)者從繁瑣而復(fù)雜的多線程開發(fā)中解放出來,將更多的精力放到業(yè)務(wù)邏輯上。
Visual Studio IDE對(duì)并行計(jì)算開發(fā)的大量支持。Visual Studio 2010提供了一個(gè)“并行性能分析器”,它可以幫助我們分析應(yīng)用程序的性能瓶頸,找到需要并行處理和可以進(jìn)行并行處理的地方,并以圖形化的形式表現(xiàn)出來。
非托管的C++庫和編譯器對(duì)并行計(jì)算的支持
.NET Framework 3.5/4.0 對(duì)并行計(jì)算的大量支持,包括PLINQ、并行語言語句等等
本文討論的是.NET 3.5/4.0對(duì)并行計(jì)算的性能差別,采用的例子是Visual Studio 2010 Beta2 Training Kit 的Demo代碼. 在討論之前先回顧一下.NET 的并行組件:
由于并行計(jì)算是將一個(gè)工作任務(wù)進(jìn)行分解以并發(fā)執(zhí)行,因此,任何一個(gè)支持并行計(jì)算的軟件開發(fā)與運(yùn)行平臺(tái)都必須解決這些并發(fā)執(zhí)行的子任務(wù)之間的相互協(xié)作問題,比如:
一個(gè)子任務(wù)需要等待其它子任務(wù)的完成,多個(gè)子任務(wù)完成之后才允許執(zhí)行下一個(gè)子任務(wù)(即所謂fork-join),
一個(gè)子任務(wù)結(jié)束后自動(dòng)啟動(dòng)多個(gè)下級(jí)子任務(wù)的執(zhí)行
允許一個(gè)任務(wù)中途取消……
.NET 3.5/4.0通過對(duì)已有的基類庫進(jìn)行擴(kuò)充和增強(qiáng),滿足了上述需求。.NET 給 “System.Threading” 命名空間增加了一些新的類,同時(shí)對(duì)部分已有類也進(jìn)行了調(diào)整和優(yōu)化。另外,針對(duì)中途取消線程或作務(wù)執(zhí)行這一實(shí)際開發(fā)中非常普遍的需求,提供了一個(gè)統(tǒng)一取消模型。最大的變化是.NET為基類庫提供了多個(gè)與并行計(jì)算密切相關(guān)的類,并將它們統(tǒng)一稱之為“并行擴(kuò)展(Parallel Extensions)”。
.NET 3.5通過DevLabs發(fā)布了Reactive擴(kuò)展中包含的類庫為并行處理提供支持。Reactive擴(kuò)展目標(biāo)是簡化異步及事件驅(qū)動(dòng)程序的構(gòu)建,可參看InfoQ的文章微軟發(fā)布Reactive框架,簡化異步及事件驅(qū)動(dòng)編程。下述.NET 3.5的例子代碼的運(yùn)行要求下載Reactive擴(kuò)展。
先介紹一下我的機(jī)器配置,單CPU雙核:
下面的例子來自Visual Studio 2010 Beta2 Training Kit 的ParallelBabyNames:
.NET 3.5下的運(yùn)行結(jié)果:
.NET 4的運(yùn)行結(jié)果:
從上述例子的運(yùn)行結(jié)果來看,.NET 4的性能要比.NET 3.5要強(qiáng),.NET 3.5和.NET 4.0的并行處理能力支持上基本持平。
原文標(biāo)題:.NET 3.5-4.0 并行計(jì)算的支持
鏈接:http://www.cnblogs.com/shanyou/archive/2009/12/16/1625938.html