我有一个带有NVidia显卡的系统,我正在寻找使用openCL替换openMP来处理一些小的CPU任务(感谢VS2010 making openMP useless)
由于我安装了NVidia的opencl SDK,clGetPlatformIDs()只返回一个平台(NVidia),因此只返回一个设备(GPU)。
我是否还需要安装英特尔的openCL sdk才能访问CPU平台? CPU平台不应该总是可用 - 我的意思是,你怎么没有CPU? 你如何设法同时构建两个openCL SDK?
答案 0 :(得分:8)
您需要有一个提供CPU接口的SDK。 nVidia没有,AMD和英特尔的SDK都可以;在我的情况下,来自英特尔的那个显着(类似10倍)更快,这可能是由于我的编程不好。
您不需要SDK来运行程序,只需要运行时。在Linux中,每个供应商都在/etc/OpenCL/vendors/*.icd
中安装一个文件,该文件包含要使用的运行时库的路径。这是由您链接到的OpenCL运行时扫描的(libOpenCL.so),然后在查询该特定平台上的设备时调用每个供应商的库。
在Linux中,GPU驱动程序自动安装OpenCL运行时,英特尔运行时可能可以从SDK单独下载,但当然也是SDK的一部分。
答案 1 :(得分:-1)
今天我终于开始尝试开始进行openCl开发了哇......这根本不是直截了当的。
有一个AMD sdk,有一个英特尔sdk,有一个nvidia sdk,每个都有自己的属性(仅CPU和GPU只支持特定的视频卡支持?)
可能有一些有效的技术原因必须采用这种方式,但我真的希望只有一个sdk,并且在编程时也许你可以指定GPU / CPU任务,或者它可能会使用任何最有意义的资源/最好的或最好的。
时间潜入,但我猜...尝试决定我是否使用CPU或GPU。我有一个新的4000美元外星人笔记本电脑与SLI视频卡,但后来也是一个8核心CPU所以是啊...猜测不得不尝试几个sdk的,看看哪种预制件最适合我的需求?
不确定我的应用程序的最终用户会做什么...但似乎他们不能翻转开关使其在cpu或gpu上运行。
OpenCL环境确实需要一些帮助......