内核 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

这些标志必须与我们在主机上分配内存缓冲区的方式相匹配。