CUDA C 編程權威指南 (Professional CUDA C Programming)

程潤偉 (John Cheng), 馬克斯·格羅斯曼 (Max Grossman), 泰·麥克切爾 (Ty McKercher)

無法訂購

買這商品的人也買了...

相關主題

商品描述

本書主要介紹瞭如何使用GPU和利用CUDAC語言對其進行編程的。首先從基本的CUDA概念及結構講起,一步一步地引導讀者進入CUDA的內部世界,由淺入深地介紹了其編程要求及其內部架構,使讀者對其有了整體印象後,逐步深入瞭解其內部機能,後介紹了GPU的一些專用函數和註意事項。

作者簡介

作者:(美國)程潤偉(John Cheng) (美國)馬克斯·格羅斯曼(Max Grossman) (美國)泰·麥克切爾(Ty McKercher)譯者:顏成鋼殷建李亮

程潤偉(John Cheng),博士是休斯敦BGP國際的研究科學家,利用GPU開發出了地震成像產品,並開發了許多異構計算平台上的高性能並行生產應用程序。

馬克斯·格羅斯曼(Max Grossman)是GPU計算方面的專家,主要用CUDA解決醫學影像、機器學習和地球物理學等問題。

目錄大綱

譯者序
推薦序
自序
作者簡介
技術審校者簡介
前言
致謝
第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.3CUDA:一種異構計算平台10
1.3用GPU輸出HelloWorld12
1.4使用CUDAC編程難嗎15
1.5總結16
1.6習題16
第2章CUDA編程模型18
2.1CUDA編程模型概述18
2.1.1CUDA編程結構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.1CUDA執行模型概述56
3.1.1GPU架構概述57
3.1.2Fermi架構59
3.1.3Kepler架構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上嵌套HelloWorld106
3.6.3嵌套歸約109
3.7總結113
3.8習題113
第4章全局內存115
4.1CUDA內存模型概述1 15
4.1.1內存層次結構的優點116
4.1.2CUDA內存模型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.1CUDA共享內存概述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使用動態共享內存的並行歸約20 4
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.1CUDA流231
6.1.2流調度234
6.1.3流的優先級235
6.1.4CUDA事件235
6.1.5流同步237
6.2並發內核執行240
6.2.1非空流中的並發內核240
6.2.2FermiGPU上的虛假依賴關係242
6.2.3使用OpenMP的調度操作244
6.2.4用環境變量調整流行為245
6.2.5GPU資源的並發限制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.1CUDA指令概述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.1CUDA庫概述282
8.1.1CUDA庫支持的作用域283
8.1.2通用的CUDA庫工作流283
8.2cuSPARSE庫285
8.2. 1cuSPARSE數據存儲格
8.2.2用cuSPARSE進行格式轉換
8.2.3cuSPARSE功能示例
8.2.4cuSPARSE發展中的重要主題
8.2.5cuSPARSE小結
8.3cuBLAS庫
8.3.1管理cuBLAS數據
8.3.2cuBLAS功能示例
8.3.3cuBLAS發展中的重要主題
8.3.4cuBLAS小結
8.4cuFFT庫
8.4.1使用cuFFTAPI
8.4.2cuFFT功能示例
8.4.3cuFFT小結
8.5cuRAND庫
8.5.1擬隨機數或偽隨機數的選擇
8.5.2cuRAND庫概述
8.5.3cuRAND介紹
8.5.4c uRAND發展中的重要主題
8.6CUDA6.0中函數庫的介紹
8.6.1Drop—In庫
8.6.2多GPU庫
8.7CUDA函數庫的性能研究
8.7.1cuSPARSE與MKL的比較
8.7.2cuBLAS與MKLBLAS的比較
8.7. 3cuFFT與FFTW及MKL的比較
8.7.4CUDA庫性能小結
8.8OpenACC的使用
8.8.1OpenACC計算指令的使用
8.8.2OpenACC數據指令的使用
8.8.3OpenACC運行時API
8.8.4OpenACC和CUDA庫的結合
8.8.5OpenACC小結
8.9總結
8.10習題
第9章多GPU編程
9.1從一個GPU到多GPU
9.1.1在多GPU上執行
9.1.2點對點通信
9.1.3多GPU間的同步
9.2多GPU間細分計算
9.2.1在多設備上分配內存
9.2.2單主機線程分配工作
9.2.3編譯和執行
9.3多GPU上的點對點通信
9.3.1實現點對點訪問
9.3.2點對點的內存複製
9.3.3統一虛擬尋址的點對點內存訪問
9.4多GPU上的有限差分
9.4.1二維波動方程的模板計算
9.4.2多GPU程序的典型模式
9.4.3多GPU上的二維模板計算
9.4.4重疊計算與通信
9.4.5編譯和執行
9.5跨GPU集群擴展應用程序
9.5.1CPU到CPU的數據 輸
9.5.2使用傳統MPI在GPU和GPU間傳輸數據
9.5.3使用CUDA—awareMPI進行GPU到GPU的數據傳輸
9.5.4使用CUDA—awareMPI進行節點內GPU到GPU的數據傳輸
9.5.5調整消息塊大小
行GPU到GPU的數據傳輸
9.6總結
9.7習題
……
第10章程序實現的注意事項
附錄推薦閱讀