亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

簡述C#多核并行編程的相關(guān)論文

時間:2021-06-26 19:12:20 論文范文 我要投稿

簡述C#多核并行編程的相關(guān)論文

  多核處理器的出現(xiàn)使得傳統(tǒng)的串行編程模式無法利用多核、多處理器的優(yōu)勢,隨著多核、多處理器平臺的出現(xiàn),多核編程也得到了更深層次的發(fā)展,而現(xiàn)在并行編程技術(shù)的發(fā)展并不能完全利用多核的優(yōu)勢,因而尋求新的并行編程技術(shù)是十分必要的。C#是.NET 平臺中引入完全面向?qū)ο蟮木幊陶Z言,是C/C++的衍生語言,不但將C/C++的強大功能繼承下來,并且去掉了它們的一些復(fù)雜特性,是一種能快速高效地實現(xiàn)基于.NET 平臺軟件開發(fā)的編程語言,且C#已經(jīng)支持并發(fā)代碼,這對于實現(xiàn)C#多核并行編程是十分必要且有利的。

簡述C#多核并行編程的相關(guān)論文

  1 多核并行編程概述

  1.1 多核環(huán)境

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

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

  1.2. 并行編程

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

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

  1.3 NET Framework 4

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

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

  2 C#并行編程

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

  TPL 支持的數(shù)據(jù)場合主要包括以下三種。

  (1)數(shù)據(jù)并行(data parallelism)

  需要有大量數(shù)據(jù)需要處理,而且必須對每一份數(shù)據(jù)執(zhí)行相同的操作。

  (2)任務(wù)并行(task parallelism)

  有很多可以并發(fā)運行的不同操作,通過任務(wù)并行發(fā)揮并行化的優(yōu)勢。

  (3)流水線(pipelining)

  是任務(wù)并行和數(shù)據(jù)并行的結(jié)合體。

  2.1 Parallel

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

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

  在Parallel 下面有三個常用的方法Invoke,F(xiàn)or 和ForEach。

  在需要使用的時候,引入命名空間System.Threading.Tasks,即可直接編輯Parallel.Invoke、Parallel.For、Parallel.ForEach 指令。Parallel.For——為固定數(shù)目的獨立For 循環(huán)迭代提供了負(fù)載均衡的潛在并行執(zhí)行。

  Parallel.ForEach——為固定數(shù)目的獨立For Each 循環(huán)迭代提供了負(fù)載均衡的潛在的并行執(zhí)行。這個方法支持自定義的分區(qū)器,可以更好地掌握數(shù)據(jù)分發(fā)。

  Parallel.Invoke——對給定的獨立任務(wù)提供潛在的并行執(zhí)行。

  2.1.2 Parallel 退出循環(huán)和異常處理

  (1)退出并行循環(huán)

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

  Break——通知并行計算盡快退出循環(huán),在完成當(dāng)前迭代后盡快地停止執(zhí)行。

  Stop——通知并行計算立即停止執(zhí)行。

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

  在串行循環(huán)中,普通的Exception 就可捕獲異常,但由于在并行計算過程中,多個迭代在同時進行,就會產(chǎn)生N 個異常并行出現(xiàn),傳統(tǒng)的異常管理方式已經(jīng)不能滿足,為并行計算而產(chǎn)生的新的System.AggregateException 即可捕獲到并行計算中異常。AggregateException 包含了一個或多個在并行和并發(fā)代碼執(zhí)行過程中產(chǎn)生的異常。

  2.2 Task

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

  (1)任務(wù)是架構(gòu)在線程之上的,即任務(wù)運行的時候還是需要線程實現(xiàn)。

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

  (3)創(chuàng)建任務(wù)相較于創(chuàng)建線程而言開銷更小。

  2.2.1 Task 的生命周期

  Task 的初始狀態(tài):

  Created:利用構(gòu)造函數(shù)創(chuàng)建Task 實例時的初始狀態(tài),利用

  Task.Factory.StartNew 創(chuàng)建時直接跳過。

  WaitingToRun:利用Task.Factory.StartNew 進行創(chuàng)建時的初始狀態(tài)。

  RanToCompletion:任務(wù)執(zhí)行完畢。

  創(chuàng)建Task 的方法有兩種:

  (1)利用構(gòu)造函數(shù)

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

  (2)利用Task.Factory.StartNew 進行創(chuàng)建Var task2=Task.Factory.StartNew()(=>{ });

  2.2.2 Task 的任務(wù)控制

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

  (1)Task.Wait()——當(dāng)前線程一直等待任務(wù)執(zhí)行完成后執(zhí)行。

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

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

  (4)Task 的取消

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

  2.2.3 Task 的異常處理

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

  3 總結(jié)

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

【簡述C#多核并行編程的相關(guān)論文】相關(guān)文章:

C# 并行編程 之 PLINQ 基本使用 -電腦資料01-01

C# 并行編程 之 限制資源的并發(fā)訪問 使用SemaphoreS -電腦資料01-01

C#高級編程 學(xué)習(xí)總結(jié) -電腦資料01-01

C#函數(shù)式編程之序列 -電腦資料01-01

Visual C#編程技巧兩則.net -電腦資料01-01

C#函數(shù)式編程之可選值 -電腦資料01-01

DSP外掛Flash在系統(tǒng)編程及并行引導(dǎo)裝載方法01-20

C#面向?qū)ο缶幊踢M階(一) ——實現(xiàn)棧 -電腦資料01-01

簡述Python中的面向?qū)ο缶幊痰母拍?-電腦資料01-01