多核計算與程序設計

出版時間:2009-3  出版社:華中科技大學  作者:周偉明  頁數(shù):656  
Tag標簽:無  

前言

我的工作要求我跟蹤、了解軟件技術各領域的重要進展。為此,除了頻繁閱讀最新的技術新聞,請教于各路高人,我還必須經常留心市面上的技術圖書。大約是在2006年5月,我在中關村圖書大廈看到一本《多任務下的數(shù)據結構與算法》,作者周偉明,這本書當即引起了我的興趣。自從2005年初Herb Sutter發(fā)表名為《免費午餐已經結束》的著名文章以來,多核計算就一直是整個技術社群關注的熱點問題之一。不過,大家的注意力更多地集中在諸如Java.concurrent、MPI、OpenMP、Intel TBB等程序庫和Pipelining、MapReduce等編程模式上,希望能夠借助一些工具來規(guī)避并發(fā)程序設計所帶來的智力挑戰(zhàn)。毫無疑問,由于并發(fā)程序所具有的復雜性和各種“詭異”問題,在軟件項目實施中,應盡可能利用現(xiàn)成的模式和工具,而要對“土法煉鋼”式的“創(chuàng)新”保持審慎。然而,這并不意味著開發(fā)者可以輕輕地“站在巨人肩膀上”;恰恰相反,如果沒有自下而上地對并發(fā)多任務程序設計下一番苦功進行研究的話,這些模式和工具在我們手中反而可能成為無知和錯誤的放大器,貽害無窮?!抖嗳蝿障碌臄?shù)據結構與算法》這本書的出發(fā)點,即是以并發(fā)和多任務的角度重新審視算法與數(shù)據結構這樣最基本、最重要的知識,從根本上幫助讀者建立對多任務程序本質的正確觀念、知識體系和關鍵技能,對此我是非常認可的。

內容概要

本書主要介紹適應于多核(或多處理器)計算機系統(tǒng)的算法和程序,共分為五個部分進行講解。    第1部分介紹多核編程的基礎知識,包括多核編程常見問題、鎖競爭、加速比、負載均衡等基本概念,多線程退出算法、讀寫鎖、旋轉鎖、原子操作等多線程編程基礎知識,基于OpenMP標準的并行程序設計基礎等;    第2部分介紹基礎的數(shù)據結構與算法,包括數(shù)組、鏈表、哈希表、二叉樹、AVL樹、復合二叉樹等基本數(shù)據結構,在鏈表那章中還講解了多線程并行遍歷的基本方法。    第3部分介紹多核并行計算方面的基礎知識,并行編程包括常用的編程模式如分治模式、流水線模式、任務圖分解與調度模式、動態(tài)任務調度模式等,并行搜索包括順序搜索及終止檢測算法,并行最短路徑搜索等,并行排序包括并行快速排序、并行歸并排序、并行基數(shù)排序等,并行數(shù)值計算包括并行矩陣乘法、并行前綴和計算等方面的內容。本部分介紹的各種并行算法和程序中,重點介紹如何解決多核系統(tǒng)中的計算隨CPU核數(shù)的擴展性,CPU Cache偽共享方面的問題。    第4部分介紹多核共享資源計算方面的內容,也是本書中最重要的內容,講解了分布式計算設計模式如線程分組競爭模式、條件同步模式、批量私有化處理模式、數(shù)據本地化模式等。這部分中講解了本書中幾個最重要的程序:分布式隊列中實現(xiàn)了自動讓每個線程帶有一個本地隊列、分布式查找中介紹了分段鎖的哈希表、動態(tài)負載平衡的分布式查找等,分布式內存管理則介紹了適應多核的內存管理方案,尤其是基于搶奪式的分布式內存管理算法,在分配和釋放共享內存時也幾乎不需要使用鎖,性能優(yōu)異。    第5部分介紹任務分解與調度方面的知識,這也是本書中最重要的內容,包括任務圖分解與調度的實現(xiàn)方法,動態(tài)任務分解與調度的實現(xiàn)方法等。其中還介紹了使用動態(tài)嵌套任務調度進行并行計算的方法,給出了用動態(tài)嵌套任務調度實現(xiàn)ParallelForo、并行快速排序、并行歸并的實例。    最后一章中還介紹了Lock-Free編程(使用CAS原子操作進行編程)的基礎知識,如ABA問題,內存刪除問題等,并給出了一個Lock-Free的隊列的實現(xiàn)實例。

作者簡介

