GPU編程實(shí)戰(zhàn) 基于Python和CUDA
定 價(jià):79.9 元
- 作者:布萊恩·圖奧邁寧(Brian Tuomanen)
- 出版時(shí)間:2022/6/1
- ISBN:9787115560919
- 出 版 社:人民郵電出版社
- 中圖法分類:TP391.413
- 頁碼:244
- 紙張:
- 版次:01
- 開本:16開
本書旨在引導(dǎo)讀者基于 Python 和CUDA 的 GPU 編程開發(fā)高性能的應(yīng)用程序,先后介紹了為什么要學(xué)習(xí) GPU 編程、搭建 GPU編程環(huán)境、PyCUDA入門等內(nèi)容,以及 CUDA 代碼的調(diào)試與性能分析、通過 Scikit-CUDA 模塊使用 CUDA 庫、實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò)、CUDA 性能優(yōu)化等內(nèi)容。學(xué)完上述內(nèi)容,讀者應(yīng)能從零開始構(gòu)建基于 GPU的深度神經(jīng)網(wǎng)絡(luò),甚至能夠解決與數(shù)據(jù)科學(xué)和 GPU編程高性能計(jì)算相關(guān)的問題。
本書適合對GPU 編程與 CUDA編程感興趣的讀者閱讀。讀者應(yīng)掌握必要的基本數(shù)學(xué)概念,且需要具備一定的 Python編程經(jīng)驗(yàn)。
1.本書基于Python和CUDA介紹GPU編程
2.重點(diǎn)介紹如何通過GPU編程來實(shí)現(xiàn)高性能的并行計(jì)算
3.本書為讀者供習(xí)題,并以“習(xí)題提示”的方式給出解題思路
4.異步社區(qū)為讀者提供配套代碼
Brian Tuomanen 博士自2014年以來,一直從事CUDA 和GPU 編程方面的工作。他在美國西雅圖華盛頓大學(xué)(University of Washington)獲得了電氣工程專業(yè)的學(xué)士學(xué)位,在攻讀數(shù)學(xué)專業(yè)的碩士學(xué)位之前,從事過軟件工程方面的工作。后來,他在哥倫比亞的密蘇里大學(xué)攻讀數(shù)學(xué)博士學(xué)位,在那里與 GPU 編程"邂逅"——GPU編程當(dāng)時(shí)主要用于研究科學(xué)問題。Tuomanen 博十曾經(jīng)在美國陸軍研究實(shí)驗(yàn)室以GPU編程為題發(fā)表演講,后來在美國馬里蘭州的一家初創(chuàng)公司負(fù)責(zé)GPU集成和開發(fā)方面的工作。目前,他在西雅圖擔(dān)任微軟的機(jī)器學(xué)習(xí)專家(Azure CSI)。
第 1章 為什么要學(xué)習(xí)GPU編程 1
1.1 技術(shù)要求 2
1.2 并行化與阿姆達(dá)爾定律 2
1.2.1 使用阿姆達(dá)爾定律 3
1.2.2 Mandelbrot集 5
1.3 對代碼進(jìn)行性能分析 7
1.4 小結(jié) 9
1.5 習(xí)題 10
第 2章 搭建GPU編程環(huán)境 11
2.1 技術(shù)要求 12
2.2 確保擁有合適的硬件 12
2.2.1 檢查硬件(Linux系統(tǒng)) 13
2.2.2 檢查硬件(Windows系統(tǒng)) 14
2.3 安裝GPU驅(qū)動程序 15
2.3.1 安裝GPU驅(qū)動程序(Linux系統(tǒng)) 16
2.3.2 安裝GPU驅(qū)動程序(Windows系統(tǒng)) 17
2.4 搭建C++編程環(huán)境 18
2.4.1 設(shè)置GCC、Eclipse IDE和圖形處理庫(Linux系統(tǒng)) 18
2.4.2 設(shè)置Visual Studio(Windows系統(tǒng)) 18
2.4.3 安裝CUDA Toolkit 20
2.5 為GPU編程設(shè)置Python環(huán)境 21
2.5.1 安裝PyCUDA(Linux系統(tǒng)) 22
2.5.2 創(chuàng)建環(huán)境啟動腳本(Windows系統(tǒng)) 22
2.5.3 安裝PyCUDA(Windows系統(tǒng)) 23
2.5.4 測試PyCUDA 23
2.6 小結(jié) 24
2.7 習(xí)題 25
第3章 PyCUDA入門 26
3.1 技術(shù)要求 26
3.2 查詢GPU 27
3.3 使用PyCUDA的gpuarray類 31
3.3.1 使用gpuarray在GPU之間傳輸數(shù)據(jù) 31
3.3.2 使用gpuarray進(jìn)行基本的逐元素算術(shù)運(yùn)算 32
3.4 使用PyCUDA的ElementwiseKernel執(zhí)行逐元素運(yùn)算 37
3.4.1 重溫Mandelbrot集 40
3.4.2 函數(shù)式編程簡介 44
3.4.3 并行化的掃描內(nèi)核函數(shù)和規(guī)約內(nèi)核函數(shù)簡介 45
3.5 小結(jié) 47
3.6 習(xí)題 47
第4章 內(nèi)核函數(shù)、線程、線程塊與網(wǎng)格 49
4.1 技術(shù)要求 50
4.2 內(nèi)核函數(shù) 50
4.3 線程、線程塊與網(wǎng)格 53
4.4 線程同步與線程通信 60
4.4.1 使用設(shè)備函數(shù)__syncthreads 60
4.4.2 使用共享內(nèi)存 63
4.5 并行前綴算法 65
4.5.1 樸素并行前綴算法 66
4.5.2 包含型并行前綴算法與獨(dú)占型并行前綴算法 69
4.5.3 工作高效型并行前綴算法 69
4.5.4 工作高效型并行前綴算法的實(shí)現(xiàn) 71
4.6 小結(jié) 74
4.7 習(xí)題 74
第5章 流、事件、上下文與并發(fā)性 76
5.1 技術(shù)要求 77
5.2 CUDA設(shè)備同步 77
5.2.1 使用PyCUDA流類 78
5.2.2 通過CUDA流實(shí)現(xiàn)并發(fā)版本的LIFE 82
5.3 事件 85
5.4 上下文 89
5.4.1 同步當(dāng)前上下文 90
5.4.2 手動創(chuàng)建上下文 91
5.4.3 主機(jī)端多進(jìn)程與多線程技術(shù) 92
5.4.4 實(shí)現(xiàn)主機(jī)端并發(fā)的多上下文 93
5.5 小結(jié) 97
5.6 習(xí)題 97
第6章 CUDA代碼的調(diào)試與性能分析 99
6.1 技術(shù)要求 100
6.2 在CUDA內(nèi)核函數(shù)中使用printf函數(shù) 100
6.3 CUDA C編程簡介 106
6.4 利用Nsight IDE開發(fā)和調(diào)試CUDA C代碼 113
6.4.1 在Windows平臺上的Visual Studio中使用Nsight 113
6.4.2 在Linux平臺中使用Nsight和Eclipse 117
6.4.3 借助Nsight理解CUDA的線程束鎖步特性 120
6.5 使用NVIDIA性能分析工具——nvprof與Visual Profiler 122
6.6 小結(jié) 124
6.7 習(xí)題 125
第7章 通過Scikit-CUDA模塊使用CUDA庫 126
7.1 技術(shù)要求 127
7.2 安裝Scikit-CUDA 127
7.3 利用cuBLAS庫處理基本線性代數(shù)運(yùn)算 128
7.3.1 利用cuBLAS庫處理第 1級AXPY運(yùn)算 128
7.3.2 其他第 1級cuBLAS函數(shù) 130
7.3.3 利用cuBLAS庫處理第 2級GEMV運(yùn)算 131
7.3.4 利用cuBLAS中的第3級GEMM操作測量GPU性能 133
7.4 利用cuFFT庫進(jìn)行快速傅里葉變換 136
7.4.1 一維快速傅里葉變換示例 137
7.4.2 使用FFT進(jìn)行卷積操作 138
7.4.3 利用cuFFT進(jìn)行二維卷積 139
7.5 通過Scikit-CUDA使用cuSolver 144
7.5.1 奇異值分解 144
7.5.2 奇異值分解在主成分分析中的應(yīng)用 146
7.6 小結(jié) 147
7.7 習(xí)題 148
第8章 CUDA設(shè)備函數(shù)庫與Thrust庫 149
8.1 技術(shù)要求 150
8.2 cuRAND設(shè)備函數(shù)庫 150
8.3 CUDA Math API 155
8.3.1 定積分概述 155
8.3.2 用蒙特卡羅方法計(jì)算定積分 156
8.3.3 編寫測試用例 162
8.4 CUDA Thrust庫 164
8.5 小結(jié) 168
8.6 習(xí)題 169
第9章 實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò) 170
9.1 技術(shù)要求 170
9.2 人工神經(jīng)元與神經(jīng)網(wǎng)絡(luò) 171
9.3 softmax層的實(shí)現(xiàn) 177
9.4 交叉熵?fù)p失函數(shù)的實(shí)現(xiàn) 179
9.5 序貫網(wǎng)絡(luò)的實(shí)現(xiàn) 180
9.5.1 推理方法的實(shí)現(xiàn) 182
9.5.2 梯度下降法 184
9.5.3 數(shù)據(jù)的規(guī)范化和歸一化 189
9.6 Iris數(shù)據(jù)集 190
9.7 小結(jié) 192
9.8 習(xí)題 193
第 10章 應(yīng)用編譯好的GPU代碼 194
10.1 通過Ctypes模塊啟動編譯好的 代碼 194
10.2 編譯并運(yùn)行純PTX代碼 201
10.3 為CUDA Driver API編寫 包裝器 203
10.4 小結(jié) 210
10.5 習(xí)題 211
第 11章 CUDA性能優(yōu)化 212
11.1 動態(tài)并行性 212
11.2 向量化數(shù)據(jù)類型與 內(nèi)存訪問 217
11.3 線程安全的原子操作 218
11.4 線程束洗牌 220
11.5 內(nèi)聯(lián)PTX匯編 223
11.6 經(jīng)過優(yōu)化的數(shù)組求和 函數(shù) 227
11.7 小結(jié) 231
11.8 習(xí)題 231
第 12章 未來展望 233
12.1 深入了解CUDA和GPGPU 編程技術(shù) 234
12.1.1 多GPU系統(tǒng) 234
12.1.2 集群計(jì)算和消息 傳遞接口 234
12.1.3 OpenCL和 PyOpenCLCUDA 234
12.2 圖形領(lǐng)域 235
12.2.1 OpenGL 235
12.2.2 DirectX 12 235
12.2.3 Vulkan 236
12.3 機(jī)器學(xué)習(xí)與計(jì)算機(jī)視覺 236
12.3.1 基礎(chǔ)知識 236
12.3.2 cuDNN 236
12.3.3 Tensorflow與Keras 237
12.3.4 Chainer 237
12.3.5 OpenCV 237
12.4 區(qū)塊鏈技術(shù) 237
12.5 小結(jié) 238
12.6 習(xí)題 238
習(xí)題提示 239
第 1章 為什么要學(xué)習(xí)GPU編程 239
第 2章 搭建GPU編程環(huán)境 239
第3章 PyCUDA入門 240
第4章 內(nèi)核函數(shù)、線程、線程塊與網(wǎng)格 240
第5章 流、事件、上下文與并發(fā)性 241
第6章 CUDA代碼的調(diào)試與性能分析 241
第7章 通過Scikit-CUDA模塊使用CUDA庫 242
第8章 CUDA設(shè)備函數(shù)庫與Thrust庫 242
第9章 實(shí)現(xiàn)深度神經(jīng)網(wǎng)絡(luò) 243
第 10章 應(yīng)用編譯好的GPU代碼 243
第 11章 CUDA性能優(yōu)化 244
第 12章 未來展望 244