第1章 引言 1
1.1 異構並行計算 2
1.2 現代GPU的體係結構 6
1.3 為什麼需要更高的速度和並行化 8
1.4 應用程序的加速 9
1.5 並行編程語言和模型 11
1.6 本書的總體目標 12
1.7 本書的組織結構 13
參考文獻 16
第2章 GPU計算的發展曆程 19
2.1 圖形流水綫的發展 19
2.1.1 固定功能的圖形流水綫時代 20
2.1.2 可編程實時圖形流水綫的發展 23
2.1.3 圖形與計算結閤的處理器 25
2.2 GPGPU:一個中間步驟 27
2.3 GPU計算 28
2.3.1 可擴展的GPU 29
2.3.2 發展近況 29
2.3.3 未來發展趨勢 30
參考文獻與課外閱讀 30
第3章 CUDA簡介 35
3.1 數據並行性 36
3.2 CUDA的程序結構 37
3.3 嚮量加法kernel函數 39
3.4 設備全局存儲器與數據傳輸 41
3.5 kernel函數與綫程 46
3.6 小結 50
3.6.1 函數聲明 50
3.6.2 啓動kernel函數 50
3.6.3 預定義變量 51
3.6.4 運行時API 51
3.7 習題 51
參考文獻 53
第4章 數據並行執行模型 55
4.1 CUDA的綫程組織 56
4.2 綫程與多維數據的映射 59
4.3 矩陣乘法——一個更加復雜的kernel函數 65
4.4 綫程同步和透明的可擴展性 70
4.5 綫程塊的資源分配 73
4.6 查詢設備屬性 74
4.7 綫程調度和容許時延 75
4.8 小結 78
4.9 習題 79
第5章 CUDA存儲器 81
5.1 存儲器訪問效率的重要性 82
5.2 CUDA設備存儲器的類型 83
5.3 減少全局存儲器流量的一種策略 89
5.4 分塊矩陣乘法的kernel函數 93
5.5 存儲器——限製並行性的一個因素 98
5.6 小結 100
5.7 習題 101
第6章 性能優化 103
6.1 WARP和綫程執行 104
6.2 全局存儲器的帶寬 111
6.3 執行資源的動態劃分 118
6.4 指令混閤和綫程粒度 120
6.5 小結 121
6.6 習題 121
參考文獻 124
第7章 浮點運算 127
7.1 浮點格式 128
7.1.1 M的規範化錶示 128
7.1.2 E的餘碼錶示 129
7.2 能錶示的數 130
7.3 特殊的位模式與IEEE格式中的精度 134
7.4 算術運算的準確度和捨入 135
7.5 算法的優化 136
7.6 數值穩定性 137
7.7 小結 141
7.8 習題 141
參考文獻 142
第8章 並行模式:捲積 143
8.1 背景 144
8.2 一個基本算法:一維並行捲積 148
8.3 常數存儲器和高速緩存 149
8.4 使用光環元素的分塊一維捲積 153
8.5 一個更簡單的分塊一維捲積——通用高速緩存 158
8.6 小結 160
8.7 習題 161
第9章 並行模式:前綴和 163
9.1 背景 164
9.2 簡單並行掃描 165
9.3 考慮工作效率 169
9.4 工作高效的並行掃描 170
9.5 任意輸入長度的並行掃描 174
9.6 小結 177
9.7 習題 177
參考文獻 178
第10章 並行模式:稀疏矩陣-嚮量乘法 179
10.1 背景 180
10.2 使用CSR格式的並行SpMV 183
10.3 填充與轉置 184
10.4 用混閤方法來控製填充 186
10.5 通過排序和劃分來規則化 189
10.6 小結 191
10.7 習題 191
參考文獻 192
第11章 應用案例研究:高級MRI重構 193
11.1 應用背景 194
11.2 迭代重構 197
11.3 計算FHD 198
11.4 最終評估 214
11.5 習題 217
參考文獻 218
第12章 應用案例研究:分子可視化和分析 219
12.1 應用背景 220
12.2 kernel函數簡單的實現方案 221
12.3 綫程粒度調節 225
12.4 存儲器閤並 227
12.5 小結 230
12.6 習題 231
參考文獻 232
第13章 並行編程和計算思想 233
13.1 並行計算的目標 234
13.2 問題分解 235
13.3 算法選擇 238
13.4 計算思想 243
13.5 小結 244
13.6 習題 244
參考文獻 244
第14章 OpenCL簡介 245
14.1 背景 246
14.2 數據並行性模型 247
14.3 設備的體係結構 249
14.4 kernel函數 250
14.5 設備管理和啓動kernel 251
14.6 OpenCL中的靜電勢圖譜 254
14.7 小結 258
14.8 習題 258
參考文獻 259
第15章 OpenACC並行編程 261
15.1 OpenACC與CUDA C的比較 261
15.2 執行模型 263
15.3 存儲器模型 265
15.4 基本的OpenACC程序 266
15.4.1 並行構造 266
15.4.2 循環構造 267
15.4.3 kernels構造 272
15.4.4 數據管理 275
15.4.5 數據構造 276
15.4.6 異步計算和數據傳輸 278
15.5 OpenACC的發展方嚮 279
15.6 習題 280
第16章 Thrust:一個麵嚮效率的CUDA編程庫 281
16.1 背景簡介 282
16.2 動機 284
16.3 Thrust的基本特性 284
16.3.1 迭代器和內存空間 286
16.3.2 互操作性 286
16.4 泛型編程 288
16.5 抽象的益處 290
16.5.1 編程效率 290
16.5.2 魯棒性 291
16.5.3 真實性能 291
16.6 最佳範例 293
16.6.1 融閤 293
16.6.2 數組結構體 294
16.6.3 隱式範圍 296
16.7 習題 297
參考文獻 298
第17章 CUDA FORTRAN 299
17.1 CUDA FORTRAN和CUDA C的區彆 300
17.2 第一個CUDA FORTRAN程序 301
17.3 CUDA FORTRAN中的多維數組 303
17.4 用通用接口重載主機/設備端例程 304
17.5 通過iso_c_binding調用CUDA C 307
17.6 kernel循環指令和歸約操作 309
17.7 動態共享存儲器 310
17.8 異步數據傳輸 311
17.9 編譯和性能剖析 316
17.10 在CUDA FORTRAN中調用Thrust 317
17.11 習題 321
第18章 C++ AMP簡介 323
18.1 C++ AMP核心特性 324
18.2 C++ AMP執行模式詳解 329
18.2.1 顯式和隱式的數據復製 330
18.2.2 異步操作 331
18.2.3 本節小結 333
18.3 加速器管理 333
18.4 分塊執行 335
18.5 C++ AMP圖形特性 338
18.6 小結 340
18.7 習題 341
第19章 異構集群編程 343
19.1 背景簡介 344
19.2 運行示例 344
19.3 MPI基礎 346
19.4 MPI點對點通信模型 348
19.5 重疊計算和通信 355
19.6 MPI集閤通信模型 362
19.7 小結 363
19.8 習題 363
參考文獻 364
第20章 CUDA動態並行 365
20.1 背景 366
20.2 動態並行簡介 367
20.3 重要細節 368
20.3.1 啓動環境變量設置 369
20.3.2 API錯誤和啓動失敗 369
20.3.3 事件 369
20.3.4 流 369
20.3.5 同步範圍 370
20.4 內存可見性 371
20.4.1 全局內存 371
20.4.2 零拷貝內存 371
20.4.3 常量內存 371
20.4.4 局部內存 371
20.4.5 共享內存 372
20.4.6 紋理內存 372
20.5 一個簡單示例 373
20.6 運行時限製 376
20.6.1 內存占用 376
20.6.2 嵌套深度 376
20.6.3 內存分配和生存周期 376
20.6.4 ECC錯誤 377
20.6.5 流 377
20.6.6 事件 377
20.6.7 啓動池 377
20.7 一個更復雜的示例 378
20.7.1 綫性貝塞爾麯綫 378
20.7.2 二次貝塞爾麯綫 378
20.7.3 貝塞爾麯綫計算(非動態並行版本) 378
20.7.4 貝塞爾麯綫計算(使用動態並行) 381
20.8 小結 384
參考文獻 384
第21章 結論與展望 385
21.1 重點迴顧 385
21.2 存儲器模型的演變 386
21.2.1 大型虛擬和物理地址空間 386
21.2.2 統一的設備存儲空間 388
21.2.3 可配置的緩存和暫時存儲器 388
21.2.4 提高原子操作的速度 389
21.2.5 提高全局內存的訪問速度 389
21.3 kernel函數執行控製過程的演變 389
21.3.1 kernel函數內部的函數調用 389
21.3.2 kernel函數中的異常處理 390
21.3.3 多個kernel函數的同步執行 390
21.3.4 可中斷的kernel函數 391
21.4 內核的性能 391
21.4.1 雙精度的速度 391
21.4.2 更好的控製流效率 392
21.5 編程環境 392
21.6 美好前景 392
參考文獻 393
附錄A 矩陣乘法主機版的源代碼 395
附錄B GPU的計算能力 407
· · · · · · (
收起)