日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 1958 0
開篇語:
這是一個(gè)系列文章,系統(tǒng)介紹.NET 4.0中引入的并行擴(kuò)展(包括任務(wù)并行庫TPL和PLINQ)開發(fā)技術(shù)。
本系列文章中所有示例代碼在VS2010 BETA1+Windows 7 RC下調(diào)試通過。所有示例源碼將在本系列文章貼完以后,統(tǒng)一壓縮上傳到CSDN下載頻道。
本系列文章的主要內(nèi)容來自是本人將在電子工業(yè)出版社出版的新作中的一章,出于技術(shù)共享與交流目的發(fā)布,期望業(yè)界對(duì)并行計(jì)算有豐富經(jīng)驗(yàn)的工程師指出疏漏,也希望網(wǎng)友對(duì)提出寶貴建議。
作者金旭亮擁有本系列文章所有版權(quán),未經(jīng)本人許可,不允許將此序列文章及相關(guān)示例用于商業(yè)目的,除此之外,在網(wǎng)絡(luò)上出于知識(shí)共享目的的復(fù)制轉(zhuǎn)貼不受限制。
反饋方式:
在我的本技術(shù)博客上直接回貼 或發(fā)郵件至:
2009.9.9
===================================================
隨著多核 CPU 的普及和互聯(lián)網(wǎng)的迅速發(fā)展,計(jì)算已經(jīng)進(jìn)入并行的時(shí)代,這種并行計(jì)算有兩種主要的形式,一種著眼于充分挖掘單臺(tái)計(jì)算機(jī)的硬件潛力,通常以多線程協(xié)作的方式完成指定的工作任務(wù);另一種著眼于利用互聯(lián)的計(jì)算機(jī)所共同擁有的計(jì)算能力,將一個(gè)工作任務(wù)分發(fā)到多臺(tái)計(jì)算機(jī)上同時(shí)處理,通過多臺(tái)計(jì)算機(jī)的相互協(xié)作完成單臺(tái)計(jì)算機(jī)所無法完成的工作任務(wù)。
第一種計(jì)算形式在過去一直都是使用線程來實(shí)現(xiàn)的,而在 .NET 4.0 中,又在線程的基礎(chǔ)上向軟件工程師提供了一個(gè)“并行擴(kuò)展( Parallel Extensions )”,從一個(gè)更高的抽象層次簡(jiǎn)化多線程應(yīng)用程序的開發(fā),這也是本章要介紹的主要內(nèi)容。
第二種計(jì)算形式依賴于多臺(tái)計(jì)算機(jī)的相互協(xié)作,本質(zhì)上是一種分布式的軟件系統(tǒng),在 .NET 平臺(tái)上, WCF 是開發(fā)這類型軟件系統(tǒng)的強(qiáng)大工具。本書第 9 篇的相關(guān)章節(jié)將介紹 WCF 技術(shù)。
19.1 并行計(jì)算概述
人們?cè)谡務(wù)摰接?jì)算機(jī)技術(shù)的飛速進(jìn)步時(shí),經(jīng)常引用美國(guó)著名科幻小說作家 Bruce Sterling [1] 的一段名言:
I used to think that cyberspace was fifty years away. What I thought was fifty years away, was only ten years away. And what I thought was ten years away... it was already here. I just wasn't aware of it yet.
譯為中文 這段話的大致含義是
我曾經(jīng)認(rèn)為網(wǎng)際空間 cyberspace 指互聯(lián)網(wǎng)這個(gè)虛擬的空間 至少要有 50 年才會(huì)影響到我們。那些我認(rèn)為要50年之后才會(huì)影響我們的東西,往往只需要10年就成為現(xiàn)實(shí)……。而那些我認(rèn)為10年之后才會(huì)影響我們的東西,現(xiàn)在已經(jīng)在那兒擺著了,而我甚至還沒有意識(shí)到它已成為現(xiàn)實(shí)!
并行計(jì)算就是這樣的一個(gè)例子,它靜悄悄地走來,卻于靜寞中引發(fā)了一場(chǎng)軟件技術(shù)的變革,當(dāng)人們開始意識(shí)到并行計(jì)算對(duì)日常生活的影響時(shí),才突然發(fā)現(xiàn),原來并行計(jì)算已無所不在。


