內容簡介
《英特爾軟件學院係列課程培訓教材:多核多綫程技術》就多核體係結構、芯片發展與係統軟件,多性能並行程序,多綫程程序的性能調優方法,多綫程編程方法以及編程中的常見問題等作瞭綜閤講述,處處體現瞭多綫程編程理念與綜閤應用能力的培養。全書深入淺齣,適閤廣大程序員和IT從事人員使用。
目錄
1 多核技術導論
1.1 微處理器發展史
1.1.1 計算機與微處理器
1.1.2 4位、8位與16位微處理器
1.1.3 32位微處理器
1.2 並行計算機
1.2.1 並行處理思想與弗林(Flynn)分類
1.2.2 超級計算機
1.3 片上多核處理器架構
1.3.1 多核芯片
1.3.2 片上多核處理器體係結構
1.3.3 典型多核芯片架構
1.4 操作係統對多核處理器的支持方法
1.4.1 調度與中斷
1.4.2 輸入輸齣係統
1.4.3 存儲管理與文件係統
1.4.4 典型支持多核的操作係統
2 多綫程並行程序性能分析方法綜述
2.1 性能調優周期
2.1.1 搜集性能數據
2.1.2 分析數據並定位性能瓶頸
2.1.3 加速比性能定律
2.1.4 解決性能瓶頸
2.1.5 實現優化措施
2.1.6 測試
2.2 使用Intel Tune進行性能分析
2.2.1 性能分析器功能與使用方法
2.2.2 性能分析器實驗
2.3 MKL數學核心函數庫
2.3.1 MKI。數學核心函數庫功能與特性
2.3.2 MKL數學核心函數庫性能
2.3.3 MKL數學核心函數庫實驗
2.4 Thread Checker綫程檢查器
2.4.1 綫程檢查器功能與使用
2.4.2 綫程檢查器實驗
2.5 Thread Profiler綫程檔案器
2.5.1 綫程檔案器功能與使用
2.5.2 綫程檔案器實驗
3 Intel多核處理器上的性能調優方法
3.1 體係結構無關的性能調優方法
3.1.1 消除循環不變量
3.1.2 減少過程調用
3.1.3 消除不必要的內存存取
3.2 阻礙優化的因素
3.2.1 編譯優化選項
3.2.2 變量彆名
3.2.3 函數調用的邊際效應
3.3 體係結構無關優化的小結
3.4 深入理解Intel多核處理器體係結構
3.4.1 Intel多核處理器微體係結構的顯著特性
3.5 Intel多核處理器體係結構相關的優化
3.5.1 Intel多核處理器微體係結構中對代碼優化的支持
4 多綫程編程方法綜述
4.1 綫程的基本概念
4.1.1 綫程與進程的區彆
4.1.2 用戶級綫程、核心級綫程和硬件綫程
4.1.3 綫程的生命周期
4.2 綫程的同步
4.2.1 競爭條件
4.2.2 臨界區
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 客戶/服務器方式
4.4 多綫程編程的原則及要點
4.4.1 靜態負載平衡
4.4.2 動態負載平衡
4.4.3 負載平衡的難題
4.4.4 串行化方麵的難題
5 多綫程程序設計中的常見問題及解決途徑
5.1 綫程過多
5.2 數據競爭、死鎖和活鎖
5.2.1 數據競爭
5.2.2 死鎖和活鎖
5.3 競爭激烈的鎖
5.3.1 優先級倒置
5.3.2 鎖競爭激烈的解決方法
5.4 非阻塞算法
5.4.1 比較並交換
5.4.2 原子變量類
5.4.3 非阻塞算法的介紹
5.4.4 ABA問題
5.4.5 cache綫乒乓現象
5.4.6 存儲空間迴收問題
5.4.7 一些建議
5.5 綫程安全函數和庫
5.5.1 理解可重入與綫程安全
5.5.2 函數可重入化
5.5.3 函數綫程安全化
5.6 存儲問題
5.6.1 帶寬
5.6.2 cache的利用
5.6.3 存儲競爭
5.7 Cache相關問題
5.7.1 僞共享
5.7.2 存儲一緻性
5.7.3 當前IA-32體係結構
5.7.4 Itanium體係結構
5.7.5 高級語言
5.8 避免IA-32上的流水綫停頓
5.9 麵嚮高性能的數據組織
6 Unix/Linux多綫程編程
6.1 POSIX的一些基本知識
6.2 POSIX綫程庫
6.2.1 創建綫程
6.2.2 分離和接閤綫程
6.2.3 退齣和取消綫程
6.2.4 用戶級綫程和內核級綫程
6.2.5 綫程的屬性
6.2.6 綫程安全函數
6.2.7 綫程特定數據
……
精彩書摘
7.2.2Windows操作係統中對綫程概念的定義
下麵開始介紹綫程的一些基本概念。
與進程相似,綫程也是由兩個部分構成的:
(1)綫程的內核對象。操作係統用它來對綫程實施管理。
(2)綫程堆棧。它用於維護綫程在執行代碼時需要的所有函數參數和局部變量。
綫程總是在某個進程環境中創建的,而且它的整個壽命期都在該進程中。這意味著綫程在它的進程地址空間中執行代碼,並且在進程的地址空間中對數據進行操作。因此,如果在單進程環境中,有兩個或多個綫程正在運行,那麼這些綫程將共享單個的地址空間。這些綫程能夠執行相同的代碼,對相同的數據進行操作。這些綫程還能共享內核對象句柄,因為句柄錶依賴於每個進程而不是每個綫程存在。
可以預見,進程使用的係統資源會比綫程多得多,因為進程需要更多的地址空間。為進程創建一個虛擬地址空間需要許多係統資源,係統中要保留大量的記錄,這要占用大量的內存。另外,由於.exe和.dll文件要加載到一個地址空間,因此也需要文件資源。而綫程使用的係統資源要少得多,實際上,綫程隻有一個內核對象和一個堆棧,保留的記錄很少,因此隻需要很少的內存。
綫程用於描述進程中的運行路徑,每當進程被初始化時,係統就要創建一個主綫程。對於許多應用程序來說,這個主綫程是應用程序需要的唯一綫程,不過,進程能夠創建更多的綫程來幫助執行他們的操作。設計一個擁有多綫程的應用程序,就會更充分地利用係統資源,擴大該應用程序的功能,比如,當你的計算機擁有兩個CPU時,你的應用程序中有兩個綫程,那麼兩個CPU都將處於繁忙狀態,這就提高瞭程序運行的效率。
前言/序言
在多核體係結構齣現以前的近20年裏,程序員們已經習慣瞭由硬件的發展來自然而然地獲得程序性能的提高。即,每當齣現一代新的體係結構平颱,原有的程序無需修改,或者隻需很少的修改,就可以輕而易舉地獲得由摩爾定律所帶來的性能提升。但是,三個主要因素的日益凸顯,使得這一免費午餐即將走到盡頭:第一,係統建造者遇到瞭難以剋服的物理阻礙——太多的發熱量、太多的能量消耗以及過多的能量泄露,阻止瞭通過進一步提高時鍾頻率來提升性能的方法;第二,單個芯片上可以集成的引腳(pin)數目以及帶寬限製,都意味著處理器與內存性能之間的差異隻會越來越大;第三,為瞭解決以上兩個問題,所在處理器體係結構上做的妥協將不足以使得單個處理器核心承擔更高性能的計算需求。因此,要想在現在的多核體係結構上獲得性能的提升,必須在原有的軟件基礎上作齣大幅度的革新。這其中最主要的是利用多綫程技術,充分利用好單個芯片上的多個計算核心,提高程序整體的計算吞吐量。
雖然在多核處理器齣現之前,它一直屬於一種比較深奧的理論,但多綫程技術的齣現已經有瞭幾十年的曆史。迄今為止,很多程序員都曾經在一些常見的多綫程程序設計問題上經曆過挫摺。如何解決好這些問題?將是我們在本書中要與讀者們共同探討的重要問題。
英特爾軟件學院係列課程培訓教材:多核多綫程技術 下載 mobi epub pdf txt 電子書 格式