本節介紹OpenCL的四個編程模型。編程
OPenCL做爲開放性的異構計算的標準,支持的平臺有CPU、GPU、DSP、FPGA。支持的設備如此不一樣,那麼須要對它們有一個統一的分層、模型劃分,才能讓各家更好的實現--平臺模型、執行模型、內存模型、編程模型。數組
OpenCL設備有兩部分組成,宿主機和OpenCL設備異步
OPenCL是一個主從處理模型,根本是宿主機如何利用OpenCL設備上大量的計算資源進行有效計算。因此OpenCL執行模型的任務就是如何高效地調用這些計算資源。函數
OpenCL規範中使用一個長度爲N的整數數組來描述工做空間的大小(N<=3)。數組中的數值對應相應維度上工做點的個數。spa
計算工做主要在OpenCL設備上進行,但宿主機也扮演着很是重要的角色。宿主機主要經過上下文(Context)管理OpenCL設備。上下文指的是所管理硬件和軟件資源,以下所示:指針
上下文由宿主機使用API進行建立、管理、銷燬。code
宿主機主要經過命令對相應設備進行控制。根據計算量的大小,計算設備並不能馬上執行完被分配的計算任務。那麼宿主機只能等着計算設備把任務計算完了才能繼續分配新的任務麼?顯然不是,每個計算設備都會有一個命令隊列。命令隊列只能管理一個計算設備。經過命令隊列,就實現了宿主機和計算設備的異步控制與執行。對象
隊列中的命令主要有三種:索引
同步命令:約束命令在計算設備上的執行:隊列
宿主機程序能夠爲一個計算設備建立多個命令隊列--一個計算設備能夠有多個命令隊列。這些命令隊列沒有關聯。這也就意味着一個計算設備能夠執行多個種類的任務,如小明能夠在等待遊戲加載的事件背幾個英語單詞 ~_~。
與通用計算程序的內存對象類似,OpenCL將設備中的存儲器抽象成四層結構的存儲模型:
在程序運行期間,須要宿主機和計算設備進行數據交換,存在兩種方式:
前面已經提到計算的時候能夠按照兩種模型來進行計算:數據並行和任務並行。
1/N
。這適用與數據想關聯不大的計算任務。既然有數據或任務的並行,那麼同步就成爲一個繞不開的節點。並行是指在計算設備執行內核的過程當中,對於其餘的節點是絕對獨立的,互不影響。OpenCL有三種方式進行同步:
版權聲明:本文爲博主原創文章,轉載需聲明爲轉載內容並添加原文地址。
更多博主原創文章,請移步:
原文地址:http://coderdock.com