C 为什么我们不能访问主机端的设备内存?

C 为什么我们不能访问主机端的设备内存?,c,cuda,gpu,nvidia,C,Cuda,Gpu,Nvidia,我问了一个问题 虽然现在我已经很清楚了,但是我仍然想知道为什么不能访问主机中的设备指针。我的理解是CUDA驱动程序负责GPU DRAM内部的内存分配。因此,这些信息(即我在设备中分配的内存的第一个地址)可以传输到主机上运行的操作系统。然后可以访问该设备指针,即分配的设备内存的第一个地址。我的理解有什么问题?请帮助我理解这一点。谢谢您GPU内存位于PCIE总线的另一侧。在现代PC体系结构中,主机内存的内存控制器直接连接到CPU 因此,访问方法有很大不同。访问GPU上的内存时,事务必须按PCIE周期

我问了一个问题
虽然现在我已经很清楚了,但是我仍然想知道为什么不能访问主机中的设备指针。我的理解是CUDA驱动程序负责GPU DRAM内部的内存分配。因此,这些信息(即我在设备中分配的内存的第一个地址)可以传输到主机上运行的操作系统。然后可以访问该设备指针,即分配的设备内存的第一个地址。我的理解有什么问题?请帮助我理解这一点。谢谢您

GPU内存位于PCIE总线的另一侧。在现代PC体系结构中,主机内存的内存控制器直接连接到CPU

因此,访问方法有很大不同。访问GPU上的内存时,事务必须按PCIE周期序列进行帧处理。设置PCIE总线以实现此事务的活动并不是内置在现代CPU的普通内存提取周期中


因此,我们需要软件交互(由
cudaMemcpy
处理)来完成软件序列,该序列将在PCIE总线上编程周期,以发送或获取总线另一侧的数据。

您的GPU有自己的片上内存,你的CPU有它自己的片上存储器,在这两者之间必须做一些工作来传输数据(这并不便宜)。很抱歉,我不明白这个事实与我的问题有什么关系。你能提供更多的细节吗?我想你应该强调一点,编程语言可以使事务无缝,但人们可能会忽略一个基本事实,即在芯片之间传输内存相当昂贵。是的,我的评论是基于CUDA的现状。我并不是在讨论什么是可能的,什么是可能的,或者什么是理论上可能的。如果你愿意的话,你可以在我所有的陈述之前加上“今天,…”我想说的是,我不认为他们很难做到天衣无缝,但他们选择了不这样做,这样人们就不会无意中放慢他们的程序。我不知道这是真的。我不知道要做到天衣无缝并不难,我也不知道他们为什么不这么做。这听起来像是猜测。我试图做出我认为是事实的陈述,而不是推测。请随意添加您自己的答案。这是完全合法的。