OpenCL 異構平行計算:原理、機制與優化實踐 OpenCL异构并行计算:原理、机制与优化实践

劉文志, 陳軼, 吳長江

  • 出版商: 機械工業
  • 出版日期: 2016-01-01
  • 定價: $474
  • 售價: 8.5$403
  • 語言: 簡體中文
  • 頁數: 380
  • 裝訂: 平裝
  • ISBN: 7111519345
  • ISBN-13: 9787111519348

已絕版

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

商品描述

 

<內容簡介>

工業界和學術界聯合鼎力推薦,國內頂級專家和實踐者傾囊相授,所有案例均經過真機環境驗證。
劉文志、陳軼編著的《OpenCL異構並行計算(原理機制與優化實踐)》基於最新的OpenCL 2.0標準,清晰地闡述了OpenCL的APl,編程模型,交互與通信機制以及平臺支持,對OpenCL 2.0新引入的SVM機制、管道和原子操作等進行了深入講解,輔以大量示例說明,並給出捲積、矩陣乘法等優化實踐案例。
第1章主要介紹並行計算的發展歷程以及OpenCL在其中所扮演的角色;第2章和第3章介紹了OpenCL的大體概念以及在主機端上APl的功能與說明,讓大家對OpenCL有一個整體認識,並熟悉開發的一般流程;第4章和第5章主要描述OpenCL C語言的概念以及相關語法點,讓讀者學會利用OpenCL C編寫內核,深刻理解OpenCL的存儲器模型。第6章對OpenCL一整個同步機製做了總結性的深入介紹,從主機端的事件同步到內核程序的原子操作,每一種同步方式都做了非常詳細的介紹;第7章詳細描述了OpenCL與OpenGL之間的交互,以充分發揮GPU的計算能力,彌補OpenGL力有不逮的應用場景;第8章介紹了當前OpenCL實現廠商對各自OpenCL的硬件實現,以及各種不同硬件平臺上如何有針對性地對OpenCL程序做進一步優化。第9章到第10章通過二維捲積和計算矩陣介紹了OpenCL的優化實踐以及在實際工程項目中的使用技巧。

 

<章節目錄>

序一
序二
前言
第1章  異構並行計算的過去、現狀和未來
  1.1  單核標量處理器的困境
    1.1.1  單核標量處理器如何提高性能
    1.1.2  為什麼單核標量處理器性能到達瓶頸
  1.2  多核並行計算與向量化的出現
    1.2.1  為什麼會有多核
    1.2.2  為什麼會有向量化
    1.2.3  如何利用多核和向量化的能力
    1.2.4  多核和向量化的難點
  1.3  異構並行計算的崛起
    1.3.1  GPGPU的理念
    1.3.2  CUDA的崛起
    1.3.3  OpenCL橫空出世
  1.4  異構並行計算的未來(百花齊放)
  1.5  本章小結
第2章  OpenCL的基本介紹
  2.1  什麼是Op
  2.2  OpenCL  平臺模型
  2.3  OpenCL  執行模型
    2.3.1  上下文
    2.3.2  命令隊列
    2.3.3  內核在OpenCL設備上執行
  2.4  OpenCL存儲器模型
    2.4.1  存儲器區域
    2.4.2  存儲器對象
    2.4.3  共享虛擬存儲器
  2.5  OpenCL與O
  2.6  OpenCL?
  2.7  本章小結
第3章  進入OpenCL的世界(矢量加法)
  3.1  構建示例
    3.1.1  Windows平臺
    3.1.2  Linux平臺
    3.1.3  OS  X平臺
    3.1.4  矢量加示例
  3.2  獲得OpenCL平臺和設備及其屬性
    3.2.1  OpenCL平臺
    3.2.2  OpenCL設備
  3.3  創建上下文和命令隊列
    3.3.1  創建OpenCL上下文
    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.7  執行內核
  3.8  編寫內核代碼
  3.9  OpenCL錯誤處理
  3.10  本章小結
