OpenCL 實戰 (OpenCL in Action: How to Accelerate Graphics and Computations) OpenCL实战

斯卡皮諾 (Matthew Scarpino)

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

商品描述

<內容簡介>

OpenCL(OpenComputingLanguage)是第一個面向異構系統通用目的並行編程的開放式、免費標準,也是一個統一的編程環境。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簡介
  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編譯HelloWorld!
    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 小結