所有GPU都使用相同的架构吗?

时间:2013-12-25 19:41:41

标签: cuda opencl gpgpu

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

非常感谢!

2 个答案:

答案 0 :(得分:5)

从您的既定目标开始:

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

然后是的,你应该学习OpenCL。

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

这就是给定OpenCL代码从一个GPU到另一个GPU的性能差异很大(取决于您的性能指标)的一个原因。实际上,为了在任何GPU上实现优化的性能,应该通过改变(例如,本地存储器大小)来“分析”算法,以找到给定硬件设计的最佳算法设置。

但即使存在这些硬件差异,OpenCL的目标是提供所有设备(CPU,GPU,FPGA等)支持的核心功能,并包含“扩展”,允许供应商公开独特的硬件功能。尽管OpenCL无法隐藏硬件上的重大差异,但它确实保证了可移植性。这使得开发人员更容易从为一个设备调整的OpenCL程序开始,然后开发针对另一个体系结构优化的程序。

通过识别硬件差异使问题复杂化,CUDA使用的术语与OpenCL使用的术语不同,例如,以下内容在含义上大致相同:

CUDA:           OpenCL: 
Thread         Work-item
Thread block    Work-group
Global memory   Global memory
Constant memory Constant memory
Shared memory   Local memory
Local memory    Private memory

更多比较和讨论可以是found here

答案 1 :(得分:0)

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

从CUDA切换到OpenCL,您可能会对许多相同概念具有不同名称(例如:CUDA“warp”== OpenCL“wavefront”)这一事实感到困惑。