CUDA C編程權威指南

CUDA C編程權威指南

《CUDA C編程權威指南》是2017年機械工業出版社出版的圖書,作者是程潤偉,本書主要介紹了如何使用GPU和利用CUDAC語言對其進行編程的。

基本介紹

  • 中文名:CUDA C編程權威指南 
  • 作者:程潤偉
  • 出版社:機械工業出版社
  • ISBN:9787111565475
內容簡介,圖書目錄,

內容簡介

本書主要介紹了如何使用GPU和利用CUDAC語言對其進行編程的。首先從基本的CUDA概念及結構講起,一步一步地引導讀者進入CUDA的內部世界,由淺入深地介紹了其編程要求及其內部架構,使讀者對其有了整體印象後,逐步深入了解其內部機能,後介紹了GPU的一些專用函式和注意事項。

圖書目錄

目  錄
譯者序
推薦序
自序
作者簡介
技術審校者簡介
前言
致謝
第1章 基於CUDA的異構並行計算1
1.1 並行計算1
1.1.1 串列編程和並行編程2
1.1.2 並行性3
1.1.3 計算機架構4
1.2 異構計算6
1.2.1 異構架構7
1.2.2 異構計算範例9
1.2.3 CUDA:一種異構計算平台10
1.3 用GPU輸出Hello World12
1.4 使用CUDA C編程難嗎15
1.5 總結16
1.6 習題16
第2章 CUDA編程模型18
2.1 CUDA編程模型概述18
2.1.1 CUDA編程結構19
2.1.2 記憶體管理20
2.1.3 執行緒管理24
2.1.4 啟動一個CUDA核函式29
2.1.5 編寫核函式30
2.1.6 驗證核函式31
2.1.7 處理錯誤32
2.1.8 編譯和執行32
2.2 給核函式計時35
2.2.1 用CPU計時器計時35
2.2.2 用nvprof工具計時39
2.3 組織並行執行緒40
2.3.1 使用塊和執行緒建立矩陣索引40
2.3.2 使用二維格線和二維塊對矩陣求和44
2.3.3 使用一維格線和一維塊對矩陣求和47
2.3.4 使用二維格線和一維塊對矩陣求和48
2.4 設備管理50
2.4.1 使用運行時API查詢GPU信息50
2.4.2 確定GPU53
2.4.3 使用nvidia-smi查詢GPU信息53
2.4.4 在運行時設定設備54
2.5 總結54
2.6 習題55
第3章 CUDA執行模型56
3.1 CUDA執行模型概述56
3.1.1 GPU架構概述57
3.1.2 Fermi架構59
3.1.3 Kepler架構61
3.1.4 配置檔案驅動最佳化65
3.2 理解執行緒束執行的本質67
3.2.1 執行緒束和執行緒塊67
3.2.2 執行緒束分化69
3.2.3 資源分配74
3.2.4 延遲隱藏76
3.2.5 占用率78
3.2.6 同步81
3.2.7 可擴展性82
3.3 並行性的表現83
3.3.1 用nvprof檢測活躍的執行緒束84
3.3.2 用nvprof檢測記憶體操作85
3.3.3 增大並行性86
3.4 避免分支分化88
3.4.1 並行歸約問題88
3.4.2 並行歸約中的分化89
3.4.3 改善並行歸約的分化93
3.4.4 交錯配對的歸約95
3.5 展開循環97
3.5.1 展開的歸約97
3.5.2 展開執行緒的歸約99
3.5.3 完全展開的歸約101
3.5.4 模板函式的歸約102
3.6 動態並行104
3.6.1 嵌套執行105
3.6.2 在GPU上嵌套Hello World106
3.6.3 嵌套歸約109
3.7 總結113
3.8 習題113
第4章 全局記憶體115
4.1 CUDA記憶體模型概述115
4.1.1 記憶體層次結構的優點116
4.1.2 CUDA記憶體模型117
4.2 記憶體管理124
4.2.1 記憶體分配和釋放124
4.2.2 記憶體傳輸125
4.2.3 固定記憶體127
4.2.4 零拷貝記憶體128
4.2.5 統一虛擬定址133
4.2.6 統一記憶體定址134
4.3 記憶體訪問模式135
4.3.1 對齊與合併訪問135
4.3.2 全局記憶體讀取137
4.3.3 全局記憶體寫入145
4.3.4 結構體數組與數組結構體147
4.3.5 性能調整151
4.4 核函式可達到的頻寬154
4.4.1 記憶體頻寬154
4.4.2 矩陣轉置問題155
4.5 使用統一記憶體的矩陣加法167
4.6 總結171
4.7 習題172
第5章 共享記憶體和常量記憶體174
5.1 CUDA共享記憶體概述174
5.1.1 共享記憶體175
5.1.2 共享記憶體分配176
5.1.3 共享記憶體存儲體和訪問模式176
5.1.4 配置共享記憶體量181
5.1.5 同步183
5.2 共享記憶體的數據布局185
5.2.1 方形共享記憶體185
5.2.2 矩形共享記憶體193
5.3 減少全局記憶體訪問199
5.3.1 使用共享記憶體的並行歸約199
5.3.2 使用展開的並行歸約202
5.3.3 使用動態共享記憶體的並行歸約204
5.3.4 有效頻寬205
5.4 合併的全局記憶體訪問205
5.4.1 基準轉置核心205
5.4.2 使用共享記憶體的矩陣轉置207
5.4.3 使用填充共享記憶體的矩陣轉置210
5.4.4 使用展開的矩陣轉置211
5.4.5 增大並行性214
5.5 常量記憶體215
5.5.1 使用常量記憶體實現一維模板215
5.5.2 與唯讀快取的比較217
5.6 執行緒束洗牌指令219
5.6.1 執行緒束洗牌指令的不同形式220
5.6.2 執行緒束內的共享數據222
5.6.3 使用執行緒束洗牌指令的並行歸約226
5.7 總結227
5.8 習題228
第6章 流和並發230
6.1 流和事件概述231
6.1.1 CUDA流231
6.1.2 流調度234
6.1.3 流的優先權235
6.1.4 CUDA事件235
6.1.5 流同步237
6.2 並發核心執行240
6.2.1 非空流中的並發核心240
6.2.2 Fermi GPU上的虛假依賴關係242
6.2.3 使用OpenMP的調度操作244
6.2.4 用環境變數調整流行為245
6.2.5 GPU資源的並發限制246
6.2.6 默認流的阻塞行為247
6.2.7 創建流間依賴關係248
6.3 重疊核心執行和數據傳輸249
6.3.1 使用深度優先調度重疊249
6.3.2 使用廣度優先調度重疊252
6.4 重疊GPU和CPU執行254
6.5 流回調255
6.6 總結256
6.7 習題257
第7章 調整指令級原語258
7.1 CUDA指令概述259
7.1.1 浮點指令259
7.1.2 內部函式和標準函式261
7.1.3 原子操作指令262
7.2 程式最佳化指令264
7.2.1 單精度與雙精度的比較264
7.2.2 標準函式與內部函式的比較266
7.2.3 了解原子指令272
7.2.4 綜合範例277
7.3 總結279
7.4 習題280
第8章 GPU加速庫和OpenACC281
8.1 CUDA庫概述282
8.1.1 CUDA庫支持的作用域283
8.1.2 通用的CUDA庫工作流283
8.2 cuSPARSE庫285
8.2.1 cuSPARSE數據存儲格

相關詞條

熱門詞條

聯絡我們