圖書簡介
《OpenCL異構計算》講解了OpenCL和如何為複雜的異構系統(多核處理器、GPU和APU)進行並行編程。OpenCL是為支持多平台設計的,受行業廣泛支持,有助於幫助讀者為異構環境編寫高性能應用程式。
目錄
第1章並行編程入門 1
引言 1
OpenCL 1
本書目標 2
並行思維 2
並發編程模型和並行編程模型 6
執行緒和共享記憶體 9
訊息傳遞通信 9
不同粒度的並行 10
數據共享和同步 11
本書結構 11
參考文獻 13
擴展閱讀和相關網站 13
第2章OpenCL簡介 15
引言 15
OpenCL標準 15
OpenCL規範 15
kernel和OpenCL執行模型 16
平台和設備 19
主機-設備之間的互動 19
執行環境 22
上下文 22
命令佇列 22
事件 23
記憶體對象 24
flush命令和finish命令 26
新建一個OpenCL程式對象 26
OpenCL的kernel 27
記憶體模型 29
寫kernel 31
向量相加實例的完整代碼 32
使用C++封裝API實現向量相加 35
小結 38
參考文獻 38
第3章OpenCL設備架構 39
引言 39
硬體權衡 39
性能隨頻率的提升及其限制 41
超標量執行 42
VLIW 42
SIMD和向量處理 45
硬體多執行緒 46
多核架構 49
集成:片上系統和APU 51
高速快取層次和記憶體系統 52
架構設計空間 53
CPU設計 55
GPU體系結構 58
APU和類APU的設計 60
小結 62
參考文獻 63
第4章OpenCL基本實例 65
引言 65
套用實例 65
簡單的矩陣相乘 65
圖像旋轉實例 71
圖像卷積實例 75
編譯OpenCL主機端套用 82
小結 83
第5章OpenCL的並發與執行模型 85
引言 85
kernel,work_item,workgroup和執行域 85
OpenCL同步:kernel,fence和barrier 88
佇列與全局同步 92
OpenCL的記憶體一致性 94
事件 94
命令barrier與marker 106
主機端記憶體模型 107
buffer對象 108
image對象 111
設備端記憶體模型 113
設備端寬鬆的記憶體一致性 114
全局記憶體 115
本地記憶體 117
常量記憶體 119
私有記憶體 120
小結 120
第6章OpenCL在CPU/GPU平台上的實現 121
引言 121
OpenCL在AMDBULLDOZER上的實現 121
OpenCL在AMDRADEONHD7970GPU上的實現 126
多執行緒和記憶體系統 128
HD7970架構上的指令執行 130
VLIW執行的改進 134
資源分配 135
OpenCL的記憶體性能 136
OpenCL全局記憶體 136
本地記憶體——軟體管理的快取 140
小結 146
參考文獻 146
第7章數據管理 147
引言 147
記憶體管理 147
獨立環境中(使用獨立GPU)的數據傳輸 149
最佳化 149
快取區 150
共享記憶體環境中的數據存儲 151
本地記憶體 153
快取的系統記憶體 154
非快取系統記憶體 154
套用實例——workgroup歸約 155
使用獨立GPU設備 156
使用APU 158
參考文獻 159
第8章OpenCL案例學習:卷積 161
引言 161
計算卷積的kernel 161
選擇合適的workgroup大小 161
將數據快取到本地記憶體 164
執行卷積 170
小結 171
代碼清單 172
主機端代碼 172
kernel代碼 176
參考文獻 181
第9章OpenCL案例學習:直方圖 183
引言 183
選擇適量的workgroup 183
選擇最優的workgroup大小 184
全局記憶體訪存最佳化 185
使用原子操作計算局部直方圖 187
本地記憶體訪存最佳化 188
局部直方圖的歸約 190
全局歸約 191
完整的kernel代碼 191
性能和小結 194
第10章OpenCL案例學習:混合粒子模擬 195
引言 195
計算概覽 196
GPU實現 198
創建buffer 198
構造加速結構 199
計算碰撞 199
合成 200
CPU實現 200
負載均衡 201
性能和小結 202
生成均勻格線的kernel代碼 203
粒子模擬的kernel代碼 204
第11章OpenCL擴展 209
引言 209
擴展機制概覽 209
設備拆分 212
雙精度 223
參考文獻 231
第12章在其他語言中使用OpenCL 233
引言 233
C和C++之外 233
HaskellOpencl 235
模組結構 237
環境 237
引用計數 237
平台和設備 238
運行環境 239
小結 241
參考文獻 242
第13章OpenCL的性能剖析和調試 243
引言 243
基於事件的剖析 244
AMDAPPProfiler 246
收集OpenCL程式軌跡 247
收集OpenCLGPUKernel性能計數器 250
AMDAPPKernelAnalyzer 251
演示AMDAPPProfiler 253
啟動AMDAPPProfiler 253
使用應用程式的軌跡數據以發現性能瓶頸 253
使用GPU性能計數器發現kernel的性能瓶頸 255
調試OpenCL應用程式 256
gDEBugger概覽 257
使用gDEBugger調試並行OpenCL應用程式 257
AMDprintf擴展 259
小結 261
第14章某圖像分析套用的性能調優 263
引言 263
算法描述 264
CPU多執行緒實現的OpenCL移植 266
熱點分析 267
kernel開發及靜態分析 269
性能最佳化 270
KernelOccupancy 271
workgroup大小的影響 275
向量暫存器(VGPR)和LDS的影響 281
能耗和性能分析 283
小結 284
參考文獻 284
索引 285