OpenCL Windows下使用OpenCL

    目前, NVIDIAAMD的Windows driver均有支援OpenCL(NVIDIA的正式版driver是从195.62版开始,而AMD则是从9.11版开始)。NVIDIA的正式版driver中包含OpenCL.dll,因此可以直接使用。AMD到目前为止,则仍需要安装其SDK才有OpenCL.dll档。不过,在最新的SDK中,NVIDIA和AMD使用的calling convention是相同的。也就是说,使用AMD的SDK编译的OpenCL程式,可以直接在NVIDIA的driver下运作。反过来也是一样。
 
AMD的OpenCL SDK是在 AMD Stream SDK 2.0里面,目前是beta 4。NVIDIA的OpenCL SDK则包括在最新的 CUDA 3.0 SDK beta中。两个SDK可以同时安装在同一部电脑中,基本上不会有冲突的问题。
 
由于OpenCL SDK的重点只是在header file和程式库,因此设定上是很单纯的。在AMD的SDK中,会建立一个环境变数   ATISTREAMSDKROOT。Header files就在 include目录中,而程式库档案则在 lib里面。NVIDIA的SDK也是类似,有一个环境变数   NVSDKCOMPUTE_ROOT。不过,因为NVIDIA的SDK同时包括CUDA及OpenCL,因此它的header files是 ​​在 OpenCL\common\inc目录里,而程式库则是在 OpenCL\common\lib里面。
 
关于程式库的部份,还有一点特别需要注意的是,AMD和NVIDIA都有提供32 bits及64 bits的程式库,供32 bits及64 bits的程式使用。NVIDIA的SDK中,32 bits的程式库是在 lib目录下的Win32目录里,而64 bits的则是在x64目录里。AMD的SDK中,则分别是在x86及x86_64目录里。
 
以下是使用Visual Studio 2008 Express 设定的范例:
 
NVIDIA 的CUDA SDK:
 
 
特别注意的是,因为NVIDIA的SDK在区分32 bits及64 bits版本程式库所使用的目录名称(Win32及x64)和Visual Studio 2008内建的$(PlatformName)是一致的,
因此可以直接使用。AMD的SDK就要分别设定了。另外,如果使用的是32 bits的SDK,则不包括64 bits的library,因此路律就不需要再加上 $(PlatformName)
 
以下是AMD SDK 的设定方式:
 
最后,把OpenCL.lib 加到程式库里面就可以了(这点对两个SDK 都是一样的):
 
 
最后再顺便提到一个小地方。在MacOS X 10.6 中,OpenCL 的header 档是存在OpenCL 目录中,也就是
 
#include <OpenCL/opencl.h>
 
但是在Windows 下(以及可能所有其它的OS 下),都是
 
#include <CL/cl.h>
 
因此,如果想要让同一个程式码,可以同时在各种OS 下都能编译的话,在include 档案时,建议写成:
 
#ifdef __APPLE__
#include <OpenCL/opencl.h>
#else
#include <CL/cl.h>
#endif
 
这样就可以同时在MacOS X 10.6 下,以及其它的OS 下都能使用了。
 

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自www.cnblogs.com/sownchz/p/10390890.html