第4章  OpenCL  C語言
  4.1  修飾符
    4.1.1  地址空間修飾符
    4.1.2  函數修飾符
    4.1.3  對象訪問修飾符
  4.2  標量數據類型
    4.3  矢量數據類型
    4.3.1  為什麼要有矢量數據類型
    4.3.2  矢量數據的使用
  4.4  運算符
  4.5  工作項佈局函數
    4.5.1  維度和工作項
    4.5.2  工作組
  4.6  數據拷貝操作
    4.6.1  矢量數據拷貝
    4.6.2  異步拷貝和預取
  4.7  浮點函數
    4.7.1  數學函數
    4.7.2  公共函數
    4.7.3  幾何函數
  4.8  整數函數
  4.9  關係函數
  4.10  雜項矢量函數
  4.11  同步函數
  4.12  原子函數
  4.13  圖像讀/寫函數
    4.13.1  內建圖像讀函數
    4.13.2  內建無採樣器圖像讀  函數
    4.13.3  內建圖像寫函數
    4.13.4  內建圖像查詢函數
  4.14  工作組函數
  4.15  管道函數
    4.15.1  內建管道讀/寫函數
    4.15.2  內建工作組管道讀/寫函數
    4.15.3  內建管道查詢函數
  4.16  設備隊列
    4.16.1  Blocks語法
    4.16.2  設備隊列相關函數
    4.16.3  子內核存儲器可見性
    4.16.4  設備隊列的使用示例
  4.17  本章小結
第5章  OpenCL存儲器對象
  5.1  緩衝區
    5.1.1  分配緩衝區對象

    5.1.2  創建子緩衝區對象
  5.2  圖像對象和採樣器對象
    5.2.1  圖像對象
    5.2.2  採樣器對象
    5.2.3  圖像旋轉示例
  5.3  管道
    5.3.1  創建管道對象
    5.3.2  管道對象查詢
  5.4  存儲器對象數據傳輸
    5.4.1  主機與設備間數據傳輸
    5.4.2  存儲器對象數據填充
    5.4.3  存儲器對象間數據傳輸
    5.4.4  存儲器對象映射
  5.5  共享虛擬存儲器
    5.5.1  SVM緩衝操作
    5.5.2  SVM類型和特性
    5.5.3  相關示例
  5.6  存儲器一致性模型
    5.6.1  存儲器次序規則
    5.6.2  原子操作的存儲器次序規則
    5.6.3  柵欄操作的存儲器次序規則
    5.6.4  工作組函數的存儲器次序規則
    5.6.5  主機端與設備端命令的存儲器次序規則
    5.6.6  關於存儲器次序在實際OpenCL計算設備中的實現
  5.7  本章小結
第6章  OpenCL同步及事件機制
  6.1  主機端的OpenCL同步
  6.2  OpenCL  事件機制
    6.2.1  對OpenCL事件的標記和柵欄
    6.2.2  內核程序中的同步
    6.2.3  工作組內同步
  6.3  原子操作
    6.3.1  OpenCL  1.2中的原子操作
    6.3.2  OpenCL  2.0中的原子操作
  6.4  局部存儲器與全局存儲器間的異步拷貝
  6.5  工作組間同步
  6.6  本章小結
第7章  OpenCL與OpenGL互操作
  7.1  從一個OpenGL上下文來創建OpenCL上下文
  7.2  OpenCL使用OpenGL共享的緩存對象
  7.3  OpenCL使用OpenGL紋理數據
  7.4  OpenCL共享OpenGL渲染緩存
  7.5  從一個OpenCL存儲器對象查詢OpenGL對象信息
  7.6  訪問共享對象的OpenCL與OpenGL之間的同步
  7.7  本章小結
第8章  OpenCL到主流GPU處理器的映射
  8.1  AMD家?
    8.1.1  AMD  Cayman架?
    8.1.2  AMD  GCN架構?
  8.2  NVIDIA  CUDA兼容?
    8.2.1  NVIDIA  GPU架構的執行模型
    8.2.2  NVIDIA  GPU的全局存儲器
    8.2.3  NVIDIA  GPU的局部存儲器
  8.3  ARM  Mali  GPU架構

    8.3.1  硬件架構
    8.3.2  存儲器層次
    8.3.3  OpenCL映射
  8.4  本章小結
第9章  OpenCL計算二維捲積
  9.1  測試平臺信息
  9.2  AMD  X86  CPU串行實現
    9.2.1  簡單實現
    9.2.2  循環展開優化實現
    9.2.3  AVX指令集優化
    9.2.4  Op
  9.3  簡單OpenCL實現
  9.4  使用常量存儲器優化
  9.5  使用局部存儲器優化
  9.6  一個工作項同時計算多個輸出
  9.7  本章小結
第10章  OpenCL計算矩陣乘法
  10.1  串行實現
    10.1.1  初次實現
    10.1.2  緩存友好的實現
    10.1.3  使用AVX指令集實現
  10.2  簡單OpenCL實現
  10.3  使用局部存儲器優化
  10.4  使用向量加載指令
  10.5  一個工作項同時計算多個輸出
  10.6  優化流水線性能
  10.7  本章小結
附錄A  OpenCL  Query實例
附錄B  其他主流異構並行計算編程環境簡介

 

<作者介紹>

劉文志//陳軼//吳長江