cuda中共享和管理内存中的变量

时间:2016-11-02 17:45:33

标签: cuda fortran gpu

现在CUDA中的统一内存功能,变量可以在managed内存中,这使得代码更简单一些。而shared内存在线程块中的线程之间共享。请参阅CUDA Fortran.

中的第3.2节

我的问题是变量是否可以在sharedmanaged内存中?它们在主机中是managed,但在设备上,它们将是shared这种类型的变量可能会出现什么样的行为?

我正在使用CUDA Fortran。我问这个问题是因为,将变量声明为managed使我更容易编码,而在设备中使shared使其比全局设备内存更快。

我找不到任何能在文档中给出明确答案的内容。

1 个答案:

答案 0 :(得分:1)

  

我的问题是变量是否可以在共享内存和托管内存中?

不,这是不可能的。

托管内存为created,其中包含静态分配器(CUDA C中为__managed__或CUDA fortran中的managed属性)或CUDA C中的动态分配器(cudaMallocManaged ,或CUDA fortran中的managed(可分配)属性。

这两者都与CUDA中的逻辑全局内存空间相关联。 __shared__(或shared)内存空间是一个单独的逻辑空间,必须明确使用(分配,访问),与任何全局空间使用无关。