我对nVIDIA CUDA有一些经验,现在我也在考虑学习openCL.我希望能够在任何GPU上运行我的程序.我的问题是:每个GPU都使用与nVIDIA相同的架构(多处理器,SIMT结构,全局内存,本地内存,寄存器,现金......)?
非常感谢你!
从您的既定目标开始:
"我希望能够在任何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
可以在此处找到更多的比较和讨论.