日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

英特爾? 軟件網(wǎng)絡(luò)博客 - 中文 ? 多核編程的四層境界

 jijo 2009-05-05

 

版權(quán)申明:這篇文章可以被自由轉(zhuǎn)載,如果修改其中的內(nèi)容需征得作者同意。

 

自發(fā)表“老子是偉大的多核計(jì)算科學(xué)家”(欲看此文,請(qǐng)點(diǎn))一文來(lái),收到許多網(wǎng)友的強(qiáng)烈反響,褒揚(yáng)者有之,砸板磚者亦有之。不過(guò)板磚數(shù)量倒是在我的意料之中,凡是跟哲學(xué)或者說(shuō)是玄學(xué)的東西沾上邊的,總會(huì)招來(lái)一陣口舌之爭(zhēng)。雖然砸板磚者也沒(méi)有說(shuō)出任何反駁的道理來(lái),但是并不代表那篇文章就很完美,沒(méi)有不足的地方。實(shí)際上那篇文章中只涉及了多核編程的一個(gè)層面的思想,還有另外三層思想沒(méi)有被提及,這也許可以算作是那篇文章的不足之處吧。為彌補(bǔ)其不足之處,下面從四個(gè)層面來(lái)闡述多核編程的基本思想。

第一層  先天·方法·策略層

第一層的基本思想就是“老子是偉大的多核計(jì)算科學(xué)家”一文中所提及的幾個(gè)基本思想:“貪心”、“自私”、“偷”等。這些東西是先天存在的,是人類的一種本能,它又可以看作是方法、策略,因此把這層叫作“先天·方法·策略層”。

先天的方法策略并不限于“貪心”、“自私”、“偷”這三種,去年的SD大會(huì)上,我講過(guò)一個(gè)基于搶奪的分布式內(nèi)存管理算法,說(shuō)明“搶”也是一種先天的方法策略。所謂:

“人之初,性本貪,性自私,性喜偷,性喜搶?!?/span>

為避免誤解,這里先說(shuō)明一下,這里所說(shuō)的“偷”、“搶”和通常意義的偷、搶并不完全相同?!巴怠焙偷兰乙饬x上的偷是同一個(gè)含義,即“不與取”之意;“搶”則是取“不歸還”之意。

范蠡云:“且夫輿弗取,反受其咎”。既然上天給了我們這么多好的方法策略,不用它的話顯然是一種糟蹋。在多核編程中如何使用這些策略來(lái)進(jìn)行編程,開(kāi)源項(xiàng)目TBB中可以找到詳細(xì)的代碼例子。

第二層  目標(biāo)·需求·評(píng)價(jià)層

先天的方法策略,雖然看似簡(jiǎn)單,但要用好它并不是一件容易的事情。自私、貪心、偷、搶等先天方法既可以用來(lái)做好事,也可以用來(lái)做壞事。這就牽涉到如何評(píng)價(jià)是否用好了這些先天方法策略的問(wèn)題,也就是第二層目標(biāo)·需求·評(píng)價(jià)層所需要解決的問(wèn)題。

并不能為了使用先天方法策略而使用它,而是用它來(lái)滿足我們的需求,到達(dá)一定的目標(biāo)。那么這個(gè)需求和目標(biāo)是什么呢?

在這里不想對(duì)一般的需求進(jìn)行分析,只分析優(yōu)化方面的需求。要達(dá)到優(yōu)化,可以理解為各種資源的有效利用,可能有很多人已經(jīng)有這方面的理解1。這些資源可以分為以下幾個(gè)方面:

1)時(shí)間資源, 時(shí)間資源指的就是時(shí)間,比如一段程序或算法需要運(yùn)行多長(zhǎng)時(shí)間。

2)空間資源,如內(nèi)存、硬盤、網(wǎng)絡(luò)、各種IO設(shè)備資源等均屬于空間資源。

3)計(jì)算資源,如CPU、GPU、各種板卡上的處理器等均屬于計(jì)算資源。

4)能源資源,通常指的是電能的消耗量,由于全球變軟,環(huán)保問(wèn)題的日益重要,這個(gè)在以往被忽視的資源也變得重要起來(lái)。

