【问题标题】:Questions about Cuda 4.0 and unified memory model关于Cuda 4.0和统一内存模型的问题
【发布时间】:2011-07-05 21:34:14
【问题描述】:

Nvidia 似乎在吹捧 Cuda 4.0 允许程序员在 CPU 和 GPU 之间使用统一的内存模型。这不会取代在 GPU 和 CPU 中手动管理内存以获得最佳性能的需要,但它是否允许更简单的实现,可以进行测试、验证和优化(手动管理 GPU 和 CPU 内存)?我想听听cmets或意见:)

【问题讨论】:

    标签: sdk cuda gpu nvidia memory-model


    【解决方案1】:

    根据我的阅读,重要的区别在于,如果您有 2 个或更多 GPU,您将能够在不接触主机 RAM 的情况下将内存从 GPU1 传输到 GPU2。您还可以通过主机上的一个线程控制 2 个 GPU。

    【讨论】:

      【解决方案2】:

      嗯,这似乎是个大新闻!由 NVIDIA 自己的工程师构建的 thrust 库已经给您带来了一些味道。您只需一个 = 符号就可以将数据从 RAM 移动到 GPU 的 DRAM(无需调用 cudaMalloc 和 cudaMemcpy 之类的东西)。所以推力使 CUDA-C 更像“只是 C”。

      也许他们将来会将其集成到 CUDA-API 中。请注意,反手程序将是相同的(并且将永远保持相同),但为方便起见对程序员隐藏。 (我不喜欢那样)

      编辑:CUDA 4.0 已发布,thrust 将与之集成。

      【讨论】:

      • Thrust 会覆盖赋值运算符以在下面执行 cudaMemcpy。如果不通过主内存从一个 GPU 复制到另一个 GPU 不能帮助您 - 换句话说,您必须进行两次复制才能将数据从一个 GPU 获取到另一个。 CUDA 4.0 消除了这个限制。
      • 酷不知道,听起来很壮观:)
      【解决方案3】:

      “统一”内存仅指地址空间。主机和设备指针是从相同的 64 位地址空间分配的,因此任何给定的指针范围在整个进程中都是唯一的。因此,CUDA 可以从指针推断出指针范围“属于”哪个设备。

      重要的是不要将地址空间与读取/写入这些指针范围的能力混淆。 CPU 将无法取消引用设备内存指针。我相信在支持统一地址的平台上,默认情况下会映射所有主机分配,因此 GPU 将能够取消引用主机分配。

      注意:Windows Vista/Windows 7 上的默认驱动模型不支持此功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-14
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 2015-05-14
        • 1970-01-01
        • 2020-06-01
        • 2021-07-03
        相关资源
        最近更新 更多