我正在尝试将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。
我最诚挚的感谢@pasternak帮助我解决了这个问题。为了解决这个问题,我最终需要避免基本上所有的ubuntu apt-get调用进行安装,而只是使用cuda运行文件进行完整安装。这是解决问题的原因。
sudo apt-get purge cuda* nvidia-*)sh cuda_6.5.14_linux_64.run)PATH为包含/usr/local/cuda-6.5/bin和LD_LIBRARY_PATH
包含/usr/local/cuda-6.5/lib64gcc main.c -o vectorAddition -l OpenCL -I/usr/local/cuda-6.5/include)./vectorAdditionC ++ API
cl.hpp由Khronos的文件在这里指出的是,这是1.1版本/usr/local/cuda-6.5/include/CL与其他cl头文件一起放入。g++ main.cpp -o vectorAddition_cpp -std=c++11 -l OpenCL -I/usr/local/cuda-6.5/include)./vectorAddition_cpp)两个程序的所有输出均显示正确的输出,以在向量之间进行加法运算。
我个人觉得很有趣,Ubuntu的nvidia驱动程序似乎不能与cuda工具包配合使用。可能仅适用于旧版本,但仍然非常令人意外。
| 归档时间: |
|
| 查看次数: |
7181 次 |
| 最近记录: |