如何有效利用上述資源,并在各種資源利用間取得均衡,是制定目標(biāo)和需求的基礎(chǔ),也是評(píng)價(jià)程序或算法優(yōu)化程度的基礎(chǔ)。

第三層  本質(zhì)·根源·保障層

資源的有效利用,可不是一件簡(jiǎn)單的事情。在單核時(shí)代,許多程序員已有時(shí)間資源和空間資源的利用及均衡方面的豐富經(jīng)驗(yàn),那時(shí)幾乎不用考慮計(jì)算資源的利用問(wèn)題,因?yàn)樘幚砥髦挥幸粋€(gè)。

然而,在多核系統(tǒng)中,計(jì)算資源的利用成了頭號(hào)問(wèn)題,多個(gè)處理器的使用,使得程序員必須考慮如何將程序在各個(gè)處理器上并行地執(zhí)行,這就牽涉到一個(gè)負(fù)載均衡問(wèn)題。

負(fù)載均衡問(wèn)題歷來(lái)屬于難題,由于客觀上存在大量的共享資源,各種不同的共享資源情況復(fù)雜,并不能簡(jiǎn)單地將負(fù)載平均一下就攤到各個(gè)CPU核上去執(zhí)行。那么用什么來(lái)保障負(fù)載平衡呢?如何去達(dá)到資源有效利用的終極目標(biāo)需求呢?

要保障目標(biāo)需求的實(shí)現(xiàn),其核心就是公平、正義問(wèn)題。當(dāng)然,對(duì)公平、正義這兩個(gè)詞的理解,現(xiàn)實(shí)情況中存在多種解釋,這里采用更廣義的解釋,凡是可從正確的前提通過(guò)邏輯推導(dǎo)出來(lái)的定義,均視做正義,例如自然科學(xué)中的所有公理、定理及推論,均屬于正義。在人類社會(huì)中,一些公認(rèn)的道德標(biāo)準(zhǔn)、法律條文,也屬于正義。

以動(dòng)態(tài)偷取的調(diào)度算法為例,一般都是設(shè)計(jì)成每個(gè)線程一次偷取一個(gè)任務(wù),實(shí)際上已經(jīng)隱含地使用公平正義對(duì)偷取的數(shù)量做了限制,倘若不如此,任由一個(gè)線程一次將隊(duì)列中所有任務(wù)都偷走,那么其他線程就偷不到任務(wù)了,這樣就會(huì)出現(xiàn)負(fù)載不均衡,無(wú)法有效地利用多個(gè)處理器的計(jì)算資源。

再比如基于搶奪的內(nèi)存分配算法,每個(gè)線程使用了共享內(nèi)存后,它并不返回給它的屬主線程,而是據(jù)為己有,這樣時(shí)間一長(zhǎng),必然有某些線程占有了過(guò)多的內(nèi)存資源。為了解決這個(gè)問(wèn)題,解決方法就是每次搶完后,都需要判斷一下自己占有的內(nèi)存數(shù)量是否過(guò)多,過(guò)多的話則主動(dòng)將一部分內(nèi)存歸返給公共內(nèi)存池,從而實(shí)現(xiàn)負(fù)載均衡??梢钥闯龌趽寠Z的內(nèi)存分配算法中也使用了公平、正義以確保負(fù)載均衡。

公平、正義問(wèn)題可以說(shuō)是算法之本,全局效率之源。為什么這么說(shuō)呢?不妨看看現(xiàn)在美國(guó)發(fā)生的次貸危機(jī),其根本原因是由于銀行將貸款發(fā)放給無(wú)償返能力的客戶所造成的。從公平、正義的角度看,實(shí)質(zhì)上是銀行為了自身的貪心、自私,違反了基本的公平、正義問(wèn)題。次貸危機(jī)的后果,無(wú)需我多言,大家均已看到??梢?jiàn),沒(méi)有公平正義,貪心、自私等先天方法策略必然會(huì)被濫用,其結(jié)果必然導(dǎo)致全局的不優(yōu)。

由此可見(jiàn),公平、正義是保障貪心、自私、偷、搶等先天方法策略得以正確使用的前提條件。本層名稱中的本質(zhì)、根源、保障,說(shuō)的就是公平、正義。

