Cuda 使用哪种:零拷贝内存与固定内存

Cuda 使用哪种:零拷贝内存与固定内存,cuda,Cuda,在我的设备功能中,我在主机的全局内存(固定或零拷贝)中存储了数百万次值。在我的宿主函数中,循环一次迭代并从全局内存读取一个值(s.t.我可以看到从设备生成的值,而不是等待生成所有值) 为获得更好的性能,我应该在零拷贝和固定之间使用哪一种 在我的设备函数中,我在主机的全局内存中存储一个值(固定或零拷贝) 为获得更好的性能,我应该在零拷贝和固定之间使用哪一种 在64位操作系统上,CUDA UVA有效,固定内存和零拷贝(即固定和映射)之间没有明显区别。这是因为,如前所述和其他地方所述: “CUDA 4

在我的设备功能中,我在主机的全局内存(固定或零拷贝)中存储了数百万次值。在我的宿主函数中,循环一次迭代并从全局内存读取一个值(s.t.我可以看到从设备生成的值,而不是等待生成所有值)

为获得更好的性能,我应该在零拷贝和固定之间使用哪一种

在我的设备函数中,我在主机的全局内存中存储一个值(固定或零拷贝)

为获得更好的性能,我应该在零拷贝和固定之间使用哪一种

在64位操作系统上,CUDA UVA有效,固定内存和零拷贝(即固定和映射)之间没有明显区别。这是因为,如前所述和其他地方所述:

“CUDA 4.0中的统一地址空间功能将导致默认情况下映射所有固定分配”

“CUDA 4.0中的统一地址空间功能”是,它将自动在使用CUDA的64位操作系统上生效(可能除了windows 7 WDDM)。由于32位CUDA的使用已经逐渐被弃用了一段时间,64位操作系统大概是目前大多数人正在使用的

然而,即使你是在一个非UVA制度,仍然没有办法回答这个问题。原因是,如您在问题中所问,固定但未映射的主机内存无法直接访问CUDA设备代码读/写活动。正是映射特性(所谓的“零拷贝”)允许CUDA设备代码直接读取和写入主机内存中的位置


因此,如果您确实可以访问“固定但未映射”主机内存,您所希望的功能无论如何也无法实现。

什么会阻止您对这两种方法进行基准测试并自行确定答案?零拷贝和固定内存是一回事。@RobertCrovela这不是真的。也许你应该仔细阅读你提供的链接的全部内容。CUDA 4.0中的统一地址空间功能将导致默认情况下映射所有固定分配我知道在64位操作系统中没有方法创建未映射的固定分配。您对64位操作系统的理解是错误的。我已经指出了这一点。64位操作系统上的固定内存和映射内存之间存在1:1的对应关系,而不管您使用何种API调用来分配内存。此外,设备代码没有方法访问未映射(到设备地址空间)的主机内存。我当然承认零拷贝内存将用于您描述的目的。但“固定但未映射”不是选项。1.因为你不能在运行CUDA 2的64位操作系统上创建它。因为即使您可以创建它,也无法从设备代码访问它。