核心 Skelleton

讓我們來看看最簡單的核心以及它的一些變化

__kernel void myKernel() {
}

可以從主程式碼啟動的核心由__kernel 關鍵字標識。核心函式只能有返回型別 void。

__kernel void myKernel(float a, uint b, byte c) {

}

當然,你可以建立更多未作為核心公開的函式。在這種情況下,你可以省略__kernel 修飾符。

函式可以像任何其他 C / C++函式那樣公開變數。唯一的區別是當你想引用記憶體時。這適用於所有指標,無論它們是引數還是在程式碼中使用。

float*  ptr;

是指向只有執行執行緒才能訪問的記憶體區域的指標。實際上它是一樣的

__private float* ptr;

有四種不同的記憶體區域修飾符可用。在核心中你通常不必擔心它,但是對於引數來說這是必不可少的。

  • __global:此修飾符引用放置在全域性記憶體中的指標
  • __constant:指常量記憶體指標
  • __local:指共享記憶體指標
  • __private:指本地記憶體指標

此外,我們可以定義我們如何訪問記憶體

  • 沒有修飾符:讀寫
  • __只讀
  • __write_only

這些標誌必須與我們在主機上分配記憶體緩衝區的方式相匹配。