並行計算的編程模型

基本信息,內容簡介,目錄,

基本信息

作者:[美]帕萬·巴拉吉(Pavan Balaji) 編著
ISBN(書號):978-7-111-57334-0
叢書名:計算機科學叢書
出版日期:2017-07
版次:1/1
開本:16
定價:¥79.00

內容簡介

隨著並行計算時代的到來,計算機科學家更加關注如何設計適用於高性能並行計算以及超級計算系統的編程模型。由於多個處理單元同時計算以及移動數據,並行系統上的編程是十分複雜的。本書作者根據自己多年的實際並行編程經驗,以一種職業程式設計師易於掌握的方式對高性能計算以及超級計算系統上的一些最重要的並行編程模型進行了綜述。
對於這些編程模型,書中並沒有採用學術文獻中的正式方法對其進行描述,而是以使用說明的形式進行介紹。本書內容所涵蓋的並行編程模型十分廣泛,並且配備大量套用和程式示例,可以使讀者很好地理解每種編程模型所提供的功能。書中首先對適用於分散式記憶體架構的並行編程模型進行了介紹,包括最為常用的訊息傳遞接口(MPI)編程模型,以及GASNet、OpenSHMEM、UPC、GA、Chapel等單邊通信編程模型;然後面向非規則應用程式,對任務並行編程模型進行了講解,包括Charm++、ADLB、Scioto、Swift以及CnC編程模型;之後面向節點內多核處理器架構,對OpenMP、Cilk Plus、TBB三種多執行緒編程模型進行了綜述;最後面向異構眾核架構,對比了CUDA及OpenCL兩種大規模輕量級執行緒編程模型。

目錄

