我在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:
线程工作项 线程块工作组 全局内存全局内存 恒定内存恒定内存 共享内存本地内存 本地内存私有内存
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句