[1] http://en.wikipedia.org/wiki/Bruce_Sterling 有對(duì) Bruce Sterling 本人及其作品的介紹。

19.1.1 并行計(jì)算是計(jì)算的未來

從集成電路滲透到計(jì)算機(jī)領(lǐng)域開始, CPU 的計(jì)算能力一直在持續(xù)地增長(zhǎng)。其中有一個(gè)著名的“摩爾定律”描述了這一發(fā)展趨勢(shì)。
趣聞?shì)W事:
“摩爾定律”的提出者是 Intel 公司的創(chuàng)始人之一 Gordon E. Moore 1965 年他發(fā)表了一篇論文,在論文中他針對(duì)集成電路技術(shù)說過這么一段話:
“使用最低成本設(shè)計(jì)出來的元件其復(fù)雜性每年大約增加一倍。可以確信,即便不是有所加快,在短期內(nèi)這一增長(zhǎng)率也會(huì)繼續(xù)保持。從長(zhǎng)遠(yuǎn)的觀點(diǎn)來看,這一增長(zhǎng)率應(yīng)該會(huì)略有變動(dòng)。盡管沒有充分的理由來證明,(但我認(rèn)為)這一增長(zhǎng)率至少在未來十年內(nèi)幾乎維持為一個(gè)常數(shù)。這意味著到 1975 年時(shí),以最小的成本制作出來的單個(gè)集成電路將擁有 65000 個(gè)元件,而我相信這么龐大的電路將可以被集成到一塊小小的芯片中”。
這就是“摩爾定律”的原型。 1975 年, Gordon E. Moore 將修改了“定律”,將其中的“每年”改為“每?jī)赡辍薄6牧硗庖幻拢凇澳柖伞钡幕A(chǔ)上又提出了一個(gè)“修訂版”的“摩爾定律”,新版定律指出,每 18 個(gè)月,集成電路的性能將提升一倍。盡管摩爾本人堅(jiān)持:“我從沒說過集成電路中的元件數(shù)量每 18 個(gè)月增加一倍”,但他的聲音很快被淹沒了,“ 18 個(gè)月”作為集成電路的“發(fā)展周期”,開始以“摩爾定律”廣為人知。
1965 年至今,雖然期間有許多人都曾說:摩爾定律已不再有效,但事實(shí)卻證明這一定律與集成電路技術(shù)發(fā)展的實(shí)際情況相當(dāng)吻合。到底摩爾定律能用多少年,現(xiàn)在誰也無法下這個(gè)結(jié)論,還是只能交給時(shí)間。但不管怎樣,從“摩爾定律”上面人們還是能看到計(jì)算機(jī)科學(xué)家那種深邃的洞察力和讓人佩服的預(yù)見能力。
對(duì)于傳統(tǒng)的(非并行)應(yīng)用程序,往往會(huì)隨著硬件運(yùn)行速度的提升而運(yùn)行得更快。舉個(gè)例子,許多早期的跑在 286/386/486 上的一些動(dòng)作類和射擊類游戲,如果不作修改地運(yùn)行于現(xiàn)在的高性能 CPU 上,其運(yùn)行速度可能會(huì)快到?jīng)]有人再能玩這些游戲了。這就是計(jì)算機(jī)硬件技術(shù)的發(fā)展給軟件所帶來的直接好處:代碼不用或僅略加修改,程序就擁有更快的運(yùn)行速度。
然而,這種免費(fèi)的午餐是無法永遠(yuǎn)提供的,其原因在于 CPU 速度無法無限提升。因?yàn)楝F(xiàn)有的 CPU 技術(shù)需要受到物理法則的限制:
當(dāng)晶體管“瘦身”到很小時(shí),由于控制電流的晶體管門 (transistor gate) 以及氧化柵極 (gate oxide) 距離將非常貼近,因此,將發(fā)生電子漂移現(xiàn)象 (electrons drift) 。如果發(fā)生這種情況,晶體管會(huì)失去可靠性,原因是晶體管在這種條件下無法有效控制電子的運(yùn)動(dòng),從而難于讓其能維持穩(wěn)定的“ 1 ”或“ 0 ”狀態(tài)。
為了能突破這一物理限制而繼續(xù)提升 CPU 的計(jì)算能力, CPU 走向了另一個(gè)條路——多核,將多個(gè) CPU 處理核心集成為單一的整體,稱其為“多核 CPU ”。這樣一下,雖然每個(gè) CPU 處理核心的主頻都沒有提高,但通過將計(jì)算任務(wù)合理地分配在多個(gè) CPU 處理核心上運(yùn)行,我們同樣能達(dá)到加快 CPU 處理性能的目的。
雙核 CPU 是第一個(gè)得到廣泛應(yīng)用的產(chǎn)品,當(dāng)前幾乎所有的新購置的個(gè)人電腦都配置了雙核 CPU ,而 Intel 宣布 2009 年將為臺(tái)式機(jī)和筆記本電腦生產(chǎn)四核 CPU (新四核 CPU 基于一個(gè)代號(hào)為“ Nehalem ”的微架構(gòu))。
簡(jiǎn)言之:
如果不對(duì) CPU 技術(shù)作顛覆性的變革,那么,基于現(xiàn)有技術(shù)架構(gòu)的 CPU 已基本走完了 通過提升主頻而獲取更高性能 之路,必須走向多核之路,其特點(diǎn)是:
1 )每個(gè) 的主頻都不算高
2 )在設(shè)計(jì) CPU 架構(gòu)時(shí),針對(duì)并行的工作負(fù)載進(jìn)行了專門優(yōu)化。
CPU 的“多核”發(fā)展趨勢(shì)對(duì)軟件技術(shù)有重大影響。
因?yàn)? CPU 的多核化要想真正地發(fā)揮效益 , 必須依賴于精心設(shè)計(jì)的軟件,這種軟件本身必須具備將工作任務(wù)劃分為多個(gè)可并行執(zhí)行的子任務(wù)的能力,在操作系統(tǒng)(或特定的軟件運(yùn)行平臺(tái))的支持下,將這些任務(wù)分配給計(jì)算機(jī)所配備的多個(gè) CPU 處理核心并發(fā)執(zhí)行 , 并且能夠在這些子任務(wù)運(yùn)行結(jié)束后,將這些結(jié)果組合起來,得到最終的處理結(jié)果。這就是擁有“并行計(jì)算”能力的軟件系統(tǒng)。
開發(fā)“并行計(jì)算”軟件系統(tǒng),對(duì)軟件工程師提出了新的挑戰(zhàn),因?yàn)殚_發(fā)并行程序要比串行程序難得多。軟件工程師必須轉(zhuǎn)換思路,在開發(fā)新的軟件系統(tǒng)時(shí),從一開始就考慮到并行計(jì)算的特點(diǎn),并對(duì)此進(jìn)行特定的設(shè)計(jì),才能充分利用現(xiàn)有硬件基礎(chǔ)設(shè)施的強(qiáng)大處理能力,開發(fā)出高性能與高可靠性的軟件系統(tǒng),這是一個(gè)軟件技術(shù)發(fā)展的必然趨勢(shì),也是任何一名軟件工程師們都必須認(rèn)真面對(duì)的挑戰(zhàn)!
19.1.2 并行計(jì)算的基本原理
并行計(jì)算的基本思想并不復(fù)雜,那就是將一個(gè)復(fù)雜的工作任務(wù)進(jìn)行分解,然后,在多核CPU上同時(shí)執(zhí)行這些分解后的子任務(wù)。
首先,我們先談?wù)劧嗪薈PU中的“核”。

