OpenCL實戰


OpenCL實戰

讀者

路線圖

獲取和編譯示例代碼

代碼命名約定

作者在線

關於封面圖

第一部分 OpenCL編程基礎

1 OpenCL簡介

1.1 OpenCL的來臨
1.2 為什么是OpenCL
1.2.1 可移植性
1.2.2 標准化的向量處理
1.2.3 並行編程
1.3 類比:OpenCL處理和紙牌游戲
1.4 OpenCL應用程序的第一印象
1.5 OpenCL標准和擴展
1.6 框架和SDK
1.7 小結

2 主機編程:基本的數據結構

2.1 基本數據類型
2.2 獲取平台信息
2.2.1 創建平台結構
2.2.2 獲取平台信息
2.2.3 示例代碼:測試平台的擴展
2.3 訪問安裝設備
2.3.1 創建設備結構
2.3.2 獲取設備信息
2.3.3 示例代碼:測試設備擴展
2.4 通過上下文管理設備
2.4.1 創建上下文
2.4.2 獲取上下文信息
2.4.3 上下文和引用計數
2.4.4 示例代碼:檢查上下文的引用計數
2.5 將設備代碼保存在程序中
2.5.1 創建程序
2.5.2 編譯程序
2.5.3 獲取程序信息
2.5.4 示例代碼:構建來自多個源文件的程序
2.6 將函數打包為內核
2.6.1 創建內核
2.6.2 獲取內核信息
2.6.3 示例代碼:獲取內核信息
2.7 用命令隊列保存內核
2.7.1 創建命令隊列
2.7.2 入列內核執行命令
2.8 小結

3 主機編程:數據傳輸和數據划分

3.1 設置內核參數
3.2 緩存對象
3.2.1 分配緩存對象
3.2.2 創建子緩存對象
3.3 圖像對象
3.3.1 創建圖像對象
3.3.2 獲取圖像對象的相關信息
3.4 獲取緩存對象的相關信息
3.5 內存對象的傳輸命令
3.5.1 讀/寫數據傳輸
3.5.2 映射內存對象
3.5.3 內存對象間的數據復制
3.6 數據划分
3.6.1 循環和工作項
3.6.2 工作項的大小和偏移量
3.6.3 一個簡單的一維例子
3.6.4 工作組和計算單元
3.7 小結

4 內核編程:數據類型和設備內存

4.1 內核編程簡介
4.2 標量數據類型
4.2.1 訪問雙精度數據類型
4.2.2 字節順序
4.3 浮點計算
4.3.1 浮點數據類型
4.3.2 雙轉度數據類型
4.3.3 half數據類型
4.3.4 檢查IEEE-754的兼容性
4.4 向量數據類型
4.4.1 首選向量寬度
4.4.2 初始化向量
4.4.3 讀取和修改向量分量
4.4.4 字節順序和內存訪問
4.5 OpenCL設備模型
4.5.1 內核模型類比的第一部分:學校中學數學的學生
4.5.2 設備模型類比的第二部分:設備上的工作項
4.5.3 程序中的地址空間
4.5.4 內存對齊
4.6 局部和私有內核參數
4.6.1 局部參數
4.6.2 私有參數
4.7 小結

5 內核編程:運算符和函數

5.1 運算符
5.2 工作組和工作項函數
5.2.1 維度和工作項
5.2.2 工作組
5.2.3 示例應用
5.3 數據傳輸操作
5.3.1 加載和保存同類型的數據
5.3.2 將標量數組加載保存到向量中
5.3.3 將向量保存到標量數組中
5.4 浮點型函數
5.4.1 算術運算函數和取舍函數
5.4.2 比較函數
5.4.3 指數函數和對數函數
5.4.4 三角函數
5.4.5 其他類型的浮點函數
5.5 整數函數
5.5.1 加法函數和減法函數
5.5.2 乘法運算
5.5.3 其他類型的整數函數
5.6 混洗和選擇函數
5.6.1 混洗函數
5.6.2 選擇函數
5.7 向量測試函數
5.8 幾何函數
5.9 小結

6 圖像處理

6.1 圖像對象和采樣器
6.1.1 主機上的圖像對象:cl_mem
6.1.2 主機上的采樣器;cl_sampler
6.1.3 設備上的圖像對象:image2d_t和image3d_t
6.1.4 設備上的采樣器:sampler_t
6.2 圖像處理函數
6.2.1 圖像讀取函數
6.2.2 寫圖像函數
6.2.3 圖像信息函數
6.2.4 一個簡單的例子
6.3 圖像放縮和插值
6.3.1 最鄰近插值
6.3.2 雙線性插值
6.3.3 用OpenCL編程放大圖像
6.4 小結

