GPGPU OpenCL編程步驟與簡單一實例

來源:互聯網
上載者:User

1.OpenCL概念

OpenCL是一個為異構平台編寫程式的架構,此異構平台可由CPUI、GPU或其他類型的處理器組成。 OpenCL由一門用於編寫kernels (在OpenCL裝置上啟動並執行函數)的語言(基於C99)和一組用於定義並 控制平台的API組成。

OpenCL提供了兩種層面的並行機制:任務並行與資料並行。

2.OpenCL與CUDA的區別

不同點:OpenCL是通用的異構平台程式設計語言,為了兼顧不同裝置,使用繁瑣。

CUDA是nvidia公司發明的專門在其GPGPU上的編程的架構,使用簡單,好入門。

相同點:都是基於任務並行與資料並行。

3.OpenCL的編程步驟

(1)Discover and initialize the platforms

調用兩次clGetPlatformIDs函數,第一次擷取可用的平台數量,第二次擷取一個可用的平台。

(2)Discover and initialize the devices

調用兩次clGetDeviceIDs函數,第一次擷取可用的裝置數量,第二次擷取一個可用的裝置。

(3)Create  a context(調用clCreateContext函數)

上下文context可能會管理多個裝置device。

(4)Create a command queue(調用clCreateCommandQueue函數)

一個裝置device對應一個command queue。

上下文conetxt將命令發送到裝置對應的command queue,裝置就可以執行命令隊列裡的命令。

(5)Create device buffers(調用clCreateBuffer函數)

Buffer中儲存的是資料對象,就是裝置執行程式需要的資料儲存在其中。

Buffer由上下文conetxt建立,這樣上下文管理的多個裝置就會共用Buffer中的資料。

(6)Write host data to device buffers(調用clEnqueueWriteBuffer函數)

(7)Create and compile the program

建立程式對象,程式對象就代表你的程式源檔案或者二進位代碼資料。

(8)Create the kernel(調用clCreateKernel函數)

根據你的程式對象,產生kernel對象,表示裝置程式的入口。

(9)Set the kernel arguments(調用clSetKernelArg函數)

(10)Configure the work-item structure(設定worksize)

配置work-item的組織形式(維數,group組成等)

(11)Enqueue the kernel for execution(調用clEnqueueNDRangeKernel函數)

將kernel對象,以及 work-item參數放入命令隊列中進行執行。

(12)Read  the output buffer back to the host(調用clEnqueueReadBuffer函數)

(13)Release OpenCL resources(至此結束整個運行過程)

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。