内核 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
这些标志必须与我们在主机上分配内存缓冲区的方式相匹配。