7 事件、性能分析及同步化

7.1 主機提醒事件
7.1.1 將事件和命令關聯
7.1.2 將事件和回調函數作關聯
7.1.3 主機提醒的例子
7.2 命令同步事件
7.2.1 等待列表和命令事件
7.2.2 等待列表和用戶事件
7.2.3 額外的命令同步函數
7.2.4 獲取和事件關聯的數據
7.3 性能分析事件
7.3.1 配置性能分析命令
7.3.2 對數據傳輸進行性能分析
7.3.3 對數據划分進行分析
7.4 工作項同步化
7.4.1 障礙和柵欄
7.4.2 原子操作
7.4.3 原子命令和互斥
7.4.4 異步數據傳輸
7.5 小結

8 用C++開發

8.1 初步了解
8.1.1 向量和字符串
8.1.2 異常
8.2 創建內核
8.2.1 平台、設備以及上下文
8.2.2 程序和內核
8.3 內核參數和內存對象
8.3.1 內存對象
8.3.2 通用數據參數
8.3.3 局部內存參數
8.4 命令隊列
8.4.1 創建CommandQueue對象
8.4.2 入列內核執行命令
8.4.3 讀寫命令
8.4.4 內存映射和復制命令
8.5 事件處理
8.5.1 主機提醒
8.5.2 命令同步化
8.5.3 性能分析事件
8.5.4 另外的事件函數
8.6 小結

9 用Java和Python來開發

9.1 Aparapi
9.1.1 Aparapi安裝
9.1.2 Kernel類
9.1.3 工作項和工作組
9.2 JavaCL
9.2.1 JavaCL安裝
9.2.2 JavaCL開發概述
9.2.3 用JavaCL來創建內核
9.2.4 設定內核參數以及入列命令
9.3 PyOpenCL
9.3.1 PyOpenCL安裝和許可
9.3.2 PyOpenCL開發概述
9.3.3 用PyOpenCL創建內核
9.3.4 設置參數和執行內核
9.4 小結

10 通用編程原則

10.1 全局大小和局部大小
10.1.1 找出工作組大小的上限值
10.1.2 測試內核和設備
10.2 數值歸並
10.2.1 OpenCL的歸並算法
10.2.2 使用向量提升歸並運算的速度
10.3 工作組間的同步化
10.4 設計高性能內核的10條技巧
10.5 小結

第二部分 用OpenCL來編程實現實際的算法

11 歸並與排序

11.1 MapReduce
11.1.1 MapReduce簡介
11.1.2 MapReduce和OpenCL
11.1.3 MapReduce例子:字符串查找
11.2 雙調排序
11.2.1 理解雙調排序算法
11.2.2 用OpenCL來實現雙調排序
11.3 基數排序
11.3.1 理解基數排序
11.3.2 用向量實現基數排序
11.4 小結

12 矩陣和QR分解

12.1 矩陣轉置
12.1.1 矩陣簡介
12.1.2 矩陣轉置的理論和實現
12.2 矩陣乘法
12.2.1 矩陣乘法理論
12.2.2 用OpenCL編程實現矩陣乘法
12.3 Householder變換
12.3.1 向量投影
12.3.2 向量反射
12.3.3 外積和Householder矩陣
12.3.4 用OpenCL編程實現向量反射
12.4 QR分解
12.4.1 計算Householder向量和R矩陣
12.4.2 計算Householder矩陣和矩陣Q
12.4.3 用OpenCL編程實現QR分解
12.5 小結

13 稀疏矩陣

13.1 差分方程和稀疏矩陣
13.2 稀疏矩陣的存儲以及Harwell-Boeing數據集
13.2.1 Harwell-Boeing數據集簡介
13.2.2 訪問Matrix Market文件中的數據
13.3 最速下降法
13.3.1 正定矩陣
13.3.2 最速下降法理論
13.3.3 用OpenCL編程實現SD算法
13.4 共軛梯度法
13.4.1 正交化和共軛
13.4.2 正交化和GRAM-SCHMIDT法
13.4.3 共軛梯度法
13.5 小結

14 信號處理和快速傅里葉變換

