【问题标题】:Do all GPUs use the same architecture?所有 GPU 都使用相同的架构吗?
【发布时间】:2014-01-13 14:22:36
【问题描述】:

我有一些使用 nVIDIA CUDA 的经验,现在我也在考虑学习 openCL。我希望能够在任何 GPU 上运行我的程序。我的问题是:每个 GPU 是否都使用与 nVIDIA 相同的架构(多处理器、SIMT 结构、全局内存、本地内存、寄存器、缓存等)?

非常感谢!

【问题讨论】:

    标签: cuda opencl gpgpu


    【解决方案1】:

    从您的既定目标开始:

    “我希望能够在任何 GPU 上运行我的程序。”

    那么是的,你应该学习 OpenCL。

    在回答您的整体问题时,其他 GPU 供应商确实使用与 Nvidia GPU 不同的架构。事实上,来自单一供应商的 GPU 设计可能会有很大差异,具体取决于型号。

    这是给定 OpenCL 代码在不同 GPU 之间的性能可能完全不同(取决于您的性能指标)的原因之一。事实上,为了在任何 GPU 上实现优化性能,应该通过改变(例如)本地内存大小来“分析”算法,以便为给定的硬件设计找到最佳算法设置。

    但即使存在这些硬件差异,OpenCL 的目标是提供所有设备(CPU、GPU、FPGA 等)都支持的核心功能,并包括允许供应商公开独特硬件功能的“扩展” .尽管 OpenCL 无法隐藏硬件的显着差异,但它确实保证了可移植性。这使开发人员可以更轻松地从针对一种设备调整的 OpenCL 程序开始,然后开发针对另一种架构优化的程序。

    为了使识别硬件差异变得复杂,CUDA使用的术语与OpenCL使用的术语不同,例如,以下含义大致相同:

    CUDA:OpenCL:
    线程工作项
    线程块工作组
    全局内存 全局内存
    恒常记忆恒常记忆
    共享内存 本地内存
    本地内存 私有内存

    更多比较和讨论可以found here

    【讨论】:

    • 感谢您的回答。可以说每个 GPU 都使用 SIMT 架构吗?
    • 我不这么认为,但我不是这方面的专家。单指令多线程 (SIMT) 是 Nvidia 创建的一个术语,用于描述其 GPU 架构。这些架构基本上是具有多线程的单指令多数据 (SIMD)。虽然 SIMT 这个词是由 Nvidia 创建的,但其他供应商也提出了类似的架构,但我不一定认为这些是完全相同的。
    • 我认为你给他的建议是有问题的,因为在 OpenCL 中编写他的代码将允许它在不同的 GPU 上运行(好吧,忽略不能忽略的 OpenCL 版本问题)-几乎没有内核在许多 GPU 上运行良好。众所周知,架构的差异对最大化性能的方法产生了巨大影响。
    【解决方案2】:

    您会发现 OpenCL 和 CUDA 提供的抽象类型非常相似。您通常还可以依靠具有类似功能的硬件:全局内存、本地内存、流式多处理器等...

    从 CUDA 切换到 OpenCL,您可能会因为许多相同的概念有不同的名称而感到困惑(例如:CUDA "warp" == OpenCL "wavefront")。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-15
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多