我是GPGPU概念的新手,在过去的几个月里,我一直在慢慢地教育自己CUDA和OPENCL之间的差异。我意识到OpenCL规范允许程序员以计算设备为目标(因此无论GPU / CPU架构如何),但CUDA C方法没有这样的抽象,因为它始终以兼容的Nvidia GPU架构为目标。所以我想知道如果我在CUDA环境中使用Nvidia的实现编写一个OPENCL内核,我仍然可以针对CPU吗?据我所知,AMD Stream环境允许您通过OpenCL实现来实现这一目标。
提前致谢。
答案 0 :(得分:3)
如果你的意思是这样的话,你仍然可以在安装了Nvidia基于GPU的OpenCL的系统上定位CPU。 Nvidia的OpenCL实现仅支持Nvidia GPU,但AMD的实现可以与NVidia一起安装,也支持CPU。
与OpenGL类似,OpenCL(在Linux和Windows上)使用a wrapper library在多个实现之间进行委派。
答案 1 :(得分:2)
NVIDIA OpenCL,ATI OpenCL,AMD OpenCL(CPU)只是同一API的三种不同实现:OpenCL。这意味着只要您在OpenCL中编码并坚持规范,您的可执行文件就可以在任何支持OpenCL的平台/硬件上正常运行,无论是GPU还是CPU。
在您的情况下,使用CUDA sdk使用NVIDIA OpenCL进行开发不应妨碍您在其他环境(如AMD Stream等)上运行您的应用程序(例如OpenCL on Power),只要目标平台符合OpenCL标准即可安装驱动程序。