如果我们执行一个 mmap() 系统调用并将一些 PCIE 设备内存(如 GPU)映射到用户空间,那么应用程序可以访问设备中的这些内存区域而无需任何操作系统开销。数据可以从文件系统缓冲区直接复制到设备内存,无需任何其他副本。
上面的说法一定是错误的...谁能告诉我错误在哪里?谢谢!
最佳答案
对于普通设备,您所说的是正确的。如果 GPU 内存的读/写行为不同,它们可能会这样做。我们应该查看一些 cudaMemcpy()
的文档。
来自 Nvidia's basics of CUDA第 22 页,
direction specifies locations (host or device) of src and dst Blocks CPU thread: returns after the copy is complete. Doesn't start copying until previous CUDA calls complete
很明显,cudaMemcpy()
与之前的 GPU 寄存器写入同步,这可能导致 mmap()
内存更新。由于 GPU 管道是管道,当从 CPU 发出 cudaMemcpy()
时,先前的命令问题可能尚未完成。
关于linux - mmap() 设备内存到用户空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298147/