【问题标题】:OpenCV Error: Gpu API call (-1001) in initializeOpenCLDevicesOpenCV 错误:initializeOpenCLDevices 中的 Gpu API 调用 (-1001)
【发布时间】:2015-09-01 20:24:01
【问题描述】:

几周前,我在 Ubuntu 14.04 LTS 下使用 C++、Opencv 2.4.9 和 OpenCL 构建了一个计算机视觉程序。它运行良好,然后上周我尝试使用新发布的 OpenCV 3.0 更新一些功能,但由于某些 API 发生了变化而失败,所以我卸载了 Opencv 3.0 并重新安装了 OpenCV 2.4.9。从那时起,每当调用 Opencv 的 ocl 模块中的函数时,就会出现“OpenCV Error: Gpu API call (-1001) in initializeOpenCLDevices”的错误。

显示的整个错误是:

OpenCV 错误:initializeOpenCLDevices 中的 Gpu API 调用 (-1001),文件 /home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 455 行 OpenCV 错误:getContext 中的未知错误代码 -221(OpenCL 不可用),文件 /home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 677 行 在抛出 'cv::Exception' 的实例后调用终止 什么():/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp:677:错误:(-221)OpenCL在getContext函数中不可用

然后我重新安装了整个 Ubuntu 14.04 操作系统和驱动程序,出现同样的错误。

下面列出了我在重新安装 Ubuntu 14.04 操作系统后所做的所有事情:

  1. 安装 timeshift(第一次备份)
  2. 安装 Synaptic(第二次备份)
  3. 按照以下指南安装 OpenCV 2.4.9:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/
  4. 对于 OpenCL,由于我使用的是 nVidia GPU,因此我使用以下命令安装了 OpenCL:
    sudo apt-get install nvidia-opencl-dev

我使用的计算机是带有 Intel Core i7 vPro 和 nVIDIA Quadro K4100M GPU 的 Dell Precision M6800 移动工作站。

更多信息和关注点:

1.我认为核心问题是OpenCV的ocl模块由于某种原因无法识别nVIDIA GPU。但我不确定这是 ocl 模块的问题还是 nVIDIA GPU 及其驱动程序的问题。有没有简单的判断方法?

1.我的项目包含使用OpenCV的ocl加速模块的函数和我自己的OpenCL函数。已经在实验室证明它们可以在带有 AMD GPU 的台式机上成功运行,如前所述,它们上周也在当前的移动工作站上成功运行。

2.在我尝试使用新发布的OpenCV 3优化代码之前,Ubuntu软件更新程序出现错误,该错误是关于nvidia 331更新问题,已多次报告为错误。由于我忽略了错误并直接安装了 OpenCV 3,因此我无法判断之前指示的 OpenCV 错误是由安装 OpenCV 3 还是 nvidia 331 更新问题引起的。是驱动冲突还是什么的?在项目运行良好之前,我不记得驱动程序的版本是 331 还是 340 或其他版本。

3.我使用 CmakeList 来构建项目,输入 cmake 。命令,它清楚地写着 Found OpenCL: /usr/lib/x86_64-linux-gnu/libOpenCL.so 还有 nVIDIA icd 在 etc/OpenCL/vendors/nvidia.icd 里面有 libnvidia-opencl.so.1。

4.我对nVIDIA GPU所做的只是使用上面的命令为其安装OpenCL,我认为该命令还包括安装与nVIDIA GPU相关的其他软件包。从突触显示,安装了以下软件包:

nvidia-331-uvm NVIDIA 统一内存内核模块

nvidia-settings 用于配置 NVIDIA 图形驱动程序的工具

nvidia-opencl-icd-331 NVIDIA OpenCL ICD

libcuda1-331 NVIDIA CUDA 运行时库

nvidia-opencl-dev NVIDIA OpenCL 开发文件

nvidia-libopencl1-331 NVIDIA OpenCL 驱动程序和 ICD 加载程序库

nvidia-331 NVIDIA 二进制驱动程序 - 版本 331.113

是否意味着所有相关的包包括GPU驱动、CUDA和OpenCL都安装了?我应该从 nVIDIA 安装其他模块或工具吗?

总之,我很困惑,在我更新 Opencv 3 之前,Opencv 的 ocl 模块运行良好,现在即使我尝试重新安装所有内容并尝试恢复旧环境,它也不起作用。

有什么建议吗?

谢谢大家。

编辑:有人建议我应该卸载 nVIDIA 的 openCL 库,我这样做了,错误变为: OpenCV 错误:opencl_check_fn 中的未知错误代码 -6(OpenCL 函数不可用:[clGetPlatformIDs]),文件 /home/mmcom/opencv-2.4.9/modules/ocl/src/cl_runtime/cl_runtime.cpp,第 83 行 OpenCV 错误:getContext 中的未知错误代码 -221(OpenCL 不可用),文件 /home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp,第 677 行 在抛出 'cv::Exception' 的实例后调用终止 什么():/home/mmcom/opencv-2.4.9/modules/ocl/src/cl_context.cpp:677:错误:(-221)OpenCL在getContext函数中不可用

【问题讨论】:

    标签: c++ opencv ubuntu opencl nvidia


    【解决方案1】:

    我今天在格式化后遇到了完全相同的问题。我尝试运行的任何 OpenCV-OpenCL 代码都因您在问题中给出的错误而失败。为我解决的问题(信不信由你)只是以 root 身份一次性运行这样的可执行文件。此后所有其他项目中的 OpenCL 功能都恢复正常。

    我是从this答案的最后一句中得到的。但不确定这些问题的相关性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2015-12-26
      • 2015-02-08
      • 2020-02-24
      • 1970-01-01
      相关资源
      最近更新 更多