在 Windows 下使用 OpenCL

来源:互联网 发布:电视台视频剪辑软件 编辑:程序博客网 时间:2024/06/09 16:48

http://www.kimicat.com/opencl-1/zai-windows-xia-shi-yong-opencl


目前,NVIDIA 和 AMD 的 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 下都能使用了。

原创粉丝点击