ITPub博客

首页 > Linux操作系统 > Linux操作系统 > CUDA学习笔记之变量限制符

CUDA学习笔记之变量限制符

原创 Linux操作系统 作者:洛欣 时间:2010-05-07 15:04:22 0 删除 编辑

 变量限制符:

__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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-12

  • 博文量
    111
  • 访问量
    273836