CUDA全球记忆,它在哪里?

时间:2012-06-24 15:02:40

标签: memory cuda global

据我所知,在CUDA的内存层次结构中,我们有共享内存,纹理内存,常量内存,寄存器,当然还有我们使用cudaMalloc()分配的全局内存。

我一直在搜索我能找到的任何文件,但我还没有看到任何明确解释什么是全局记忆的文件。

我认为分配的全局内存是在显卡本身的GDDR上,而不是与CPU共享的RAM,因为其中一个文档确实指出主机端无法取消引用指针。我是对的吗?

3 个答案:

答案 0 :(得分:4)

全局内存是一个虚拟地址空间,可以映射到设备内存(图形卡上的内存)或页锁定(固定)主机内存。后者要求CC> 1.0。

本地,常量,纹理和本地内存在全局内存中分配,但通过不同的地址空间和缓存进行访问。

在CC> 2.0通用地址空间允许将共享内存映射到全局地址空间;但是,共享内存总是驻留在每个SM片上内存中。

答案 1 :(得分:2)

全局内存在片外,但在显卡上。

本地内存存储在全局内存中,但地址以这样的方式交错:当数组存储在那里时,当warp中的每个线程从其数组中的相同索引读取时,访问将被合并。

常量和纹理内存也(最初)存储在全局内存中,但它缓存在片上缓存中。

共享内存以及L1和L2缓存是片上的。

答案 2 :(得分:0)

这在CUDA C Programming Guide的第3.2.2节中讨论。简而言之,所有类型的存储器,即共享,恒定,纹理和全局,都驻留在设备的存储器中,即GPU本身。

但是,您可以专门声明部分内存为“映射”,即主机上可从设备访问的内存。为此,请参阅编程指南的第3.2.4节。