前言
目前,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.8.1里面。NVIDIA 的OpenCL SDK 則包括在最新的 CUDA 5.5 SDK 中。兩個 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 目錄里。
AMD的SDK
最后,把 OpenCL.lib 加到程序庫里面就可以了(這點對兩個SDK 都是一樣的):
- #include?<OpenCL/opencl.h>??
- #include?<CL/cl.h>??
- #ifdef?__APPLE__??
- ?#include?<OpenCL/opencl.h>??
- ?#else??
- ?#include?<CL/cl.h>??
- ?#endif??