cuda中共享和托管内存中的变量
Variable in the shared and managed memory in cuda
有了 CUDA 中现在的统一内存功能,变量可以在 managed
内存中,这使代码更简单一些。而 shared
内存在线程块中的线程之间共享。请参阅 CUDA Fortran.
中的第 3.2 节
我的问题是一个变量可以同时在 shared
和 managed
内存中吗?它们在主机中会是 managed
但在设备上,它们会是 shared
这种类型的变量可能会出现什么类型的行为?
我正在使用 CUDA Fortran。我问这个问题是因为,将变量声明为 managed
使我更容易编码,而在设备中将其声明为 shared
使其比全局设备内存更快。
我在文档中找不到任何能给我明确答案的内容。
My question is can a variable be in both the shared and managed memory?
不,这不可能。
托管内存 created 具有静态分配器(CUDA C 中的 __managed__
或 CUDA fortran 中的 managed
属性)或动态分配器(cudaMallocManaged
CUDA C,或 CUDA fortran 中的 managed
(可分配)属性)。
这两个都与CUDA中的逻辑全局内存space相关联。 __shared__
(或shared
)内存space是一个单独的逻辑space,必须显式使用(分配、访问),独立于任何全局 space 用法。
有了 CUDA 中现在的统一内存功能,变量可以在 managed
内存中,这使代码更简单一些。而 shared
内存在线程块中的线程之间共享。请参阅 CUDA Fortran.
我的问题是一个变量可以同时在 shared
和 managed
内存中吗?它们在主机中会是 managed
但在设备上,它们会是 shared
这种类型的变量可能会出现什么类型的行为?
我正在使用 CUDA Fortran。我问这个问题是因为,将变量声明为 managed
使我更容易编码,而在设备中将其声明为 shared
使其比全局设备内存更快。
我在文档中找不到任何能给我明确答案的内容。
My question is can a variable be in both the shared and managed memory?
不,这不可能。
托管内存 created 具有静态分配器(CUDA C 中的 __managed__
或 CUDA fortran 中的 managed
属性)或动态分配器(cudaMallocManaged
CUDA C,或 CUDA fortran 中的 managed
(可分配)属性)。
这两个都与CUDA中的逻辑全局内存space相关联。 __shared__
(或shared
)内存space是一个单独的逻辑space,必须显式使用(分配、访问),独立于任何全局 space 用法。