cudaHostAlloc()
API调用包含标志:
- cudaHostAllocMapped:将分配映射到CUDA地址空间。可以通过调用cudaHostGetDevicePointer()获得指向存储器的设备指针。
- cudaHostAllocWriteCombined:将内存分配为写入组合(WC)。 WC内存可以通过PCI Express总线更快地在某些系统配置上传输,但大多数CPU都无法有效读取。对于将由CPU写入并由设备通过映射固定存储器或主机 - >设备传输读取的缓冲区,WC存储器是一个很好的选择。
我完全理解我何时更喜欢"写合并"选项。我的意思是,它并没有说转移在一个方向上可能更快,所以他们为什么只推荐一个方向呢?此外,哪种系统受益于这种"写入组合"?
我阅读了this白皮书,第4.7节,仍然无法得到它。好的,因此CPU的读取效率低下;但如果其他好处抵消了这种低效率呢?或者 - 如果不能,为什么不能呢?
将表示赞赏。
答案 0 :(得分:3)
写入组合存储器允许CPU将多个窄写入组合成更少的更宽写入,从而提高了存储器写入的效率。如果内存服务,WC内存最初是在1995年左右与Intel PentiumPro一起推出的,以加速CPU写入视频卡的帧缓冲区。我无法快速了解哪些现代系统平台使用或支持此功能。
CPU执行的读取效率对于cudaHostAllocMapped
和cudaHostAllocWriteCombined
都是相同的。但由于后者允许CPU进行更高效的写入,因此建议使用“由CPU写入并由设备读取的缓冲区”,如引用文档所述。