首页 > Linux操作系统 > Linux操作系统 > CUDA学习笔记之变量限制符
变量限制符:
__device__:位于显存中,用于全局通信,具有文件作用域,且须定义在所有程序代码之前,因此其值在所有的在device上运行的函数中都可以使用
__shared__:位于共享存储中,主要用于线程块内通信:必须定义在kernal最前,且定义时不能赋值。一般和线程id有关。一般前加extend修饰,一般的使用方法是:shared[threadIdx.x]=device[blockIdx.x*blockDim.x+threadIdx.x]
无修饰:在register够用时,存储在寄存器中,不够用时,存储在在local memory内,当然local Memory也只是属于线程所有,不过也很慢,因为它实事上是golbal memory中的一块空间。
__constant__:位于不变存储器中,在kernal运行过程中不能修改,但是可以在主机中修改。而且必须定义在所有程序代码之前,具有文件内作用域。__constant__修饰的量,如果是值的话,只是它的值不可更改;如果是指针的话,可以更改指针空间内存储的值,但是不能让指针重新指向;而且必须声明在文件的所有函数的前面,也就是说它的作用域是文件内,因此在使用时,没有必要把它当成参数传入函数(我受java的影响太深了)。
访问速度顺序为:register>shared>constant>local>device
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22785983/viewspace-662156/ ,如需转载,请注明出处,否则将追究法律责任。