关于CUDA统一虚拟内存的困惑

Posted

技术标签:

【中文标题】关于CUDA统一虚拟内存的困惑【英文标题】:Confusion about CUDA unified virtual memory 【发布时间】:2015-05-14 20:28:33 【问题描述】:

我对统一虚拟内存有些困惑。

链接后面的文档 (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#unified-virtual-address-space) 说它可以在以下情况下使用...

当应用程序作为 64 位进程运行时,单个地址空间用于主机和计算能力为 2.0 及更高版本的所有设备。

但是这个链接 (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-requirements) 说它需要:

具有 SM 架构 3.0 或更高版本(Kepler 类或更高版本)的 GPU

此外,第一个链接说我可以使用cudaHostAlloc。然后第二个使用cudaMallocManaged

这个“统一”术语之间是否有 2 个不同的东西,或者文档只是有点不连贯?

【问题讨论】:

UVA 和 UM/UVM 是两个不同的东西。 【参考方案1】:

您指的是统一虚拟地址空间,它与自 CUDA 6.0 和架构 3.0 或更高版本以来引入的统一内存不同,并且无需从主机到设备进行显式数据传输

unified memory

unified memory2

您也可以查看:

here , and here

【讨论】:

但是,当我仍然需要手动复制数据时,统一虚拟地址空间的意义何在?我认为“没有统一的虚拟地址空间”没有任何优势。 @Michael:请检查 [this][1] 和 [this][2] 。 [1]:***.com/questions/29013903/….[2]:***.com/questions/19186998/…

以上是关于关于CUDA统一虚拟内存的困惑的主要内容,如果未能解决你的问题,请参考以下文章

CUDA编程GPU内存总结

CUDA 内存统一分析

低层级GPU虚拟内存管理引论

进程地址空间与虚拟内存

虚拟内存和物理内存有啥区别?

虚拟内存和物理内存有什么区别?