Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux mmap()将设备内存放入用户空间_Linux_Linux Kernel_Linux Device Driver_Mmap - Fatal编程技术网

Linux mmap()将设备内存放入用户空间

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

如果我们执行mmap()系统调用并将一些PCIE设备内存(如GPU)映射到用户空间,则应用程序可以访问设备中的这些内存区域,而无需任何操作系统开销。数据可以直接从文件系统缓冲区复制到设备内存,无需任何其他拷贝


上面的说法一定是错的。。。谁能告诉我缺陷在哪里?谢谢

对于普通设备,您所说的是正确的。如果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内存映射到用户空间)?