欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

.NET4.0并行計算技術(shù)基礎(chǔ)(2)

系統(tǒng) 1620 0

. NET4.0并行計算技術(shù)基礎(chǔ)(2)

上一部分 介紹了CPU與“核”以及“并行”和“并發(fā)”的區(qū)別,這一部分我們將進(jìn)一步介紹并行計算的性能衡量與并行計算系統(tǒng)的大致分類,為后面介紹.NET 4.0的并行計算打下基礎(chǔ)。

3 如何衡量并行計算的性能提升?

之所以要研究并行計算,其目的是獲得更好的性能。一個軟件系統(tǒng)的性能,通常使用兩個指標(biāo)來進(jìn)行衡量:

(1) 響應(yīng)速度( Responsiveness :用戶向軟件系統(tǒng)提交一個工作任務(wù),軟件系統(tǒng)要花費(fèi)多長的時間才能處理完畢并將結(jié)果通知用戶?

(2) 吞吐率( Throughput :在單位時間間隔內(nèi)軟件系統(tǒng)最多可以處理多少個工作任務(wù)?

并行計算的優(yōu)勢就在于它可以縮短系統(tǒng)完成單個工作任務(wù)的時間和提升系統(tǒng)的吞吐率。

那么,我們怎樣定量衡量因為“并行”而帶來的系統(tǒng)性能提升?很明顯,這里所說的“提升”是有參照物的,對于并行算法,最直觀的參照物就是完成同樣功能的串行算法。

人們使用 “加速系數(shù)( speedup factory [1] ”來定量衡量一個并行算法的好壞:

加速系數(shù)越大,說明性能提升越明顯。

我們感興趣的是:

p 個處理器上執(zhí)行并行算法,到底比在單個處理器上執(zhí)行串行算法理論上能快多少?如果增加處理器的個數(shù),加速系數(shù)能否進(jìn)一步增大?這種增大有沒有一個限制?

針對這個問題,并行計算理論中有一個著名的“阿姆達(dá)爾定律( Amdahl’s law )”回答了這個問題。

鑒于在實際中“ 100% 純粹”的并行算法很少,此定律假設(shè)算法應(yīng)同時包容串行執(zhí)行和并行執(zhí)行兩部分,其中,串行執(zhí)行的部分占整個算法的比例為 f ,并且假設(shè)并行執(zhí)行部分除了計算外并無其他開銷,則在 p 個處理器上執(zhí)行此算法,其加速系數(shù)為:

從這個公式可以得到一個有趣的結(jié)論。試著讓 p à ,則上述公式變?yōu)椋?

這說明:在算法中串行部分的比例不變的情況下,不算你使用多少個處理器,加速系數(shù)最大也超不過 1/f !

例如,假設(shè)某算法中有 20% 的串行算法,則不管后面你如何加速,最大加速系數(shù)超不過 5 1/0.2=5 )。

實際情況可能更糟,因為使用并行算法必然會有其它一開銷,比如并行算法都是使用線程來執(zhí)行的,因此,線程的上下文切換就必須耗用系統(tǒng)資源,考虎到這一點,修正后的“阿姆達(dá)爾定律”變?yōu)椋?

其中 H(p) 代表算法并行部分在單個處理器上執(zhí)行所帶來的系統(tǒng)開銷,不同的算法 H(p) 的值也不一樣。

這說明,如果系統(tǒng)開銷非常大,那么采用多線程并行執(zhí)行一個算法,不但沒有加速,反而會降低了程序的執(zhí)行性能。

依據(jù)“阿姆達(dá)爾定律”得出的這個結(jié)論令人沮喪!但由此也可以得到一個重要的結(jié)論: 如果希望使用并行計算來提升程序的性能,那么應(yīng)盡可能地減少程序中串行代碼的比例。



[1] 有的書中將其稱為“加速比”。

擴(kuò)充閱讀:

“樂觀”的 Gustafson 定律

“阿姆達(dá)爾定律”的結(jié)論讓人沮喪,但到了 20 世紀(jì) 80 年代晚期, Sandia 國家實驗室的科學(xué)家們在對具有 1024 個處理器的超立方體結(jié)構(gòu)上觀察到了 3 個實際應(yīng)用程序隨著處理器的增加發(fā)生線性加速的現(xiàn)象,科學(xué)家 John L. Gustafson 基于此實驗數(shù)據(jù)在 1988 年提出了一個新的計算加速系數(shù)的公式:

與“阿姆達(dá)爾定律”一樣, S(p) 代表加速系統(tǒng), p 代表處理器數(shù)量, f 代表算法中串行部分所占的比例。

Gustafson 定律說明在許多實際的應(yīng)用程序中得到接近線性的加速效果是可能的。

“阿姆達(dá)爾定律”的問題出在它的前提過于理想化。因為并行算法通常能處理比串行算法更大規(guī)模的問題,即使算法仍然存在著串行部分,但由于問題規(guī)模的不斷擴(kuò)大,往往會導(dǎo)致算法中串行部分所占比例的持續(xù)減少。 Gustafson 定律又點燃了人們繼續(xù)研制集成更多處理器(或集成更多執(zhí)行核的處理器)的計算機(jī)系統(tǒng)的熱情。可以預(yù)測,未來的計算機(jī)將集成更多的處理器,當(dāng)前雙核個人電腦的普及只不過是一個開始罷了。

4 實際測量并行程序的性能

不管是“悲觀”的阿姆達(dá)爾定律還是“樂觀”的 Gustafson 定律都只是一種理論上的結(jié)果,在真實的運(yùn)行環(huán)境中,影響程序性能的因素有許多,僅靠幾個簡單的公式并不能真正計算出一個真實的“并行”程序比相應(yīng)的“串行”版本到底快了多少。最可靠的方法還是實地測試,在同樣的軟件和硬件環(huán)境中,先后運(yùn)行程序的“并行”和“串行”兩個版本,比對它們的執(zhí)行時間,就知道結(jié)果了。

