999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

簡析C#多核并行編程

2017-03-10 03:02:06張文培宋玉貴潘錦莉
網絡安全技術與應用 2017年3期
關鍵詞:程序模型

◆張文培 宋玉貴 潘錦莉

?

簡析C#多核并行編程

◆張文培 宋玉貴 潘錦莉

(西安工業大學 陜西 710000)

隨著處理器多核化的不斷發展,計算機的硬件計算能力在不斷加強,軟件要充分利用計算機硬件技術帶來的好處,這就促成了并行計算成為軟件編程的主流。C#支持并行編碼,并且.NET Framework 4.0的并行擴展將并行編程的構造單元從線程提升到任務,極大程度地降低了編程難度,提升了編程效率。

多核;并行編程;任務;.NET

0 引言

多核處理器的出現使得傳統的串行編程模式無法利用多核、多處理器的優勢,隨著多核、多處理器平臺的出現,多核編程也得到了更深層次的發展,而現在并行編程技術的發展并不能完全利用多核的優勢,因而尋求新的并行編程技術是十分必要的[1]。

C#是.NET平臺中引入完全面向對象的編程語言,是C/C++的衍生語言,不但將C/C++的強大功能繼承下來,并且去掉了它們的一些復雜特性,是一種能快速高效地實現基于.NET平臺軟件開發的編程語言,且C#已經支持并發代碼,這對于實現C#多核并行編程是十分必要且有利的。

1 多核并行編程概述

1.1 多核環境

隨著社會數字化、信息化的不斷發展,對于計算機對數據的處理速度要求越來越快,在現代計算機技術的不斷發展下,多核處理器已經成為計算機的處理器的主流,現代計算機大多都至少有一個雙核的微處理器。

多核處理器是將兩個及其以上的具有完全功能的核心集成在同一個芯片上,并將整個芯片作為整體對外輸出[1]。多核處理器所集成的核心可以是單線程處理核心或多線程處理核心,集成后的多核處理器可同時執行的線程數或任務書是原本單處理器的數倍,這為處理器實現更高程度的并行提供了可能。并且,由于所有的核心都集成在片內,這就縮短了核心之間通信更高效,縮短核間的通信延遲,數據傳輸帶寬也得到了提高[2]。除此之外,由于多核處理器的集成性,功耗降低,提高了其片上資源的利用率。由于多核處理器結構簡單,易于優化,擴展性強,這些特點使得多核的發展并逐漸取代單處理器成為主流[3]。

1.2. 并行編程

傳統的串行代碼是順序執行,且只用一個處理器,但隨著現在多核的普及,串行程序無法充分利用多核的特點,這就促進了多核并行程序設計的出現。并行程序設計是指同時對多個任務、多條指令或多個數據項同時進行處理,是程序設計的一種形式,能夠充分利用底層硬件所提供的并行執行能力從而提高程序的運行效率。

并行程序設計的重點就是要找到程序中的并行性,盡可能降低由于并行化引起的開銷[4]。有時,并行化并不是優化算法的最佳選擇,如果相比于串行執行的方式,并行化能夠帶來顯著地性能提升,那么并行化才有意義。判斷是否適合并行化并沒有一勞永逸的方法——一切都取決于特定問題的功能需求和性能需求。在對現有程序進行并行優化的時候,必須理解現有的串行設計,或者理解提供了有限可擴展性的并行化算法,然后再對現有設計進行重構,從而使其獲得性能提升,而且不會引入問題或產生不同的結果。在衡量程序并行化的效果時,可以用加速比來比較并行效果。其中,是加速比,是串行運算時間,也可表示為單處理器運行時間;是在有個核的處理器上的運行時間。

1.3 NET Framework 4

在傳統的順序式代碼中,指令一條接著一條運行,這種方式并不能發揮多內核的優勢,因為順序指令只能運行在一個可用內核上。因此,在多核環境下,軟件設計和程序編寫能夠準備好充分發揮多核系統的功能是一件十分重要的事情,但使用Visual C# 2010編寫的順序代碼并不能發揮多核的優勢,除非利用.NET Framework4所提供的新功能將任務分解到多個內核上,Visual C# 2010和.NET Framework 4使得將基于任務的設計轉換為并行化代碼變得非常簡單。

