OpenCL 找不到平台?

2023-12-28

我正在尝试将 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分别归档。


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

  1. 清除现有的 nvidia 和 cuda 实现(sudo apt-get purge cuda* nvidia-*)
  2. 从以下位置下载 cuda-6.5 工具包CUDA 工具包存档 https://developer.nvidia.com/cuda-toolkit-archive
  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. Update PATH包括/usr/local/cuda-6.5/bin and LD_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 的文件here https://www.khronos.org/registry/cl/api/1.1/cl.hpp注意到它是版本 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 工具包不能很好地配合。可能只是针对旧版本,但仍然非常出乎意料。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCL 找不到平台? 的相关文章

随机推荐

  • 如何裁剪两幅图像的差异?

    我想拍这两张照片 基本上产生这个 我已经尽可能使用compare with fuzz定义已更改的部分 是否可以获取该区域的边界框并裁剪第二帧 我会按照这些思路做一些事情 convert a jpg b jpg colorspace gray
  • 附近连接 2.0:何时可以同时发布广告/发现?

    我目前正在尝试使用 P2P CLUSTER 策略同时进行广告和发现 我相信这应该有效 因为可用的文档 https developers google com nearby connections strategies表示 P2P CLUST
  • Visual Studio Code 中的 C++ IntelliSense 无法识别 C++ STL

    我在我的 Linux 笔记本电脑上使用 Visual Studio Code 我刚刚写了一个像这样的简单程序main cpp include
  • 警告:scalac:有一个弃用警告;使用 -deprecation 重新运行以获取详细信息

    请注意消息输出中的这一点 警告 scalac 有一个弃用警告 使用 deprecation 重新运行以获取详细信息 这是什么意思 我应该重新运行什么 我尝试重建和同步项目 但警告信息仍然存在 从命令行找到了解决方案 sbt set scal
  • 使用 wix 安装较新版本的 msi 时从程序和功能中删除程序

    我正在使用 WIX 创建安装程序 msi 当我安装较新版本的应用程序时 我的旧应用程序已安装在计算机上 然后它会删除旧版本的所有文件和程序集并放置较新版本的文件和程序集 但在控制面板的程序和功能中显示旧版本和新版本 我正在使用以下代码进行升
  • jQuery:检查下一个元素是否存在

    有没有办法检查下一个元素是否存在 检查我的代码 if people making of mask ul li current next li null alert Exists else alert Dont exists 我究竟做错了什么
  • 在 C++ 中通过 OpenCV 以非常小的步长平移图像

    我正在以非常小的步长进行图像翻译 例如按 1 1024 在列中翻译 考虑我有以下图像 我在 opencv 中使用 Mat 创建图像 类型为 CV 64F 255 0 0 0 现在 通过在 1 1024 列中进行翻译 我期望得到以下结果 25
  • Eclipse 不使用添加类路径变量中的 jar

    我添加了一个指向 jar 缓存的类路径变量 通过 eclipse 的构建路径 虽然此文件夹显示在 Eclipse 的文件夹视图中 但由于某种原因无法识别其中包含的 jar 例如 当我导入缓存中的 jar 中存在的类 以及添加的类路径变量 时
  • div 内文本中的新行

    当我放置通过 ajax 调用加载的文本时 我遇到了一个小问题 我从文本区域获取内容并将其存储在数据库中 当我想在 div 中显示文本时 它不尊重新行 因此所有文本都是连续的 下面的代码展示了一个小例子 function buttonA cl
  • Eclipse 中“现有连接被远程主机强制关闭”

    我一直在使用 Eclipse 构建 Android 应用程序 并在我的 HTC One X 上测试它们 我从 HTC Sync 安装了驱动程序 并且 Eclipse 是最新的 最近 此连接完全停止工作 计算机 运行 Windows 8 Pr
  • 禁用和启用后退按钮

    在应用程序中 我正在使用 GPS 查找用户位置 在异步预执行方法中 我正在显示一个吐司 我希望在显示吐司时应禁用后退按钮 找到位置后 我想在执行后启用后退按钮 禁用我使用过的后退按钮 但这不起作用 OnKeyListener mainScr
  • 使用 JWT 保护 WebAPI

    我正在尝试编写一个移动应用程序 该应用程序将从基于 webapi 的站点获取数据 该站点应通过 ACS 进行保护 因为可能有多个身份提供商 我的移动应用程序当前正在查询以下网址获取 IP 列表 然后 我允许用户选择 IP 然后使用 Web
  • 错误:R 无法连接到 MySQL

    我昨天将MySQL更新到最新版本8 0 11 并尝试使用RMySQL连接MySQL 但它不起作用 我找不到任何解决方案 My code library RMySQL con lt dbConnect MySQL user hello pas
  • 如何替换va_list中的值?

    我想做一些关于 va list 的练习 这是我的代码 int myscanf char fmt va list ap va start ap fmt vfscanf stdin fmt ap va end ap int main int a
  • 通过 iPhone 应用程序在 Facebook“提要”上发布图片

    我正在使用 ASIHTTPRequest 来处理 Facebook 图形 API 这是我最近在动态上发布图片的一次 所以如果我有一个 ASIFormDataRequest request ASIFormDataRequest request
  • 函数式语言中折叠/归约的实际使用

    Fold aka reduce 被认为是一个非常重要的高阶函数 Map可以表示为fold see here http en wikipedia org wiki Fold 28higher order function 29 List fo
  • 如何在调用下一个回调函数之前添加延迟?

    我正在尝试制作一个 javascript 横幅 我在一个 div 中有 3 个图像 id 为 img1 img2 img3
  • 模板非类型参数

    14 3 2 非类型 非模板模板参数的模板参数应为以下之一 指定具有静态存储持续时间的对象的地址的常量表达式 5 19 外部或内部链接或具有外部或内部链接的功能 在下面显示的代码中 我无法理解为什么不允许 name2 和 name3 作为非
  • Node.js - 将 https.request() 与内部 CA 一起使用

    我该向谁获取 https request 来信任我的内部签名服务器证书 以下是我在 v0 10 25 中运行的代码的快速示例 var options hostname encrypted mydomain local port 443 pa
  • OpenCL 找不到平台?

    我正在尝试将 C API 用于 OpenCL 我已经安装了 NVIDIA 驱动程序 并且已经测试可以运行提供的简单向量加法程序here http www thebigblob com getting started with opencl