齣版者的話
譯者序
前言
第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
· · · · · · (
收起)