首 頁
手機(jī)版

opencl編程指南 PDF高清版

opencl是第一個(gè)面向異構(gòu)系統(tǒng)通用目的并行編程的開放式、免費(fèi)標(biāo)準(zhǔn),也是一個(gè)統(tǒng)一的編程環(huán)境,便于軟件開發(fā)人員為高性能計(jì)算服務(wù)器、桌面計(jì)算系統(tǒng)、手持設(shè)備編寫高效輕便的代碼。

本次小編將給大家?guī)?strong>opencl編程指南,它是由OpenCL核心設(shè)計(jì)人員親自執(zhí)筆,不僅全面而深刻地解讀了OpenCL規(guī)范和編程模型,而且通過大量案例和代碼演示了基于OpenCL編寫并行程序和實(shí)現(xiàn)各種并行算法的原理、方法、流程和最佳實(shí)踐,以及如何對(duì)OpenCL進(jìn)行性能優(yōu)化,如何對(duì)硬件進(jìn)行探測(cè)和調(diào)整。

opencl編程指南

目錄介紹

第一部分 OpenCL 1.1語言與API

第1章 OpenCL介紹2

1.1 什么是OpenCL,或者為什么需要這本書2

1.2 多核的未來:異構(gòu)平臺(tái)2

1.3 多核世界中的軟件4

1.4 OpenCL的概念基礎(chǔ)7

1.4.1 平臺(tái)模型7

1.4.2 執(zhí)行模型8

1.4.3 內(nèi)存模型13

1.4.4 編程模型15

1.5 OpenCL與圖形18

1.6 OpenCL的內(nèi)容19

1.6.1 平臺(tái)API19

1.6.2 運(yùn)行時(shí)API20

1.6.3 內(nèi)核編程語言20

1.6.4 OpenCL小結(jié)22

1.7 嵌入式簡(jiǎn)檔22

1.8 學(xué)習(xí)OpenCL23

第2章 HelloWorld:一個(gè)OpenCL例子24

2.1 構(gòu)建示例24

2.1.1 必備條件25

2.1.2 Mac OS X與Code::Blocks25

2.1.3 Microsoft Windows與Visual Studio26

2.1.4 Linux與Eclipse28

2.2 HelloWorld示例29

2.2.1 選擇OpenCL平臺(tái)并創(chuàng)建一個(gè)上下文31

2.2.2 選擇設(shè)備并創(chuàng)建命令隊(duì)列33

2.2.3 創(chuàng)建和構(gòu)建程序?qū)ο?4

2.2.4 創(chuàng)建內(nèi)核和內(nèi)存對(duì)象36

2.2.5 執(zhí)行內(nèi)核37

2.3 檢查OpenCL中的錯(cuò)誤39

第3章 平臺(tái)、上下文和設(shè)備41

3.1 OpenCL平臺(tái)41

3.2 OpenCL設(shè)備44

3.3 OpenCL上下文53

第4章 OpenCL C編程64

4.1 使用OpenCL C編寫數(shù)據(jù)并行內(nèi)核64

4.2 標(biāo)量數(shù)據(jù)類型65

4.3 矢量數(shù)據(jù)類型67

4.3.1 矢量字面量68

4.3.2 矢量分量69

4.4 其他數(shù)據(jù)類型71

4.5 衍生類型71

4.6 隱式類型轉(zhuǎn)換72

4.7 顯式強(qiáng)制類型轉(zhuǎn)換76

4.8 顯式轉(zhuǎn)換77

4.9 將數(shù)據(jù)重新解釋為另一種類型80

4.10 矢量操作符82

4.10.1 算術(shù)操作符83

4.10.2 關(guān)系和相等操作符84

4.10.3 位操作符85

4.10.4 邏輯操作符85

4.10.5 條件操作符86

4.10.6 移位操作符86

4.10.7 一元操作符87

4.10.8 賦值操作符88

4.11 限定符89

4.11.1 函數(shù)限定符89

4.11.2 內(nèi)核屬性限定符90

4.11.3 地址空間限定符91

4.11.4 訪問限定符94

4.11.5 類型限定符95

4.12 關(guān)鍵字95

4.13 預(yù)處理器指令和宏96

4.13.1 pragma指令97

4.13.2 宏98

4.14 限制99

第5章 OpenCL C內(nèi)置函數(shù)101

5.1 工作項(xiàng)函數(shù)101

5.2 數(shù)學(xué)函數(shù)103

5.2.1 浮點(diǎn)pragma107

