我正在尝试将 C++ API 用于 OpenCL。我已经安装了 NVIDIA 驱动程序,并且已经测试可以运行提供的简单向量加法程序here http://www.thebigblob.com/getting-started-with-opencl-and-gpu-computing/。我可以使用以下 gcc 调用编译该程序,并且该程序运行没有问题。
gcc main.c -o vectorAddition -l OpenCL -I/usr/local/cuda-6.5/include
然而,我非常喜欢使用 C++ API,而不是 C 所需的非常详细的主机文件。
我从 Khronos 下载了 C++ 绑定here https://www.khronos.org/registry/cl/api/1.1/cl.hpp并放置了cl.hpp
文件与我的其他文件位于同一位置cl.h
文件。该代码使用了一些 C++11,因此我可以使用以下命令编译代码:
g++ main.cpp -o vectorAddition_cpp -std=c++11 -l OpenCL -I/usr/local/cuda-6.5/include
但是当我尝试运行该程序时,出现错误:
clGetPlatformIDs(-1001)
我也尝试了提供的示例here http://simpleopencl.blogspot.com/2013/06/tutorial-simple-start-with-opencl-and-c.html这也给出了更有用的错误消息。
No platforms found. Check OpenCL installation!
提供此错误的特定代码是这样的:
std::vector<cl::Platform> all_platforms;
cl::Platform::get(&all_platforms);
if(all_platforms.size()==0){
std::cout<<" No platforms found. Check OpenCL installation!\n";
exit(1);
}
考虑到 C 实现运行没有问题,这看起来很奇怪。任何见解将不胜感激。
EDIT
C 实现实际上没有正确运行。每次加法都打印为零。检查ret_num_platforms
也返回 0。由于某种原因,我的设置无法找到我的 GPU。我可能错过了什么?我的安装包括 nvidia-340 驱动程序和通过安装的 cuda-6.5apt-get
和.run
分别归档。