首頁 »
2009/06/23

.NET 4.0的平行運算新功能(MSDN Flash六月號電子報預告)

.NET Framework 4.0 Parallel Computing
.NET Framework 4.0首次內建平行運算之機制與架構,在這個平行運算架構下,可以充份發揮你電腦或伺服器的多核心與多執行緒效能,無端是4核心或8核心,或8執行緒乃至32執行緒,或者再多的核心與執行緒,Parallel Computing的平行運算都能夠充份利用。


平行運算架構圖之中主要包含三大功能區塊:
1.任務平行函式庫(Task Parallel Library,簡稱TPL)
2.PLINQ執行引擎(PLINQ Execution Engine)
3.資料結構協調(Data Structures for Coordination)


以上三大項在正式的電子報的文章有較為詳盡的說明,而我在使用TPL及PLINQ執行時,發現它可以充份利用多核心的運算力,也就是說,可以將兩個核心運算用到100%,完全平衡CPU、核心、執行緒的之間的負載,然後程式完全不必修改,可以隨著電腦硬體而自動成長。

以下是矩陳相乘的計算,並利用任務平行函式庫的程式來撰寫,計算時間可以大幅縮短;而計算的同時,所有核心可以100%完全滿載利用,不會有些些核心閒置,或利用率不足的情況發生。

    1 static void MultiplyMatricesParallel(double[,] matA, double[,] matB, double[,] result)

    2 {

    3     int matACols = matA.GetLength(1);

    4     int matBCols = matB.GetLength(1);

    5     int matARows = matA.GetLength(0);           

    6 

    7     Parallel.For(0, matARows, i =>

    8     {

    9         for (int j = 0; j < matBCols; j++)

   10         {

   11             double temp = 0;

   12             for (int k = 0; k < matACols; k++)

   13             {

   14               temp += matA[i, k] * matB[k, j];

   15             }

   16             result[i, j] = temp;

   17         }

   18     }); // Parallel.For

   19 }

例如你用平行程式做計算,原本1個核心的計算工作,換成雙核心的來平行計算,時間可能縮短成只要60%時間,用四核心來計算又可以再大幅縮短,那如果你用Intel i7,或者多路的Xoen新一代伺服器,那運算力又大大加強。相同的程式,你給不同的客顧,他們用不同的伺體硬體,硬體高檔的,執行起來就自然很快。

不過,也許有的人看上面一段話,會覺得是廢話,多CPU跑相同的程式,自然較快!?雖然理論上是如此沒錯,但如果你程式是寫成單執行緒,OS作業也統也不可能將一個執行緒分散到多CPU,我想這是區別之一,那有的人可能會想,自己手動寫多執行緒,傳統是如此沒錯,不過多執行緒和平行運算仍有很大的距離,可以說多執行緒是平行運算的一個基礎元素,而平行運算可以自己決定要將程式分成幾個執行緒,再有效分配到CPU或多核心去運算,同時你也不必去管Thread或Lock的問題。

記得在教科書或技術文件中往往都會提醒,如果你寫了不好的多執行緒程式,不但不能先受其利,反倒先受其害,執行緒之間彼此搶資源、鎖定、無窮等待都是問題。所以若能夠交由.NET Framework 4.0的平行運算來負責,那你就可以不必傷腦筋這些事了。

我個人覺得.NET Framework4.0的平行運算新功能是個好東西,我個人會喜歡上它的,特別是在多核心的時代,當你有8個核心或32核心沒地方用時(或128核心也行),記得~找它就對了!:p
發表於 2009/06/23 10:32 PM
| MSDN Flash電子報專欄[] | 回應 [] | 引用[] | 人氣 [] | 推薦 [] |


.NET 4.0的平行運算新功能←上一篇 │首頁│ 下一篇→關於INTEL Q8200對VT的支援性
本文引用網址:

引用列表()

回應列表()

發表回應
姓名:
(必填)
電子郵件:

(建議填寫,部落長回覆時會用郵件通知你。)
網址:

(建議填寫,請務必填入http://
記住我的個人資料:
悄悄話:
會員專屬,請先登入
回應內容:
回應排版─斷行請使用鍵盤 Shift + Enter,新段落請直接按 Enter
輸入認證碼:
重新取得驗證碼?