Linux mmap()将设备内存放入用户空间
如果我们执行mmap()系统调用并将一些PCIE设备内存(如GPU)映射到用户空间,则应用程序可以访问设备中的这些内存区域,而无需任何操作系统开销。数据可以直接从文件系统缓冲区复制到设备内存,无需任何其他拷贝Linux mmap()将设备内存放入用户空间,linux,linux-kernel,linux-device-driver,mmap,Linux,Linux Kernel,Linux Device Driver,Mmap,如果我们执行mmap()系统调用并将一些PCIE设备内存(如GPU)映射到用户空间,则应用程序可以访问设备中的这些内存区域,而无需任何操作系统开销。数据可以直接从文件系统缓冲区复制到设备内存,无需任何其他拷贝 上面的说法一定是错的。。。谁能告诉我缺陷在哪里?谢谢 对于普通设备,您所说的是正确的。如果GPU内存的读/写行为不同,它们可能会这样做。我们应该看看cudaMemcpy()的一些文档 从第22页开始 方向指定src和dst的位置(主机或设备) 阻塞CPU线程:复制完成后返回。 直到以前的C
上面的说法一定是错的。。。谁能告诉我缺陷在哪里?谢谢 对于普通设备,您所说的是正确的。如果GPU内存的读/写行为不同,它们可能会这样做。我们应该看看
cudaMemcpy()
的一些文档
从第22页开始
方向指定src和dst的位置(主机或设备)
阻塞CPU线程:复制完成后返回。
直到以前的CUDA调用完成后才开始复制
很明显,
cudaMemcpy()
与先前的GPU寄存器写入同步,这可能导致mmap()
内存被更新。由于GPU管道是一个管道,当CPU发出cudaMemcpy()
时,之前的命令问题可能没有完成。strace
X11服务器(例如Xorg
)来理解它在做什么(以及它是如何mmap
-ing GPU的)。你认为你的说法是错误的是什么?还可以尝试cat/proc/$(pidof/usr/bin/X)/maps
…@BasileStarynkevitch我认为这是有缺陷的,因为我知道在CUDA中,如果要将数据复制到GPU内存,首先需要将数据从磁盘复制到主机内存,然后使用cudaMemCopy从主机内存复制到设备内存。如果上述说法属实,那么英伟达为什么要复制这些副本?他们可以执行mmap()操作,并直接从磁盘复制到gpu设备内存。好吧,Cuda可能部分使用Xorg,因此一些数据必须从应用程序流入Xorg(为gpu提供数据…)@artlessnoise谢谢。对我来说,流数据不能被内存映射是有道理的。但是我要比较的是cudaMemCopy()。当前的CUDA编程模型是,我们应该首先将数据从磁盘复制到系统内存,然后从系统内存复制到gpu内存。出于什么设计考虑,nvidia决定选择当前实现,而不是mmap()实现(将gpu内存映射到用户空间)?