2013-10-09 51 views
2

据我所知,当主机和设备之间的复制操作开始使用cudaMemcpy时,主机指针会自动固定。那么,为分配固定主机内存而使用单独的API cudAHostAlloc()有什么意义和必要性?CUDA和cudamemcpy中的固定内存()

+3

我认为你的理解是错误的。复制到未固定的内存涉及中间驱动程序管理的缓冲区,这就是速度较慢的原因。 – talonmies

+0

所以你的意思是从主机,数据首先放在驱动程序管理(固定)缓冲区,然后从那里它被传输到设备? – gpuguy

+0

@gpuguy:是的。您可以使用cudaMallocHost()分配自己的分段缓冲区,并使用CUDA事件来编写您自己的可分页memcpy例程 - 请参阅http://cudahandbook.to/GH9evr – ArchaeaSoftware

回答

2

这两个操作是不一样的,您传递给cudaMemcpy的主机指针不是“自动固定”的。

对于从可分页存储器传输到设备,host memory is copied to a staging buffer。暂存缓冲区是任何传输的目标。

这使得可分页存储器的传输速度比固定存储器缓冲区的传输慢(通常)。使用固定内存也allows for other possibilities,如具有设备可直接访问的映射内存,没有明确的(API级别)传输。