OpenCL找不到平台?

cde*_*man 4 c++ gpu opencl

我正在尝试将C ++ API用于OpenCL。我已经安装了NVIDIA驱动程序,并且已经过测试,可以运行此处提供的简单矢量加法程序。我可以通过以下gcc调用来编译该程序,并且该程序可以正常运行。

gcc main.c -o vectorAddition -l OpenCL -I/usr/local/cuda-6.5/include
Run Code Online (Sandbox Code Playgroud)

但是,我非常喜欢使用C ++ API,而不是C所需的非常冗长的主机文件。

我从此处从Khronos下载了C ++绑定,并将该cl.hpp文件与其他cl.h文件放在相同的位置。该代码使用一些C ++ 11,因此我可以使用以下代码进行编译:

g++ main.cpp -o vectorAddition_cpp -std=c++11 -l OpenCL -I/usr/local/cuda-6.5/include
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行程序时,出现错误:

clGetPlatformIDs(-1001)
Run Code Online (Sandbox Code Playgroud)

我还尝试了此处提供的示例,该示例给出了更有用的错误消息。

No platforms found. Check OpenCL installation!
Run Code Online (Sandbox Code Playgroud)

提供此错误的特定代码是这样的:

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);
    }
Run Code Online (Sandbox Code Playgroud)

鉴于C实现可以毫无问题地运行,这似乎太奇怪了。我们将不胜感激任何见解。

编辑

C实现实际上未正确运行。每个加法打印为零。选中ret_num_platforms也会返回0。由于某些原因,我的设置无法找到我的GPU。我可能错过了什么?我的安装包括分别通过apt-get和安装的nvidia-340驱动程序和cuda-6.5 .run

cde*_*man 5

我最诚挚的感谢@pasternak帮助我解决了这个问题。为了解决这个问题,我最终需要避免基本上所有的ubuntu apt-get调用进行安装,而只是使用cuda运行文件进行完整安装。这是解决问题的原因。

  1. 清除现有的nvidia和cuda实施(sudo apt-get purge cuda* nvidia-*
  2. CUDA工具包档案中下载cuda-6.5工具
  3. 重新启动电脑
  4. 切换到ttyl(Ctrl-Alt-F1)
  5. 停止X服务器(sudo stop lightdm)
  6. 运行cuda运行文件(sh cuda_6.5.14_linux_64.run
  7. 选择“是”并接受所有默认设置
  8. 需要重启
  9. 切换到ttyl,停止X服务器并再次运行cuda运行文件,然后选择“是”,并为所有内容默认设置(再次包括驱动程序)
  10. 更新PATH为包含/usr/local/cuda-6.5/binLD_LIBRARY_PATH 包含/usr/local/cuda-6.5/lib64
  11. 再次重启
  12. 编译main.c程序(gcc main.c -o vectorAddition -l OpenCL -I/usr/local/cuda-6.5/include
  13. 验证适用于 ./vectorAddition

C ++ API

  1. 下载cl.hpp由Khronos的文件在这里指出的是,这是1.1版本
  2. 将cl.hpp文件/usr/local/cuda-6.5/include/CL与其他cl头文件一起放入。
  3. 编译main.cpp(g++ main.cpp -o vectorAddition_cpp -std=c++11 -l OpenCL -I/usr/local/cuda-6.5/include
  4. 验证它是否有效(./vectorAddition_cpp

两个程序的所有输出均显示正确的输出,以在向量之间进行加法运算。

我个人觉得很有趣,Ubuntu的nvidia驱动程序似乎不能与cuda工具包配合使用。可能仅适用于旧版本,但仍然非常令人意外。