我在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 / gouser / OpenCV / opencv-2.4.6.1 / modules / cell / src / initialization.cpp:668:错误:(-217)函数openCLGetKernelFromSource中的CL_INVALID_BINARY
答案 0 :(得分:0)
来自OpenCL标准:
CL_INVALID_BINARY如果使用clCreateWithProgramWithBinary创建程序,并且device_list中列出的设备没有加载有效的程序二进制文件。
但是您的错误输出表明该程序是从源代码构建的。早期的nvidia sdk和驱动程序版本似乎存在一个错误。因为你有一张漂亮的旧卡,假设你的驾驶员不是更新的。尝试使用相应的驱动程序安装最新的nvidia cuda工具包。
答案 1 :(得分:0)
遗憾的是,对于NVidia,你会遇到一些源代码编译错误,例如未定义的函数。
调试的最佳方法是安装支持CPU(AMD或Intel)的OpenCL SDK并在那里试用:错误信息应该更好。
的Seb
答案 2 :(得分:0)
用Quadro 600主板取代GeForce 8600 GT解决了这个问题。我对OpenCL很陌生,但事实证明GeForce 8600GT设备不支持DOUBLE_SUPPORT硬件扩展以及原子操作,这对于面部检测样本中使用的一些OpenCL内核至关重要。希望这有助于其他人!