NET Framework 4.0可實現創建并行代碼新模型,這個新模型稱為輕量級并發,這個模型減少了在不同邏輯內核上創建和執行代碼所需要的總開銷。這并不是說能夠完全消除并行化帶來的開銷,但是這個模型本身是為現代多核微處理器而設計的。重量級并發模型是在多處理器的時代出現的,在那個時代計算機可能有很多物理微處理器,每個微處理器只有一個內核。輕量級的并發模型考慮了新的微架構,這個架構中有很多由一些物理內核支撐的邏輯內核。輕量級并發模型并不只是關注不同邏輯內核之間的作業調度,它還在框架級別添加了對多線程訪問的支持,從而使得代碼更容易理解。為了應對多核和眾核的負載型,.NET Framework引入了新的Task Parallel Library(任務并行庫,TPL),TPL是在多核時代應運而生的,TPL提供了一個輕量級的框架,可以讓開發人員可以應付各種不同的并行場合。

2 C#并行編程

TPL引入了一個新的命名空間System.Threading.Task.通過這個命名空間可以引用.NET Framework 4中并行編程所需要的類、結構和枚舉[5]。

TPL支持的數據場合主要包括以下三種。

(1)數據并行(data parallelism)

需要有大量數據需要處理,而且必須對每一份數據執行相同的操作。

(2)任務并行(task parallelism)

有很多可以并發運行的不同操作,通過任務并行發揮并行化的優勢。

(3)流水線(pipelining)

是任務并行和數據并行的結合體。

2.1 Parallel

C#實現并行編程最簡單、最基礎的方法就是利用Parallel類,在編寫并行代碼的時候通過使用Parallel靜態類(System.Threading.Tasks.Parallel)所提供的方法實現并行循環。

2.1.1 Parallel. Invoke、Parallel.For、Parallel.ForEach

在Parallel下面有三個常用的方法Invoke,For和ForEach。在需要使用的時候,引入命名空間System.Threading.Tasks,即可直接編輯Parallel.Invoke、Parallel.For、Parallel.ForEach指令。

Parallel.For——為固定數目的獨立For循環迭代提供了負載均衡的潛在并行執行。

Parallel.ForEach——為固定數目的獨立For Each循環迭代提供了負載均衡的潛在的并行執行。這個方法支持自定義的分區器,可以更好地掌握數據分發。

Parallel.Invoke——對給定的獨立任務提供潛在的并行執行。

2.1.2 Parallel退出循環和異常處理

(1)退出并行循環

在串行循環中,想要退出循環,直接使用break語句即可直接退出。但在并行循環中,并行循環參數提供了一個ParallelLoopState,可用于終止Parallel.For和Parallel.ForEach。ParallelLoopState的loopState實例提供了Break和Stop兩種方法。

Break——通知并行計算盡快退出循環,在完成當前迭代后盡快地停止執行。

Stop——通知并行計算立即停止執行。

(2)并行循環的異常處理

在串行循環中,普通的Exception就可捕獲異常,但由于在并行計算過程中,多個迭代在同時進行,就會產生N個異常并行出現,傳統的異常管理方式已經不能滿足,為并行計算而產生的新的System.AggregateException即可捕獲到并行計算中異常。AggregateException包含了一個或多個在并行和并發代碼執行過程中產生的異常[4]。

2.2 Task

處理并行計算時,通常使用的方式就是多線程,在.NET Framework 4之前使用最多的就是Thread,通過創建多個線程或者利用線程池的方法來實現并行計算。但在.NET Framework 4之后,TPL引入了新的基于任務的編程模型,這種編程模型同樣可以充分發揮多核的優勢,優化程序,不需要編寫底層、復雜且重量級的線程代碼,創建任務比創建線程具有更小的性能開銷。但是任務和線程之間還是有區別的。

(1)任務是架構在線程之上的,即任務運行的時候還是需要線程實現。

(2)任務與線程之間并不是一對一的關系,一個線程可以運行多個任務,一個任務也可由多個線程完成。

(3)創建任務相較于創建線程而言開銷更小。

2.2.1 Task的生命周期

Task的初始狀態:

Created:利用構造函數創建Task實例時的初始狀態,利用Task.Factory.StartNew創建時直接跳過。

WaitingToRun:利用Task.Factory.StartNew進行創建時的初始狀態。

RanToCompletion:任務執行完畢。

創建Task的方法有兩種:

(1)利用構造函數

vartask1=new Task()(=>{ });

(2)利用Task.Factory.StartNew進行創建

Var task2=Task.Factory.StartNew()(=>{ });

2.2.2 Task的任務控制

Task的特點就在于其任務控制部分,編程人員可以通過調整Task的執行順序,從而實現Task的有序工作,Task提供了以下幾種方法。

(1)Task.Wait()——當前線程一直等待任務執行完成后執行。

(2)Task.WaitAll()——當前線程會等待Task實例以Task數組的形式作為參數被接受,Task之間通過逗號隔開,這個方法是同步執行的。

(3)Task.ContinueWith()——第一個Task完成后自動啟動下一個Task,實現Task的延續。

(4)Task的取消

