osg*_*sgx 73
CUDA驱动程序检查,如果内存范围被锁定,则它将使用不同的代码路径.锁定的存储器存储在物理存储器(RAM)中,因此设备可以从CPU(DMA,也称为异步复制;设备仅需要物理页面列表)的帮助中获取它.非锁定内存可以在访问时生成页面错误,并且它不仅存储在内存中(例如,它可以在交换中),因此驱动程序需要访问非锁定内存的每一页,将其复制到固定缓冲区并传递它到DMA(Syncronious,逐页复制).
如此处所述http://forums.nvidia.com/index.php?showtopic=164661
异步内存复制调用使用的主机内存需要通过cudaMallocHost或cudaHostAlloc进行页面锁定.
我还建议您在developer.download.nvidia.com上查看cudaMemcpyAsync和cudaHostAlloc手册.HostAlloc说cuda驱动程序可以检测固定内存:
驱动程序跟踪使用此(cudaHostAlloc)函数分配的虚拟内存范围,并自动加速对cudaMemcpy()等函数的调用.
She*_*ang 10
CUDA使用DMA将固定内存传输到GPU.可分页主机内存不能与DMA一起使用,因为它们可能驻留在磁盘上.如果内存未固定(即页锁定),则首先将其复制到页面锁定的"暂存"缓冲区,然后通过DMA复制到GPU.因此,使用固定内存可以节省从可分页主机内存复制到页面锁定主机内存的时间.
如果尚未访问内存页面,则可能从未交换过它们.特别是,新分配的页面将是通用"零页面"的虚拟副本,并且在写入之前没有物理实例化.磁盘上的新文件映射同样会保留在磁盘上,直到它们被读取或写入为止.