1

如果这是一个菜鸟问题,我很抱歉,但我是 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 命名空间中的任何内容时,就像他们在本教程中所做的那样,它不起作用,因为 cl 未定义。

在此处输入图像描述

4

2 回答 2

1

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

您可以使用 Intel 或 AMD SDK(我更喜欢 Intel),而不是使用 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 驱动程序。然后,您可以使用例如 Intel OpenCL SDK 编译您的主机代码,并在 Nvidia GPU 和 Intel/AMD CPU 上运行您的内核。

于 2013-05-30T07:53:56.407 回答
1

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

但请注意,此 C++ 包装器仅适用于 OpenCL 1.1(除了最好的 C++ 包装器之外的任何一个),但nVidia无论如何都不支持 OpenCL 1.2。

于 2013-06-07T13:08:57.723 回答