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