在Windows下使用OpenCL

在Windows下使用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 下都能使用了。

原文來自:http://www.kimicat.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章