出版時(shí)間:2011-1 出版社:英特爾亞太研發(fā)有限公司、 英特爾軟件學(xué)院教材編寫組 上海交通大學(xué)出版社 (2011-01出版) 作者:英特爾亞太研發(fā)有限公司,英特爾軟件學(xué)院教材編寫組 編 頁數(shù):265
Tag標(biāo)簽:無
前言
在多核體系結(jié)構(gòu)出現(xiàn)以前的近20年里,程序員們已經(jīng)習(xí)慣了由硬件的發(fā)展來自然而然地獲得程序性能的提高。即,每當(dāng)出現(xiàn)一代新的體系結(jié)構(gòu)平臺,原有的程序無需修改,或者只需很少的修改,就可以輕而易舉地獲得由摩爾定律所帶來的性能提升。但是,三個主要因素的日益凸顯,使得這一免費(fèi)午餐即將走到盡頭:第一,系統(tǒng)建造者遇到了難以克服的物理阻礙——太多的發(fā)熱量、太多的能量消耗以及過多的能量泄露,阻止了通過進(jìn)一步提高時(shí)鐘頻率來提升性能的方法;第二,單個芯片上可以集成的引腳(pin)數(shù)目以及帶寬限制,都意味著處理器與內(nèi)存性能之間的差異只會越來越大;第三,為了解決以上兩個問題,所在處理器體系結(jié)構(gòu)上做的妥協(xié)將不足以使得單個處理器核心承擔(dān)更高性能的計(jì)算需求。因此,要想在現(xiàn)在的多核體系結(jié)構(gòu)上獲得性能的提升,必須在原有的軟件基礎(chǔ)上作出大幅度的革新。這其中最主要的是利用多線程技術(shù),充分利用好單個芯片上的多個計(jì)算核心,提高程序整體的計(jì)算吞吐量。雖然在多核處理器出現(xiàn)之前,它一直屬于一種比較深奧的理論,但多線程技術(shù)的出現(xiàn)已經(jīng)有了幾十年的歷史。迄今為止,很多程序員都曾經(jīng)在一些常見的多線程程序設(shè)計(jì)問題上經(jīng)歷過挫折。如何解決好這些問題?將是我們在本書中要與讀者們共同探討的重要問題。
內(nèi)容概要
《英特爾軟件學(xué)院系列課程培訓(xùn)教材:多核多線程技術(shù)》就多核體系結(jié)構(gòu)、芯片發(fā)展與系統(tǒng)軟件,多性能并行程序,多線程程序的性能調(diào)優(yōu)方法,多線程編程方法以及編程中的常見問題等作了綜合講述,處處體現(xiàn)了多線程編程理念與綜合應(yīng)用能力的培養(yǎng)。全書深入淺出,適合廣大程序員和IT從事人員使用。
書籍目錄
1 多核技術(shù)導(dǎo)論1.1 微處理器發(fā)展史1.1.1 計(jì)算機(jī)與微處理器1.1.2 4位、8位與16位微處理器1.1.3 32位微處理器1.2 并行計(jì)算機(jī)1.2.1 并行處理思想與弗林(Flynn)分類1.2.2 超級計(jì)算機(jī)1.3 片上多核處理器架構(gòu)1.3.1 多核芯片1.3.2 片上多核處理器體系結(jié)構(gòu)1.3.3 典型多核芯片架構(gòu)1.4 操作系統(tǒng)對多核處理器的支持方法1.4.1 調(diào)度與中斷1.4.2 輸入輸出系統(tǒng)1.4.3 存儲管理與文件系統(tǒng)1.4.4 典型支持多核的操作系統(tǒng)2 多線程并行程序性能分析方法綜述2.1 性能調(diào)優(yōu)周期2.1.1 搜集性能數(shù)據(jù)2.1.2 分析數(shù)據(jù)并定位性能瓶頸2.1.3 加速比性能定律2.1.4 解決性能瓶頸2.1.5 實(shí)現(xiàn)優(yōu)化措施2.1.6 測試2.2 使用Intel Tune進(jìn)行性能分析2.2.1 性能分析器功能與使用方法2.2.2 性能分析器實(shí)驗(yàn)2.3 MKL數(shù)學(xué)核心函數(shù)庫2.3.1 MKI。數(shù)學(xué)核心函數(shù)庫功能與特性2.3.2 MKL數(shù)學(xué)核心函數(shù)庫性能2.3.3 MKL數(shù)學(xué)核心函數(shù)庫實(shí)驗(yàn)2.4 Thread Checker線程檢查器2.4.1 線程檢查器功能與使用2.4.2 線程檢查器實(shí)驗(yàn)2.5 Thread Profiler線程檔案器2.5.1 線程檔案器功能與使用2.5.2 線程檔案器實(shí)驗(yàn)3 Intel多核處理器上的性能調(diào)優(yōu)方法3.1 體系結(jié)構(gòu)無關(guān)的性能調(diào)優(yōu)方法3.1.1 消除循環(huán)不變量3.1.2 減少過程調(diào)用3.1.3 消除不必要的內(nèi)存存取3.2 阻礙優(yōu)化的因素3.2.1 編譯優(yōu)化選項(xiàng)3.2.2 變量別名3.2.3 函數(shù)調(diào)用的邊際效應(yīng)3.3 體系結(jié)構(gòu)無關(guān)優(yōu)化的小結(jié)3.4 深入理解Intel多核處理器體系結(jié)構(gòu)3.4.1 Intel多核處理器微體系結(jié)構(gòu)的顯著特性3.5 Intel多核處理器體系結(jié)構(gòu)相關(guān)的優(yōu)化3.5.1 Intel多核處理器微體系結(jié)構(gòu)中對代碼優(yōu)化的支持4 多線程編程方法綜述4.1 線程的基本概念4.1.1 線程與進(jìn)程的區(qū)別4.1.2 用戶級線程、核心級線程和硬件線程4.1.3 線程的生命周期4.2 線程的同步4.2.1 競爭條件4.2.2 臨界區(qū)4.2.3 信號量4.2.4 鎖4.2.5 條件變量4.2.6 線程的本地存儲4.2.7 介紹TLS的特性和使用方法4.3 多線程編程模型4.3.1 流水線4.3.2 工作組4.3.3 客戶/服務(wù)器方式4.4 多線程編程的原則及要點(diǎn)4.4.1 靜態(tài)負(fù)載平衡4.4.2 動態(tài)負(fù)載平衡4.4.3 負(fù)載平衡的難題4.4.4 串行化方面的難題5 多線程程序設(shè)計(jì)中的常見問題及解決途徑5.1 線程過多5.2 數(shù)據(jù)競爭、死鎖和活鎖5.2.1 數(shù)據(jù)競爭5.2.2 死鎖和活鎖5.3 競爭激烈的鎖5.3.1 優(yōu)先級倒置5.3.2 鎖競爭激烈的解決方法5.4 非阻塞算法5.4.1 比較并交換5.4.2 原子變量類5.4.3 非阻塞算法的介紹5.4.4 ABA問題5.4.5 cache線乒乓現(xiàn)象5.4.6 存儲空間回收問題5.4.7 一些建議5.5 線程安全函數(shù)和庫5.5.1 理解可重入與線程安全5.5.2 函數(shù)可重入化5.5.3 函數(shù)線程安全化5.6 存儲問題5.6.1 帶寬5.6.2 cache的利用5.6.3 存儲競爭5.7 Cache相關(guān)問題5.7.1 偽共享5.7.2 存儲一致性5.7.3 當(dāng)前IA-32體系結(jié)構(gòu)5.7.4 Itanium體系結(jié)構(gòu)5.7.5 高級語言5.8 避免IA-32上的流水線停頓5.9 面向高性能的數(shù)據(jù)組織6 Unix/Linux多線程編程6.1 POSIX的一些基本知識6.2 POSIX線程庫6.2.1 創(chuàng)建線程6.2.2 分離和接合線程6.2.3 退出和取消線程6.2.4 用戶級線程和內(nèi)核級線程6.2.5 線程的屬性6.2.6 線程安全函數(shù)6.2.7 線程特定數(shù)據(jù)……
章節(jié)摘錄
插圖:7.2.2Windows操作系統(tǒng)中對線程概念的定義下面開始介紹線程的一些基本概念。與進(jìn)程相似,線程也是由兩個部分構(gòu)成的:(1)線程的內(nèi)核對象。操作系統(tǒng)用它來對線程實(shí)施管理。(2)線程堆棧。它用于維護(hù)線程在執(zhí)行代碼時(shí)需要的所有函數(shù)參數(shù)和局部變量。線程總是在某個進(jìn)程環(huán)境中創(chuàng)建的,而且它的整個壽命期都在該進(jìn)程中。這意味著線程在它的進(jìn)程地址空間中執(zhí)行代碼,并且在進(jìn)程的地址空間中對數(shù)據(jù)進(jìn)行操作。因此,如果在單進(jìn)程環(huán)境中,有兩個或多個線程正在運(yùn)行,那么這些線程將共享單個的地址空間。這些線程能夠執(zhí)行相同的代碼,對相同的數(shù)據(jù)進(jìn)行操作。這些線程還能共享內(nèi)核對象句柄,因?yàn)榫浔硪蕾囉诿總€進(jìn)程而不是每個線程存在??梢灶A(yù)見,進(jìn)程使用的系統(tǒng)資源會比線程多得多,因?yàn)檫M(jìn)程需要更多的地址空間。為進(jìn)程創(chuàng)建一個虛擬地址空間需要許多系統(tǒng)資源,系統(tǒng)中要保留大量的記錄,這要占用大量的內(nèi)存。另外,由于.exe和.dll文件要加載到一個地址空間,因此也需要文件資源。而線程使用的系統(tǒng)資源要少得多,實(shí)際上,線程只有一個內(nèi)核對象和一個堆棧,保留的記錄很少,因此只需要很少的內(nèi)存。線程用于描述進(jìn)程中的運(yùn)行路徑,每當(dāng)進(jìn)程被初始化時(shí),系統(tǒng)就要創(chuàng)建一個主線程。對于許多應(yīng)用程序來說,這個主線程是應(yīng)用程序需要的唯一線程,不過,進(jìn)程能夠創(chuàng)建更多的線程來幫助執(zhí)行他們的操作。設(shè)計(jì)一個擁有多線程的應(yīng)用程序,就會更充分地利用系統(tǒng)資源,擴(kuò)大該應(yīng)用程序的功能,比如,當(dāng)你的計(jì)算機(jī)擁有兩個CPU時(shí),你的應(yīng)用程序中有兩個線程,那么兩個CPU都將處于繁忙狀態(tài),這就提高了程序運(yùn)行的效率。
編輯推薦
《多核多線程技術(shù)》:英特爾軟件學(xué)院系列課程培訓(xùn)教材
圖書封面
圖書標(biāo)簽Tags
無
評論、評分、閱讀與下載