首頁 »
2009/06/23
.NET 4.0的平行運算新功能(MSDN Flash六月號電子報預告)

.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
本文引用網址:




★ASP.NET 4.0完美入門--使用VB
★聖殿祭司的ASP.NET 3.5專家技術手冊I 核心功能篇--使用C#
★聖殿祭司的ASP.NET 3.5專家技術手冊I 核心功能篇--使用VB
★聖殿祭司的ASP.NET 3.5專家技術手冊II新功能篇-使用VB






回應列表()