需要为CPU和GPU平台安装OpenCL吗?

3

我有一台配备了NVidia显卡的系统,想要使用openCL来替代CPU上的一些小任务(感谢VS2010使openMP无用)。

由于我已经安装了NVidia的opencl SDK,在使用clGetPlatformIDs()函数时只返回一个平台(NVidia的),因此只有一个设备(GPU)可供使用。

我是否需要安装Intel的OpenCL SDK才能访问CPU平台?
CPU平台不应该始终可用吗?我的意思是,你怎么可能没有CPU呢?
如何同时构建两个OpenCL SDK的应用程序?


好的,我需要安装Intel OpenCL SDK - 这个问题可能应该是“如何将OpenCL应用程序分发到没有安装SDK的机器上?” - Martin Beckett
我非常新手,但我无法理解在CPU上运行OpenCL代码与在GPU上运行相比,你将获得什么计算优势? - Koder101
@Koder101,在这种情况下,我是在一台带有Nvidia的桌面机上进行开发,但是目标是一个只有CPU的嵌入式PC。 - Martin Beckett
好的,谢谢你的回答。但是,如果最终目标是仅使用CPU(在任何平台上),那么使用基于GPU的库有什么意义呢?为什么不直接使用传统语言(带有跨平台框架)呢? - Koder101
1
@Koder101,OpenCL 可以编译成优化的并行指令在 CPU 上(如 SIMD 等),因此可能比普通的 C 编译器更好。尽管第一次编译 OpenCL 的开销很大。 - Martin Beckett
2个回答

8
您需要一个提供与CPU交互接口的SDK。nVidia没有,AMD和Intel的SDK有;在我的情况下,Intel的SDK明显(大约是10倍)更快,这可能是由于我糟糕的编程技巧。
程序运行时不需要SDK,只需要运行时环境。在Linux中,每个供应商都会在/etc/OpenCL/vendors/*.icd中安装一个文件,其中包含要使用的运行时库的路径。当您链接到OpenCL运行时(libOpenCL.so)时,它会扫描该文件,然后在该特定平台上查询设备时调用每个供应商的库。
在Linux中,GPU驱动程序会自动安装OpenCL运行时,Intel运行时很可能可以从SDK单独下载,但当然也是SDK的一部分。

目前仍不太清楚在Windows上需要与您的OpenCL应用程序一起分发什么(至少如此)。英特尔二进制文件夹包含35个文件和68MB。 - Martin Beckett
/usr/lib64/OpenCL/vendors/intel 这里有82M。这并不奇怪,因为它包含了clang编译器,单独的clang编译器已经占据了25M。这些文件一共有35个。SDK还包含了一些头文件。 - eudoxos
根据规范,ICD概念只是一种扩展,因此是可选的。您知道没有ICD扩展OpenCL如何工作吗?如果没有ICD扩展,您将链接什么而不是ICD加载程序(libOpenCL.so / OpenCL.dll)? - Niklas Peter

-1

今天我终于开始尝试进行OpenCl开发了,哇...这真的不是一件简单的事。

有AMD SDK,有英特尔SDK,还有NVIDIA SDK,每个都有自己的属性(仅支持CPU、仅支持GPU或仅支持特定的显卡?)

可能有有效的技术原因,必须这样做,但我真的希望只有一个SDK,并且在编程时可以指定GPU / CPU任务,或者可以使用任何最合适/最佳性能的资源或者其他方法。

时间要开始了,我猜...不过要决定去CPU还是GPU。 我有一台价格为4000美元的全新alienware笔记本电脑,配备SLI显卡,还有8核CPU,所以...我猜我将不得不尝试几个sdk并查看哪个最适合我的需求?

不确定我的应用程序的最终用户会做些什么...似乎他们无法切换到在CPU或GPU上运行。

OpenCL领域确实需要帮助...


2
无论您使用哪个OpenCL SDK,只要使用任何一个,您的二进制文件就可以在任何地方运行。您可能拥有Intel(CPU)OpenCL和NVidia OpenCL,因此您可以简单地“切换”并在CPU上运行opencl。AMD opencl支持在CPU上运行内核。通过一些巧妙的预处理器技巧,内核可以直接编译到应用程序中以进行CPU代码路径,并在可用时使用opencl运行。 - doug65536
@doug65536,你能否回答我的问题http://stackoverflow.com/questions/21937673/develop-opencl-application-without-gpu-support-on-laptop?我现在非常绝望,似乎在网上找不到任何关于这个主题的帮助... - Cool_Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接