5.2.2 浮點(diǎn)常量108

5.2.3 相對(duì)誤差作為ulp108

5.3 整數(shù)函數(shù)111

5.4 公共函數(shù)113

5.5 幾何函數(shù)115

5.6 關(guān)系函數(shù)116

5.7 矢量數(shù)據(jù)加載和存儲(chǔ)函數(shù)119

5.8 同步函數(shù)124

5.9 異步復(fù)制和預(yù)取函數(shù)125

5.10 原子函數(shù)127

5.11 雜項(xiàng)矢量函數(shù)130

5.12 圖像讀、寫函數(shù)131

5.12.1 讀圖像132

5.12.2 采樣器134

5.12.3 確定邊界顏色137

5.12.4 寫圖像137

5.12.5 查詢圖像信息138

第6章 程序與內(nèi)核140

6.1 程序和內(nèi)核對(duì)象概述140

6.2 程序?qū)ο?40

6.2.1 創(chuàng)建和構(gòu)建程序141

6.2.2 程序構(gòu)建選項(xiàng)143

6.2.3 由二進(jìn)制碼創(chuàng)建程序145

6.2.4 管理和查詢程序153

6.3 內(nèi)核對(duì)象153

6.3.1 創(chuàng)建內(nèi)核對(duì)象和設(shè)置內(nèi)核參數(shù)153

6.3.2 線程安全性156

6.3.3 管理和查詢內(nèi)核157

第7章 緩沖區(qū)和子緩沖區(qū)159

7.1 內(nèi)存對(duì)象、緩沖區(qū)和子緩沖區(qū)概述159

7.2 創(chuàng)建緩沖區(qū)和子緩沖區(qū)160

7.3 查詢緩沖區(qū)和子緩沖區(qū)166

7.4 讀、寫和復(fù)制緩沖區(qū)和子緩沖區(qū)167

7.5 映射緩沖區(qū)和子緩沖區(qū)180

第8章 圖像和采樣器183

8.1 圖像和采樣器對(duì)象183

8.2 創(chuàng)建圖像對(duì)象184

8.2.1 圖像格式187

8.2.2 查詢圖像支持189

8.3 創(chuàng)建采樣器對(duì)象189

8.4 處理圖像的OpenCL C函數(shù)192

8.5 傳輸圖像對(duì)象194

第9章 事件201

9.1 命令、隊(duì)列和事件概述201

9.2 事件和命令隊(duì)列202

9.3 事件對(duì)象206

9.4 宿主機(jī)上生成事件208

9.5 影響宿主機(jī)上執(zhí)行的事件209

9.6 使用事件完成評(píng)測(cè)212

9.7 內(nèi)核中的事件216

9.8 OpenCL外部的事件217

第10章 與OpenGL的互操作218

10.1 OpenCL/OpenGL共享概述218

10.2 查詢OpenGL共享擴(kuò)展218

10.3 初始化OpenCL上下文實(shí)現(xiàn)OpenGL互操作220

10.4 從OpenGL緩沖區(qū)創(chuàng)建OpenCL緩沖區(qū)221

10.5 由OpenGL紋理創(chuàng)建OpenCL圖像對(duì)象225

10.6 查詢OpenGL對(duì)象的信息226

10.7 OpenGL和OpenCL之間的同步227

第11章 與Direct3D的互操作230

11.1 Direct3D/OpenCL共享概述230

11.2 初始化OpenCL上下文實(shí)現(xiàn)Direct3D互操作230

11.3 從Direct3D緩沖區(qū)和紋理創(chuàng)建OpenCL內(nèi)存對(duì)象233

11.4 OpenCL中獲取和釋放Direct3D對(duì)象236

11.5 OpenCL中處理Direct3D紋理237

11.6 OpenCL中處理D3D頂點(diǎn)數(shù)據(jù)240

第12章 C++包裝器API242

12.1 C++包裝器API概述242

12.2 C++包裝器API異常244

 12.3 使用C++包裝器API的矢量相加示例246

2.3.1 選擇OpenCL平臺(tái)并創(chuàng)建一個(gè)上下文246

12.3.2 選擇一個(gè)設(shè)備并創(chuàng)建命令隊(duì)列246

12.3.3 創(chuàng)建和構(gòu)建程序?qū)ο?47

12.3.4 創(chuàng)建內(nèi)核和內(nèi)存對(duì)象248

12.3.5 執(zhí)行矢量相加內(nèi)核248

第13章 OpenCL嵌入式簡(jiǎn)檔253

