在设备功能中,我将值存储在主机的全局内存中(固定或零拷贝)数百万次。在我的宿主函数中,循环一次迭代并从全局内存中读取一个值(有点。我可以看到它是从设备生成的值,而不是等待所有值生成)。
我应该在零复制和固定之间使用哪个以获得更好的性能?
答案 0 :(得分:1)
在设备功能中,我将一个值存储在主机的全局内存中(固定或零复制)
我应该在零复制和固定之间使用哪个以获得更好的性能?
在有效CUDA UVA的64位操作系统上,固定内存和零复制(即固定和映射)之间没有有意义的区别。这是因为,如here和其他地方所述:
“ CUDA 4.0中的统一地址空间功能将导致所有固定分配默认情况下被映射”
“ CUDA 4.0中的统一地址空间功能”为CUDA UVA,它将在使用CUDA的64位操作系统上自动生效(也许Windows 7 WDDM除外)。由于32位CUDA的使用已逐渐被弃用一段时间,因此目前大概大多数人正在使用64位OS。
但是,即使您处于非UVA体制中,也仍然无法回答这个问题。这样做的原因是,正如您在问题中所询问的那样,CUDA设备代码读/写活动无法直接访问固定但未映射的主机内存。正是映射特性(所谓的“零复制”)允许CUDA设备代码直接读取和写入主机内存中的位置。
因此,如果您确实有权访问“固定但未映射的”主机内存,则无论如何都无法实现您想要的功能。