【发布时间】: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 操作系统后所做的所有事情:
- 安装 timeshift(第一次备份)
- 安装 Synaptic(第二次备份)
- 按照以下指南安装 OpenCV 2.4.9:http://www.samontab.com/web/2014/06/installing-opencv-2-4-9-in-ubuntu-14-04-lts/
- 对于 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