1 CPU 與“核”

現(xiàn)在人們常說:最近我買了一臺(tái) 雙核筆記本 電腦 。這里面的“核( core )”指代什么,它與 CPU 是什么關(guān)系?還有,人們還常說到“處理器( processor )”,貌似這三個(gè)都是指同樣的東西。
下面我們就來討論一下這些概念的含義,弄清楚它們到底指代什么。
學(xué)過物理的人都知道,現(xiàn)代計(jì)算機(jī)是構(gòu)造于集成電路技術(shù)基礎(chǔ)之上,任何一個(gè)集成電路,最底層的也是最小的工作單元是一個(gè)個(gè)的 晶體管 ,多個(gè)晶體管構(gòu)成 邏輯模塊 logic block ),一組邏輯模塊進(jìn)而構(gòu)成 功能單元 functional unit ),例如可完成基本算術(shù)運(yùn)算功能的 ALU Arithmetic Logic Unit ,算術(shù)邏輯單元)就是功能單元的一個(gè)例子。
多個(gè)功能單元組合起來,就構(gòu)成了 微處理器(micro-processor) ,微處理器最廣為人知的名字就是 CPU( Central Processing Unit,中央處理單元)
最終生產(chǎn)出來的微處理器實(shí)際上是一塊物理基片( die ),經(jīng)過封裝之后就叫作 處理器( processor )。
那么什么是“核( core )”呢?
核是微處理器中所有可用的功能單元的集合。
那些直接參與指令執(zhí)行的功能單元的集合稱為“ 執(zhí)行核(execution core) ”。
很明顯,每個(gè)微處理器必定要有一個(gè)執(zhí)行核,否則,它無法執(zhí)行任何指令,也就不能稱其為微處理器了。
現(xiàn)在就可很清楚“多核”的含義了。所謂多核,其實(shí)就是在同一塊物理基片上集成兩個(gè)以上的“執(zhí)行核”,從而使處理器具備并行執(zhí)行指令的能力。多核 CPU ,就是指擁有多個(gè)執(zhí)行核的微處理器,基片封裝好之后,就稱為“ 多核處理器 ”。
再區(qū)分一下另兩個(gè)概念:多處理器與多核處理器系統(tǒng)。
如前所述,多核處理器系統(tǒng)是指計(jì)算機(jī)中的處理器中包容了多個(gè)執(zhí)行核,通常這種計(jì)算機(jī)只包容有一個(gè)多核處理器,否則,此系統(tǒng)應(yīng)歸入“多處理器”系統(tǒng)。
多處理器系統(tǒng)是指由多個(gè)處理器構(gòu)成的計(jì)算機(jī)系統(tǒng),每個(gè)處理器自身可以是單核或多核的。
簡(jiǎn)單地說: 多處理器系統(tǒng)可以看作是一個(gè)主板上具有多個(gè)處理器插槽的計(jì)算機(jī)系統(tǒng)。
從應(yīng)用軟件開發(fā)者角度來看,多處理器與多核處理器系統(tǒng)其實(shí)是一樣的,可以統(tǒng)一地將其看成是計(jì)算機(jī)中擁有多個(gè)可供使用的 CPU
下面,我們?cè)賮韰^(qū)分一下另外兩個(gè)很容易弄混的概念——“并發(fā)”與“并行”。