周偉明,1994年畢業(yè)于上海交通大學,曾就職于美國加州的DASCOM Inc.公司和華為技術有限公司等企業(yè)。擔任過網絡安全軟件、網絡服務器軟件、機器翻譯軟件、工具軟件、嵌入式系統(tǒng)軟件等研發(fā)工作,親自編寫過的源代碼逾40萬行。著有《多任務下的數(shù)據結構與算法》(華中科技大學

書籍目錄

第1部分 基礎知識  1  多核計算概述      1.1  多核CPU概述        1.1.1  多核計算將成為發(fā)展趨勢        1.1.2  多核CPU硬件架構介紹        1.1.3  多核給程序員帶來的機遇和挑戰(zhàn)      1.2  多核編程會遇到那些問題        1.2.1  并發(fā)性問題        1.2.2  CPU饑餓問題        1.2.3  任務的分解與調度問題        1.2.4  加速比性能問題        1.2.5  節(jié)能環(huán)保問題        1.2.6  擴展性問題      1.3  多核編程與單核多線程編程的區(qū)別        1.3.1  鎖競爭導致的串行化的區(qū)別        1.3.2  線程分解與執(zhí)行的區(qū)別        1.3.3  CPU核負載平衡的區(qū)別        1.3.4  任務調度策略的區(qū)別        1.3.5  CPU Cache存取的區(qū)別(偽共享問題)      1.3.6  任務優(yōu)先級搶占的區(qū)別        1.3.7  串行計算與并行及分布式計算的區(qū)別      1.4  多核編程與多機分布式編程的區(qū)別        1.4.1  共享存儲與分布式存儲的區(qū)別        1.4.2  分布式計算的區(qū)別        1.4.3  編程環(huán)境上的區(qū)別      1.5  加速比系數(shù)        1.5.1  阿姆達爾定律        1.5.2  Gustafson定律        1.5.3  阿姆達爾定律和Gustafson定律的等價性        1.5.4  Karp-Flatt度量        1.5.5  實際情況中影響加速比系數(shù)的因素        1.5.6  并行計算開銷情況下的加速比      1.6  鎖競爭問題及對加速比的影響        1.6.1  線程粒度因子與鎖粒度因子        1.6.2  鎖競爭的性能情況        1.6.3  集中式鎖競爭中的加速比分析        1.6.4  隨機鎖競爭中的加速比分析        1.6.5  分布式鎖競爭的加速比分析        1.6.6  無鎖編程的加速比分析      1.7  負載平衡問題對加速比的影響        1.7.1  影響負載平衡的主要因素        1.7.2  負載平衡的評價指標        1.7.3  負載平衡情況下的加速比      1.8   參考文獻                                                         2  多線程編程基礎      2.1  多線程編程基本概念        2.1.1  線程        2.1.2  鎖        2.1.3  各種系統(tǒng)中常用的鎖操作及信號量操作函數(shù)        2.1.4  用C++實現(xiàn)鎖的自動釋放        2.1.5  原子操作        2.1.6  鎖與原子操作的區(qū)別        2.1.7  有鎖計算、無鎖計算與本地計算的概念      2.2  各種鎖性能比較        2.2.1  各種鎖在單線程情況下的性能        2.2.2  各種鎖在多線程集中式鎖競爭情況下的性能        2.2.3  各種鎖在多線程分布式鎖競爭情況下的性能      2.3  讀寫鎖算法        2.3.1  讀寫鎖概念的引出        2.3.2  讀寫鎖算法的分析和實現(xiàn)        2.3.3  讀寫鎖的編碼實現(xiàn)      2.4  多線程退出算法        2.4.1  單個子線程退出算法        2.4.2  多個線程訪問共享資源時的退出        2.4.3  有鎖的多線程資源釋放退出算法實現(xiàn)        2.4.4  無鎖的退出算法        2.4.5  多線程退出算法的使用      2.5  參考文獻  3  OpenMP程序設計      3.1  OpenMP基本概念        3.1.1  fork/join并行執(zhí)行模式的概念        3.1.2  內存模型        3.1.3  性能例子        3.1.4  編譯器對OpenMP的支持      3.2  OpenMP編程模型        3.2.1  OpenMP編譯指導語句格式        3.2.2  OpenMP主要命令        3.2.3  OpenMP主要子句        3.2.4  OpenMP主要庫函數(shù)      3.3  線程創(chuàng)建與工作分攤        3.3.1  parallel命令        3.3.2  for和parallel for命令        3.3.3  if子句(條件執(zhí)行并行)        3.3.4  動態(tài)設置并行循環(huán)的線程數(shù)量        3.3.5  循環(huán)并行化的問題        3.3.6  sections和section命令        3.3.7  single命令        3.3.8  master命令      3.4  數(shù)據處理        3.4.1  private子句        3.4.2  firstprivate子句        3.4.3  lastprivate子句        3.4.4  threadprivate子句        3.4.5  shared子句        3.4.6  default子句        3.4.7  reduction子句        3.4.8  copyin子句        3.4.9  copyprivate子句      3.5  任務調度        3.5.1  Schedule子句用法        3.5.2  靜態(tài)調度(static)        3.5.3  動態(tài)調度(dynamic)        3.5.4  guided調度(guided)        3.5.5  runtime調度(rumtime)        3.5.6  任務調度與偽共享問題      3.6  線程間的同步        3.6.1  barrier命令        3.6.2  critical命令        3.6.3  atomic命令        3.6.4  ordered命令和子句        3.6.5  nowait子句        3.6.6  flush命令      3.7  OpenMP庫函數(shù)詳解        3.7.1  執(zhí)行環(huán)境函數(shù)        3.7.2  鎖操作函數(shù)        3.7.3  時間操作函數(shù)      3.8  OpenMP環(huán)境變量        3.8.1  OMP_DYNAMIC        3.8.2  OMP_NUM_THREADS        3.8.3  OMP_NESTED        3.8.4  OMP_SCHEDULE      3.9  OpenMP內部控制變量及相關流程        3.9.1  內部控制變量        3.9.2  任務調度流程        3.9.3  線程數(shù)量決定流程    3.10  參考文獻  第2部份 基礎數(shù)據結構與算法  4  數(shù)組      4.1  棧        4.1.1  棧的基本概念        4.1.2  棧的編碼實現(xiàn)        4.1.3  多線程棧的實現(xiàn)    4.2  對數(shù)組進行快速排序      4.2.1  排序算法介紹        4.2.2  串行快速排序基本思想        4.2.3  串行快速排序的代碼實現(xiàn)      4.2.4  非遞歸的快速排序算法      4.2.5  快速排序算法的復雜度分析    4.3  對數(shù)組進行查找      4.3.1  順序查找        4.3.2  二分查找      4.4  實例:用數(shù)組管理一個HOOK功能        4.4.1  單個函數(shù)的HOOK實現(xiàn)        4.4.2  多個函數(shù)的HOOK實現(xiàn)        4.4.3  HOOK功能的應用簡介        4.4.4  HOOK使用的注意事項      4.5  參考文獻    5  鏈表      5.1  單向鏈表        5.1.1  存儲表示        5.1.2  接口設計        5.1.3  添加節(jié)點到鏈表頭部      5.1.4  基本功能編碼實現(xiàn)    5.2  單向鏈表的排序        5.2.1  插入排序        5.2.2  歸并插入排序      5.3  雙向鏈表        5.3.1  雙向鏈表的基本概念        5.3.2  雙向鏈表的設計        5.3.3  雙向鏈表的操作接口      5.3.4  雙向鏈表的編碼實現(xiàn)      5.4  鏈表的逐個節(jié)點遍歷        5.4.1  逐個節(jié)點遍歷基本概念        5.4.2  逐個節(jié)點遍歷編碼實現(xiàn)    5.5  多線程遍歷算法        5.5.1  多線程鏈表的設計和編碼實現(xiàn)        5.5.2  多線程鏈表的4種遍歷方案        5.5.3  多個線程同時遍歷的情況      5.6  實例:使用鏈表管理短信息系統(tǒng)的CACHE        5.6.1  短信息系統(tǒng)的CACHE管理基本概念        5.6.2  短信息系統(tǒng)的發(fā)送和接收分析        5.6.3  短信息系統(tǒng)CACHE管理的編碼實現(xiàn)    6  哈希表      6.1  哈希表        6.1.1  哈希表的基本概念        6.1.2  哈希表的索引方法        6.1.3  哈希表的沖突解決方法        6.1.4  哈希表基本操作的源代碼      6.2  哈希鏈表        6.2.1  哈希表和數(shù)組、鏈表的效率比較        6.2.2  時間效率和空間效率的關系        6.2.3  哈希鏈表的基本概念        6.2.4  哈希鏈表的操作        6.2.5  哈希鏈表的編碼實現(xiàn)      6.3  實例:WebServer的動態(tài)CACHE文件管理        6.3.1  WebServer的動態(tài)CACHE文件管理基本概念        6.3.2  CACHE文件管理功能的設計        6.3.3  CACHE文件管理功能的編碼實現(xiàn)        6.4  參考文獻    7  普通樹與二叉樹      7.1  普通樹        7.1.1  普通樹的描述方法        7.1.2  樹的操作接口設計        7.1.3  樹的遍歷算法        7.1.4  樹的編碼實現(xiàn)        7.1.5  使用樹的遍歷算法來實現(xiàn)Xcopy功能      7.2  二叉樹        7.2.1  二叉樹的基本概念        7.2.2  二叉樹的樹梢及二叉樹的高度        7.2.3  二叉樹的描述方法      7.3  二叉排序樹        7.3.1  二叉排序樹的基本概念        7.3.2  二叉排序樹的查找        7.3.3  二叉排序樹的插入        7.3.4  二叉排序樹的刪除        7.3.5  二叉排序樹的遍歷        7.3.6  二叉排序樹的旋轉操作    8  AVL搜索樹      8.1  AVL搜索樹的基本概念      8.2  AVL搜索樹的插入        8.2.1  插入操作需要考慮的問題        8.2.2  不存在不平衡節(jié)點的情況分析        8.2.3  不平衡A節(jié)點的情況分析        8.2.4  存在不平衡節(jié)點的四種情況分析        8.2.5  LL型不平衡情況的調整        8.2.6  LR型不平衡情況的調整        8.2.7  插入操作的偽代碼描述      8.3  AVL搜索樹的刪除        8.3.1  A節(jié)點的確定        8.3.2  幾種不平衡情況的分析        8.3.3  L0型調整分析        8.3.4  L-1型調整分析        8.3.5  L1型調整分析        8.3.6  刪除操作的偽代碼描述      8.4  負載平衡的AVL樹        8.4.1  基本概念的引出        8.4.2  插入操作中負載因子的調整        8.4.3  刪除操作中負載因子的調整        8.4.4  L0和L-1型調整分析        8.4.5  L1型調整分析      8.5  AVL樹的源代碼        8.5.1  數(shù)據結構定義        8.5.2  創(chuàng)建、釋放、查找等操作        8.5.3  旋轉操作函數(shù)        8.5.4  插入操作函數(shù)        8.5.5  刪除操作函數(shù)      8.6  參考文獻    9 復合二叉樹                                                         9.1  哈希紅黑樹                                                          9.1.1  哈希紅黑樹的基本概念                                            9.1.1  哈希紅黑樹的查找                                            9.1.3  哈希紅黑樹的插入                                            9.1.4  哈希紅黑樹的刪除                                            9.1.5  哈希紅黑樹的釋放                                            9.1.6  哈希紅黑樹的遍歷                                            9.1.7  哈希紅黑樹的編碼實現(xiàn)                                            9.1.8  哈希紅黑樹的效率分析                                          9.2  哈希AVL樹                                                    9.2.1  哈希AVL樹的基本概念                                            9.2.2  哈希AVL樹的查找                                            9.2.3  哈希AVL樹的插入                                            9.2.4  哈希AVL樹的刪除                                            9.2.5  哈希AVL樹的釋放                                            9.2.6  哈希AVL樹的遍歷                                            9.2.7  哈希AVL樹的編碼實現(xiàn)                                          9.3  復合數(shù)據結構的分類                                                  9.4  抗DoS/DdoS攻擊的實例                                            9.4.1  DoS/DdoS攻擊的概念                                            9.4.2  常見DoS/DdoS攻擊手段及防范策略                                  9.4.3  抗DoS/DdoS攻擊的實現(xiàn)                                            9.4.4  抗DoS/DdoS攻擊的編碼實現(xiàn)                                          9.5  參考文獻                                                      第3部分 并行計算  10  并行程序設計模式      10.1  基本概念        10.1.1  強并行計算與弱并行計算        10.1.2  并行程序設計模式的基本思路      10.2  模式數(shù)據分解模式      10.3  分治模式      10.3.1  子問題求解時的負載平衡問題        10.3.2  子問題的解的合并可能引起的串行化問題      10.4  流水線模式      10.5  任務并行模式      10.6  任務調度模式        10.6.1  任務圖調度模式        10.6.2  動態(tài)任務調度模式    11  并行搜索      11.1  并行順序搜索        11.1.1  并行搜索指定數(shù)據        11.1.2  并行搜索最大數(shù)        11.1.3  終止檢測算法      11.2  串行Dijkstra最短路徑搜索        11.2.1  Dijkstra最短路徑算法的描述        11.2.2  Dijkstra最短路徑算法的過程圖解        11.2.3  偽代碼描述        11.2.4  算法流程圖        11.2.5  C/C++代碼實現(xiàn)      11.3  并行最短路徑算法        11.3.1  Dijkstra算法的并行化        11.3.2  并行Dijkstra算法的代碼實現(xiàn)        11.3.3  其他并行最短路徑算法的介紹和分析      11.4  參考文獻    12  并行排序      12.1  并行排序概述      12.2  冒泡排序      12.2.1  串行冒泡排序      12.2.2  奇偶排序      12.3  快速排序      12.3.1  串行快速排序基本思想        12.3.2  串行快速排序的代碼實現(xiàn)        12.3.3  快速排序并行化方法        12.3.4  開源項目mcstl中的并行快速排序        12.3.5  基于任務竊取的快速排序      12.4  并行歸并排序        12.4.1  串行歸并算法        12.4.2  Cole并行歸并算法        12.4.3  并行快速歸并排序      12.5  基數(shù)排序        12.5.1  串行鏈式基數(shù)排序        12.5.2  串行數(shù)組基數(shù)排序        12.5.3  一步到位的分層排序        12.5.4  負載平衡的并行基數(shù)排序        12.5.5  分區(qū)的并行基數(shù)排序    13  并行數(shù)值計算      13.1  多核并行數(shù)值計算面臨的問題        13.1.1  Cache的命中率問題        13.1.2  偽共享問題      13.2  求和及前綴求和      13.3  矩陣相加      13.4  矩陣相乘        13.4.1  基本概念        13.4.2  串行算法        13.4.3  并行算法      13.5  矩陣向量相乘      13.6  并行隨機數(shù)生成      13.7  參考文獻  第4部分 共享資源分布式計算  14  分布式計算設計模式      14.1  基本概念        14.1.1  共享資源的計算分解      14.1.2  共享資源計算的負載均衡問題        14.1.3  共享資源計算的算法設計思路與方法      14.2  線程分組競爭模式        14.2.1  標準的線程分組競爭模式        14.2.2  線程分組競爭模式的變種        14.3  線程隨機競爭模式        14.3.1  基本概念        14.3.2  加速比性能的保證      14.4  數(shù)據本地化模式        14.4.1  取得比單核多線程更好的性能        14.4.2  數(shù)據本地化模式        14.4.3  優(yōu)缺點分析      14.5  分布式數(shù)據結構設計        14.5.1  復合數(shù)據結構設計方法        14.5.2  分布式數(shù)據結構設計        14.5.3  分布式數(shù)據結構主要問題      14.6  參考文獻    15  分布式隊列      15.1  串行隊列        15.1.1  簡單環(huán)形隊列        15.1.2  STL中的Deque        15.1.3  動態(tài)環(huán)形隊列      15.2  隊列池        15.2.1  共享隊列        15.2.2  消息隊列        15.2.3  隊列池        15.2.4  隊列池的幾種實現(xiàn)方案        15.2.5  隊列池的使用實例      15.3  帶本地計算的分布式隊列        15.3.1  基本思想        15.3.2  本地化隊列的實現(xiàn)        15.3.3  任務偷取隊列的實現(xiàn)        15.3.4  分布式隊列的實現(xiàn)        15.3.5  線程池CThreadPool的實現(xiàn)        15.3.6  線程池CThreadPool的代碼實現(xiàn)      15.3.7  CDistributedQueue源代碼        15.3.8  CDistributedQueue的使用實例    16  分布式查找      16.1  多核中查找的問題與主要思路      16.2  靜態(tài)負載平衡的二級查找結構設計        16.2.1  二級查找結構設計        16.2.2  分布式哈希AVL樹        16.2.3  分布式順序AVL樹      16.3  動態(tài)負載平衡的多級查找結構設計        16.3.1  分布式查找中的負載平衡問題        16.3.2  多級查找結構設計方法        16.3.3  多級查找表的查找算法        16.3.4  多級查找表的插入操作算法        16.3.5  多級查找表的刪除操作算法        16.3.6  多級順序表        16.3.7  多級索引AVL樹        16.3.8  分布式哈希多級AVL樹        16.3.9  分布式順序多級AVL樹      16.4  多核環(huán)境中查找算法的選用方法      16.5  動態(tài)WebCache設計實例    17  分布式內存管理      17.1  多核內存管理的基本思想        17.1.1  內存管理方面的需求        17.1.2  多核系統(tǒng)中的內存管理思路    17.2  等尺寸內存管理        17.2.1  Freelist內存管理基本概念        17.2.2  Freelist編碼實現(xiàn)        17.2.3  FreeLists內存管理      17.3  Intel 開源項目TBB中的內存管理        17.3.1  偽共享問題        17.3.2  Cache對齊的內存管理        17.3.3  數(shù)據結構        17.3.4  將內存管理器映射到線程        17.3.5  分配和釋放算法        17.3.6  線程退出時的內存回收      17.4  搶奪式內存管理算法        17.4.1  算法基本思想        17.4.2  碎片重組回收利用技術        17.4.3  搶奪式算法的詳細算法流程        17.4.4  代碼實現(xiàn)      17.5  偽共享問題的深入分析        17.5.1  內存釋放時的偽共享問題        17.5.2  偽共享問題的概率分析        17.5.3  用戶程序使用內存過程中的偽共享問題        17.5.4  分布式內存管理的進一步改進措施      17.6  參考文獻  第5部分 任務分解與調度  18  任務圖分解與調度      18.1  任務分解與調度的問題        18.1.1  使用OpenMP調度的問題        18.1.2  任務圖調度模型        18.1.3  任務圖調度算法簡介      18.2  任務組調度算法        18.2.1  基本思路        18.2.2  任務組調度算法        18.2.3  算法流程圖        18.2.4  數(shù)據結構與接口設計        18.2.5  代碼實現(xiàn)        18.2.6  任務組調度的應用分析        18.2.7  誤差下降調度算法      18.3  任務圖調度算法        18.3.1  任務圖的分層算法        18.3.2  分層算法過程圖解        18.3.3  數(shù)據結構和接口設計        18.3.4  分層算法的代碼實現(xiàn)        18.3.5  任務調度器的代碼實現(xiàn)        18.3.6  實例:任務圖調度器的使用      18.4  手工任務分解的原則和方法        18.4.1  任務間負載均衡的影響因素        18.4.2  任務分解原則和方法      18.5  參考文獻    19  動態(tài)任務分解與調度      19.1  動態(tài)任務分解的兩種類型      19.2  非嵌套型動態(tài)任務調度        19.2.1  網絡服務器軟件中的任務調度        19.2.2  使用分布式隊列的調度方法        19.2.3  CTaskScheduler的設計        19.2.4  CTaskScheduler的代碼實現(xiàn)      19.3  嵌套型動態(tài)任務調度        19.3.1  基本思想        19.3.2  CNestTaskScheduler的設計        19.3.3  CNestTaskScheduler的代碼實現(xiàn)        19.3.4  CNestTaskScheduler使用方法      19.4  實例:用任務調度器實現(xiàn)parallel_for        19.4.1 parallel_for的實現(xiàn)      19.4.2 用parallel_for進行并行快速排序      19.4.3 用parallel_for進行并行歸并    19.5  參考文獻    20  Lock-Free編程基礎      20.1  Lock-Free編程基本概念和問題        20.1.1  CAS原子操作        20.1.2  ABA問題        20.1.3  ABA問題的解決方法        20.1.4  內存刪除問題      20.1.5  數(shù)據競爭問題      20.2  Lock-Free的隊列        20.2.1  無鎖隊列的鏈式實現(xiàn)方法        20.2.2  串行實現(xiàn)方法        20.2.3  出隊操作的Lock-Free實現(xiàn)        20.2.4  進隊操作的Lock-Free實現(xiàn)        20.2.5  CLockFreeQueue的實現(xiàn)代碼      20.3  Lock-Free程序的問題分析      20.4  參考文獻        附錄1 本書代碼和CAPI開源項目源文件對照表附錄2 多核編程的四層境界

章節(jié)摘錄

插圖:第1部分 基礎知識1 多核計算概述 1.1 多核CPU概述 1.1.1 多核計算將成為發(fā)展趨勢 1.單核CPU的發(fā)展限制在過去的幾十年里,個人PC的CPU速度的發(fā)展一直按照摩爾定律進行——半導體廠商能夠集成在芯片中的晶體管數(shù)量每l8~24個月翻一番,反映到實際使用中就是處理器的時鐘頻率每18~24個月增加一倍。因此,長期以來提高處理器的主頻成為提高CPU速度的不二法則。目前,單核CPU的速度已超過3 GHz。提高主頻會增加處理器的功耗和設計的復雜度,其中最大的困難就是提高主頻所帶來的高發(fā)熱問題;如果繼續(xù)提高主頻,高發(fā)熱問題將成為不可克服的障礙,它會導致芯片運行不穩(wěn)定,因此目前主頻的提升空間已經不大。在單核時代,提高性能的另一手段是用superscalar(超標量)處理器的方式,讓處理器在一個時鐘周期內執(zhí)行多條指令。超標量處理器通常有兩個或多個處理單元,利用這些硬件資源,需要對軟件進行精心設計;要適應多流水線,需要對軟件進行大量的修改,這些都會影響軟件的可移植性。

編輯推薦

《多核計算與程序設計》特色內容:并行遍歷的基本方法,常見并行算法如并行搜索、并行排序、并行數(shù)值計算等在多核系統(tǒng)中的實現(xiàn)。共享資源分布式計算的基本編程模式和方法,分布式隊列,它能自動給每個線程賦予一個本地隊列,它是基于偷取的共享隊列和隊列池來實現(xiàn)的。分布式查找,包括分段鎖的哈希表,動態(tài)負載平衡的多級查找等。分布式內存管理,它自動給每個線程生成一個本地的內存管理器,并且?guī)缀醪恍枰褂面i進行內存分配和釋放(搶奪式內存管理)。任務圖分解與調度及實現(xiàn)方法,非嵌套任務調度,可用于網絡服務器軟件等地方進行任務調度。嵌套任務調度,是另一種更廣泛的任務調度方法,可以用它實現(xiàn)各種并行計算。各種程序和算法中的偽共享問題的處理,Lock-Free編程基礎知識。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    多核計算與程序設計 PDF格式下載