14.1 頻率分析簡介
14.2 離散傅里葉變換
14.2.1 DFT背后的理論
14.2.2 OpenCL和DFT
14.3 快速傅里葉變換
14.3.1 DFT的三條性質
14.3.2 構建快速傅里葉變換
14.3.3 用OpenCL來實現FFT
14.4 小結

第三部分 用OpenCL來加速OpenGL

15 將OpenCL和OpenGL結合

15.1 在OpenGL和OpenCL之間共享數據
15.1.1 創建OpenCL上下文
15.1.2 在OpenGL和OpenCL之間共享數據
15.1.3 同步化對共享數據的訪問
15.2 獲取信息
15.2.1 獲取OpenGL對象和紋理信息
15.2.2 獲取OpenGL上下文的相關信息
15.3 基本的互操作例子
15.3.1 初始化OpenGL操作
15.3.2 初始化OpenCL操作
15.3.3 創建數據對象
15.3.4 執行內核
15.3.5 渲染圖形
15.4 互操作和動畫
15.4.1 確定頂點數據
15.4.2 動畫和顯示
15.4.3 執行內核
15.5 小結

16 紋理和渲染緩存

16.1 圖像濾波
16.1.1 高斯模糊
16.1.2 圖像銳化
16.1.3 圖像浮雕化
16.2 用OpenCL來對紋理濾波
16.2.1 init_gl函數
16.2.2 init_cl函數
16.2.3 configure_shared_data函數
16.2.4 execute_kernel函數
16.2.5 display函數
16.3 小結

附錄A 安裝和使用軟件開發包

A.1 了解OpenCL SDK

A.1.1 檢查設備的兼容性
A.1.2 OpenCL頭文件和庫文件

A.2 Windows上的OpenCL

A.2.1 在Windows上安裝AMD顯卡驅動
A.2.2 用AMD顯卡來編譯Windows應用程序
A.2.3 在Windows上安裝Nvidia的顯卡驅動
A.2.4 用Nvidia顯卡來編譯Windows應用程序

A.3 Linux上的OpenCL

A.3.1 在Linux上安裝AMD的顯卡驅動
A.3.2 在Linux上安裝Nvidia顯卡驅動
A.3.3 在Linux上編譯OpenCL應用程序

A.4 在Mac OS上安裝OpenCL

A.5 小結

附錄B 用OpenGL作實時渲染

B.1 安裝OpenGL

B.1.1 在Windows上安裝OpenGL
B.1.2 在Linux上安裝OpenGL
B.1.3 在Mac OS上安裝OpenGL

B.2 在主機上開發OpenGL應用程序

B.2.1 將數據放到頂點緩存對象(VBO)之中
B.2.2 配置頂點屬性
B.2.3 編譯和部署着色器
B.2.4 啟動渲染過程

B.3 開發着色器程序

B.3.1 着色器編程簡介
B.3.2 頂點着色器
B.3.3 片段着色器

B.4 用GLUT來創建OpenGL窗口

B.4.1 配置和創建窗口
B.4.2 事件處理
B.4.3 顯示窗口

B.5 將OpenGL和GLUT結合

B.5.1 GLUT/OpenGL初始化
B.5.2 設置視窗(viewport)
B.5.3 渲染模型

B.6 添加紋理

B.6.1 在主機應用程序中創建紋理
B.6.2 頂點着色器中的紋理映射
B.6.3 在片段着色器中使用紋理

B.7 小結

附錄C 面向Windows和OpenCL的最簡GNU

C.1 在Windows下安裝MinGW

C.1.1 獲取並運行圖形安裝工具
C.1.2 在MinGW下安裝新工具

C.2 編譯MinGW可執行程序

C.2.1 用MinGW編譯Hello World!
C.2.2 GNU編譯器

C.3 Makefiles

C.3.1 GNU makefile的結構
C.3.2 目標和偽目標
C.3.3 簡單的makefile例子

C.4 編譯OpenCL應用程序

C.5 小結

附錄D Appendix D移動設備上的OpenCL

D.1 數值處理

D.2 圖像處理

D.3 小結

思維導圖

OpenCL實戰

防止博客圖床圖片失效,防止圖片源站外鏈:

http://www.processon.com/chart_image/5e5b3bf4e4b03627650b1b1b.png)

思維導圖在線編輯鏈接:

https://www.processon.com/view/5e5b3bf4e4b03627650b1b18


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM