【问题标题】:How to access Managed memory simultaneously by CPU and GPU in compute capability 5.0?计算能力 5.0 如何通过 CPU 和 GPU 同时访问托管内存?
【发布时间】:2019-01-22 11:51:16
【问题描述】:

由于无法同时访问计算能力低于 6.x 的设备上的托管内存(CUDA Toolkit Documentation),有没有办法通过具有计算能力 5.0 的 CPU 和 GPU 或任何可以使 CPU 的方法同时访问托管内存在 GPU 内核运行时访问托管内存。

【问题讨论】:

  • GPU 和 CPU 无法同时访问 cc5.0 上的托管内存。在 Pascal GPU 之前提供同时访问的唯一内存资源是零拷贝(固定)内存。
  • 统一和零拷贝内存有什么区别?零拷贝内存可以使用单个数组同时从 CPU 和 GPU 访问吗?

标签: cuda gpu-managed-memory


【解决方案1】:

有没有办法通过具有计算能力 5.0 的 CPU 和 GPU 来同时访问托管内存

没有。

或任何可以在 GPU 内核运行时使 CPU 访问托管内存的方法。

不在计算能力 5.0 设备上。

您可以使用 CUDA zero-copy techniques“同时”CPU 和 GPU 访问数据。

关于统一内存和固定/映射/零拷贝内存的完整教程远远超出了我可以在此处回答的范围。 Unified Memory 在编程指南中有its own section。这两个主题在 SO 上的 cuda 标记以及网络上的许多其他地方都得到了广泛的介绍。 任何问题都可以通过谷歌搜索得到解答。

简而言之,64 位操作系统上的零拷贝内存是通过主机固定 API 访问的,例如 cudaHostAlloc()。如此分配的内存是主机内存,并且始终保留在那里,但 GPU 可以访问它。从 GPU 到主机内存对该内存的访问是通过 PCIE 总线进行的,因此它比正常的全局内存访问要慢得多。分配返回的指针(在 64 位操作系统上)可用于主机和设备代码。您可以研究使用simpleZeroCopy 等零拷贝技术的CUDA 示例代码。

相比之下,普通统一内存 (UM) 是将迁移到使用它的处理器的数据。在 pre-pascal UM 机制中,此迁移由内核调用和同步操作触发。在这种情况下,主机和设备无法同时访问。对于适当的 UM post-pascal 机制中的 pascal 及以上设备(基本上,仅限 64 位 linux,CUDA 8+),即使在内核执行期间,数据也会按需迁移,从而允许有限形式的“同时”访问.统一内存有多种行为模式,在某些情况下,其中一些会导致统一内存分配“衰减”为固定/零拷贝主机分配。

【讨论】:

  • 感谢您提供的信息。我想我必须购买具有 6.0 或更高计算能力的 GPU 系统,因为我的项目严格使用统一内存。
猜你喜欢
  • 1970-01-01
  • 2013-03-02
  • 2014-08-21
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 2023-02-24
相关资源
最近更新 更多