如何从NVIDIA头文件访问cl命名空间?

时间:2013-05-29 17:52:55

标签: opencl

如果这是一个noob问题,我很抱歉,但我是C ++的新手,部分原因是我搞乱openCL是为了学习更多C ++。

我安装了CUDA SDK并将openCL头文件放在这里:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL

我将以下两个目录添加到Visual C ++中的其他包含目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include\CL

但是当我尝试引用cl命名空间中的任何内容时,like they do in this tutorial它不起作用,因为cl未定义。

enter image description here

2 个答案:

答案 0 :(得分:1)

这个问题已经解决了,所以我只是写这里来添加一​​些信息。

您可以使用英特尔或AMD SDK(我更喜欢英特尔),而不是使用Nvidia CUDA SDK。它们都自动包含cl.hpp并支持OpenCL 1.2(Nvidia SDK仅支持OpenCL 1.1)。您可能需要添加#define CL_USE_DEPRECATED_OPENCL_1_1_APIS以确保您的内核可以在Nvidia设备上运行。

SDK与编译和运行内核的设备驱动程序无关。这是由供应商的视频驱动程序完成的。事实上,您可以安装Nvidia视频驱动程序,AMD Radeon驱动程序(即使您没有AMD显卡)和Intel OpenCL驱动程序。然后你可以用例如编译你的主机代码英特尔OpenCL SDK并在Nvidia GPU和Intel / AMD CPU上运行内核。

答案 1 :(得分:1)

问题是 nVidia 的OpenCL框架(与 CUDA 捆绑在一起)没有附带C ++包装器库。但幸运的是,一个是使用现有OpenCL C API的单一标头库。所以你需要做的就是从 Khronos 下载official cl.hpp并将其包含在源文件中(将其放入可访问的include目录后,最好与 nVidia一起自己的OpenCL标头)。事实上,一旦包含并使用cl.hpp,您就不需要包含任何其他标题。

但请注意,这个C ++包装器仅适用于OpenCL 1.1(除了可以提出的最好的C ++包装器之外的任何东西),但 nVidia 无论如何都没有OpenCL 1.2支持。