现在CUDA中的统一内存功能,变量可以在managed
内存中,这使得代码更简单一些。而shared
内存在线程块中的线程之间共享。请参阅CUDA Fortran.
我的问题是变量是否可以在shared
和managed
内存中?它们在主机中是managed
,但在设备上,它们将是shared
这种类型的变量可能会出现什么样的行为?
我正在使用CUDA Fortran。我问这个问题是因为,将变量声明为managed
使我更容易编码,而在设备中使shared
使其比全局设备内存更快。
我找不到任何能在文档中给出明确答案的内容。
答案 0 :(得分:1)
我的问题是变量是否可以在共享内存和托管内存中?
不,这是不可能的。
托管内存为created,其中包含静态分配器(CUDA C中为__managed__
或CUDA fortran中的managed
属性)或CUDA C中的动态分配器(cudaMallocManaged
,或CUDA fortran中的managed
(可分配)属性。
这两者都与CUDA中的逻辑全局内存空间相关联。 __shared__
(或shared
)内存空间是一个单独的逻辑空间,必须明确使用(分配,访问),与任何全局空间使用无关。