譯者序
序言
前言
第1章 CUDA入門與編程思想1
1.1 源代碼與維基1
1.2 一個用以區彆CUDA與傳統程序開發的示例2
1.3 選擇閤適的CUDA API5
1.4 CUDA的一些基本概念7
1.5 理解首個Runtime Kernel10
1.6 GPGPU編程的三條法則11
1.6.1 法則1:將數據放入並始終存儲於GPU12
1.6.2 法則2:交給GPGPU足夠多的任務12
1.6.3 法則3:注重GPGPU上的數據重用,以避免帶寬限製12
1.7 大O記號的思想與數據傳輸13
1.8 CUDA和Amdahl定律15
1.9 數據並行與任務並行15
1.10 混閤執行:同時使用CPU和GPU資源16
1.11 迴歸測試與正確性18
1.12 靜默錯誤19
1.13 調試簡介20
1.14 UNIX調試方法21
1.14.1 NVIDIA cuda-gdb調試器21
1.14.2 CUDA內存檢查器23
1.14.3 通過UNIX ddd界麵使用cuda-gdb24
1.15 使用Parallel Nsight進行Windows調試25
1.16 本章小結27
第2章 CUDA在機器學習與優化中的應用28
2.1 建模與模擬28
2.1.1 擬閤參數化模型29
2.1.2 Nelder-Mead方法30
2.1.3 Levenberg-Marquardt方法30
2.1.4 算法加速31
2.2 機器學習與神經網絡32
2.3 異或邏輯:一個重要的非綫性機器學習問題33
2.3.1 目標函數示例35
2.3.2 針對多GPU設備、多CPU處理器的完整仿函數35
2.3.3 完整Nelder-Mead優化代碼的簡要討論37
2.4 異或邏輯的性能結果45
2.5 性能討論45
2.6 本章小結48
2.7 C++ NELDER-MEAD代碼模闆48
第3章 CUDA工具套件:對PCA、NLPCA進行性能分析53
3.1 PCA和NLPCA53
3.1.1 自編碼網絡55
3.1.2 用於PCA分析的仿函數示例56
3.1.3 用於NLPCA分析的示例仿函數58
3.2 獲得基礎性能分析數據60
3.3 gprof:通用UNIX性能分析器61
3.4 NVIDIA可視化性能分析器:computeprof62
3.5 Microsoft Visual Studio中的Parallel Nsight65
3.5.1 Nsight時間錶分析66
3.5.2 NVTX跟蹤支持庫67
3.5.3 CUDA API的可擴展性錶現68
3.6 性能調節與分析實用工具(TAU)70
3.7 本章小結70
第4章 CUDA執行模型72
4.1 GPU架構綜述72
4.1.1 綫程調度:通過執行配置統籌性能與並行度74
4.1.2 computeprof中Warp相關值77
4.1.3 Warp分歧77
4.1.4 關於Warp分歧的若乾準則78
4.1.5 computeprof中Warp分歧相關值79
4.2 Warp調度與TLP79
4.3 ILP:高性能低占用率80
4.3.1 ILP隱藏算術計算延遲81
4.3.2 ILP隱藏數據延遲84
4.3.3 ILP的未來84
4.3.4 computeprof中指令速率相關值85
4.4 Little法則86
4.5 檢測限製因素的CUDA工具87
4.5.1 nvcc編譯器88
4.5.2 啓動約束90
4.5.3 反匯編器90
4.5.4 PTX Kernel函數92
4.5.5 GPU模擬器92
4.6 本章小結93
第5章 CUDA存儲器94
5.1 CUDA存儲器層次結構94
5.2 GPU存儲器95
5.3 L2緩存98
5.4 L1緩存99
5.5 CUDA內存類型100
5.5.1 寄存器101
5.5.2 局域內存101
5.5.3 和局域內存相關的computeprof性能分析參數102
5.5.4 共享內存102
5.5.5 和共享內存相關的computeprof性能分析參數105
5.5.6 常量內存105
5.5.7 紋理內存106
5.5.8 和紋理內存相關的computeprof性能分析參數108
5.6 全局內存109
5.6.1 常見的整閤內存示例110
5.6.2 全局內存的申請111
5.6.3 全局內存設計中的限製因素113
5.6.4 和全局內存相關的computeprof性能分析參數114
5.7 本章小結115
第6章 高效使用CUDA存儲器116
6.1 歸約116
6.1.1 歸約模闆117
6.1.2 functionReduce.h的測試程序122
6.1.3 測試結果126
6.2 使用非規則數據結構127
6.3 稀疏矩陣和CUSP支持庫131
6.4 圖論算法132
6.5 SoA、AoS以及其他數據結構134
6.6 分片和分塊135
6.7 本章小結136
第7章 提高並行度的技巧137
7.1 CUDA上下文環境對並行度的擴展137
7.2 流與上下文環境138
7.2.1 多GPU的使用139
7.2.2 顯式同步139
7.2.3 隱式同步141
7.2.4 統一虛擬地址空間141
7.2.5 一個簡單的示例142
7.2.6 分析結果144
7.3 使用多個流亂序執行144
7.3.1 在同一GPU內並發執行Kernel函數的建議147
7.3.2 隱式並行Kernel的原子操作147
7.4 將數據捆綁計算149
7.4.1 手動分割數據150
7.4.2 映射內存150
7.4.3 映射內存的工作機製152
7.5 本章小結153
第8章 CUDA在所有GPU與CPU程序中的應用154
8.1 從CUDA到多種硬件後端的途徑155
8.1.1 PGI CUDA x86編譯器155
8.1.2 PGI CUDA x86編譯器157
8.1.3 將x86處理器核心用作流多處理器159
8.1.4 NVIDIA NVCC編譯器160
8.1.5 Ocelot160
8.1.6 Swan161
8.1.7 MCUDA162
8.2 從其他語言訪問CUDA162
8.2.1 SWIG162
8.2.2 Copperhead163
8.2.3 EXCEL164
8.2.4 MATLAB164
8.3 支持庫164
8.3.1 CUBLAS164
8.3.2 CUFFT165
8.3.3 MAGMA174
8.3.4 phiGEMM支持庫175
8.3.5 CURAND176
8.4 本章小結177
第9章 CUDA與圖形渲染混閤編程178
9.1 OpenGL178
9.1.1 GLUT179
9.1.2 通過OpenGL映射GPU內存179
9.1.3 使用基元重啓提升3D處理性能181
9.2 框架內各文件的介紹183
9.2.1 Kernel與Perlin Kernel演示的示例代碼184
9.2.2 simpleGLmain.cpp文件192
9.2.3 simpleVBO.cpp文件196
9.2.4 callbacksVBO.cpp文件199
9.3 本章小結204
第10章 在雲計算和集群環境中使用CUDA205
10.1 消息傳遞接口205
10.1.1 MPI編程模型206
10.1.2 MPI通信器206
10.1.3 MPI進程號206
10.1.4 主從模式208
10.1.5 點對點模式基礎208
10.2 MPI通信機製209
10.3 帶寬211
10.4 平衡率212
10.5 運行大型MPI程序需要考慮的因素214
10.5.1 初始數據加載的可擴展性214
10.5.2 使用MPI進行計算215
10.5.3 可擴展性檢查216
10.6 雲計算217
10.7 代碼示例218
10.7.1 數據的産生218
10.7.2 主體代碼部分220
10.8 本章小結225
第11章 CUDA在現實問題中的應用227
11.1 高維數據的處理228
11.1.1 PCA/NLPCA228
11.1.2 多維尺度分析229
11.1.3 K均值聚類算法229
11.1.4 期望最大化229
11.1.5 支持嚮量機230
11.1.6 Bayesian網絡230
11.1.7 互信息231
11.2 力導嚮圖232
11.3 Monte Carlo方法232
11.4 分子建模233
11.5 量子化學234
11.6 交互式工作流234
11.7 其他眾多的項目235
11.8 本章小結235
第12章 針對現場實況視頻流的應用程序236
12.1 機器視覺話題236
12.1.1 3D效果237
12.1.2 膚色區域分割238
12.1.3 邊緣檢測238
12.2 FFmpeg239
12.3 TCP服務器241
12.4 實況視頻流應用程序244
12.4.1 kernelWave():動畫Kernel函數244
12.4.2 kernelFlat():在平麵渲染圖像245
12.4.3 kernelSkin():僅保留膚色區域245
12.4.4 kernelSobel():Sobel邊緣檢測過濾器246
12.4.5 launch_kernel()方法247
12.5 simpleVBO.cpp文件248
12.6 callbacksVBO.cpp文件248
12.7 生成與執行代碼251
12.8 展望251
12.8.1 機器學習252
12.8.2 Connectome252
12.9 本章小結253
12.10 simpleVBO.cpp文件253
參考文獻258
術語錶265
· · · · · · (
收起)