C++多核高級(jí)編程

出版時(shí)間:2010年4月第1版  出版社:清華大學(xué)出版社  作者:Cameron Hughes,Tracey Hughes  頁數(shù):561  譯者:齊寧,董澤惠  
Tag標(biāo)簽:無  

前言

  多核革命即將到來。并行處理不再是超級(jí)計(jì)算機(jī)或集群的專屬領(lǐng)域,入門級(jí)服務(wù)器乃至基本的開發(fā)工作站都擁有硬件級(jí)和軟件級(jí)并行處理的能力。問題是這對于軟件開發(fā)人員意味著什么?對軟件開發(fā)過程會(huì)有怎樣的影響?在誰擁有速度最快的計(jì)算機(jī)的競爭中,芯片生產(chǎn)商更傾向于在單獨(dú)的芯片上放置多個(gè)處理器,而不是提高處理器的速度。迄今為止,軟件開發(fā)人員尚能依賴于新的處理器,在不對軟件做出任何實(shí)際改進(jìn)的情況下提高軟件的速度,但是這樣的情況將成為過去。為了提高總體系統(tǒng)性能,計(jì)算機(jī)供應(yīng)商已經(jīng)決定增加更多的處理器,而不是提高時(shí)鐘頻率。這意味著如果軟件開發(fā)人員希望應(yīng)用程序從下一個(gè)新的處理器受益,就必須對應(yīng)用程序進(jìn)行修改以利用多處理器計(jì)算機(jī)。  盡管順序編程和單核應(yīng)用程序開發(fā)仍會(huì)有一席之地,但軟件開發(fā)將向多線程和多進(jìn)程轉(zhuǎn)變。曾經(jīng)僅被理論計(jì)算機(jī)科學(xué)家和大學(xué)學(xué)術(shù)界所關(guān)注的并行編程技術(shù),現(xiàn)在正處于為大多數(shù)人所接受的過程中。多核應(yīng)用程序設(shè)計(jì)和開發(fā)的思想如今成為人們關(guān)注的主流。  學(xué)習(xí)多核編程  本書使用一般軟件開發(fā)人員能夠理解的術(shù)語介紹多核編程的基本知識(shí)。為讀者介紹了為多處理器和多線程體系結(jié)構(gòu)進(jìn)行編程的基礎(chǔ)知識(shí),對并行處理和軟件并發(fā)的概念進(jìn)行了實(shí)用的介紹。本書介紹的是深?yuàn)W的、不易理解的并行編程技術(shù),但將使用一種簡單、可理解的方式來介紹它們。我們介紹了并發(fā)編程和同步的缺陷與陷阱以及應(yīng)對之策,對多處理和多線程模型進(jìn)行了直截了當(dāng)?shù)挠懻?。本書提供了大量的編程?shí)例,示范了如何實(shí)現(xiàn)成功的多核編程。本書還包含了調(diào)試及測試多核編程的方法與技術(shù)。最后,我們示范了如何使用跨平臺(tái)技術(shù)來利用處理器的具體特性?! 〔煌囊暯恰 ”緯膬?nèi)容是為對多核編程和應(yīng)用程序開發(fā)有著不同切入點(diǎn)的廣大讀者設(shè)計(jì)的。本書的讀者包含但不限于:  ·庫及工具制作人員  ·操作系統(tǒng)程序員  ·內(nèi)核開發(fā)人員  ·數(shù)據(jù)庫服務(wù)器及應(yīng)用服務(wù)器的設(shè)計(jì)人員及實(shí)現(xiàn)人員  ·科學(xué)應(yīng)用程序員以及使用計(jì)算密集型應(yīng)用程序的用戶  ·應(yīng)用程序開發(fā)人員  ·系統(tǒng)程序員  每組人員都會(huì)從不同的視角來了解多核計(jì)算機(jī)。有些人關(guān)心的是使用自底向上的方法,需要開發(fā)利用特定硬件和特定供應(yīng)商的特性的軟件。對于上述人員而言,他們希望更加詳盡地介紹多線程處理的知識(shí)。其他人員可能對自頂向下的方法感興趣,他們不希望為并發(fā)任務(wù)同步或線程安全的細(xì)節(jié)費(fèi)心,而是傾向于使用高級(jí)庫和工具來完成工作。還有一些人需要混合使用自底向上和自頂向下的方法。本書提供了對多核編程的多種視角的介紹,涵蓋了自底向上和自頂向下的方法。  解決方案是多范型方法  首先,我們承認(rèn)不是每個(gè)軟件解決方案都需要多處理或多線程。有些軟件解決方案通過使用順序編程技術(shù)能夠更好地實(shí)現(xiàn)(即使目標(biāo)平臺(tái)是多核的)。我們的方法是以解決方案和模型作為驅(qū)動(dòng)。首先,針對問題開發(fā)出模型或解決方案。如果解決方案要求某些指令、過程或任務(wù)并發(fā)地執(zhí)行,那么就決定了最好使用哪組技術(shù)。這個(gè)方法同強(qiáng)迫解決方案或模型去適合一些預(yù)先選擇的庫或開發(fā)工具的方法相反。技術(shù)應(yīng)當(dāng)遵從解決方案。盡管本書討論庫和開發(fā)工具,但并不偏向任何具體生產(chǎn)商庫或工具集。盡管書中包含了利用特定硬件平臺(tái)的實(shí)例,但我們依賴跨平臺(tái)方法,使用POSIX標(biāo)準(zhǔn)操作系統(tǒng)調(diào)用和庫,并且僅使用國際化C++標(biāo)準(zhǔn)所支持的C++特性?! ∶鎸Χ嗵幚砗投嗑€程中的挑戰(zhàn)和障礙,我們倡導(dǎo)組件方法。主要的目的是利用框架類作為并發(fā)的構(gòu)建塊??蚣茴惐幻嫦?qū)ο蠡コ饬?mutex)、信號(hào)量(semaphore)、管道(pipe)、隊(duì)列(queue)和套接字(socket)所支持。通過使用接口類,顯著降低了任務(wù)同步和通信的復(fù)雜度。在我們的多線程和多處理應(yīng)用程序中,控制機(jī)制主要是agent驅(qū)動(dòng)。這意味著在本書中,您將看到應(yīng)用程序架構(gòu)支持軟件開發(fā)的多范型(multiple-paradigm)方法?! ∥覀儗M件實(shí)現(xiàn)使用面向?qū)ο缶幊碳夹g(shù),對控制機(jī)制主要使用面向agent編程技術(shù)。面向agent編程的思想有時(shí)被邏輯編程技術(shù)支持。隨著處理器上可用內(nèi)核數(shù)目的增加,軟件開發(fā)模型將會(huì)越發(fā)地依賴面向agent編程和邏輯編程。本書包含了對軟件開發(fā)的這種多范型方法的簡介。

