openCL内核地址空间限定符
Published
22 July 2013
Contents
本文介绍opencl一些限定符的运用
kernel内核限定符
- 返回值必须是void
- 参数的一些限制,不能是私有。
内核属性限定符
地址空间限定符
如果没有加限定符,则默认为private。
由不同限定符限定的指针之间不能转换。
- global
全局地址空间限定符,表示指向的地址空间为全局公用的。
- constant
全局常量地址空间限定符,相当于只读全局地址空间,只有constant可以声明在全局变量里,如下。
global long4 g; // illegal
private int x; // illegal
local int p; // illegal
constant int y; // legal
kernel void kernelMain(global int *p) {
...
}
- local
局部地址空间限定符,trick最多的一种类型,因为显卡局部显存和全局显存速度的差异性,导致这么一种东西的诞生。
- 不允许初始化,注意:由local限定的指针可以初始化。
- 只允许申请在内核函数的最外层声明,指针可以随意申请。
不能由宿主程序赋值。
private
最正常的限定符,类似于平时写串行程序的变量。
访问限定符
- write_only
- read_only
另外,opencl不支持任何形式的new,也就是说他所有空间都是静态的,所以递归什么的也是不行的,这个挺让人捉急的…
由于本人水平有限,刚开始初学,所以内容也许有错误,欢迎批评指正。
blog comments powered by Disqus