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