以下為截止2009年3月21日前發(fā)布在本人博客中的多核相關(guān)的文章匯總,這些文章大部分摘自于我寫的《多核計(jì)算與程序設(shè)計(jì)》一書。現(xiàn)將這些文章分類匯總,方便大家閱讀。
后續(xù)如果博客中繼續(xù)發(fā)布了多核相關(guān)的文章,那么本文章將會(huì)被更新。如果對(duì)多核編程技術(shù)非常感興趣的話,可以考慮將這篇文章加入您的瀏覽器收藏夾中,也歡迎您將這篇文章推薦給您的朋友。
一、基礎(chǔ)篇
1、多核編程的幾個(gè)難題及其應(yīng)對(duì)策略
主要講解多核編程時(shí)的串行化方面的難題及其應(yīng)對(duì)策略。閱讀全文
2、多核編程中的鎖競(jìng)爭(zhēng)難題
鎖競(jìng)爭(zhēng)會(huì)導(dǎo)致加速系數(shù)隨CPU核數(shù)增多而下降的現(xiàn)象。核數(shù)增加到128時(shí),加速系數(shù)只有0.78,還不如在單核CPU上運(yùn)行的速度。 S(p) = (t +1)/ (p + t/p) = p*(t+1) / (p*p+t) (鎖競(jìng)爭(zhēng)下的加速系數(shù)公式) 。閱讀全文
3、多核編程中的負(fù)載平衡難題
負(fù)載平衡的難度與CPU的核數(shù)成正比,CPU核數(shù)越多,負(fù)載劃分的難度就越大。 閱讀全文
二、OpenMP專題
1、OpenMP并行程序設(shè)計(jì)(一)
介紹OpenMP程序在并行計(jì)算時(shí)的效率,在雙核CPU上效率增加了整整一倍。 閱讀全文
2、OpenMP并行程序設(shè)計(jì)(二)
1、fork/join并行執(zhí)行模式的概念 2、OpenMP指令和庫函數(shù)介紹 3、parallel 指令的用法 4、for指令的使用方法 5 sections和section指令的用法。閱讀全文
3、OpenMP中的數(shù)據(jù)處理子句
本文主要介紹了OpenMP中的private、firstprivate、lastprivate、threadprivate、reduction、copyin、copyprivate等數(shù)據(jù)處理子句的用法。 閱讀全文
4、OpenMP中的任務(wù)調(diào)度
本文主要介紹了OpenMP中任務(wù)調(diào)度子句schedule的使用方法。閱讀全文
5、OpenMP創(chuàng)建線程中的鎖及原子操作性能比較
主要比較了原子操作,Windows CriticalSection, OpenMP庫帶的鎖在單任務(wù)運(yùn)行情況下和多任務(wù)運(yùn)行情況下的性能情況,在多核CPU上,多任務(wù)的鎖競(jìng)爭(zhēng)花費(fèi)的時(shí)間是單任務(wù)時(shí)的鎖運(yùn)行花費(fèi)時(shí)間的18倍。鎖競(jìng)爭(zhēng)帶來的效率下降完全出乎意料之外,由此也可見多核編程和單核多任務(wù)編程是有很大區(qū)別的。 閱讀全文
6、OpenMP程序設(shè)計(jì)的兩個(gè)小技巧
講述了如何動(dòng)態(tài)設(shè)置線程數(shù)量以適應(yīng)硬件和軟件的擴(kuò)展性,如何將嵌套循環(huán)并行化的技巧。 閱讀全文
三、性能篇
1、雙核CPU上的快速排序效率
在雙核CPU上運(yùn)行后,打印出花費(fèi)的時(shí)間為 234 ms , 單任務(wù)版的快速排序函數(shù)約需406ms左右,并行運(yùn)行效率為:406/(2×234) = 86.7% 左右。運(yùn)行速度快了172ms。 閱讀全文
2、多核系統(tǒng)中三種典型鎖競(jìng)爭(zhēng)的加速比分析
本文主要討論了固定式鎖競(jìng)爭(zhēng)、隨機(jī)鎖競(jìng)爭(zhēng)、分布式鎖競(jìng)爭(zhēng)三種典型鎖競(jìng)爭(zhēng)情況下的加速比,并分析了任務(wù)粒度因子和鎖粒度因子對(duì)加速比的影響。結(jié)論: 分布式鎖競(jìng)爭(zhēng)加速比隨CPU核數(shù)成正比,可以達(dá)到和單核多任務(wù)時(shí)相當(dāng)?shù)男阅埽嵌嗪司幊痰陌l(fā)展方向。 閱讀全文
3、無鎖編程與分布式編程那個(gè)更適合多核CPU?
本文重點(diǎn)比較了無鎖編程和分布式鎖競(jìng)爭(zhēng)的性能,無鎖(原子操作)實(shí)際上是一種細(xì)粒度鎖。然后又從實(shí)現(xiàn)的功能,程序員掌握難易程度,現(xiàn)有軟件的移植等方面進(jìn)行了比較,得出結(jié)論:無鎖編程遠(yuǎn)不如分布式編程。分布式編程更適合多核CPU系統(tǒng)。 閱讀全文
四、多核編程模式專題
1、多核編程中的線程分組競(jìng)爭(zhēng)模式
討論了使用任務(wù)分組鎖競(jìng)爭(zhēng)方式來消除鎖競(jìng)爭(zhēng)導(dǎo)致的CPU饑餓現(xiàn)象,隊(duì)列池就是任務(wù)分組競(jìng)爭(zhēng)的一個(gè)非常好的實(shí)踐任務(wù)分組競(jìng)爭(zhēng)模式相對(duì)于無鎖編程具有更好的優(yōu)勢(shì)。 閱讀全文
2、多核編程中的線程隨機(jī)競(jìng)爭(zhēng)模式的概率分析
本文主要分析了多個(gè)任務(wù)在隨機(jī)分布式鎖競(jìng)爭(zhēng)的情況下,有不少于CPU核數(shù)個(gè)數(shù)的任務(wù)在運(yùn)行的概率。然后將隨機(jī)競(jìng)爭(zhēng)和無鎖編程的性能進(jìn)行了理論上的比較。閱讀全文
3、多核編程中的條件同步模式
本文講解了一種減少鎖使用的方法,將每次都加鎖改為滿足一定條件時(shí)才加鎖,非常適合具有狀態(tài)機(jī)性質(zhì)的場(chǎng)合使用。 閱讀全文
五、多核數(shù)據(jù)結(jié)構(gòu)與算法專題
1、多核分布式隊(duì)列的實(shí)現(xiàn):偷與自私的運(yùn)用
本文講述了多核系統(tǒng)中分布式隊(duì)列的實(shí)現(xiàn)方法,所謂分布式隊(duì)列指的是每個(gè)線程除了可以訪問線程池外還自動(dòng)擁有一個(gè)本地隊(duì)列。實(shí)現(xiàn)分布式隊(duì)列的基本方法就是“偷”與“自私”。 閱讀全文
2、多核查找-順序查找也瘋狂
用
數(shù)組進(jìn)行查找,由于其插入和刪除需要按順序進(jìn)行,需要移動(dòng)較多的數(shù)據(jù),對(duì)于大數(shù)據(jù)量的查找是無法使用的。然而,在多核時(shí)代,一切都改變了,大數(shù)據(jù)量的查找
結(jié)構(gòu)也可以用數(shù)組來實(shí)現(xiàn)。并且用數(shù)組實(shí)現(xiàn)的大數(shù)據(jù)量查找結(jié)構(gòu)有著比其他查找結(jié)構(gòu)更明顯的優(yōu)勢(shì):效率高、內(nèi)存占用少、并且容易避免偽共享問題。 閱讀全文
3、多核中的并行前綴和計(jì)算
前綴和計(jì)算在并行計(jì)算中很有用,因?yàn)樵谔幚碡?fù)載平衡問題時(shí),經(jīng)常需要將若干段數(shù)據(jù)重新平分,而計(jì)算前綴和通常是一種有效的將數(shù)據(jù)平分的方法。 閱讀全文
六、多核編程思想專題
1、多核新觀念-象使用內(nèi)存一樣使用CPU?
象使用內(nèi)存一樣使用CPU? 閱讀全文
2、“老子”是偉大的多核計(jì)算科學(xué)家
本文主要論述道家的“小國(guó)寡民”,“無為”“大道自然”等思想與多核計(jì)算中使用的思想的異曲同工之處,給出了道家思想在多核計(jì)算中的實(shí)踐實(shí)例分析。大道自然,“貪心”,“自私”,“偷竊”這些大自然賦給人類的自然力量,在多核計(jì)算中得到了廣泛的使用。 閱讀全文
3、多核編程的四層境界
從先天方法策略、目標(biāo)需求評(píng)價(jià)、本質(zhì)根源保障、算法實(shí)現(xiàn)執(zhí)行四個(gè)層面闡述多核計(jì)算的含義 閱讀全文
4、高房?jī)r(jià)與多核分布式計(jì)算
本文主要從多核計(jì)算的角度來論述高房?jī)r(jià)問題及其對(duì)社會(huì)的影響,并給出了高房?jī)r(jià)問題的最終解決措施。 閱讀全文
5、道家·老子的算法思想分析
將
道家老子的思想與軟件中的思想進(jìn)行對(duì)比分析,得出結(jié)論,道家追求穩(wěn)定可靠性。所以歷代在撥亂反正時(shí)期,用的都是道家思想。歷史上最典型的三個(gè)朝代漢、唐、
明為例,漢朝時(shí)張良等人都是好黃老之術(shù)(也就是道家思想),唐朝的宰相魏征也是道家人物,明朝的劉伯溫也是屬于道家人物。 閱讀全文
6、屈原·漁父的算法追求
屈原與漁父兩種不同的思想,相當(dāng)于軟件中的兩種不同算法思想。“世人皆濁,眾人皆醉”可以理解為軟件運(yùn)行的場(chǎng)景。 閱讀全文
更多的多核相關(guān)的資源,可以訪問:
1)Intel軟件社區(qū)多核論壇:http://forum.csdn.net/Intel/IntelMulti-core/
2)Intel的博客:http://softwareblogs-zho.intel.com/
關(guān)于多核相關(guān)的書籍介紹可以參考下面這篇文章:
“多核編程高處并不“寒””,文章地址: http://news.csdn.net/n/20081107/120632.html
這篇文章里有我對(duì)現(xiàn)在市面上有關(guān)多核編程和并行計(jì)算書籍的一個(gè)點(diǎn)評(píng)。可以給大家購(gòu)買書籍作為一個(gè)參考。
多核相關(guān)的開源項(xiàng)目介紹:
1、Intel 開源項(xiàng)目TBB庫,鏈接:http://www.threadingbuildingblocks.org/
這是一個(gè)專門針對(duì)多核的開源項(xiàng)目,包含一些常見的多核數(shù)據(jù)結(jié)構(gòu)與算法,如分段鎖的哈希表、分布式內(nèi)存管理、動(dòng)態(tài)任務(wù)調(diào)度器等,其中最重要的一個(gè)是動(dòng)態(tài)任務(wù)調(diào)度器,可以使用動(dòng)態(tài)任務(wù)調(diào)度器將串行算法自動(dòng)變成并行算法,免去程序員學(xué)習(xí)并行算法之苦。
TBB開源項(xiàng)目的使用方法詳見O’Reilly出版的James Reinders的《Intel Threading Building Blocks》一書,如果要了解它的實(shí)現(xiàn)原理和方法,可以參考我寫的《多核計(jì)算與程序設(shè)計(jì)》一書。
2、Capi開源項(xiàng)目,鏈接:http://gforge.osdn.net.cn/projects/capi
這個(gè)項(xiàng)目是我開發(fā)的一個(gè)針對(duì)多核的數(shù)據(jù)結(jié)構(gòu)與算法庫,提供了許多實(shí)用的適應(yīng)多核系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)與算法,主要的功能有以下一些:
1)各種并行算法,如并行歸并排序、并行基數(shù)排序等并行排序算法;并行順序搜索及終止檢測(cè)算法、并行Dijikstra最短路徑算法等并行搜索算法;并行前綴和、并行矩陣乘法等并行數(shù)值算法;等等。
2)分布式查找算法,如分段鎖的哈希表、動(dòng)態(tài)分布式哈希數(shù)組、動(dòng)態(tài)哈希AVL樹等。
3)搶奪式內(nèi)存管理算法,即使在分配和釋放共享內(nèi)存時(shí),也幾乎不需要使用鎖。
4)基于偷取和自私的分布式隊(duì)列,用分布式隊(duì)列實(shí)現(xiàn)的兩種動(dòng)態(tài)任務(wù)調(diào)度器、以及用動(dòng)態(tài)嵌套任務(wù)調(diào)度器實(shí)現(xiàn)的Parallel_For()功能,用Parallel_For()實(shí)現(xiàn)的并行快速排序算法、并行歸并算法等。
5)任務(wù)圖調(diào)度器,可以用來實(shí)現(xiàn)對(duì)有依賴關(guān)系的執(zhí)行塊的并行計(jì)算。
這個(gè)開源項(xiàng)目和TBB相比起來各有特色,TBB庫的優(yōu)勢(shì)在于它是商業(yè)化的開源項(xiàng)目,代碼經(jīng)過優(yōu)化和相對(duì)完善的測(cè)試。CAPI的代碼專門為學(xué)習(xí)而設(shè)計(jì),代碼沒有經(jīng)過優(yōu)化,代碼簡(jiǎn)單易懂,易于學(xué)習(xí),并且實(shí)現(xiàn)了比TBB庫更多的數(shù)據(jù)結(jié)構(gòu)與算法容器,有一些創(chuàng)新的數(shù)據(jù)結(jié)構(gòu)與算法在里面。其缺點(diǎn)是,現(xiàn)在發(fā)布的版本為0.2版本,如果進(jìn)行商業(yè)使用需要自行增加測(cè)試用例進(jìn)行更完善的測(cè)試和優(yōu)化。
CAPI開源項(xiàng)目的實(shí)現(xiàn)原理和使用方法詳見我寫的《多核計(jì)算與程序設(shè)計(jì)》一書。
posted on 2011-03-20 14:46
小果子 閱讀(593)
評(píng)論(0) 編輯 收藏 引用