天天看點

OPENCL程式設計學習OPENCL程式設計學習

OPENCL程式設計學習

一、基本介紹

​ OPENCL(open computing language) 是一個工業級開放的異構程式設計标準,它同時提供了一個并行程式設計的架構和封裝庫,可以讓程式設計人員編寫高性能并且可移高的代碼。

二、基礎内容

​ 下面将從四個方面對opencl進行闡述,分别是基本架構、記憶體組織、執行模型、程式設計模型:

2.1 基本架構

​ opencl基本架構如下圖:

OPENCL程式設計學習OPENCL程式設計學習

關鍵字 釋義
Compute Device 計算裝置(GPU/ANIC/FPGA)
Compute Unit 計算單元(類似gpu sm)
Process element 計算單元(l類似gpu wrap) 裝置執行的基本單元
HOST 主機裝置

2.2 執行模型

​ opencl執行模型圖如下:

OPENCL程式設計學習OPENCL程式設計學習
關鍵字 釋義
kernel 在device端執行的程式
work-item 在device端一個執行的kernel集合(類似cuda thread)
work-group 管理work-items一個集合(類似cuda block)

三、記憶體組織

​ 記憶體邏輯分布圖如下:

​ [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-kaGsmIwM-1617343931193)(D:\work\文檔\openclMemory.png)]

關鍵字 釋義
global memory 全局記憶體所有work-group中資料都是可見的
constant memory 全局記憶體,但是在kernel執行的時候被建立為constant屬性
local memory 該記憶體隻在work-group中可見,看裝置實作有可能是global memory或者片内記憶體
private memory 該記憶體隻在work-item中可見,應該是register類似記憶體

四、程式設計模型

​ opencl支援的程式設計模型有兩種資料并行和任務并行,對應的較長的描述如下:

關鍵字 釋義
data parallel kernel對多個資料進行并行操作處理,互相資料見存在依賴性
task parallel kernel資料處理是獨立互相間不存在依賴

對于data parallel 并行處理計算中資料同步是非常的必要的,opencl兩種粒度方式的資料同步,對應的描述如下表:

名稱 同步粒度 釋義
work-group 同步 work-group内 work-group内的所有work-iterms同步
commands 同步(同一context) 同一context下 基于同一context下的commands間的同步(1. 同一隊列内同步,2. 基于event的資料同步)

三、附錄

3.1 名詞解釋

名字 釋義
OpenCL Platform layer The platform layer allows the host program to discover OpenCL devices and their capabilities and to create contexts.
OpenCL Runtime The runtime allows the host program to manipulate contexts once they have been created.
OpenCL Compiler The OpenCL compiler creates program executables that contain OpenCL kernels. The OpenCL C programming language implemented by the compiler supports a subset of the ISO C99 language with extensions for parallelism.
規約運算 對一個輸入數組執行某種算子,産生更小結果的中間數組,該過程就是規約S

3.2 OPENCL UML類圖

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-OodV9Tny-1617343931196)(D:\work\文檔\openclUml.png)]

符号 釋義
* 多個
0…1 沒有或者有一個
1…* 一個或者多個
-> 互相指導關系

連線雙端表示互相間的資料映射關系和UML的邏輯關系,但是“->”不代表連線雙端存在關系隻是雙端間的指導關系。

參考文檔: opencl-1.2.pdf