【问题标题】:Jetson Tegra TX1 Shared MemoryJetson Tegra TX1 共享内存
【发布时间】:2016-06-29 19:00:07
【问题描述】:

它明确提到 Tegra TX1 具有共享内存。我的问题: CPU 和 GPU 之间是否共享内存?或者是GPU中不同块之间共享的内存。

【问题讨论】:

    标签: cuda tegra


    【解决方案1】:

    CPU 和 GPU 具有相同的内存系统。也就是说,系统 DRAM 内存也与分配 GPU 全局内存的物理内存相同。零拷贝、Unified Memory等多种技术也可以基本消除系统内存数据和GPU全局数据之间的逻辑区别。

    此外,Tegra TX1 中的 GPU 与所有支持 CUDA 的 GPU 一样,具有 CUDA 共享内存。这是在特定块中的线程之间共享的内存,但不在 GPU 中的不同块之间共享。 GPU 中不同块之间共享的主要内存系统是全局内存系统,如前所述,它在 Tegra TX1 上(物理上)与系统 DRAM 内存相同。

    【讨论】:

    • 所以基本上在编写 cuda 程序时,我不必担心 cudamalloc 、 cudamemcpy 和 cudafree 语句。
    • 不正确。主机内存和设备内存之间仍然存在逻辑区别。如果您愿意,可以使用零拷贝或统一内存等技术解决或模糊这些区别。
    • 所以我有一个非常基本的问题。假设我正在编写一个 cuda 程序来对 CPU 内存上的数组中存在的一些数字求平方。在 CPU 和 GPU 内存不同的情况下,我们编写 cuda 代码的方式基本上是将整个数组从主机内存复制到设备内存并进行所需的计算。我的问题是:在 Tegra TX1 的情况下,如果我们遵循这个程序,它会在 DRAM 上创建数据的重复吗?
    • 是的,零拷贝和统一内存都是可以防止重复的技术。
    • @kshitij srivastava,全局(CPU+GPU主)内存的逻辑区别只意味着:你只需要在最开始调用cudamalloc()编程并将这个/这些指针[在 CPU 主机代码中] 提供给传感器或其他 HW 以填充数据...一旦 HW 发出信号,缓冲区已满(如果需要,首先从硬件队列中解锁缓冲区),您可以立即处理CUDA中的数据,因为它已经在您已标记的CUDA全局内存中> 一开始。那是 ALL :-)
    【解决方案2】:

    如果你已经使用 cudamalloc() 分配了内存块,那么是。它会自动在 CPU 和 GPU 之间共享 Global-Memory

    请不要将其与称为“共享 MEM”的 CUDA 本地内存混淆。 {在同一个 BLOCK 的线程之间共享}。

    记住:CUDA 中的 “共享内存” 是 GPU 的 SM 单元内的 TURBO 速度 可编程缓存! :-)

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多