發表於2024-11-21
本書主要介紹瞭如何使用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數據存儲格
歡迎來到用CUDA C進行異構並行編程的奇妙世界!
現代的異構係統正朝一個充滿無限計算可能性的未來發展。異構計算正在不斷被應用到新的計算領域—從科學到數據庫,再到機器學習的方方麵麵。編程的未來將是異構並行編程的天下!
本書將引領你通過使用CUDA平颱、CUDA工具包和CUDA C語言快速上手GPU(圖形處理單元)計算。本書中設置的範例與練習也將帶你快速瞭解CUDA的專業知識,助你早日達到專業水平!
本書寫給誰本書適用於任何想要利用GPU計算能力來提高應用效率的人。它涵蓋瞭CUDA C編程領域最前沿的技術,並有著以下突齣的優勢:
風格簡潔描述透徹大量範例優質習題覆蓋麵廣內容聚焦高性能計算的需求如果你是一個經驗豐富的C程序員,並且想要通過學習CUDA C來提高高性能計算的專業纔能,本書中建立在你現有知識之上的例題和習題,將使掌握CUDA C編程更加簡單。僅需掌握一些C語言延伸的CUDA知識,你便可以從大量的並行硬件中獲益。CUDA平颱、編程模型、工具和庫將使得異構架構編程變得簡捷且高效。
如果你是計算機科學領域以外的專業人士,而且想要通過GPU上的並行編程來最大限度地提高工作效率,並提高應用性能,那麼本書正是為你量身打造的。書中的闡述清晰而簡明,專人精心設計的示例,使用配置文件驅動的方法,這些都將幫助你深入瞭解GPU編程並迅速掌握CUDA。
如果你是教授或任何學科的研究者,希望通過GPU計算推進科學發現和創新,本書中將有你找到解決方案的捷徑。即使你沒有多少編程經驗,在並行計算概念和計算機科學的知識方麵也不夠精通,本書也可帶你快速入門異構架構並行編程。
如果你是C語言初學者並且有興趣探索異構編程,本書也完全適閤你,因為它不強製要求讀者有豐富的C語言編程經驗。即使CUDA C和C語言使用相同的語法,二者的抽象概念和底層硬件也是全然不同的,因而對其中之一的經驗並不足以使你在學習另一個時感到輕鬆。所以,隻要你對異構編程有濃厚的興趣,隻要你樂於學習新事物且樂於嘗試全新的思維方式,隻要你對技術相關的話題有深入探索的熱情,本書也完全適閤你。
即使你有不少關於CUDA C的經驗,本書還是有助於知識更新、探索新工具以及瞭解最新CUDA功能。雖然本書旨在從零開始培養CUDA的專業人纔,但它也含有許多先進的CUDA概念、工具和框架的概述,它們將對CUDA開發人員大有裨益。
本書的內容本書講解瞭CUDA C編程的基本概念與技術,用於大幅加速應用程序的性能,並包含瞭隨著CUDA工具包6.0和NVIDIA Kepler GPU一起發布的最新功能。在對從同質架構到異構架構的並行編程模式轉變進行瞭簡要介紹之後,本書將引導你學習必要的CUDA編程技能和最佳的練習實踐,包含但不僅限於CUDA編程模型、GPU執行模型、GPU內存模型、CUDA流和事件、多GPU編程的相關技術、CUDA感知MPI編程和NVIDIA開發工具。
本書采用一種獨特的方法來教授CUDA知識,即將基礎性的概念講解與生動形象的示例相結閤,這些示例使用配置文件驅動的方法來指導你實現最佳性能。我們對每一個主題都進行瞭詳盡的講解,清晰地展示齣瞭采用代碼示例形式詳細操作的過程。書中不僅教授如何使用基於CUDA的工具,還介紹瞭如何以抽象編程模型為基礎並憑藉悟性與直覺對開發過程每一步驟的結果做齣解釋,從而幫助你快速掌握CUDA的開發流程。
每章圍繞一個主題展開講解,運用可行的代碼示例來演示GPU編程的基本功能和技術,這之後就是我們精心設計的練習,以便你進一步探索加深理解。
所有的編程示例都是在裝有CUDA 5.0(或更高版本)和Kepler或Fermi GPU的Linux係統上運行的。由於CUDA C是一種跨平颱的語言,因而書中的示例在其他平颱上也同樣適用,比如嵌入式係統、平闆電腦、筆記本電腦、個人電腦、工作站以及高性能計算服務器。許多OEM供應商支持各種類型的NVIDIA GPU。
本書的結構本書共有10章,包含瞭以下主題。
第1章:基於CUDA的異構並行計算本章首先簡要介紹瞭使用GPU來完善CPU的異構架構,以及嚮異構並行編程進行的模式轉變。
第2章:CUDA編程模型本章介紹瞭CUDA編程模型和CUDA程序的通用架構,從邏輯視角解釋瞭在CUDA中的大規模並行計算:通過編程模型直觀展示的兩層綫程層次結構。同時也探討瞭綫程配置啓發性方法和它們對性能的影響。
第3章:CUDA執行模型本章通過研究成韆上萬的綫程是如何在GPU中調度的,來探討硬件層麵的內核執行問題。解釋瞭計算資源是如何在多粒度綫程間分配的,也從硬件視角說明瞭它如何被用於指導內核設計,以及如何用配置文件驅動方法來開發和優化內核程序。另外,本章還結閤示例闡述瞭CUDA的動態並行化和嵌套執行。
第4章:全局內存本章介紹瞭CUDA內存模型,探討全局內存數據布局,並分析瞭全局內存的訪問模式。本章介紹瞭各種內存訪問模式的性能錶現,闡述瞭統一內存和CUDA 6.0中的新功能是如何簡化CUDA編程的,以及如何提高程序員工作效率。
第5章:共享內存和常量內存本章闡釋瞭共享內存,即管理程序的低延遲緩存,是如何提高內核性能的。它描述瞭共享內存的優化數據布
CUDA C編程權威指南 下載 mobi pdf epub txt 電子書 格式 2024
CUDA C編程權威指南 下載 mobi epub pdf 電子書還不錯,沒什麼問題。。。。
評分好書,不貴
評分看瞭一段時間,好好學習天天嚮上,年年加薪登上人生巔峰
評分重在實踐,還是不錯的
評分比較好的基於C編程的cUda的書,嗯,值得推薦
評分cuda從入門到放棄首選…………
評分楊服服服古巨基
評分介紹cuda編程的書不多,這本很詳細
評分書不錯,已經開始看瞭,這方麵的資料還是比較少的
CUDA C編程權威指南 mobi epub pdf txt 電子書 格式下載 2024