內(nèi)容概要

為了提高系統(tǒng)總體性能,計(jì)算機(jī)廠商已經(jīng)選擇增加更多的處理器,而不是提高時(shí)鐘頻率。相應(yīng)地,如果您希望應(yīng)用程序能夠通過使用下一代處理器提高性能,就必須為了利用多處理器計(jì)算機(jī)而對應(yīng)用程序進(jìn)行改寫。這本非常實(shí)用的書教讀者如何從順序編程技術(shù)轉(zhuǎn)移到并行和多線程編程技術(shù),同時(shí)介紹了為多處理器和多線程架構(gòu)編程的所有必備知識(shí)。    本書的兩位作者具有豐富的經(jīng)驗(yàn),雖然是并行處理和軟件并發(fā)這些復(fù)雜的主題,但是采用了清晰、易于理解的方式來講述它們。通過他們進(jìn)行多處理和多線程模型編程的實(shí)際方法,借助大量有用的實(shí)例,演示如何成功地完成多核編程,從而使讀者能夠充分利用新一代多核處理器的能力。    本書主要內(nèi)容    并發(fā)編程和同步帶來的各種缺陷、陷阱和挑戰(zhàn)    調(diào)試和測試多核編程的方法與技術(shù)    如何使川跨下臺(tái)技術(shù)米利用處理器的特定特性    操作系統(tǒng)在多核編程中的任務(wù)    將框架類作為并發(fā)構(gòu)建塊加以利用的方法    如何通過使用接口類宋降低任務(wù)同步和通信的復(fù)雜性    本書適合于希望從事多核編程和多核應(yīng)用程序開發(fā)的開發(fā)人員

作者簡介

Cameron Hughes是一名專業(yè)的軟件開發(fā)人員。他是CTEST實(shí)驗(yàn)室的軟件工程師,同時(shí)還是Youngstown州立大學(xué)的編程人員/分析師。Cameron Hughes有著超過15年的軟件開發(fā)經(jīng)驗(yàn),參與過各種規(guī)模的軟件開發(fā)工作,從商業(yè)和工業(yè)應(yīng)用到航空設(shè)計(jì)和開發(fā)項(xiàng)目。Cameron是Cognopaedia的設(shè)計(jì)者,