2 并發(fā)與并行

并行(Parallelism) ”是指多個(gè)工作任務(wù)在擁有多核 CPU (或多個(gè)單核 CPU )的多處理器計(jì)算機(jī)上同時(shí)執(zhí)行。在這些工作任務(wù)運(yùn)行的過程中,除非有任務(wù)提前結(jié)束或者延遲啟動(dòng),否則,在任一時(shí)間點(diǎn)總有兩個(gè)以上的工作任務(wù)同時(shí)運(yùn)行。
簡(jiǎn)單地說: 只要是“同時(shí)”運(yùn)行的,就可以稱之為是“并行”的。
19 ? 1 展示了并行執(zhí)行的三個(gè)工作任務(wù)在三個(gè)處理器上同時(shí)運(yùn)行的情形,圖中 黑色的長(zhǎng)條表示任務(wù)的執(zhí)行過程。
并發(fā)( Concurrent ”,指“宏觀”上計(jì)算機(jī)可以同時(shí)執(zhí)行多個(gè)不相關(guān)的工作任務(wù)(是“并行”的),但在“微觀”角度來看,這些工作任務(wù)并不是始終都在運(yùn)行,每個(gè)工作任務(wù)都呈現(xiàn)出“走走停停”這種相互交替的狀態(tài)。
這里的“宏觀”,是指從應(yīng)用程序開發(fā)者層次上看的,時(shí)間尺度較大,而“微觀”則是指從操作系統(tǒng)的線程管理角度和計(jì)算機(jī)硬件工程師層次上看的,時(shí)間尺度很小。
19 ? 2 展示了 3 個(gè)工作任務(wù)在單個(gè)處理器上交替執(zhí)行的情形。
19 ? 2 中,可以看到通過輪流使用單個(gè)處理器,盡管在任何時(shí)刻都只有一個(gè)工作任務(wù)在運(yùn)行,但在一個(gè)比較長(zhǎng)的時(shí)間間隔內(nèi),所有的工作任務(wù)都在“并行”運(yùn)行中。由此可見, “并發(fā)”的好處之一就是使有限的處理器資源可以“并行”運(yùn)行超過處理器個(gè)數(shù)的多個(gè)工作任務(wù)。 正是由于“并發(fā)”有這樣的好處,所以在操作系統(tǒng)級(jí)別,不管計(jì)算機(jī)本身是單核系統(tǒng)還是多核系統(tǒng),都是采用微觀上的“并發(fā)”來實(shí)現(xiàn)宏觀上的“并行”,絕不允許一個(gè)工作任務(wù)長(zhǎng)時(shí)間地獨(dú)占某個(gè)處理器直到其運(yùn)行結(jié)束。
再詳細(xì)解釋一下如何利用“并發(fā)”實(shí)現(xiàn)“并行”。
在單核計(jì)算機(jī)系統(tǒng)中,操作系統(tǒng)通過“微觀”上讓每個(gè)線程分時(shí)使用處理器實(shí)現(xiàn)“宏觀”上工作任務(wù)的“并發(fā)”執(zhí)行(因?yàn)楣ぷ魅蝿?wù)具體是由線程負(fù)責(zé)完成的),而在多核計(jì)算機(jī)系統(tǒng)中,盡管在物理架構(gòu)上直接支持“并行”,允許同時(shí)運(yùn)行多個(gè)線程,但由于大多數(shù)情況下負(fù)責(zé)執(zhí)行工作任務(wù)的線程數(shù)往往大于可獲取的處理器個(gè)數(shù),所以,操作系統(tǒng)仍是使用同樣的分時(shí)調(diào)度策略為線程分配處理器。這時(shí),同一個(gè)線程有可能在不同的時(shí)間段內(nèi)在不同的處理器上運(yùn)行。 19 ? 3 展示了屬于同一工作任務(wù)的多個(gè)線程在 4 個(gè)處理器上“跳越”執(zhí)行的情形。
理解“并行”與“并發(fā)”的區(qū)別,是我們開發(fā) “并行程序”的第一步。

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 德州市| 白山市| 巴东县| 富阳市| 怀来县| 韶关市| 溆浦县| 大庆市| 元氏县| 织金县| 无棣县| 馆陶县| 惠东县| 丹东市| 寿宁县| 合水县| 樟树市| 裕民县| 辰溪县| 淳安县| 庆安县| 拉萨市| 安阳市| 高陵县| 宁蒗| 和平区| 青阳县| 清丰县| 荣成市| 莒南县| 东海县| 新巴尔虎右旗| 萨嘎县| 尼勒克县| 库伦旗| 新竹县| 六枝特区| 太白县| 准格尔旗| 吉木萨尔县| 洛隆县|