CUDA編程

CUDA編程

《CUDA編程》是2020年清華大學出版社出版的圖書,作者是樊哲勇。本書是一本學習 CUDA 編程的入門書籍,理論與實操結合,難易適中。

基本介紹

  • 中文名:CUDA編程
  • 作者:樊哲勇
  • 出版社:清華大學出版社
  • ISBN:9787302564607
內容簡介,圖書目錄,作者簡介,

內容簡介

本書是一本理想的學習 CUDA 編程的入門書籍。本書分兩部分,第一部分(前十章)循序漸進地介紹 CUDA 編程的基礎,第二部分(後五章)通過一個具體的計算物理套用實例——分子動力學模擬——來介紹如何從頭開發一個大型的、高效的 CUDA 程式。

圖書目錄

第1章 GPU硬體與CUDA程式開發工具1
1.1 GPU 硬體簡介1
1.2 CUDA 程式開發工具4
1.3 CUDA 開發環境搭建示例6
1.4 用nvidia-smi檢查與設定設備7
1.5 其他學習資料8
第2章 CUDA中的執行緒組織10
2.1 C 語言中的HelloWorld程式10
2.2 CUDA中的HelloWorld程式11
2.2.1 只有主機函式的CUDA程式11
2.2.2 使用核函式的CUDA程式12
2.3 CUDA 中的執行緒組織14
2.3.1 使用多個執行緒的核函式14
2.3.2 使用執行緒索引15
2.3.3 推廣至多維格線17
2.3.4 格線與執行緒塊大小的限制21
2.4 CUDA 中的頭檔案21
2.5 用nvcc編譯CUDA程式22
第3章 簡單CUDA程式的基本框架25
3.1 例子:數組相加25
3.2 CUDA 程式的基本框架27
3.2.1 隱形的設備初始化29
3.2.2 設備記憶體的分配與釋放29
3.2.3 主機與設備之間數據的傳遞31
3.2.4 核函式中數據與執行緒的對應32
3.2.5 核函式的要求33
3.2.6 核函式中if語句的必要性34
3.3 自定義設備函式35
3.3.1 函式執行空間標識符35
3.3.2 例子:為數組相加的核函式定義一個設備函式36
第4章 CUDA程式的錯誤檢測38
4.1 一個檢測CUDA運行時錯誤的宏函式38
4.1.1 檢查運行時API函式40
4.1.2 檢查核函式42
4.2 用CUDA-MEMCHECK檢查記憶體錯誤44
第5章 獲得GPU加速的關鍵46
5.1 用CUDA事件計時46
5.1.1 為C 程式計時47
5.1.2 為CUDA程式計時48
5.2 幾個影響GPU加速的關鍵因素50
5.2.1 數據傳輸的比例50
5.2.2 算術強度51
5.2.3 並行規模54
5.2.4 總結55
5.3 CUDA 中的數學函式館55
第6章 CUDA的記憶體組織57
6.1 CUDA 的記憶體組織簡介57
6.2 CUDA 中不同類型的記憶體58
6.2.1 全局記憶體58
6.2.2 常量記憶體61
6.2.3 紋理記憶體和表面記憶體62
6.2.4 暫存器62
6.2.5 局部記憶體63
6.2.6 共享記憶體63
6.2.7 L1和L2快取64
6.3 SM 及其占有率65
6.3.1 SM 的構成65
6.3.2 SM 的占有率65
6.4 用CUDA運行時API函式查詢設備67
第7 章 全局記憶體的合理使用70
7.1 全局記憶體的合併與非合併訪問70
7.2 例子:矩陣轉置73
7.2.1 矩陣複製73
7.2.2 使用全局記憶體進行矩陣轉置75
第8 章 共享記憶體的合理使用78
8.1 例子:數組歸約計算78
8.1.1 僅使用全局記憶體79
8.1.2 使用共享記憶體82
8.1.3 使用動態共享記憶體84
8.2 使用共享記憶體進行矩陣轉置85
8.3 避免共享記憶體的bank衝突86
第9 章 原子函式的合理使用90
9.1 完全在GPU中進行歸約90
9.2 原子函式93
9.3 例子:鄰居列表的建立95
9.3.1 C 版本的開發96
9.3.2 利用原子操作的CUDA版本98
9.3.3 不用原子操作的CUDA版本101
第10章 執行緒束基本函式與協作組104
10.1 單指令-多執行緒執行模式104
10.2 執行緒束內的執行緒同步函式106
10.3 更多執行緒束內的基本函式109
10.3.1 介紹109
10.3.2 利用執行緒束洗牌函式進行歸約計算114
10.4 協作組116
10.4.1 執行緒塊級別的協作組116
10.4.2 利用協作組進行歸約計算118
10.5 數組歸約程式的進一步最佳化119
10.5.1 提高執行緒利用率119
10.5.2 避免反覆分配與釋放設備記憶體122
第11章 CUDA流124
11.1 CUDA 流概述124
11.2 在默認流中重疊主機和設備計算125
11.3 用非默認CUDA流重疊多個核函式的執行128
11.3.1 核函式執行配置中的流參數128
11.3.2 重疊多個核函式的例子129
11.4 用非默認CUDA流重疊核函式的執行與數據傳遞131
11.4.1 不可分頁主機記憶體與異步的數據傳輸函式131
11.4.2 重疊核函式執行與數據傳輸的例子133
第12章 使用統一記憶體編程136
12.1 統一記憶體簡介136
12.1.1 統一記憶體的基本概念136
12.1.2 使用統一記憶體對硬體的要求137
12.1.3 統一記憶體編程的優勢137
12.2 統一記憶體的基本使用方法137
12.2.1 動態統一記憶體138
12.2.2 靜態統一記憶體139
12.3 使用統一記憶體申請超量的記憶體140
12.3.1 個測試140
12.3.2 第二個測試142
12.3.3 第三個測試143
12.4 最佳化使用統一記憶體的程式144
第13章 分子動力學模擬的CUDA程式開發147
13.1 分子動力學模擬的基本算法和C 實現147
13.1.1 程式的整體結構147
13.1.2 分子動力學模擬的基本流程148
13.1.3 初始條件149
13.1.4 邊界條件150
13.1.5 相互作用152
13.1.6 運動方程的數值積分156
13.1.7 程式中使用的單位制157
13.1.8 程式的編譯與運行158
13.1.9 能量守恆的測試159
13.1.10 C 版本程式運行速度的測試160
13.2 CUDA 版本的分子動力學模擬程式開發161
13.2.1 僅加速求力和能量的部分161
13.2.2 加速全部計算165
第14章 CUDA標準庫的使用167
14.1 CUDA 標準庫簡介167
14.2 Thrust 庫168
14.2.1 簡介168
14.2.2 數據結構168
14.2.3 算法168
14.2.4 例子:前綴和169
14.3 cuBLAS 庫171
14.3.1 簡介171
14.3.2 例子:矩陣乘法172
14.4 cuSolver 庫176
14.4.1 簡介176
14.4.2 例子:矩陣本徵值177
14.5 cuRAND 庫181
14.5.1 簡介181
14.5.2 例子182

作者簡介

樊哲勇,1983 年生,2010 年在南京大學物理系獲理學博士學位,2010-2012 年在廈門大學物理系做博士後,2012-2014年在芬蘭 Aalto 大學做博士後,2014-2016 在渤海大學任副教授,2016 年至今在芬蘭 Aalto 大學做博士後。擁有 8 年 CUDA 編程經驗,用 CUDA 開發了高效的分子動力學模擬程式 GPUMD 和量子輸運程式 GPUQT,在計算物理的一流期刊《Computer Physics Communications》發表9篇原創論文。

相關詞條

熱門詞條

聯絡我們