0

我在 Ubuntu 12.04 上使用 opencl 加速运行人脸检测示例,并在尝试为 NVIDIA GeForce 8600 GT 显卡的积分 cols 构建内核时看到运行时错误。

构建源:./integral_cols_D4_GeForce 8600 GT .clb clCreateProgramWithSource status=0 source= all_build_options= clBuildProgram status=-42 OpenCV 错误:openCLGetKernelFromSource 中的 Gpu API 调用 (CL_INVALID_BINARY),文件 /home/ovuser/OpenCV/opencv-2.4.6.1/modules /ocl/src/initialization.cpp,第 668 行终止在抛出 'cv::Exception' what() 的实例后调用:/home/ovuser/OpenCV/opencv-2.4.6.1/modules/ocl/src/initialization.cpp :668:错误:(-217)函数openCLGetKernelFromSource中的CL_INVALID_BINARY

4

3 回答 3

0

来自 OpenCL 标准:

CL_INVALID_BINARY 如果程序是使用 clCreateWithProgramWithBinary 创建的,并且 device_list 中列出的设备没有加载有效的程序二进制文件。

但是,您的错误输出表明该程序是从源代码构建的。早期的 nvidia sdk 和驱动程序版本中似乎存在错误。因为你有一张很旧的卡,所以假设你的驱动程序不是新的。尝试安装最新的 nvidia cuda 工具包和相应的驱动程序。

于 2013-10-09T04:49:19.493 回答
0

可悲的是,使用 NVidia,您会因某些源代码编译错误(例如未定义的函数)而出现此错误。

最好的调试方法是安装一个支持 CPU(AMD 或 Intel)的 OpenCL SDK 并在那里尝试:错误消息应该在那里更好。

塞布

于 2013-10-09T11:16:32.477 回答
0

用 Quadro 600 主板替换 GeForce 8600 GT 解决了这个问题。我对 OpenCL 很陌生,但事实证明 GeForce 8600GT 设备不支持 DOUBLE_SUPPORT 硬件扩展以及对于面部检测示例中使用的一些 OpenCL 内核必不可少的原子操作。希望这对其他人有帮助!

于 2013-10-10T18:54:54.783 回答