出版者的話
譯者序
前言
第1章 訊息傳遞接口 1
1.1 引言 1
1.2 MPI基礎 1
1.3 點對點通信 2
1.4 數據類型 3
1.5 非阻塞式通信 4
1.6 聚合通信 5
1.7 單邊通信 7
1.8 並行I/O 9
1.9 其他特性 11
1.10 MPI開發心得 12
1.11 總結 13
第2章 全局地址空間網路 14
2.1 研究背景與動機 14
2.2 GASNet概述 14
2.2.1 相關術語 15
2.2.2 執行緒 15
2.2.3 API組織 16
2.3 核心API 16
2.3.1 開始和結束 16
2.3.2 段信息 18
2.3.3 屏障 18
2.3.4 鎖與中斷 19
2.3.5 活動訊息 20
2.3.6 活動訊息進程 22
2.3.7 活動訊息規則與約束 22
2.3.8 出錯代碼 23
2.4 擴展API 23
2.4.1 GASNet段 23
2.4.2 排序與記憶體模型 24
2.4.3 阻塞與非阻塞 24
2.4.4 批量與單個 24
2.4.5 暫存器–記憶體與遠程memset操作 24
2.4.6 擴展API總結 25
2.5 附加內容 26
2.5.1 GASNet工具 26
2.5.2 可移植平台頭檔案 27
2.6 示例 27
2.6.1 編譯和運行示例 27
2.6.2 Hello World示例 28
2.6.3 AM Ping-Pong示例 28
2.6.4 AM Ring示例 30
2.6.5 MCS Locks示例 32
2.7 未來方向 35
第3章 OpenSHMEM 37
3.1 引言 37
3.2 設計理念和根據 37
3.3 OpenSHMEM存儲模型 39
3.4 對稱堆管理 39
3.4.1 初始化和查詢 40
3.4.2 分配和釋放 40
3.4.3 關於分配和對稱堆的說明 41
3.5 遠程記憶體訪問:put和get 41
3.5.1 RMA函式語義 41
3.5.2 RMA函式使用 42
3.6 排序和同步 44
3.6.1 全局同步屏障 44
3.6.2 fence和quiet:RMA操作排序 45
3.6.3 鎖 46
3.6.4 wait和wait_until 46
3.7 集合操作 47
3.7.1 選擇集合參與者 47
3.7.2 同步數組和工作數組 47
3.7.3 非全局同步屏障 48
3.7.4 廣播 48
3.7.5 收集 49
3.7.6 歸約 50
3.8 原子記憶體操作 51
3.8.1 原子加和遞增 52
3.8.2 原子取–加和取–遞增 52
3.8.3 原子交換和條件交換 53
3.9 未來方向 54
第4章 統一併行C 55
4.1 UPC簡史 55
4.2 UPC編程模型 56
4.2.1 術語 56
4.2.2 全局地址空間 56
4.2.3 執行模型 57
4.3 UPC概覽 57
4.3.1 自省 57
4.3.2 數據布局 57
4.3.3 通信 59
4.3.4 UPC記憶體一致性模型 60
4.3.5 同步 61
4.3.6 集合操作 62
4.4 UPC程式示例 63
4.4.1 隨機訪問基準 63
4.4.2 雅可比5點stencil 64
4.4.3 排序示例 65
4.4.4 一維FFT 68
4.5 未來方向 71
第5章 全局數組 72
5.1 引言 72
5.2 編程模型與設計原則 73
5.3 核心功能 74
5.4 進程組 77
5.5 擴展的數組結構 78
5.6 稀疏數組操作的支持 79
5.7 數組上的集合操作 80
5.8 動態負載均衡 80
5.9 實際套用 80
第6章 Chapel 82
6.1 Chapel簡史 82
6.1.1 全面啟動 82
6.1.2 初始方向 83
6.1.3 HPCS時代 83
6.1.4 後HPCS時代 84
6.2 Chapel的主題思想 84
6.2.1 通用並行性表達 84
6.2.2 支持多執行緒執行模型 85
6.2.3 支持全局視圖編程 85
6.2.4 支持多尺度設計 85
6.2.5 支持局部性控制 86
6.2.6 支持以數據為中心的同步 86
6.2.7 用戶與編譯器的不同角色 86
6.2.8 縮小主流語言和HPC語言之間的差距 87
6.2.9 從頭開始(但爭取令人熟悉) 87
6.2.10 遠大目標 88
6.2.11 促使Chapel成為可移植的開源軟體 88
6.3 Chapel特性概述 88
6.3.1 基本語言特性 89
6.3.2 任務並行 92
6.3.3 數據並行 96
6.3.4 位置特性 98
6.4 總結與未來方向 100
第7章 Charm++ 102
7.1 引言 102
7.2 Charm的編程範例以及執行模型 102
7.2.1 以過分解作為核心思想 102
7.2.2 訊息驅動的執行模型 103
7.2.3 授權自適應運行時系統 104
7.3 基本語言 104
7.3.1 chare:分解的基本單元 104
7.3.2 入口方法:基本的調度單元 105
7.3.3 異步方法調用 105
7.3.4 帶索引的chare集合:chare數組 105
7.3.5 唯讀變數 106
7.3.6 Charm++對象:用戶及系統角度 107
7.3.7 結構化匕首符號 108
7.3.8 示例:一維分解的5點stencil代碼 108
7.4 過分解的好處以及訊息驅動執行 110
7.4.1 不依賴於處理器個數 110
7.4.2 異步歸約 110
7.4.3 自適應計算與通信重疊 110
7.4.4 合成性 111
7.4.5 軟體工程方面的好處:邏輯實體的相互獨立 111
7.5 一個設計示例:分子動力學模擬 111
7.6 自適應運行時特性 112
7.6.1 Charm++中負載均衡功能 112
7.6.2 容錯 113
7.6.3 縮小或擴展處理器集合 114
7.6.4 異構處理器以及加速器的支持 115
7.6.5 額外特性 115
7.6.6 實驗特性:熱能與功耗管理 115
7.7 底層架構概述 115
7.8 基於Charm++的高層次語言家族 116
7.9 通過Charm++來開發應用程式 117
7.10 作為研究工具的Charm++ 118
7.11 Charm++:歷史以及現狀 118
7.12 總結 118
第8章 異步動態負載均衡 119
8.1 引言 119
8.2 manager-worker模型與負載均衡 119
8.3 ADLB庫定義 121
8.3.1 API簡介 121
8.3.2 基本的ADLB API 122
8.3.3 使用批處理最佳化記憶體使用 123
8.3.4 獲取和使用ADLB 124
8.4 實現ADLB 124
8.4.1 ADLBM實現 124
8.4.2 其他實現 125
8.5 示例 125
8.5.1 一個簡單的批處理調度 125
8.5.2 動態任務創建:數獨解法 126
8.5.3 任務單元類型:旅行推銷員問題 127
8.5.4 GFMC 127
8.5.5 Swift 128
8.6 DMEM:一個處理大數據的輔助庫 128
8.7 總結與未來方向 129
第9章 可拓展任務對象集合 130
9.1 Scioto任務並行執行模型 131
9.1.1 任務對象 131
9.1.2 任務輸入/輸出模型 132
9.1.3 任務執行模型 132
9.2 多級並行任務集合 133
9.3 Scioto + GA編程接口 134
9.3.1 核心編程結構 134
9.3.2 實現一個Scioto任務 135
9.3.3 示例:矩陣–矩陣乘法 135
9.4 Scioto運行時系統 136
9.4.1 共享任務佇列方法 136
9.4.2 動態負載均衡方法 137
9.4.3 終止檢測 137
9.5 總結 138
第10章 Swift:極端規模的隱式並行腳本 139
10.1 第一個示例:並行因式分解 140
10.2 一個真實的示例:晶體坐標轉換 140
10.3 Swift發展歷史 142
10.4 Swift語言和編程模型 142
10.4.1 Hello World示例 143
10.4.2 變數和標量數據類型 143
10.4.3 數據流執行 144
10.4.4 條件判斷語句 145
10.4.5 數據依賴控制流 145
10.4.6 foreach循環和數組 145
10.4.7 Swift函式 146
10.4.8 外部函式 147
10.4.9 檔案和app函式 148
10.5 Swift執行模型 148
10.6 大規模並行運行時系統 150
10.7 運行時架構 151
10.8 性能分析 153
10.9 Swift的大規模並行編譯 153
10.10 相關工作 154
10.11 總結 155
第11章 並發集合編程模型 157
11.1 引言 157
11.2 研究動機 158
11.3 CnC領域語言 158
11.3.1 概述 158
11.3.2 特徵 160
11.3.3 示例 161
11.3.4 執行語義 162
11.3.5 CnC編程 163
11.3.6 未來工作 167
11.4 CnC調優語言 168
11.4.1 描述 168
11.4.2 特徵 171
11.4.3 示例 171
11.4.4 執行模型 173
11.4.5 未來工作 175
11.5 當前狀態 175
11.6 相關工作 175
11.7 總結 177
第12章 OpenMP 178
12.1 引言 178
12.2 概述 179
12.2.1 術語 179
12.2.2 管理數據環境 180
12.2.3 OpenMP概念簡述 181
12.3 OpenMP特性 182
12.3.1 並行區域 182
12.3.2 同步 186
12.3.3 工作共享 187
12.3.4 任務並行化 191
12.3.5 向量化 195
12.3.6 加速器支持 196
12.3.7 區域取消 199
12.4 性能最佳化建議 200
12.5 關於正確性的思考 201
12.6 總結與未來方向 201
第13章 Cilk Plus 202
13.1 引言 202
13.2 向量並行化 203
13.2.1 數組標註 204
13.2.2 pragma SIMD 205
13.2.3 支持SIMD的函式 206
13.3 執行緒並行 208
13.4 並行性能 211
13.5 數據競爭 215
13.6 實踐技巧 216
13.7 歷史 219
13.8 總結 220
第14章 Intel TBB工具 221
14.1 引言 221
14.1.1 概述 221
14.1.2 基本信息 221
14.2 泛型並行算法 222
14.2.1 簡單循環的並行化 222
14.2.2 在STL容器中處理數據 223
14.2.3 複雜疊代空間 224
14.2.4 其他算法 226
14.3 流圖 226
14.3.1 概述 227
14.3.2 節點通信協定 227
14.3.3 控制依賴圖 228
14.3.4 數據流圖 230
14.3.5 流圖、算法和無環圖的選擇 232
14.4 總結 232
第15章 CUDA 233
15.1 CUDA簡史 233
15.2 CUDA編程結構 234
15.3 示例:向量加法 235
15.4 設備記憶體和數據傳輸 236
15.5 kernel函式與執行緒 238
15.6 執行緒組織 240
15.7 執行緒和多維數據的映射 242
15.8 同步與透明可擴展性 243
15.9 執行緒塊的資源分配 244
15.10 CUDA流與任務並行 244
15.11 總結 248
第16章 OpenCL開放計算語言 249
16.1 計算語言與OpenCL 249
16.2 基本定義 250
16.3 計算機、編程和異構 250
16.4 OpenCL的誕生 251
16.5 OpenCL的核心模型 252
16.5.1 平台模型 252
16.5.2 執行模型 253
16.5.3 記憶體模型 255
16.5.4 編程模型 257
16.6 OpenCL主機程式:向量加法 258
16.7 總結 266
參考文獻 268

相關詞條

熱門詞條

聯絡我們