本節介紹opencl的四個程式設計模型。
opencl作為開放性的異構計算的標準,支援的平台有cpu、gpu、dsp、fpga。支援的裝置如此不同,那麼需要對它們有乙個統一的分層、模型劃分,才能讓各家更好的實現--平台模型、執行模型、記憶體模型、程式設計模型。
opencl裝置內部由多個計算單元(cu)組成,每乙個cu可以繼續劃分為處理單元(pu)。
執行流程: 宿主機負責管理所有的opencl裝置,宿主機發起計算任務,選擇特定的opencl裝置並建立計算環境。然後將計算任務和資料傳送給opencl裝置。裝置呼叫內部計算單元進行計算,完成後將結果返還給宿主機,該次計算任務結束。
opencl是乙個主從處理模型,根本是宿主機如何利用opencl裝置上大量的計算資源進行有效計算。所以opencl執行模型的任務就是如何高效地呼叫這些計算資源。
計算工作主要在opencl裝置上進行,但宿主機也扮演著非常重要的角色。宿主機主要通過上下文(context)管理opencl裝置。上下文指的是所管理硬體和軟體資源,如下所示:
宿主機主要通過命令對相應裝置進行控制。根據計算量的大小,計算裝置並不能立刻執行完被分配的計算任務。那麼宿主機只能等著計算裝置把任務計算完了才能繼續分配新的任務麼?顯然不是,每乙個計算裝置都會有乙個命令佇列。命令佇列只能管理乙個計算裝置。通過命令佇列,就實現了宿主機和計算裝置的非同步控制與執行。
佇列中的命令主要有三種:
宿主機程式可以為乙個計算裝置建立多個命令佇列--乙個計算裝置可以有多個命令佇列。這些命令佇列沒有關聯。這也就意味著乙個計算裝置可以執行多個種類的任務,如小明可以在等待遊戲載入的事件背幾個英語單詞 ~_~。
與通用計算程式的記憶體物件相似,opencl將裝置中的儲存器抽象成四層結構的儲存模型:
在程式執行期間,需要宿主機和計算裝置進行資料交換,存在兩種方式:
前面已經提到計算的時候可以按照兩種模型來進行計算:資料並行和任務並行。
既然有資料或任務的並行,那麼同步就成為乙個繞不開的節點。並行是指在計算裝置執行核心的過程中,對於其他的節點是絕對獨立的,互不影響。opencl有三種方式進行同步:
python 反射四大函式介紹
getattr 函式用於返回乙個物件屬性值。getattr 語法 getattr object,name default 返回物件屬性值或者方法的引用。如果是返回的物件的方法,返回的是方法的記憶體位址,如果需要執行這個方法,可以在後面新增一對括號。class test name xiaohua de...
Kimball多維模型的四大誤解
很久沒看模型方面的理論知識,最近3年在網際網路公司琢磨前行,遇到了很多坑和自我否定或迷惑的狀態。就多維模型來說,被傳統行業洗禮,還有誤人子弟的網上文章和cube工具,把kimball帶入了乙個萬劫不復的誤區。我是幸運的,而且逃離了這個誤區。接下來講解一下我親身經歷的 raph總結的 四大誤區 原因 ...
GRE填空的四大特點介紹
新gre填空亙古不變的公理是意義上的重複和結構上的對應,通過對這兩點基本填空思想的把握是解題的基礎,一切空格線索皆從句子中來,答案的依據若不是從句中而來的任何感覺都必錯。從空格解題線索特徵來看,可以分為4個大類 一點與點的重複 1 特徵 連線詞和對應空格的影子成分。3 空格的影子 counterpa...