OpenCL實戰

OpenCL實戰

《OpenCL實戰》是2019年9月人民郵電出版社出版的圖書,作者是[美]Matthew Scarpino。

基本介紹

  • 中文名:OpenCL實戰
  • 作者:[美]Matthew Scarpino
  • ISBN:9787115347343
  • 頁數:406頁
  • 定價:89元
  • 出版社:人民郵電出版社
  • 出版時間:2019年9月
  • 裝幀:平裝
  • 開本:16開
內容簡介,圖書目錄,

內容簡介

OpenCL(Open Computing Language)是第 一個面向異構系統通用目的並行編程的開放式、免費標準,也是一個統一的編程環境。OpenCL當前已經廣泛套用於各種並行環境和不同行業領域。
《OpenCL實戰》是OpenCL編程的實踐指南,旨在介紹如何在實際的應用程式中使用OpenGL解決問題。全書共16章和4個附錄。正文可以分為3個部分。第 一部分是第 1~10章,主要討論的是OpenCL語言及其各項功能。第 二部分是第 11~14章,展示如何用OpenCL來處理高性能計算領域會經常碰到的大規模任務。**後一部分,包括15章和16章,展示如何用OpenCL來加速OpenGL應用程式的執行。附錄A介紹了SDK並演示如何安裝AMD和Nvidia所提供的SDK。附錄B討論了OpenGL和著色器程式開發的基礎知識。附錄C介紹如何安裝和使用MinGW。附錄D討論了嵌入式OpenCL標準。
《OpenCL實戰》適合於需要在異構平台和並發環境下進行開發的專業人士閱讀,要求讀者有一定的C語言基礎。《OpenCL實戰》也適合對OpenCL和高性能計算感興趣的讀者參考。

圖書目錄

