CUDA 編程:基礎與實踐 版權信息
- ISBN:9787302564607
- 條形碼:9787302564607 ; 978-7-302-56460-7
- 裝幀:70g膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
CUDA 編程:基礎與實踐 本書特色
本書是一本理想的學習 CUDA 編程的入門書籍,理論與實操結合,難易適中。
本書用大量簡單的代碼展示 CUDA 編程的基礎 ;用一個具體的例子——分子動力學模擬程序開發——展示如何一步一步地開發大型的、高效的 CUDA 程序。
CUDA 編程:基礎與實踐 內容簡介
CUDA 是目前較為流行的GPU 高性能計算的開發工具之一。本書通過大量實例系統地講述CUDA 編程的重要方面。前12 章通過一些簡短的例子循序漸進地介紹CUDA 編程的基礎知識,主要包括GPU 硬件與CUDA 程序開發工具(第1 章)、CUDA 中的線程組織(第2 章)、CUDA 程序的基本框架與錯誤檢測(第3、4 章)、獲得GPU 加速的關鍵(第5 章)、CUDA中的內存組織與各種內存的合理使用(第6~8 章)、原子函數的合理使用(第9 章)、線程束內的基本函數(第10 章)、CUDA 流(第11 章)、統一內存(第12 章)等。后面兩章是可選讀的內容:第13 章綜合運用前述章節中的知識,用CUDA 開發一個簡單的分子動力學模擬程序;第14 章介紹若干CUDA 庫(包括Thrust、cuBLAS、cuSolver 和cuRAND)的使用。
本書適合高等院校理工科專業的本科生和研究生及其他任何對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
展開全部
CUDA 編程:基礎與實踐 作者簡介
樊哲勇,1983 年生,2010 年在南京大學物理系獲理學博士學位,2010-2012 年在廈門大學物理系做博士后,2012-2014年在芬蘭 Aalto 大學做博士后,2014-2016 在渤海大學任副教授,2016 年至今在芬蘭 Aalto 大學做博士后。擁有 8 年 CUDA 編程經驗,用 CUDA 開發了高效的分子動力學模擬程序 GPUMD 和量子輸運程序 GPUQT,在計算物理的一流期刊《Computer Physics Communications》發表9篇原創論文。