書籍目錄

第1章 新的體系結(jié)構(gòu)   1.1 什么是多核   1.2 多核體系結(jié)構(gòu)   1.3 軟件開發(fā)人員眼中的多核體系結(jié)構(gòu)   1.4 總線連接   1.5 從單核到多核   1.6 小結(jié) 第2章 4種有影響的多核設(shè)計(jì)   2.1 AMD Multicore Opteron   2.2 Sun UltraSparc T1 多處理器   2.3 IBM Cell Broadband Engine   2.4 Intel Core 2 Duo處理器   2.5 小結(jié) 第3章 多核編程的挑戰(zhàn)   3.1 什么是順序模型   3.2 什么是并發(fā)   3.3 軟件開發(fā)   3.4 C++開發(fā)人員必須學(xué)習(xí)新的庫   3.5 處理器架構(gòu)的挑戰(zhàn)   3.6 小結(jié) 第4章 操作系統(tǒng)的任務(wù)   4.1 操作系統(tǒng)扮演什么角色   4.2 分解以及操作系統(tǒng)的任務(wù)   4.3 隱藏操作系統(tǒng)的任務(wù)   4.4 小結(jié) 第5章 進(jìn)程、C++接口類和謂詞   5.1 多核是指多處理器   5.2 什么是進(jìn)程   5.3 為什么是進(jìn)程而不是線程   5.4 使用posix_spawn( )   5.5 哪個(gè)是父進(jìn)程,哪個(gè)是子進(jìn)程   5.6 對進(jìn)程的詳細(xì)討論   5.7 使用ps實(shí)用工具監(jiān)視進(jìn)程   5.8 設(shè)置和獲得進(jìn)程優(yōu)先級(jí)   5.9 什么是上下文切換   5.10 進(jìn)程創(chuàng)建中的活動(dòng)   5.11 進(jìn)程環(huán)境變量的使用   5.12 使用system( )生成新的進(jìn)程   5.13 刪除進(jìn)程   5.14 進(jìn)程資源   5.15 異步進(jìn)程和同步進(jìn)程   5.16 wait( )函數(shù)調(diào)用   5.17 謂詞、進(jìn)程和接口類   5.18 小結(jié) 第6章 多線程   6.1 什么是線程   6.2 線程和進(jìn)程的比較   6.3 設(shè)置線程屬性   6.4 線程的結(jié)構(gòu)   6.5 簡單的線程程序   6.6 創(chuàng)建線程   6.7 管理線程   6.8 擴(kuò)展線程接口類   6.9 小結(jié) 第7章 并發(fā)任務(wù)的通信和同步   7.1 通信和同步   7.2 對并發(fā)進(jìn)行同步   7.3 線程策略方法   7.4 工作的分解和封裝   7.5 小結(jié) 第8章 PADL和PBS:應(yīng)用程序設(shè)計(jì)方法   8.1 為大規(guī)模多核處理器設(shè)計(jì)應(yīng)用程序   8.2 什么是PADL   8.3 謂詞分解結(jié)構(gòu)   8.4 小結(jié) 第9章 對要求并發(fā)的軟件系統(tǒng)進(jìn)行建模   9.1 統(tǒng)一建模語言   9.2 對系統(tǒng)的結(jié)構(gòu)進(jìn)行建模   9.3 UML與并發(fā)行為   9.4 整個(gè)系統(tǒng)的可視化   9.5 小結(jié) 第10章 并行程序的測試和邏輯容錯(cuò)   10.1 能否跳過測試   10.2 測試中必須檢查的5個(gè)并發(fā)挑戰(zhàn)   10.3 失效:缺陷與故障導(dǎo)致的結(jié)果   10.4 如何對并行程序?qū)崿F(xiàn)缺陷排除   10.5 什么是標(biāo)準(zhǔn)軟件工程測試   10.6 小結(jié) 附錄A 并發(fā)設(shè)計(jì)使用的UML 附錄B 并發(fā)模型 附錄C 線程管理的POSIX標(biāo)準(zhǔn) 附錄D 進(jìn)程管理的POSIX標(biāo)準(zhǔn)