.NET 程序中,我們可以使用 StopWatch 類來測試算法的性能。

以下是使用 StopWatch 測試算法運(yùn)行時間的代碼框架:

Stopwatch sw = new Stopwatch();

sw.Start(); // 啟動計時

// 編寫代碼執(zhí)行被測試的算法

sw.Stop();// 停止計時

// 獲取算法執(zhí)行時間

long UsedTime = sw.ElapsedMilliseconds;

//...

另外,調(diào)用 StopWatch 對象的 Reset() 方法可以重置計時值,再接著調(diào)用 Start() 方法就可以開始一個新的計時。

5 并行計算系統(tǒng)的大致分類

有兩種主要的并行計算系統(tǒng)類型。一種稱為“ 共享存儲器( Shared Memory )的多處理器 ”系統(tǒng),其思想很簡單,所有處理器都可以訪問同一個主存儲器,從而允許運(yùn)行在多個處理器上的各個線程可以通過主存儲器方便地共享信息。

.NET4.0并行計算技術(shù)基礎(chǔ)(2)

基于共享存儲器的并行計算系統(tǒng)發(fā)展已有許多年,人們也為開發(fā)運(yùn)行于這種平臺的軟件提供了不少工具,其中得到廣泛應(yīng)用的是 OpenMP ,它可以幫助程序員使用 Fortran (或 C/C++ )語言高效地開發(fā)多線程并行計算程序。

C# Visual Basic 編譯器沒有遵循 OpenMP 標(biāo)準(zhǔn),但通過給 .NET 基類庫添加并行擴(kuò)展( Parallel Extensions ),可以使用比 OpenMP 更方便的方法設(shè)計并行計算程序。

擴(kuò)充閱讀:

OpenMP 簡介

針對共享存儲器的并行計算系統(tǒng),為了簡化軟件開發(fā)工作,人們設(shè)計了一個 OpenMP 標(biāo)準(zhǔn),通過給代碼中添加特定的編譯指令,讓實現(xiàn)了此標(biāo)準(zhǔn)編譯器自動地幫助我們生成并行指令代碼。例如,以下是一個典型的循環(huán)代碼:

for (int i = 0; i < 100000; i++)

{

// ……

}

給上述代碼添加一個特殊的編譯指令 :

#pragma omp parallel for

for (int i = 0; i < 100000; i++)

{

// ……

}

遵循 OpenMP 標(biāo)準(zhǔn)開發(fā)的編譯器 “認(rèn)識”此指令,在編譯時會自動生成相關(guān)的指令讓此代碼可以并行執(zhí)行。 OpenMP 的實現(xiàn)機(jī)制決定要創(chuàng)建的線程個數(shù),以及如何能夠盡善盡美地管理這些線程。開發(fā)人員只需告訴 OpenMP 哪個循環(huán)應(yīng)該以多線程方式執(zhí)行,至于那些為了利用并行性而進(jìn)行的線程創(chuàng)建、初始化、線程同步等工作都可以交給 OpenMP 編譯器來完成。

OpenMP 的標(biāo)準(zhǔn)形成于 1997 年,支持使用 Fortran 、 C/C++ 語言編寫的程序。

另一種稱為“消息傳遞的多處理機(jī)”系統(tǒng),其特點是往往由多臺相互連接的計算機(jī)構(gòu)成一個并行計算平臺,計算機(jī)之間通過“消息”的傳遞協(xié)同工作。

.NET4.0并行計算技術(shù)基礎(chǔ)(2)

基于消息傳遞構(gòu)造的并行計算系統(tǒng)本質(zhì)上是一個分布式軟件系統(tǒng),由于互聯(lián)網(wǎng)的無孔不入,利用互聯(lián)的計算機(jī)實現(xiàn)并行計算是當(dāng)前一個非?;钴S的領(lǐng)域。在微軟平臺之上,使用 WCF 可以很方便地開發(fā)這種類型的軟件系統(tǒng)。本書第 9 篇詳細(xì)介紹 WCF 。

=====================

請看下一講 《.NET 4.0并行計算技術(shù)基礎(chǔ)(3)》

.NET4.0并行計算技術(shù)基礎(chǔ)(2)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕精品一区 | 欧美精品99久久久久久人 | 久草手机视频在线观看 | A片扒开双腿进入做视频 | 不卡一二三区 | 国产一级毛片视频 | 欧美精品免费在线 | 国产福利99| 日本v在线 | 好吊日在线观看 | 欧美大片在线看免费观看 | 国产欧美日韩免费 | 婷五月综合 | 一级欧美黄色片 | 久久中文字幕不卡一二区 | 男女午夜性爽快免费视频不卡 | 日本免费不卡一区二区 | 久久久久久免费播放一级毛片 | 亚洲欧美日韩一区二区 | 四季久久免费一区二区三区四区 | 久久91综合国产91久久精品 | 欧美a级v片不卡在线观看 | 久久香蕉国产线看观看网站 | 欧美线在线精品观看视频 | 欧美日韩在线一区 | 久久91综合国产91久久精品 | 久久精品国产线看观看亚洲 | 日韩中文一区二区三区 | 精品视频久久 | 四虎在线视频 | 日日拍夜夜嗷嗷叫视频 | 三级在线国产 | 色插视频| 中国明星一级毛片免费 | 成人永久福利免费观看 | 免费午夜不卡毛片 | jizzjizz丝袜老师 | 二级毛片视频 | 五月婷婷深深爱 | 日韩精品一区二区三区 | 天天久久综合网站 |