出版時間:2009-1 出版社:機(jī)械工業(yè)出版社 作者:仁達(dá)敬 頁數(shù):323 譯者:聶雪軍
Tag標(biāo)簽:無
前言
計(jì)算機(jī)領(lǐng)域正在發(fā)生著一場計(jì)算方式的革命。Intel、AMD以及其他芯片制造商不斷推出在單晶片上集成多重處理單元的新型芯片,用于取代過去的單一中心處理器。多核處理器的問世給計(jì)算機(jī)工業(yè)帶來更強(qiáng)大的能力,但同時也給軟件產(chǎn)業(yè)帶來更大的挑戰(zhàn):我們不得不面對并發(fā)和并行程序這些通常是并行計(jì)算的專業(yè)人員和高端用戶才需要面對的問題。 傳統(tǒng)的并行程序設(shè)計(jì)模型主要分為兩大類,一類是共享存儲模型,主要是采用多線程,例如目前已成為事實(shí)工業(yè)標(biāo)準(zhǔn)的OpenMP;另一類是消息傳遞模型,例如MPI(Message Passing Interface,MPI)。然而,這些方式都存在著一些缺陷,或者是需要特定的語言擴(kuò)展,或者是在使用上存在困難,從而降低了并行程序的開發(fā)效率。 事實(shí)上,并行程序的設(shè)計(jì)目標(biāo)是挖掘問題求解過程中的并行語義,尋求并行算法與并行機(jī)器體系結(jié)構(gòu)的最佳匹配和映射,合理組織并行任務(wù),減少額外消息傳遞和數(shù)據(jù)移動開銷,而這正是Intel線程構(gòu)建模塊的設(shè)計(jì)初衷?! ∨cOpenMP、MPI等傳統(tǒng)技術(shù)相比,線程構(gòu)建模塊主要有以下特點(diǎn): 1.面向任務(wù)編程。任務(wù)是比線程更高級的并行抽象,任務(wù)與線程的關(guān)系就好比高級語言與匯編語言的關(guān)系。在使用線程構(gòu)建模塊時,需要設(shè)計(jì)的是任務(wù)而不是線程,這就使你無須關(guān)心一些具體的線程細(xì)節(jié)技術(shù),例如負(fù)載均衡,優(yōu)化調(diào)度等。線程構(gòu)建模塊的底層組件已經(jīng)幫你實(shí)現(xiàn)了這些煩瑣的工作,它將通過高效的方式將任務(wù)映射到線程,并通過任務(wù)密取(Task Stealing)來實(shí)現(xiàn)自動調(diào)度。這正如在用C++編程時無需編寫push/pop之類的指令,C++編譯器將自動實(shí)現(xiàn)這些工作。 2.簡單易用。線程構(gòu)建模塊是一個用標(biāo)準(zhǔn)C++和模板實(shí)現(xiàn)的庫,它既沒有包含像OpenMP中的特殊語言擴(kuò)展,也不是一種全新的編程語言。任何支持ISOC++的編譯器都可以直接編譯TBB程序,而現(xiàn)有的程序也無需太多修改就可以通過線程構(gòu)建模塊獲得并行的速度提升。計(jì)算機(jī)領(lǐng)域的發(fā)展歷史已經(jīng)證明,這一特點(diǎn)是決定技術(shù)生命力的重要因素。 3.豐富的輔助開發(fā)工具。與線程構(gòu)建模塊結(jié)合使用的有許多輔助開發(fā)工具,例如Intel線程檢查器,Intel線程分析器等。這些輔助工具將極大地提高并行程序的開發(fā)效率和調(diào)試效率?! ”緯髡逬amesReinders(仁達(dá)敬)是Intel軟件開發(fā)產(chǎn)品部門的首席講師,他在并行程序設(shè)計(jì)領(lǐng)域有著豐富的經(jīng)驗(yàn)。本書融合了作者和Intel線程構(gòu)建模塊開發(fā)團(tuán)隊(duì)在并行程序設(shè)計(jì)領(lǐng)域和線程構(gòu)建模塊中的寶貴經(jīng)驗(yàn),既有一定的理論深度,又包含了豐富的編程示例。 本書對讀者的技術(shù)水平要求不高,對于各個層次的讀者,本書都將是非常有用的。但如果讀者具備一些C++模板以及模板庫等方面的知識,那么就更容易地理解本書中的一些概念。多核時代已經(jīng)來臨,并行程序已經(jīng)被推向了主流地位,這既帶來了挑戰(zhàn),也帶來了機(jī)遇。衷心希望本書能夠?yàn)椴⑿谐绦蜷_發(fā)人員帶來幫助?! ⑴c本書翻譯工作的還有李楊、昊漢平、徐光景、童勝漢、陳軍、胡凱、劉紅、張瑋、陳紅和李斌。由于譯者的時間和水平有限,翻譯中的疏漏之處在所難免,還望讀者和同行不吝指正。
內(nèi)容概要
多核處理器的出現(xiàn)使得并行編程成為了每個程序員關(guān)注的主題。不具備多處理器核的計(jì)算機(jī)系統(tǒng)已經(jīng)變得越來越少。本書為c++程序給出了并行編程的解決方案,它既不要求放棄c++,也不要求使用那些裸線程或者本地線程?! ”緯榻B的是Intel線程構(gòu)建模塊。線程構(gòu)建模塊是一個用來實(shí)現(xiàn)并行語義的c++模板庫,它對c++進(jìn)行了擴(kuò)展,抽象出了線程管理機(jī)制并支持簡明的并行編程。在使用這個庫時,你所要指定的是任務(wù)而不是線程,然后庫將高效自動地將這些任務(wù)映射到線程上。如果希望程序在處理器核不斷增加的情況下也能夠繼續(xù)運(yùn)行,那么這種方式將帶來許多好處。與裸線程相比,線程構(gòu)建模塊能夠使你更方便地表達(dá)并行語義,同時還能夠提高程序的性能,可移植性和可擴(kuò)展性。在使用本書時,你無需任何并行編程經(jīng)驗(yàn)或者在多核處理器上的編程經(jīng)驗(yàn)。無論你是擁有豐富的并行編程經(jīng)驗(yàn),還是對并行編程一無所知,本書的內(nèi)容都將是非常有用的。此外,本書也不要求之前是否對線程有所了解。
作者簡介
James Reinders(仁達(dá)敬),Intel軟件開發(fā)產(chǎn)品部門的首席講師。他是一位高級工程師,于1989年加入Intel公司。他在許多項(xiàng)目上做出了貢獻(xiàn),包括世界上第一臺萬億次浮點(diǎn)運(yùn)算超級計(jì)算機(jī)(ASCI Red)以及iWarp、Pentium Pro、Pentium Ⅱ、Itanium、Pentium 4等處理器上的編譯器和
書籍目錄
致中文版讀者序Intel線程構(gòu)建模塊首席開發(fā)師的筆記前言第1章 為什么需要線程構(gòu)建模塊 簡介 優(yōu)勢第2章 并行思維 并行思維的要素 分解 擴(kuò)展性與加速性 什么是線程 互斥和鎖 正確性 抽象 模式 直覺思維第3章 基本算法 庫的初始化和結(jié)束 循環(huán)的并行化 遞歸區(qū)間的定義 對循環(huán)的小結(jié)第4章 高級算法 用于流的并行算法第5章 容器 cocurrent_queue ConCUrrent_VeCtOr concurrent_hash_map第6章 可擴(kuò)展的內(nèi)存分配. 限制 內(nèi)存分配中的若干問題 內(nèi)存分配器 替換malloc、new和delete第7章 互斥 何時使用互斥 Mutexes 互斥量 原子操作第8章 計(jì)量第9章 任務(wù)調(diào)度器第10章 成功的關(guān)鍵因素第11章 編程示例第12澡 發(fā)展歷程及相關(guān)項(xiàng)目
章節(jié)摘錄
第1章 為什么需要線程構(gòu)建模塊 簡介 多核處理器正在變得日益普及,而利用現(xiàn)有的線程軟件包來編寫一個簡單的paralle_for循環(huán)卻是一項(xiàng)乏味的工作。要編寫一個高效的可擴(kuò)展(scalable)程序則更為困難??蓴U(kuò)展性體現(xiàn)的是這樣的概念:隨著處理器中核數(shù)量的增加,程序的性能能夠得到相應(yīng)的提升?! ‰S著在新推出的處理器中有著越來越多的核,使用線程構(gòu)建模塊來編寫程序?qū)椭銖闹蝎@得許多好處?! 【€程構(gòu)建模塊是一個用來支撐可擴(kuò)展并行編程的庫,它是用標(biāo)準(zhǔn)的C++代碼實(shí)現(xiàn)的。它不需要專門的語言或者編譯器。線程構(gòu)建模塊可以幾乎應(yīng)用于所有處理器或者操作系統(tǒng)上的任何一種c++編譯器中,這種強(qiáng)大的功能對于程序員來說是非常有吸引力的。 線程構(gòu)建模塊通過模板來提供常見的并行迭代模式,這使得程序員即使在不具備同步、負(fù)載均衡以及快存優(yōu)化等專門知識的情況下,也能夠從多核處理器中獲得性能提升。使用線程構(gòu)建模塊編寫的程序既能夠運(yùn)行在單核處理器的系統(tǒng)上,也能夠運(yùn)行在多核處理器的系統(tǒng)上。線程構(gòu)建模塊促進(jìn)了可擴(kuò)展數(shù)據(jù)并行編程技術(shù)的發(fā)展。此外,它還支持嵌套并行,因此你可以很容易地從小型的并行組件中構(gòu)建出大型的并行組件。在使用這個庫時,你需要指定的是任務(wù),而不是線程,然后再通過這個庫以高效的方式將任務(wù)自動映射到線程。因此,與裸線程(Raw Thread)相比,線程構(gòu)建模塊能夠更方便地實(shí)現(xiàn)并行,并獲得更優(yōu)的結(jié)果。
媒體關(guān)注與評論
“串行計(jì)算的時代已經(jīng)結(jié)束了……《Intel Threading Building Blocks編程指南》很好地介紹了線程構(gòu)建模塊庫,無論是初學(xué)者還是專家,都能通過〈Intel Threading Building Blocks編程指南》清晰地理解并發(fā)的復(fù)雜性?!薄 狢harles E.Leiserson,麻省理工大學(xué)計(jì)算機(jī)與人工智能實(shí)驗(yàn)室 “我們通常習(xí)慣說,首先要使程序正確,然后再提高程序的速度。現(xiàn)在,我們無需這么做。TBB使我們在正確地設(shè)計(jì)程序的同時,還能提升Maya前臺視圖的速度。〈Intel Threading Building Blocks編程指南》將向你展示如何通過在代碼中使用TBB來獲得最大的性能提升?!薄 狹artin Watt,Autodesk公司高級軟件工程師
編輯推薦
“串行計(jì)算的時代已經(jīng)結(jié)束了……本書很好地介紹了線程構(gòu)建模塊庫,無論是初學(xué)者還是專家,都能通過本書清晰地理解并發(fā)的復(fù)雜性。” ——Charles E.Leiserson,麻省理工大學(xué)計(jì)算機(jī)與人工智能實(shí)驗(yàn)室 “我們通常習(xí)慣說,首先要使程序正確,然后再提高程序的速度。現(xiàn)在,我們無需這么做。TBB使我們在正確地設(shè)計(jì)程序的同時,還能提升Maya前臺視圖的速度。本書將向你展示如何通過在代碼中使用TBB來獲得最大的性能提升?!薄 狹artin Watt,Autodesk公司高級軟件工程師本書介紹了如何通過Intel線程構(gòu)建模塊來最大限度地利用多核處理器的強(qiáng)大性能。TBB是一個可移植的C++庫,能夠運(yùn)行在Windows、Linux、Macintosh以及uNIx等系統(tǒng)上。本書闡述了在多線程編程中的關(guān)鍵任務(wù)以及如何通過TBBE上可移植的和穩(wěn)定的方式來實(shí)現(xiàn)它們。書中包含了大量的示例和豐富的資料,給出了常見的使用模式,揭示了TBB中的精彩之處,并且還提供了一些指導(dǎo)意見,用來在不同的并行編程方式上進(jìn)行選擇以獲得最佳的性能。本書的內(nèi)容包括:? 充分利用多核系統(tǒng)中并行語義的簡單且高效的方式。 ? 編寫并行程序的關(guān)鍵問題?! ? 多線程中的常見模式?! ? 用于高效處理的線程安全容器。 ? 任務(wù)調(diào)度?! ? 在線程環(huán)境中的內(nèi)存管理?! ”緯f明了TBB能夠比原始線程更方便地在c++中指定并行語義,同時還可以提升程序的性能、可移植性以及可伸縮性。在開始學(xué)習(xí)TBB時,并不要求具備并行編程或者多核處理器的經(jīng)驗(yàn)。任何希望在多核系統(tǒng)上編寫軟件的程序員,都能夠從本書中獲益。
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載
Intel Threading Building Blocks編程指南 PDF格式下載