用戶評論 (總計93條)

 
 

  •   一直以來都非常關注多核編程方面的技術,市面上的相關書籍幾乎都是講多線程編程和并行程序設計的,缺乏真正針對多核編程的書籍,難得出了一本這樣專門針對多核編程的書籍,真是及時而幸運!分布式隊列,動態(tài)任務調度,任務圖調度,搶奪式內存管理,都是非常實用好東東。希望作者再厲,多寫幾部巨作。
  •   該書以openMP為基礎介紹了并行運算的方方面面,包括數(shù)據結構、算法、多核運算的公式理論等,是一本不可缺少的書。該書是以《多任務下的數(shù)據結構與算法》為基礎擴展開來寫的,所以買了這本書就可以了。
  •   過去的并行計算都是專用計算機上才能實現(xiàn),現(xiàn)在可以配個多核CPU自己搞了,很開心!
  •   用了一周時間快速閱讀了本書,感覺收獲很大,把我從一個對多核并行沒有多少實踐經驗的人迅速的帶入了門。很適合在企業(yè)中做基礎研究方向的人。
  •   并行計算程序設計比較困難,它和硬件有關,有幫助的一本書
  •   前段時間寫多核服務器上的程序,性能要求很高,修改了好幾次也達不到要求,領導催得我都快跳樓了?。?!沒想無意中在當當網上發(fā)現(xiàn)這個法寶。看介紹寫的挺不錯的,流血買了一本。這幾天一直在看,感覺很爽。里面對多核的講解非常透徹,更爽的是還有多核上的各種算法和源碼,這下省老事兒了,不用跳樓了。說實話,看了這本書,才真正明白多核計算的內涵,書中的很多觀點也很新穎,讀起來耳目一新。為多核算法發(fā)愁的朋友,此書必備。目前還沒有讀完,等有新的發(fā)現(xiàn)了再來和大家一起分享。
  •   內容大多是多核下的算法和數(shù)據結構,和以往的算法和數(shù)據結構的書最大的不同就是有非常多的實際項目中的算法和數(shù)據結構的應用,而且講了很多高級的結構,比如AVL數(shù),如果為了應付考試這本書并不適合,他只適合想然自己軟件開發(fā)水平提高一個層次的人.
  •   看了前面兩章,這是多核多線程不可多得的佳作,作者寫得非常用心。先是說多核、多線程的區(qū)別,性能比較。最后由淺入深展開,非常喜歡這種寫書方式。
  •   發(fā)現(xiàn)書中的內容大部分都是作者平時編程中所親身經歷的,而且言簡意駭,比一般的OpenMp語法書參考價值要大得多。
    書中后半部分的數(shù)據結部分也很精彩。
  •   學習多核編程強烈推薦?。?!
  •   在當當網買了很多書了,計算機方面書的層次,真的參差不齊,看過很多湊字數(shù),思路混亂、就知道東拼西湊動抄西抄的計算機方面所謂的著作,再在看周老師的書,感覺真的很不一樣,如標題所說,周老師的這本書,寫的真的非常嚴謹,所講解的東西,雖然有難度,但是,解釋的很透徹,雖然沒看完,有些地方也沒完全看懂,但是,已經獲益匪淺,而且每章,都附帶了參考文獻的出處,對于立志做多核開發(fā),或者對多核感興趣的盟友來說,值得一讀。希望當當能多推薦類似的好書,讓更多的同盟兄弟少走彎路。
  •   若每個算法之后跟上一兩個例程就更完美了。
  •   書非常不錯!沒完全看完!對學習多核程序設計很有幫助!
  •   作者寫的是好書,開闊眼界,算法實用,講解詳細...
  •   不錯,就是排版不太好,多核時代不能落后啊
  •   有一本專業(yè)計算機編程的書
  •   介紹了很多ope**的內容,還不錯
  •   很專業(yè)的書籍,周博主總結的也很精辟到位,推薦做多核心程序的程序員購買學習。
  •   有個程序光盤就好了,
  •   看了一部分,講解很清晰
  •   剛拿到書,看了一個大概,感覺很不錯。
  •   基本不買國人寫的書,只有少數(shù)例外--本書是這些例外之一。作為多年的從業(yè)人員,作者在寫本書的時候非常用心。
  •   一直不喜歡國人寫的書,但是這本書真的不錯。雖然也是長篇大論的理論,但是確實是自己寫東西,可以獲取到營養(yǎng)。缺點也是一樣的 。偏理論了
  •   書真的很不錯,質量和內容,值得推薦
  •   內容很適合工程應用,相比一些學術性的書籍更加平易近人
  •   是本很有用的書。內容很實用。
  •   數(shù)雖然挺厚,但感覺很多東西都是東拼西湊的,并沒有多少是作者自己的東西。
  •   計算機的未來
  •   很有用的一本書,老師推薦的
  •   我前陣子剛買的這本書,質量挺好的,服務也不錯,就是當時忘了要發(fā)票了,現(xiàn)在還能不能補?
  •   買了這本書,講的很是不錯,學習ing.
  •   書不錯,但審閱質量不好,自序就發(fā)現(xiàn)錯誤
    作者csdn的博客地址寫錯了
    應該是:****://blog.csdn****/drzhouweiming
    寫成了:****://blog.csdn.ent/drzhouweiming
  •   我覺得這是個趨勢,應該好好學習一把
  •   還沒有仔細看,好厚的書
  •   快遞很快,一天就到了,質量也非常好,隨便翻了一下,還沒認真看,感覺不錯
  •   畢設要用的,就買了。理論陳述比較多吧
  •   書寫的相當好,例子清晰,實踐性強
  •   剛拿到書,翻了翻,雖然貴了點,的確是好書!
  •   本來很想買的?。?!
  •   不過還沒看 哈哈
  •   推薦一下~線程調度的思想,有點啟發(fā).不過貌似VC8以上的才支持OpenMP庫..也沒有實驗過.
  •   內容還是可以,openMPI講的比較詳細, 但是分布式講的相對多核來說比較簡略, 沒有實例.
  •   本書的特點就是通俗易懂,個人感覺比較容易上手。在閱讀本書之前,建議先學習操作系統(tǒng),了解進程,線程及相關只是,有一定編程基礎。自己學習了幾章,感覺很不錯!很喜歡作者的風格!
  •   正在看,不過不是計算機專業(yè)的,我做底層的軟件的,沒搞過多核CPU,只想了解,了解知識
  •   在多核這些書里,這本算不錯的了
  •   書寫得有些偏理論。。。很多的計算公式。。。。慢慢看
  •   這本書介紹的很詳細,是一本適合初學者的書。作者功底深厚,講解的很到位,是一本好的國產技術書籍
  •   目前比較熱的技術,還行吧,不過內容不算多合全
  •   初看了這本書的序言和后記,感覺作者是一個有思想的人,閱讀的第一張,作者的思路還是非常清晰的,希望這本書能給我?guī)硇碌膯l(fā)
  •   書還是很有感覺的,內容還沒有細看,估計也只能看看書皮了,相信買這本書的都不是什么初學的吧
  •   適合一定專業(yè)知識的人員閱讀
  •   看了一下,第一章有點困難。個人感覺,本書缺乏相應的習題,缺乏相應學習的指引,而且本書參考的熟悉論文有很多,給人的感覺是東西抄來的。說得有不得當之處,請多多指正。總的來說還是挺好的。
  •   這本書還不錯,與以前的ERLANG語言學起來很有意思
  •   大部頭,靜下心來細細研讀
  •   對實際的軟件開發(fā)工作很有借鑒意義。
  •   雖然厚,可就是一本湊字數(shù)的書。
  •   送來的時候包裝壞了,封面各種褶皺,看著蛋疼。
  •   書剛到手
  •   國內人編的書,希望會很好,紙質還是不錯的
  •   當工具書,不錯
  •   據說不錯,正在看
  •   書是很好的,可是代碼下載地址無法打開,提示“抱歉,您訪問的頁面沒找到”,這是為什么?
  •   剛開始看,喜歡作者的風格!作者還是花了心思的!
  •   有詳細的代碼解釋,很有參考價值
  •   買的時間久了,現(xiàn)在收藏了,理論較多,講的比較深,不容易看懂的書。
    希望做多線程的時候做指導。
  •   書內容不錯,有深度,不過里面有好幾頁比較舊,貌似這本書是積壓了很長時間;不過我是報銷的,所以沒有去換。希望店家下次不要這樣。
  •   既然買了,就細細的看唄,又不給退!
  •   一般一般,有點羅嗦!
  •   感覺理論居多,沒怎么看
  •   這本書買的有點虧啊,不值
  •   里面又是一本粘貼代碼的書,竟然連程序設計的流程圖也沒給,而且代碼注釋甚少,并且里面的原理只是淺嘗輒止!
  •   最關鍵的多核編程lockfree才聊聊數(shù)語。。確話大量的文章放在openmp和數(shù)據結構上面。。這本書比較適合大學里面的初學者。
  •   書很不錯,內容很全面。但是,個人覺得介紹面還是太寬了,并且真正涉及并行算法的內容是不是占的比重要再多一些??在對比一下串行和并行算法方面,串行算法介紹一下就行了,沒必要把串行的算法都貼出來的。
  •   是一本很好的學術教材,但是需要很長時間的詳細研讀才能了解。不過,現(xiàn)在隨著函數(shù)型語言的興起(比如Erlang、Scala),并發(fā)編程變得容易了。是否還要花這么大的力氣研究傳統(tǒng)語言的并行化改進?
  •   這本書一方面頗有理論深度,但是又貼近實際。更為可貴的是,它不是從其他國外書籍的抄襲、引用,而是從作者自己的經驗出發(fā),寫作非常用心的一本書,通俗易懂,而且在技術上的講解,不亞于國外的同類書籍,甚至于更好。這在國內的計算機類圖書是很少見的。真心希望國內能有更多這樣的書籍涌現(xiàn),這可能也是我國計算機軟件發(fā)展水平的體現(xiàn)吧。非常感謝作者的創(chuàng)作!強烈支持!推薦!
  •   不怎麼樣,沒有什麼實用價值 寫的很一般
  •   寫的比較詳細,像我這樣的初學者都能看懂,很好,就是太厚了,看了好久都沒看完,要加油啦!
  •   很好,很強大,正是我所需要的。
  •   講的很全面,是作者參加工作很多年之后寫出的書,理論實踐俱備
  •   針對linux平臺的多核技術的書不多,這本書還不錯,還在看。
  •   本著對后來者負責的態(tài)度,我要說出我自己的看法。作者功底不錯,但書嘛,不好說。。。記得在哪本書中看過一句話,大致內容是“當一本書讀起來沒有困難時,那么這本書的作者肯定傾注了大量精力”。書中還是有30%的內容是非常不錯的。但充斥了大量糟粕,導致這本書成了典型的中國大學教材式的書。若想了解并行程序設計,建議還是買《并行程序設計原理》等翻譯的書吧。那樣可以少走一點彎路,少浪費一點時間。真心話!
  •   送貨很快,書也不錯,以后好好研究下!
  •   書的內容比較多,剛看到第二章。
  •   昨晚定的貨今天中午就收到了.可惜拿到的書從外觀上看.有輕微的損壞.但是考慮到書本身無問題.這次就不退貨.
  •   書不錯,發(fā)貨速度很快、、
  •   從學校圖書館借的所有多核并行程序設計的書在這本書面前,都立刻被秒殺。。讀這本書就像與一位大師對話一樣,淺顯易懂,示例都很詳細,即使是毫無經驗的初學者也能一看就懂。。如今市場上這樣的好書真的不多
  •   很給力,有空再看
  •   原創(chuàng)的書,頂
  •   書的質量不錯,很早就關注了
  •   不知道代買的
  •   618買的,評價到手軟
  •   不錯! 值得一看??!
  •   理論性有余,實踐性不足
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網 手機版

京ICP備13047387號-7