複製鏈接
請複製以下鏈接發送給好友

CUDA編程

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

CUDA編程內容簡介

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

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

CUDA編程作者簡介

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