我应该何时更喜欢写入组合CUDA分配的映射主机内存?

时间:2016-03-13 23:10:05

标签: c++ memory-management cuda gpgpu

cudaHostAlloc() API调用包含标志:

  
      
  • cudaHostAllocMapped:将分配映射到CUDA地址空间。可以通过调用cudaHostGetDevicePointer()获得指向存储器的设备指针。
  •   
  • cudaHostAllocWriteCombined:将内存分配为写入组合(WC)。 WC内存可以通过PCI Express总线更快地在某些系统配置上传输,但大多数CPU都无法有效读取。对于将由CPU写入并由设备通过映射固定存储器或主机 - >设备传输读取的缓冲区,WC存储器是一个很好的选择。
  •   

我完全理解我何时更喜欢"写合并"选项。我的意思是,它并没有说转移在一个方向上可能更快,所以他们为什么只推荐一个方向呢?此外,哪种系统受益于这种"写入组合"?

我阅读了this白皮书,第4.7节,仍然无法得到它。好的,因此CPU的读取效率低下;但如果其他好处抵消了这种低效率呢?或者 - 如果不能,为什么不能呢?

将表示赞赏。

1 个答案:

答案 0 :(得分:3)

写入组合存储器允许CPU将多个窄写入组合成更少的更宽写入,从而提高了存储器写入的效率。如果内存服务,WC内存最初是在1995年左右与Intel PentiumPro一起推出的,以加速CPU写入视频卡的帧缓冲区。我无法快速了解哪些现代系统平台使用或支持此功能。

CPU执行的读取效率对于cudaHostAllocMappedcudaHostAllocWriteCombined都是相同的。但由于后者允许CPU进行更高效的写入,因此建议使用“由CPU写入并由设备读取的缓冲区”,如引用文档所述。