【问题标题】:Why we do not have access to device memory on host side?为什么我们无法访问主机端的设备内存?
【发布时间】:2013-10-12 03:45:19
【问题描述】:

我问了一个问题Memory allocated using cudaMalloc() is accessable by host or not? 虽然现在事情对我来说已经很清楚了,但我仍然想知道为什么无法访问主机中的设备指针。我的理解是 CUDA 驱动程序负责 GPU DRAM 内的内存分配。因此,此信息(即我在设备中分配的内存的第一个地址是什么)可以传送到主机上运行的操作系统。然后可以访问该设备指针,即分配的设备内存的第一个地址。我的理解有什么问题?请帮助我理解这一点。谢谢你

【问题讨论】:

  • 你的 GPU 有自己的片上内存,而你的 CPU 有自己的片上内存,在这两者之间必须做一些工作来传输数据(这并不便宜)
  • 很抱歉,我不明白这个事实与我的问题有什么关系。能否请您提供更多详细信息?

标签: c cuda gpu nvidia


【解决方案1】:

GPU 内存位于 PCIE 总线的另一端。现代 PC 架构中主机内存的内存控制器直接连接到 CPU。

因此访问方法有很大不同。在访问 GPU 上的内存时,必须将事务构建为一系列 PCIE 周期。在现代 CPU 中,设置 PCIE 总线以实现此事务的活动并没有内置到普通的内存获取周期中。

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

【讨论】:

  • 我认为你应该指出编程语言可以使交易无缝,但人们可能会忽略芯片之间传输内存非常昂贵的基本事实
  • 是的,我的评论是基于 CUDA 的当前状态。我不是在讨论什么是可能的,或者可能是什么,或者理论上什么是可能的。如果你愿意,你可以在我所有的陈述之前加上“今天,...”
  • 我的意思是,我不认为他们很难做到无缝,但他们选择不这样做,这样人们就不会不知不觉地减慢他们的程序
  • 我不知道这是真的。我不知道让它无缝化并不难,我不知道他们选择不这样做的原因。对我来说这听起来像是猜测。我试图做出我认为在这种情况下是事实的陈述,而不是推测性的。随意添加您自己的答案。这是完全合法的。
猜你喜欢
  • 2013-02-24
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2012-11-22
  • 2010-12-16
  • 1970-01-01
  • 2018-06-22
相关资源
最近更新 更多