使用哪个:零复制内存与固定内存

问题描述 投票:0回答:1

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

我应该在零拷贝和固定之间使用哪个以获得更好的性能?

cuda
1个回答
1
投票

在我的设备功能中,我将一个值存储在主机的全局内存中(固定或零复制)

我应该在零拷贝和固定之间使用哪个以获得更好的性能?

在CUDA UVA生效的64位操作系统中,固定内存和零复制(即固定和映射)之间没有任何有意义的差异。这是因为,正如here和其他地方所述:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.