在Windows下使用OpenCL

目前,NVIDIA 和 AMD 的 Windows driver 均有支援 OpenCL(NVIDIA 的正式版 driver 是从 195.62 版开始,而 AMD 则是从 9.11 版开始)。NVIDIA 的正式版 driver 中包含 OpenCL.dll,因此可以直接使用。

目前,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

### 安装 OpenCL 1.2 on Windows 对于希望在Windows操作系统上安装OpenCL 1.2版本的用户来说,过程涉及几个关键步骤。通常情况下,安装特定版本的OpenCL SDK意味着下载对应版本的支持包或SDK,并按照官方指导完成设置。 #### 下载 NVIDIA GPU 计算 SDK 或 AMD APP SDK 由于OpenCL是由多个供应商支持的标准API,在Windows环境下最常见的是来自NVIDIA和AMD的实现。为了获取OpenCL 1.2环境,可以从GPU制造商那里寻找对应的软件开发套件(SDK)[^1]。 - **NVIDIA 用户**: 可访问[NVIDIA 开发者网站](https://developer.nvidia.com/)查找适用于目标硬件的老版CUDA Toolkit或者独立发布的OpenCL驱动程序。 - **AMD 用户**: 对于AMD设备,则应前往[AMD 开发资源页面](https://www.amd.com/en/developers)搜索并下载相应的APP SDK版本,该SDK包含了OpenCL运行所需的全部组件。 #### 设置环境变量 成功安装上述任一厂商提供的SDK之后,需配置系统的环境变量以便编译器能够识别OpenCL头文件以及链接库的位置。具体而言: 1. 将`%PROGRAMFILES%\NVIDIA Corporation\OpenCL\sdk\bin\x86_64`(针对64位系统)加入到PATH环境变量中; 2. 同样地,如果选择了AMD SDK,则添加类似路径至PATH,例如`C:\Program Files (x86)\AMD APP\7.0\bin\x86_64`。 以上操作确保命令提示符或其他IDE工具链能够在编译期间找到必要的依赖项[^3]。 #### 验证安装 最后一步是验证OpenCL是否已正确安装。可以通过编写简单的测试程序来确认这一点。下面是一个基本的例子,它会打印出可用的OpenCL平台及其设备列表: ```cpp #include <iostream> #include <CL/cl.hpp> int main() { std::vector<cl::Platform> platforms; cl::Platform::get(&platforms); for(size_t i = 0; i < platforms.size(); ++i){ cl::Platform platform = platforms[i]; std::cout << "Platform Name: "; platform.getInfo(CL_PLATFORM_NAME, &std::cout); std::vector<cl::Device> devices; platform.getDevices(CL_DEVICE_TYPE_ALL, &devices); for(auto& device : devices){ std::string name; device.getInfo(CL_DEVICE_NAME, &name); std::cout << "\tDevice: " << name << '\n'; } } return 0; } ``` 此代码片段展示了如何枚举当前机器上的所有OpenCL兼容平台及关联设备。当执行这段代码时,应该能看到至少一条记录显示所使用的显卡型号以及其他可能存在的加速处理器信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值