內容簡介
本書第一篇系統地介紹GPU編程的相關知識,幫助讀者快速入門,並構建GPU知識體系;第二篇和第三篇給出大量實例,對每個實例進行循序漸進的並行和最佳化實踐,為讀者提供GPU編程和最佳化參考;第四篇總結影響GPU性能的關鍵要素(執行核心和存儲體系),量化測評GPU的核心性能參數,給出CPU/GPU異構系統上覆蓋完全的各種混合併行模式及其實踐,幫助讀者真正透徹理解GPU。
本書適合作為計算機及相關專業的教材,也可作為GPU程式開發人員和科研人員的參考書。本書封面貼有
清華大學出版社防偽標籤,無標籤者不得銷售。
圖書目錄
第一篇理論篇
第1章高性能計算概述3
1.1高性能計算概念辨析3
1.1.1並行計算、高性能計算和超級計算3
1.1.2超級計算機與超級計算中心4
1.2計算科學5
1.3高性能計算發展史5
1.4高性能計算簡介6
1.5向量機與陣列機8
1.6本章小結9
第2章GPU概述10
2.1GPU是什麼10
2.2協處理器10
2.3GPU與顯示卡的關係11
2.4GPU/顯示卡購買注意事項11
2.5為什麼要學GPU編程12
2.6GPU與CPU辨析13
2.7GPU發展簡史14
2.8GPU編程方法14
2.9CPU/GPU異構系統16
第3章GPU硬體架構17
3.1GPU架構17
3.1.1Tesla架構18
3.1.2Fermi架構20
3.1.3Kepler架構21
3.1.4Maxwell架構23
3.1.5Pascal架構243.2Kernel的硬體映射28
3.3GPU存儲體系29
3.4GPU計算能力30
GPU編程與最佳化——大眾高性能計算第4章GPU軟體體系33
4.2CUDA Toolkit34
4.2.1NVCC編譯器34
4.2.2cuobjdump35
4.3CUDA環境安裝36
4.3.1Windows 7安裝CUDA 4.236
4.3.2Linux下安裝CUDA38
第5章CUDA C編程41
5.1CUDA編程模型41
5.2CUDA編程七步曲42
5.3驅動API與運行時API42
5.4CUDA運行時函式43
5.4.1設備管理函式43
5.4.2存儲管理函式45
5.4.3數據傳輸函式48
5.4.4執行緒管理函式51
5.4.5流管理函式52
5.4.6事件管理函式52
5.4.7紋理管理函式53
5.4.8執行控制函式55
5.4.9錯誤處理函式55
5.4.10圖形學互操作函式57
5.4.11OpenGL互操作函式58
5.4.12Direct3D互操作函式59
5.5CUDA C語言擴展60
5.6gridblockthread三維模型61
第二篇入門篇
第6章向量加法67
6.1向量加法及其串列代碼67
6.2單block單thread向量加68
6.3單block多thread向量加68
6.4多block多thread向量加69
6.5CUBLAS庫向量加法70
6.6實驗結果分析與結論71
6.6.1本書實驗平台71
6.6.2實驗結果71
6.6.3結論71
6.7知識點總結72
6.8擴展練習75
第7章歸約: 向量內積76
7.1向量內積及其串列代碼76
7.2單block分散歸約向量內積77
7.3單block低執行緒歸約向量內積78
7.4多block向量內積(CPU二次歸約)79
7.5多block向量內積(GPU二次歸約)81
7.6基於原子操作的多block向量內積81
7.7計數法實現多block向量內積84
7.8CUBLAS庫向量內積85
7.9實驗結果與結論86
7.9.1實驗結果86
7.9.2結論86
7.10歸約的深入最佳化探討87
7.10.1block數量和thread數量對歸約性能的影響87
7.10.2算術運算最佳化88
7.10.3減少同步開銷89
7.10.4循環展開90
7.10.5總結91
7.11知識點總結91
7.12擴展練習94
第8章矩陣乘法95
8.1矩陣乘法及其3種串列代碼95
8.1.1一般矩陣乘法95
8.1.2循環交換矩陣乘法97
8.1.3轉置矩陣乘法98
8.1.4實驗結果與最優串列矩陣乘99
8.2grid執行緒循環矩陣乘法100
8.3block執行緒循環矩陣乘法101
8.5棋盤陣列矩陣乘法103
8.6判斷移除105
8.7CUBLAS矩陣乘法106
8.8實驗結果分析與結論108
8.8.1矩陣乘精度分析108
8.8.2實驗結果分析110
8.8.3浮點運算能力分析111
8.9行共享存儲矩陣乘法改進111
8.10知識點總結113
8.11擴展練習115
第9章矩陣轉置116
9.1矩陣轉置及其串列代碼116
9.21D矩陣轉置117
9.32D矩陣轉置118
9.4共享存儲2D矩陣轉置119
9.5共享存儲2D矩陣轉置diagonal最佳化120
9.6實驗結果分析與結論121
9.7共享存儲2D矩陣轉置的深入最佳化122
9.8知識點總結124
9.9擴展練習125
第三篇提高篇
第10章卷積129
10.1卷積及其串列實現129
10.1.1一維卷積129
10.1.2二維卷積131
10.2GPU上1D卷積134
10.3M常量1D卷積135
10.4M共享1D卷積136
10.5N共享1D卷積137
10.6實驗結果分析139
10.6.1擴展法1D卷積實驗結果分析139
10.6.2判斷法與擴展法1D卷積對比140
10.6.3加速比分析141
10.6.4執行緒維度對性能的影響141
10.72D卷積的GPU移植與最佳化142
10.7.1GPU上2D卷積142
10.7.2M常量2D卷積143
10.7.3M常量N共享2D卷積143
10.7.42D卷積實驗結果分析145
10.8知識點總結145
10.9擴展練習147
第11章曼德博羅特集148
11.1曼德博羅特集及其串列實現148
11.2曼德博羅特集的GPU映射150
11.3一些最佳化嘗試及效果152
11.3.1訪存連續152
11.3.2uchar4訪存合併153
11.3.34種零拷貝153
11.3.4總結分析155
11.4計算通信重疊最佳化156
11.5突破kernel執行時間限制159
11.6知識點總結160
11.7擴展練習162
第12章掃描: 前綴求和163
12.1前綴求和及其串列代碼163
12.2KoggeStone並行前綴和164
12.2.1直接KoggeStone分段前綴和164
12.2.2交錯KoggeStone分段前綴和165
12.2.3完整KoggeStone前綴和166
12.3BrentKung並行前綴和168
12.3.1BrentKung分段前綴和169
12.3.2兩倍數據的BrentKung分段前綴和170
12.3.3避免bank conflict的兩倍數據BrentKung分段前綴和171
12.3.4完整BrentKung前綴和173
12.4warp分段的KoggeStone前綴求和174
12.5實驗結果分析與結論177
12.6知識點總結179
12.7擴展練習180第13章排序181
13.1串列排序及其性能181
13.1.1選擇排序181
13.1.2冒泡排序182
13.1.3快速排序182
13.1.4基數排序183
13.1.5雙調排序網路185
13.1.6合併排序186
13.1.7串列排序性能對比187
13.2基數排序188
13.2.1基數排序概述188
13.2.2單block基數排序189
13.2.3基於thrust庫的基數排序196
13.3雙調排序網路197
13.3.1雙調排序網路概述197
13.3.2單block雙調排序網路199
13.3.3多block雙調排序網路202
13.4快速排序206
13.5合併排序207
13.6實驗結果分析與結論208
13.7知識點總結209
13.8擴展練習210
第14章幾種簡單圖像處理211
14.1圖像直方圖統計211
14.1.1串列直方圖統計211
14.1.2並行直方圖統計211
14.1.3實驗結果與分析212
14.2中值濾波213
14.2.1串列中值濾波214
14.2.21D並行中值濾波215
14.2.3共享1D中值濾波216
14.2.4雙重共享1D中值濾波218
14.2.52D並行中值濾波221
14.2.6共享2D中值濾波222
14.2.7共享2D中值濾波的改進227
14.2.8實驗結果與分析229
14.3均值濾波231
14.3.1串列均值濾波231
14.3.2並行均值濾波232
14.3.3實驗結果與分析233
第四篇核心篇
第15章GPU執行核心237
15.1概述237
15.2算術運算支持238
15.2.1整數運算238
15.2.2浮點運算239
15.3算術運算性能240
15.4分支處理242
15.5同步與測時246
15.5.1同步246
15.5.2測時247
15.6數學函式247
15.7warp與block原語249
15.7.1warp原語249
15.7.2block原語250
15.8kernel啟動、執行緒切換和循環處理251
第16章GPU存儲體系254
16.1概述254
16.2暫存器259
16.3局部存儲261
16.4共享存儲器264
16.4.1共享存儲使用264
16.4.2bank conflict265
16.4.3volatile關鍵字266
16.4.4共享存儲原子操作267
16.5常量存儲268
16.6全局存儲269
16.6.1全局存儲的使用269
16.6.2全局存儲的合併訪問271
16.6.3利用紋理快取通道訪問全局存儲271
16.7紋理存儲273
16.7.1CUDA數組273
16.7.2紋理存儲的操作和限制274
16.7.3讀取模式、紋理坐標、濾波模式和定址模式276
16.7.4表面存儲278
16.8主機端記憶體281
16.9零拷貝操作283
第17章GPU關鍵性能測評284
17.1GPU性能測評概述284
17.2GPU參數獲取286
17.2.1GPU選擇286
17.2.2詳細設備參數獲取287
17.3精確測時方法匯總288
17.3.1clock測時289
17.3.2gettimeofday測時289
17.3.3CUDA事件測時289
17.3.4cutil庫函式測時290
17.4GPU預熱與啟動開銷290
17.5GPU浮點運算能力291
17.6GPU訪存頻寬293
17.7GPU通信頻寬295
17.8NVIDIA Visual Profiler296
17.9程式性能對比約定298
第18章CPUs和GPUs協同299
18.1協同最佳化基點299
18.1.1CPU並行矩陣乘基點299
18.1.2GPU並行矩陣乘基點300
18.2CPU/GPU協同300
18.3多GPU協同305
18.3.1CUDA版本306
18.3.2OpenMP+CUDA308
18.3.3MPI+CUDA311
18.4CPUs/GPUs協同314
18.4.1CUDA版本314
18.4.2OpenMP+CUDA319
18.4.3MPI+OpenMP+CUDA324
18.5本章小結329
附錄
附錄A判斷法1D卷積代碼333
附錄A.1判斷法1D卷積basic版333
附錄A.2判斷法1D卷積constant版334
附錄A.3判斷法1D卷積shared版336
附錄A.4判斷法1D卷積cache版337
附錄B曼德博羅特集的系列最佳化代碼340
附錄B.1完整版串列C代碼340
附錄B.2cuda_1_0343
附錄B.3cuda_0_2345
附錄B.4cuda_zerocopy346
附錄B.5cuda_1_0_zerocopy348
附錄B.6cuda_0_0_zerocopy349
附錄B.7cuda_0_2_zerocopy351
附錄B.8cuda_2352
附錄B.9cuda_1_2354
附錄C幾種圖像處理完整源碼357
附錄C.1BMP圖像讀寫頭檔案357
附錄C.2圖像直方圖串列代碼373
附錄C.3串列中值濾波代碼374
附錄C.4並行均值濾波相關代碼376
附錄Dnvprof幫助選單383
附錄ENVCC幫助選單388
附錄F幾種排序算法原始碼399
附錄F.1bitonic_sort_block函式399
附錄F.2GPU快速排序完整代碼400
附錄F.3GPU合併排序完整代碼408
參考文獻417