章節(jié)摘錄

  除了CPU外,主板上最重要的部件是芯片組(chipset)。在圖2-8中,芯片組是被設(shè)計(jì)為連接CPU和主板上其他部件的一組集成電路。它是主板的集成部分,因此不能被移走或升級(jí)。它用于和特定類別的CPU或CPU系列共同工作,以優(yōu)化CPU性能和系統(tǒng)性能。芯片組將數(shù)據(jù)在CPU和主板上其他部件之間來回移動(dòng),這些部件包括內(nèi)存、顯卡、I/O設(shè)備,如圖2.8所示。所有到CPU的通信都經(jīng)由芯片組?! ⌒酒M由兩個(gè)芯片組成:北橋(Northbridge)和南橋(southbridge)。之所以如此命名它們,是由芯片在主板上的位置以及它們的用途決定。北橋位于北部區(qū)域,南橋位于南部區(qū)域。兩者都是作為設(shè)備之間的橋梁或連接,它們?yōu)椴考峁蚪?,以確保數(shù)據(jù)到達(dá)期望的位置?!  け睒?,也被稱為內(nèi)存控制中心(memory controller hub),直接通過前端總線(FSB)與CPU通信。它將CPIJ同高速設(shè)備連接起來,如主存。它還通過一條內(nèi)部總線將CPU同PCI.E插槽及南橋連接起來。數(shù)據(jù)在到達(dá)南橋之前,首先要經(jīng)過北橋?!  つ蠘?,也被稱為I/O控制器,它的速度要比北橋慢。由于它不是直接連接到CPU,因此它負(fù)責(zé)主板上較慢的部分,如音頻、磁盤接口等I/O設(shè)備。南橋通過串行外設(shè)接口(Serial Peripheral Interface,SPI)、6個(gè)PCI-E插槽、圖中未顯示的其他I/O設(shè)備連接到BIOS支持。SPI使用主從配置來允許南橋與BIOS支持之間的數(shù)據(jù)交換(每次1比特)。它使用全雙工方式,意味著數(shù)據(jù)可以雙向傳送。  2.4.2 InteI的PCI Express  PCI.E或PCI Express是計(jì)算機(jī)擴(kuò)展卡接口。該插槽是作為在主板上與聲卡、顯卡和網(wǎng)卡的串行連接。串行連接速度較慢,每次發(fā)送1比特。PCI-E是高速串行連接,其工作方式更像是網(wǎng)絡(luò),而不是總線。它使用一個(gè)開關(guān)來控制很多被稱為lane的點(diǎn)到點(diǎn)的全雙工f同時(shí)雙向通信)串行連接。每個(gè)插槽可以有4、8或16個(gè)lane。每個(gè)lane有兩對從開關(guān)到設(shè)備的線,一對發(fā)送數(shù)據(jù),一對接收數(shù)據(jù)。這決定了數(shù)據(jù)的傳送速度。這些lane從開關(guān)直接扇出到數(shù)據(jù)要去的設(shè)備。PCI-E是PCI的替代產(chǎn)品,并且提供了更多的帶寬。設(shè)備不共享帶寬。加速圖形端口(Accelera,ted Graphics Port,AGP)被PCI.E x16(16 lane)插槽所替代,它能夠提供更高的數(shù)據(jù)傳送速度(8GB/s)。

圖書封面

圖書標(biāo)簽Tags

評論、評分、閱讀與下載


    C++多核高級(jí)編程 PDF格式下載


用戶評論 (總計(jì)14條)

 
 

  •   多核多線程編程的極佳的參考書
  •   多核編程也是一個(gè)領(lǐng)域,我也很想了解,這本書可以達(dá)到目的
  •   多線程寫的好,但沒寫透,看了還是沒明白。。。
  •   這本書就是我想要知道和學(xué)習(xí)的知識(shí)。
  •   內(nèi)容豐富,值得學(xué)習(xí)!
  •   好強(qiáng)大!
  •   朋友強(qiáng)烈推薦買的
  •   沒有成體系的知識(shí),雖然很厚,但有價(jià)值的東西不多,我就看到一個(gè)注意點(diǎn),
    那就是多核CPU中的“偽共享“,不值得。
  •   前面概括的還可以,后面內(nèi)容一蹋糊途.
  •   好書 內(nèi)容翔實(shí)
  •   一般,翻譯的語言比較晦澀
  •   書應(yīng)該還不錯(cuò)的
  •   書很厚,貨真價(jià)實(shí),值得閱讀
  •   不錯(cuò),慢慢看?。?!不錯(cuò),慢慢看?。?!
 

250萬本中文圖書簡介、評論、評分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7