核心 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
這些標誌必須與我們在主機上分配記憶體緩衝區的方式相匹配。