第 一部分 OpenCL編程基礎
第 1章 OpenCL簡介 3
1.1 OpenCL的來臨 4
1.2 為什麼是OpenCL 5
1.2.1 可移植性 5
1.2.2 標準化的向量處理 6
1.2.3 並行編程 7
1.3 類比:OpenCL處理和紙牌遊戲 8
1.4 OpenCL應用程式的第 一印象 10
1.5 OpenCL標準和擴展 13
1.6 框架和SDK 13
1.7 小結 14
第 2章 主機編程:基本的數據結構 15
2.1 基本數據類型 16
2.2 獲取平台信息 17
2.2.1 創建平台結構 17
2.2.2 獲取平台信息 18
2.2.3 示例代碼:測試平台的擴展 19
2.3 訪問安裝設備 20
2.3.1 創建設備結構 21
2.3.2 獲取設備信息 22
2.3.3 示例代碼:測試設備擴展 22
2.4 通過上下文管理設備 24
2.4.1 創建上下文 25
2.4.2 獲取上下文信息 26
2.4.3 上下文和引用計數 27
2.4.4 示例代碼:檢查上下文的引用計數 27
2.5 將設備代碼保存在程式中 28
2.5.1 創建程式 29
2.5.2 編譯程式 30
2.5.3 獲取程式信息 31
2.5.4 示例代碼:構建來自多個源檔案的程式 33
2.6 將函式打包為核心 34
2.6.1 創建核心 35
2.6.2 獲取核心信息 35
2.6.3 示例代碼:獲取核心信息 36
2.7 用命令佇列保存核心 37
2.7.1 創建命令佇列 38
2.7.2 入列核心執行命令 38
2.8 小結 39
第3章 主機編程:數據傳輸和數據劃分 41
3.1 設定核心參數 42
3.2 快取對象 42
3.2.1 分配快取對象 43
3.2.2 創建子快取對象 45
3.3 圖像對象 46
3.3.1 創建圖像對象 46
3.3.2 獲取圖像對象的相關信息 49
3.4 獲取快取對象的相關信息 49
3.5 記憶體對象的傳輸命令 51
3.5.1 讀/寫數據傳輸 52
3.5.2 映射記憶體對象 55
3.5.3 記憶體對象間的數據複製 57
3.6 數據劃分 59
3.6.1 循環和工作項 60
3.6.2 工作項的大小和偏移量 61
3.6.3 一個簡單的一維例子 62
3.6.4 工作組和計算單元 63
3.7 小結 64
第4章 核心編程:數據類型和設備記憶體 66
4.1 核心編程簡介 67
4.2 標量數據類型 68
4.2.1 訪問雙精度數據類型 69
4.2.2 位元組順序 70
4.3 浮點計算 71
4.3.1 浮點數據類型 71
4.3.2 雙轉度數據類型 72
4.3.3 half數據類型 73
4.3.4 檢查IEEE-754的兼容性 73
4.4 向量數據類型 75
4.4.1 首 選向量寬度 76
4.4.2 初始化向量 78
4.4.3 讀取和修改向量分量 78
4.4.4 位元組順序和記憶體訪問 81
4.5 OpenCL設備模型 83
4.5.1 核心模型類比的第 一部分:學校中學數學的學生 83
4.5.2 設備模型類比的第 二部分:設備上的工作項 84
4.5.3 程式中的地址空間 86
4.5.4 記憶體對齊 88
4.6 局部和私有核心參數 88
4.6.1 局部參數 89
4.6.2 私有參數 89
4.7 小結 90
第5章 核心編程:運算符和函式 92
5.1 運算符 93
5.2 工作組和工作項函式 95
5.2.1 維度和工作項 96
5.2.2 工作組 97
5.2.3 示例套用 97
5.3 數據傳輸操作 98
5.3.1 載入和保存同類型的數據 98
5.3.2 將標量數組載入保存到向量中 99
5.3.3 將向量保存到標量數組中 100
5.4 浮點型函式 100
5.4.1 算術運算函式和取捨函式 100
5.4.2 比較函式 102
5.4.3 指數函式和對數函式 103
5.4.4 三角函式 103
5.4.5 其他類型的浮點函式 105
5.5 整數函式 106
5.5.1 加法函式和減法函式 106
5.5.2 乘法運算 108
5.5.3 其他類型的整數函式 109
5.6 混洗和選擇函式 111
5.6.1 混洗函式 111
5.6.2 選擇函式 113
5.7 向量測試函式 115
5.8 幾何函式 116
5.9 小結 118
第6章 圖像處理 120
6.1 圖像對象和採樣器 121
6.1.1 主機上的圖像對象:cl_mem 121
6.1.2 主機上的採樣器;cl_sampler 122
6.1.3 設備上的圖像對象:image2d_t和image3d_t 125
6.1.4 設備上的採樣器:sampler_t 126
6.2 圖像處理函式 126
6.2.1 圖像讀取函式 127
6.2.2 寫圖像函式 128
6.2.3 圖像信息函式 129
6.2.4 一個簡單的例子 130
6.3 圖像放縮和插值 131
6.3.1 **鄰近插值 131
6.3.2 雙線性插值 132
6.3.3 用OpenCL編程放大圖像 134
6.4 小結 135
第7章 事件、性能分析及同步化 136
7.1 主機提醒事件 137
7.1.1 將事件和命令關聯 137
7.1.2 將事件和回調函式作關聯 138
7.1.3 主機提醒的例子 139
7.2 命令同步事件 140
7.2.1 等待列表和命令事件 141
7.2.2 等待列表和用戶事件 142
7.2.3 額外的命令同步函式 144
7.2.4 獲取和事件關聯的數據 146
7.3 性能分析事件 149
7.3.1 配置性能分析命令 149
7.3.2 對數據傳輸進行性能分析 151
7.3.3 對數據劃分進行分析 152
7.4 工作項同步化 154
7.4.1 障礙和柵欄 155
7.4.2 原子操作 156
7.4.3 原子命令和互斥 158
7.4.4 異步數據傳輸 160
7.5 小結 161
第8章 用C++開發 163
8.1 初步了解 164
8.1.1 向量和字元串 164
8.1.2 異常 165
8.2 創建核心 166
8.2.1 平台、設備以及上下文 166
8.2.2 程式和核心 169
8.3 核心參數和記憶體對象 172
8.3.1 記憶體對象 173
8.3.2 通用數據參數 177
8.3.3 局部記憶體參數 178
8.4 命令佇列 179
8.4.1 創建CommandQueue對象 179
8.4.2 入列核心執行命令 179
8.4.3 讀寫命令 181
8.4.4 記憶體映射和複製命令 183
8.5 事件處理 185
8.5.1 主機提醒 185
8.5.2 命令同步化 187
8.5.3 性能分析事件 188
8.5.4 另外的事件函式 189
8.6 小結 190
第9章 用Java和Python來開發 192
9.1 Aparapi 193
9.1.1 Aparapi安裝 193
9.1.2 Kernel類 194
9.1.3 工作項和工作組 195
9.2 JavaCL 197
9.2.1 JavaCL安裝 198
9.2.2 JavaCL開發概述 198
9.2.3 用JavaCL來創建核心 199
9.2.4 設定核心參數以及入列命令 202
9.3 PyOpenCL 206
9.3.1 PyOpenCL安裝和許可 206
9.3.2 PyOpenCL開發概述 207
9.3.3 用PyOpenCL創建核心 207
9.3.4 設定參數和執行核心 211
9.4 小結 215
第 10章 通用編程原則 217
10.1 全局大小和局部大小 218
10.1.1 找出工作組大小的上限值 218
10.1.2 測試核心和設備 220
10.2 數值歸併 221
10.2.1 OpenCL的歸併算法 221
10.2.2 使用向量提升歸併運算的速度 224
10.3 工作組間的同步化 225
10.4 設計高性能核心的10條技巧 227
10.5 小結 229
第 二部分 用OpenCL來編程實現實際的算法
第 11章 歸併與排序 233
11.1 MapReduce 234
11.1.1 MapReduce簡介 234
11.1.2 MapReduce和OpenCL 236
11.1.3 MapReduce例子:字元串查找 238
11.2 雙調排序 240
11.2.1 理解雙調排序算法 240
11.2.2 用OpenCL來實現雙調排序 243
11.3 基數排序 249
11.3.1 理解基數排序 250
11.3.2 用向量實現基數排序 250
11.4 小結 252
第 12章 矩陣和QR分解 253
12.1 矩陣轉置 254
12.1.1 矩陣簡介 254
12.1.2 矩陣轉置的理論和實現 254
12.2 矩陣乘法 257
12.2.1 矩陣乘法理論 257
12.2.2 用OpenCL編程實現矩陣乘法 258
12.3 Householder變換 259
12.3.1 向量投影 260
12.3.2 向量反射 261
12.3.3 外積和Householder矩陣 262
12.3.4 用OpenCL編程實現向量反射 263
12.4 QR分解 264
12.4.1 計算Householder向量和R矩陣 265
12.4.2 計算Householder矩陣和矩陣Q 266
12.4.3 用OpenCL編程實現QR分解 267
12.5 小結 270
第 13章 稀疏矩陣 272
13.1 差分方程和稀疏矩陣 273
13.2 稀疏矩陣的存儲以及Harwell-Boeing數據集 274
13.2.1 Harwell-Boeing數據集簡介 274
13.2.2 訪問Matrix Market檔案中的數據 275
13.3 **速下降法 278
13.3.1 正定矩陣 279
13.3.2 **速下降法理論 279
13.3.3 用OpenCL編程實現SD算法 281
13.4 共軛梯度法 283
13.4.1 正交化和共軛 283
13.4.2 正交化和GRAM-SCHMIDT法 283
13.4.3 共軛梯度法 285
13.5 小結 287
第 14章 信號處理和快速傅立葉變換 289
14.1 頻率分析簡介 289
14.2.1 DFT背後的理論 292
14.2.2 OpenCL和DFT 298
14.3 快速傅立葉變換 299
14.3.1 DFT的三條性質 299
14.3.2 構建快速傅立葉變換 302
14.3.3 用OpenCL來實現FFT 306
14.4 小結 311
第三部分 用OpenCL來加速OpenGL
第 15章 將OpenCL和OpenGL結合 315
15.1 在OpenGL和OpenCL之間共享數據 316
15.1.1 創建OpenCL上下文 317
15.1.2 在OpenGL和OpenCL之間共享數據 319
15.1.3 同步化對共享數據的訪問 322
15.2 獲取信息 323
15.2.1 獲取OpenGL對象和紋理信息 323
15.2.2 獲取OpenGL上下文的相關信息 324
15.3 基本的互操作例子 325
15.3.1 初始化OpenGL操作 325
15.3.2 初始化OpenCL操作 326
15.3.3 創建數據對象 327
15.3.4 執行核心 327
15.3.5 渲染圖形 328
15.4 互操作和動畫 329
15.4.1 確定頂點數據 329
15.4.2 動畫和顯示 330
15.4.3 執行核心 331
15.5 小結 332
第 16章 紋理和渲染快取 334
16.1 圖像濾波 335
16.1.1 高斯模糊 337
16.1.2 圖像銳化 337
16.1.3 圖像浮雕化 338
16.2 用OpenCL來對紋理濾波 339
16.2.1 init_gl函式 339
16.2.2 init_cl函式 339
16.2.3 configure_shared_data函式 340
16.2.4 execute_kernel函式 341
16.2.5 display函式 342
16.3 小結 343
附錄A 安裝和使用軟體開發包 344
A.1 了解OpenCL SDK 344
A.1.1 檢查設備的兼容性 344
A.1.2 OpenCL頭檔案和庫檔案 345
A.2 Windows上的OpenCL 347
A.2.1 在Windows上安裝AMD顯示卡驅動 347
A.2.2 用AMD顯示卡來編譯Windows應用程式 349
A.2.3 在Windows上安裝Nvidia的顯示卡驅動 349
A.2.4 用Nvidia顯示卡來編譯Windows應用程式 351
A.3 Linux上的OpenCL 351
A.3.1 在Linux上安裝AMD的顯示卡驅動 351
A.3.2 在Linux上安裝Nvidia顯示卡驅動 352
A.3.3 在Linux上編譯OpenCL應用程式 354
A.4 在Mac OS上安裝OpenCL 355
A.5 小結 356
附錄B 用OpenGL作實時渲染 357
B.1 安裝OpenGL 358
B.1.1 在Windows上安裝OpenGL 359
B.1.2 在Linux上安裝OpenGL 359
B.1.3 在Mac OS上安裝OpenGL 360
B.2 在主機上開發OpenGL應用程式 360
B.2.1 將數據放到頂點快取對象(VBO)之中 361
B.2.2 配置頂點屬性 363
B.2.3 編譯和部署著色器 365
B.2.4 啟動渲染過程 367
B.3 開發著色器程式 369
B.3.1 著色器編程簡介 370
B.3.2 頂點著色器 373
B.3.3 片段著色器 374
B.4 用GLUT來創建OpenGL視窗 375
B.4.1 配置和創建視窗 375
B.4.2 事件處理 376
B.4.3 顯示視窗 377
B.5 將OpenGL和GLUT結合 379
B.5.1 GLUT/OpenGL初始化 379
B.5.2 設定視窗(viewport) 381
B.5.3 渲染模型 381
B.6 添加紋理 382
B.6.1 在主機應用程式中創建紋理 383
B.6.2 頂點著色器中的紋理映射 386
B.6.3 在片段著色器中使用紋理 387
B.7 小結 388
附錄C 面向Windows和OpenCL的**簡GNU 390
C.1 在Windows下安裝MinGW 390
C.1.1 獲取並運行圖形安裝工具 391
C.1.2 在MinGW下安裝新工具 393
C.2 編譯MinGW可執行程式 394
C.2.1 用MinGW編譯HelloWorld! 394
C.2.2 GNU編譯器 395
C.3 Makefiles 396
C.3.1 GNU makefile的結構 396
C.3.2 目標和偽目標 399
C.3.3 簡單的makefile例子 401
C.4 編譯OpenCL應用程式 401
C.5 小結 403
附錄D Appendix D移動設備上的OpenCL 404
D.1 數值處理 404
D.2 圖像處理 405
D.3 小結 406

相關詞條

熱門詞條

聯絡我們