13.1 OpenCL簡(jiǎn)檔概述253

13.2 64位整數(shù)254

13.3 圖像255

13.4 內(nèi)置原子函數(shù)256

13.5 強(qiáng)制最小單精度數(shù)浮點(diǎn)能力256

13.6 OpenCL C程序中確定設(shè)備支持的簡(jiǎn)檔258

二部分 OpenCL 1.1案例研究

第14章 圖像直方圖260

14.1 計(jì)算圖像直方圖260

14.2 并行實(shí)現(xiàn)圖像直方圖261

14.3 對(duì)并行圖像直方圖的優(yōu)化266

14.4 每個(gè)通道使用半浮點(diǎn)或浮點(diǎn)值計(jì)算直方圖268

第15章 Sobel邊界檢測(cè)過濾器272

15.1 什么是Sobel邊界檢測(cè)過濾器272

15.2 實(shí)現(xiàn)Sobel過濾器作為OpenCL內(nèi)核272

第16章 并行實(shí)現(xiàn)Dijkstra單源最短路徑圖算法276

16.1 圖數(shù)據(jù)結(jié)構(gòu)276

16.2 內(nèi)核278

16.3 利用多個(gè)計(jì)算設(shè)備281

第17章 Bullet Physics SDK中的布模擬286

17.1 布模擬介紹286

17.2 模擬柔軟物體288

17.3 CPU上執(zhí)行模擬290

17.4 實(shí)現(xiàn)基本GPU執(zhí)行所需要的修改291

17.5 兩層分批296

17.6 SIMD計(jì)算和局部?jī)?nèi)存優(yōu)化298

17.7 增加OpenGL互操作302

第18章 用快速傅里葉變換模擬海洋305

18.1 Ocean應(yīng)用程序概述305

18.2 Phillips頻譜生成308

18.3 OpenCL離散傅里葉變換311

18.3.1 確定2D分解311

18.3.2 使用局部?jī)?nèi)存312

18.3.3 確定子變換大小313

18.3.4 確定工作組大小314

18.3.5 得到旋轉(zhuǎn)因子314

18.3.6 確定需要多少局部?jī)?nèi)存314

18.3.7 避免局部?jī)?nèi)存庫沖突315

18.3.8 使用圖像315

18.4 詳細(xì)分析FFT內(nèi)核315

18.5 詳細(xì)分析轉(zhuǎn)置內(nèi)核318

第19章 光流320

19.1 光流問題概述320

19.2 用硬件線性插值提供亞像素精度328

19.3 紋理緩存的應(yīng)用329

19.4 使用局部?jī)?nèi)存329

19.5 提前退出和硬件調(diào)度331

19.6 利用OpenGL互操作實(shí)現(xiàn)高效可視化331

19.7 性能332

第20章 用PyOpenCL使用OpenCL333

20.1 PyOpenCL介紹333

20.2 運(yùn)行PyImageFilter2D示例333

20.3 PyImageFilter2D代碼334

20.4 上下文和命令隊(duì)列創(chuàng)建337

20.5 加載到圖像對(duì)象338

20.6 創(chuàng)建和構(gòu)建程序339

20.7 設(shè)置內(nèi)核參數(shù)和執(zhí)行內(nèi)核340

20.8 讀取結(jié)果340

第21章 使用OpenCL完成矩陣乘法342

21.1 基本矩陣乘法算法342

1.2 直接轉(zhuǎn)換到OpenCL343

21.3 增加每個(gè)內(nèi)核的工作量347

21.4 優(yōu)化內(nèi)存移動(dòng):局部?jī)?nèi)存350

21.5 性能結(jié)果和優(yōu)化原來的CPU代碼352

第22章 稀疏矩陣矢量乘法354

22.1 稀疏矩陣矢量乘法算法354

22.2 實(shí)現(xiàn)描述355

22.3 分塊和分組稀疏矩陣表示357

22.4 首部結(jié)構(gòu)359

22.5 分塊分組稀疏矩陣設(shè)計(jì)考慮359

22.6 可選的組信息360

22.7 測(cè)試的硬件設(shè)備和結(jié)果360

22.8 其他優(yōu)化領(lǐng)域372

附錄A OpenCL 1.1小結(jié)373

收起介紹展開介紹
  • 下載地址
opencl編程指南 PDF高清版

有問題? 點(diǎn)此報(bào)錯(cuò)

發(fā)表評(píng)論

0條評(píng)論

熱門推薦