Task是并行計算的,在.NET Framework 4.0中提供了一個取消標記(CancellationTokenSource.Token),在創建task的時候傳入此參數,就可以將主線程和任務相關聯,然后在任務中調用ThrowIfCancellationRequested方法來等待主線程使用Cancel來通知,一旦cancel被調用,task將會拋出OperationCanceledException來中斷此任務的執行,Task實例會轉入TaskStatus.Canceled狀態,并且IsCanceled屬性才回被設置為true。

2.2.3 Task的異常處理

當很多任務并行運行的時候,可能會并行發生很多異常。Task實例能夠處理一組一組的異常,這些異常利用System.AggregateException類處理。初次之外,通過Task的屬性也可判斷Task的狀態,例如:IsCompleted,IsFaulted,IsCancelled等。

3 總結

隨著多核時代的到來,多核并行編程已然成為并行編程的主流模式,.NET Framework 4.0增加的TPL,很好地滿足了多核處理器的應用要求。Parallel類和Task類的出現使得在編寫并行計算的程序時,不需要考慮底層的運行機制,極大地簡化了程序的復雜性,并且相較于之前通過創建多線程實現并行編程的方法而言,程序性能開銷更小,更靈活。所以,在用C#實現多核并行編程時,可以更多地通過TPL的方式實現。

[1]彭曉明,郭浩然,龐建民.多核處理器——技術、趨勢和挑戰[J].計算機科學,2012.

[2]曹折波,李青.多核處理器并行編程模型的研究與設計[J].計算機工程與設計,2010.

[3]黃國睿,張平,魏廣博. 多核處理器的關鍵技術及其發展趨勢[J].計算機工程與設計,2009.

[4]高嵐,王銳,錢德沛.多核處理器并行程序的確定性重放研究[J].軟件學報,2013.

[5]Hillar G. Professional Parallel Programming with C#:Master Parallel Extensions with. NET 4[M].Wrox Press Ltd. 2010.

猜你喜歡
程序模型
一半模型
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
3D打印中的模型分割與打包
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
FLUKA幾何模型到CAD幾何模型轉換方法初步研究
主站蜘蛛池模板: 欧美黑人欧美精品刺激| 亚洲娇小与黑人巨大交| 青青网在线国产| 国产呦视频免费视频在线观看| 国产在线无码一区二区三区| 亚洲国产理论片在线播放| 久久综合九色综合97网| 免费a级毛片18以上观看精品| h网站在线播放| 欧美性天天| 亚洲av色吊丝无码| 亚洲无码精彩视频在线观看| 日本人妻丰满熟妇区| 台湾AV国片精品女同性| 人妻一区二区三区无码精品一区| 女人18毛片一级毛片在线 | 国产剧情无码视频在线观看| 亚洲成人在线免费| 99国产在线视频| 久久香蕉国产线看观看亚洲片| 亚洲美女视频一区| 97久久精品人人做人人爽| 在线观看国产小视频| 欧美在线三级| 国产黄在线观看| 免费高清自慰一区二区三区| 一区二区午夜| 欧美一级大片在线观看| 一区二区理伦视频| 亚洲男人天堂久久| 国产麻豆精品手机在线观看| 日本午夜影院| 日韩久草视频| 国产免费人成视频网| 欧美不卡二区| 中国精品自拍| 欲色天天综合网| 久久久久久久久18禁秘| 精品无码一区二区在线观看| 色久综合在线| 综合色区亚洲熟妇在线| 国内精品小视频福利网址| 亚洲日韩精品无码专区| 又黄又湿又爽的视频| 国产视频一区二区在线观看| 日本午夜网站| 亚洲综合二区| 久久无码av三级| 一区二区三区国产精品视频| 波多野吉衣一区二区三区av| 欧美激情成人网| 国产一二三区在线| 久久96热在精品国产高清| 99热国产这里只有精品无卡顿"| 国产成人高清亚洲一区久久| 国产激情在线视频| 国产女人爽到高潮的免费视频 | 亚洲视频免| 女同久久精品国产99国| 亚洲男人天堂久久| 国产高清在线观看91精品| AV不卡在线永久免费观看| 国产精品.com| 国产手机在线观看| 一级片免费网站| 国产另类视频| 国产一区二区在线视频观看| 欧美在线国产| 亚洲精品久综合蜜| 国产色网站| 亚洲天堂日韩在线| 亚洲日韩高清在线亚洲专区| 国产99久久亚洲综合精品西瓜tv| 国产裸舞福利在线视频合集| 国产主播福利在线观看| 试看120秒男女啪啪免费| 国产成人AV男人的天堂| 成年人视频一区二区| 亚洲国产成人麻豆精品| 色九九视频| 男女男免费视频网站国产| 亚洲大尺码专区影院|