并行程序設(shè)計(jì):概念與實(shí)踐
定 價(jià):119 元
叢書名:高性能計(jì)算技術(shù)叢書
- 作者:[德]貝蒂爾·施密特(Bertil Schmidt) 喬治·岡薩雷斯-多明格
- 出版時(shí)間:2020/6/1
- ISBN:9787111656661
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.11
- 頁碼:0
- 紙張:
- 版次:
- 開本:16開
本書由德國約翰內(nèi)斯·古騰堡大學(xué)并行和分布式架構(gòu)團(tuán)隊(duì)撰寫,對并行編程的高級主題進(jìn)行了深入討論,除了涵蓋基礎(chǔ)概念外,還講授了共享內(nèi)存和分布式內(nèi)存體系結(jié)構(gòu)的實(shí)用編程技巧。作者提供了一套進(jìn)行自動(dòng)代碼評估的開源系統(tǒng),可方便地訪問并行計(jì)算資源,這也使得本書特別適合于課堂教學(xué)。
譯者序
前言
致謝
第1章 緒論 1
1.1 一個(gè)有趣的例子及其分析 2
1.2 并行計(jì)算基礎(chǔ) 10
1.2.1 分布式內(nèi)存系統(tǒng) 10
1.2.2 共享內(nèi)存系統(tǒng) 11
1.2.3 并行程序設(shè)計(jì)需考慮的因素 13
1.3 HPC動(dòng)態(tài)和排名 15
1.4 附加練習(xí) 17
第2章 理論背景 19
2.1 PRAM 20
2.1.1 PRAM變體 21
2.1.2 PRAM上的并行前綴計(jì)算 22
2.1.3 PRAM上稀疏數(shù)組的壓縮算法 24
2.2 網(wǎng)絡(luò)拓?fù)? 25
2.3 Amdahl定律和Gustafson定律 29
2.4 Foster的并行算法設(shè)計(jì)方法學(xué) 34
2.5 附加練習(xí) 37
參考文獻(xiàn) 40
第3章 現(xiàn)代體系結(jié)構(gòu) 41
3.1 存儲(chǔ)層次 42
3.1.1 馮·諾依曼瓶頸 42
3.1.2 高速緩沖存儲(chǔ)器 43
3.1.3 緩存算法 44
3.1.4 優(yōu)化緩存訪問 45
3.1.5 高速緩存一致性 48
3.1.6 虛假共享 50
3.1.7 并發(fā)多線程技術(shù)和預(yù)取技術(shù) 50
3.1.8 展望 51
3.2 并行性的層次 51
3.2.1 Flynn分類法 51
3.2.2 SIMD概念 53
3.2.3 通用微處理器上的向量化 54
3.2.4 結(jié)構(gòu)體數(shù)組和數(shù)組結(jié)構(gòu)體 57
3.2.5 展望 63
3.3 附加練習(xí) 63
參考文獻(xiàn) 67
第4章 C++多線程編程 68
4.1 多線程編程簡介 69
4.1.1 多線程編程和多進(jìn)程編程的區(qū)別 69
4.1.2 派生和并入線程 69
4.1.3 我們的第一個(gè)多線程程序 71
4.2 處理返回值 73
4.2.1 傳統(tǒng)方法 74
4.2.2 使用promise和future的現(xiàn)代方法 75
4.2.3 異步方式 80
4.3 基于靜態(tài)分發(fā)的調(diào)度機(jī)制 82
4.3.1 串行程序 83
4.3.2 線程的區(qū)塊分發(fā) 87
4.3.3 線程的循環(huán)分發(fā) 90
4.3.4 虛假共享 91
4.3.5 線程的塊循環(huán)分發(fā) 93
4.4 處理負(fù)載不平衡 95
4.4.1 靜態(tài)調(diào)度 99
4.4.2 動(dòng)態(tài)塊循環(huán)分發(fā) 101
4.5 用條件變量通知線程 104
4.5.1 為一個(gè)睡覺的學(xué)生建模 105
4.5.2 使用條件變量 107
4.5.3 使用future和promise單發(fā)同步 108
4.6 隱式可數(shù)集合上的并行化 110
4.6.1 隱式可數(shù)集合 111
4.6.2 線程池用例 112
4.6.3 一個(gè)簡單線程池的實(shí)現(xiàn) 114
4.7 附加練習(xí) 119
參考文獻(xiàn) 121
第5章 高級C++11多線程編程 122
5.1 無鎖編程 122
5.1.1 原子計(jì)數(shù) 123
5.1.2 非基本原子數(shù)據(jù)類型 124
5.1.3 利用比較交換以原子方式并行化最大值歸約 126
5.1.4 任意原子操作 129
5.1.5 ABA問題 132
5.2 工作共享線程池 133
5.2.1 工作共享線程池的用例 133
5.2.2 工作共享的實(shí)現(xiàn) 135
5.3 并行圖搜索 137
5.3.1 二元背包問題 138
5.3.2 串行實(shí)現(xiàn) 139
5.3.3 并行實(shí)現(xiàn) 144
5.4 展望 146
5.5 附加練習(xí) 148
參考文獻(xiàn) 149
第6章 OpenMP 150
6.1 OpenMP簡介 151
6.1.1 OpenMP簡史 151
6.1.2 基礎(chǔ) 151
6.2 parallel for制導(dǎo)語句 153
6.2.1 向量加法 154
6.2.2 變量共享和私有化 157
6.2.3 矩陣向量乘法 160
6.3 基本的并行歸約 162
6.3.1 最近鄰分類 162
6.3.2 手寫數(shù)字?jǐn)?shù)據(jù)集MNIST 163
6.3.3 完全配對距離計(jì)算的理論視角 164
6.3.4 完全配對計(jì)算的實(shí)現(xiàn) 165
6.3.5 并行標(biāo)簽預(yù)測 168
6.3.6 性能評測 169
6.4 不平衡循環(huán)調(diào)度 171
6.4.1 對稱性引起的負(fù)載失衡 172
6.4.2 內(nèi)積計(jì)算實(shí)現(xiàn) 173
6.4.3 性能評測 174
6.5 高級歸約 175
6.5.1 MNIST數(shù)據(jù)集上的SOFTMAX回歸分類器 175
6.5.2 定制歸約操作符 183
6.5.3 OpenMP高級歸約 187
6.6 任務(wù)并行 189
6.6.1 樹遍歷 190
6.6.2 循環(huán)中生成任務(wù) 193
6.7 SIMD向量化 193
6.7.1 數(shù)據(jù)依賴 195
6.7.2 向量化感知函數(shù) 196
6.8 展望 196
6.9 附加練習(xí) 197
參考文獻(xiàn) 202
第7章 統(tǒng)一計(jì)算設(shè)備架構(gòu) 203
7.1 CUDA簡介 204
7.2 支持CUDA的GPU硬件架構(gòu) 206
7.2.1 主機(jī)與設(shè)備之間的互連 206
7.2.2 顯存和峰值寬度 207
7.2.3 計(jì)算資源的組織 207
7.3 內(nèi)存訪問模式 211
7.3.1 均值名人臉的計(jì)算 212
7.3.2 計(jì)算中心化的數(shù)據(jù)矩陣 218
7.3.3 計(jì)算協(xié)方差矩陣 221
7.3.4 計(jì)算特征臉 229
7.4 內(nèi)存層次結(jié)構(gòu) 232
7.4.1 問題簡介 233
7.4.2 串行DTW的線性內(nèi)存算法 237
7.4.3 線性內(nèi)存DTW的一個(gè)初始CUDA移植 243
7.4.4 共享內(nèi)存中的波前松弛 248
7.4.5 并發(fā)調(diào)度和bank沖突 253
7.4.6 紋理內(nèi)存和常量內(nèi)存 254
7.5 優(yōu)化準(zhǔn)則 257
7.6 附加練習(xí) 258
參考文獻(xiàn) 259
第8章 高級CUDA編程 261
8.1 warp內(nèi)聯(lián)函數(shù)和原子操作 261
8.1.1 分段并行歸約 262
8.1.2 全局并行歸約 265
8.1.3 任意原子操作 267
8.1.4 展望 269
8.2 利用多塊GPU和流 269
8.2.1 牛頓迭代 269
8.2.2 利用多塊GPU 272
8.2.3 通信和計(jì)算交叉 274
8.2.4 多塊GPU上的流式計(jì)算 278
8.3 展望 280
8.3.1 統(tǒng)一內(nèi)存 280
8.3.2 動(dòng)態(tài)并行性 281
8.3.3 協(xié)作組 281
8.3.4 張量核心 281
8.3.5 GPU集群上的分布式計(jì)算 282
8.4 附加練習(xí) 282
參考文獻(xiàn) 284
第9章 MPI 286
9.1 MPI簡介 286
9.2 基本概念 288
9.3 點(diǎn)到點(diǎn)通信 289
9.4 非阻塞通信 292
9.5 集合通信 295
9.6 計(jì)算通信重疊 300
9.7 派生數(shù)據(jù)類型 309
9.8 復(fù)雜通信域 315
9.9 展望 322
9.10 附加練習(xí) 322
參考文獻(xiàn) 327
第10章 統(tǒng)一并行C++ 329
10.1 PGAS和UPC++簡介 329
10.2 基本概念 331
10.3 內(nèi)存親和性和私有化 332
10.4 全局指針和集合函數(shù) 337
10.5 鎖 343
10.6 遠(yuǎn)程函數(shù)調(diào)用 348
10.7 附加練習(xí) 355
參考文獻(xiàn) 357