在device亚程序中声明的变量可以有以下几种属性(device,managed, constant, shared和pinned):
Device数据
储存在device全局存储器中,可以通过以下方式声明:
real::a(10)
attributes(device)::a
或
real,device::b(10)
managed
可用于host和device代码,可以在host和device之间迁移,取决于最初读取位置。可以被host读写,但在device上只能不kernels读取,在device上,mannaged变量有点类似于device变量,但没有分配到device上。
constant
称为device constant 变量,分配在device constant内存空间,device constant变量不能被device子程序设定和修改,可以被host子程序修改,device constant不可以是动态分配的。
shared
称为(device) shared变量,仅被device子程序声明和存取,或者被其他device子程序通过传递变量存取,分配位置在thread块的device shared内存,变量寿命为thread块的寿命,可以被thread块中任何一个线程读写。
pinned
pinned变量必须是动态可分配数组,分配时在host页面锁定内存,因而从页面锁定内存到device内存是比host正常内存拷贝要快的,操作系统和设备对其使用和大小可能有限制,若是得不到页面锁定内存,将被异步分配到host正常内存中。
texture
F90指针,real或者integer数据,仅在device子程序读,不可以写。通过分量的缓存在设备中,提高代码性能。
转自:http://blog.sina.com.cn/s/blog_4d036c560102v5vr.html