需要提及的是,在人類社會(huì)的現(xiàn)實(shí)中,由于人是有情感的,公平正義在執(zhí)行中總會(huì)存在偏差,這時(shí)就需要仁愛(ài)來(lái)彌補(bǔ)其不足,這也許是儒家思想能夠流傳兩千多年而不滅的根本原因。當(dāng)然,如果把仁愛(ài)思想也看作是道德標(biāo)準(zhǔn)的一部分的話,按照前面給出的正義的定義,其實(shí)仁愛(ài)也屬于正義的范疇。

第四層  算法·實(shí)現(xiàn)·執(zhí)行層

通過(guò)上面三個(gè)層面的闡述,可以知道先天的方法策略是實(shí)現(xiàn)優(yōu)化的基本手段,資源有效利用則是實(shí)現(xiàn)優(yōu)化的目標(biāo)需求及評(píng)價(jià)條件,公平、正義則是保障先天的方法策略合理使用的前提條件。是不是有了這幾樣?xùn)|西就可以做到達(dá)成優(yōu)化的最終結(jié)果呢?

答案是“非也”。如果上面那幾個(gè)東西就可以達(dá)成優(yōu)化的結(jié)果,那么從街上隨便抓個(gè)人恐怕都可以寫(xiě)出很好的多核程序來(lái)了,還要程序員干嘛,還要去學(xué)習(xí)多核編程的各種模式、技巧及算法干嘛?

就像學(xué)了牛頓力學(xué)一樣,有些人可以設(shè)計(jì)出摩天大廈,造出各種機(jī)械,有些人卻啥也做不了。何也?運(yùn)用好壞之不同也。要寫(xiě)出好的多核程序,同樣牽涉導(dǎo)如何運(yùn)用上面三層中的基本原理思想方法的問(wèn)題,而要用好這些基本原理思想,更多的還是要靠程序員自身的知識(shí)及能力,最終依賴于算法或程序的具體實(shí)現(xiàn)。就像有了道家,儒家,卻仍然少不了法家、農(nóng)家、醫(yī)家等各個(gè)領(lǐng)域的諸子百家。

怎樣寫(xiě)出好的多核算法或程序來(lái)? “好好學(xué)習(xí)、天天向上”是也2。

 

 

備注:

1 08年深秋,與孟巖先生在上海相聚,一起聊到對(duì)多核計(jì)算的理解時(shí),他談起了各種資源如CPU資源的有效利用問(wèn)題。

2 關(guān)于學(xué)習(xí)寫(xiě)多核程序,提供一些學(xué)習(xí)材料給大家參考如下。

1) 
TBB開(kāi)源項(xiàng)目:  http://www./ 

曾有人說(shuō)過(guò):“源代碼是最好的文檔”。這個(gè)開(kāi)源項(xiàng)目的內(nèi)容不僅是目前多核編程方面做得最好的,更重要的是它里面還掛有很多其他并行計(jì)算方面的開(kāi)源項(xiàng)目的鏈接,因此值得上去看一看。

2)  多核編程高處并不”,文章地址: http://news.csdn.net/n/20081107/120632.html

當(dāng)然這條和最后一條都有給我自己做廣告的嫌疑,之所以不計(jì)嫌疑地推薦大家看這篇文章, 主要的原因是這篇文章里有我對(duì)現(xiàn)在市面上有關(guān)多核編程和并行計(jì)算書(shū)籍的一個(gè)點(diǎn)評(píng)??梢越o大家購(gòu)買書(shū)籍作為一個(gè)參考。

3Intel軟件社區(qū)多核論壇:http://forum.csdn.net/Intel/IntelMulti-core/

4)我的博客:http://blog.csdn.net/drzhouweiming  

里面有一些關(guān)于多核編程方面的文章。

 

上面列出的學(xué)習(xí)材料沒(méi)有包括多線程編程的基礎(chǔ)方面的書(shū)籍資料,這方面的資料網(wǎng)絡(luò)上可以搜索到一大批,出版過(guò)的書(shū)籍眾多,請(qǐng)恕我在這里不一列出。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多