【发布时间】:2015-03-20 16:35:35
【问题描述】:
我正在尝试将 C++ API 用于 OpenCL。我已经安装了我的 NVIDIA 驱动程序并且我已经测试我可以运行提供的简单矢量添加程序here。我可以用下面的 gcc 调用编译这个程序,程序运行没有问题。
gcc main.c -o vectorAddition -l OpenCL -I/usr/local/cuda-6.5/include
但是,我更喜欢使用 C++ API,而不是 C 所需的非常冗长的主机文件。
我从 here 下载了 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
但是当我尝试运行程序时出现错误:
clGetPlatformIDs(-1001)
我还尝试了here 提供的示例,它提供了更有用的错误消息。
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 实现运行没有问题,这看起来很奇怪。任何见解将不胜感激。
编辑
C 实现实际上没有正确运行。每个加法都打印为零。检查ret_num_platforms 也返回0。由于某种原因,我的设置无法找到我的GPU。我可能错过了什么?我的安装包括分别通过apt-get 和.run 文件安装的nvidia-340 驱动程序和cuda-6.5。
【问题讨论】: