前些天配置了一台GPU机器,装了opencl,也装了OpenCV,OpenCV安装的时候使用了WITH_OPENCV=ON选项。
后面在准备数据库的使用,使用了caffe自带的conver_imageset工具,总是出现core dump。由于caffe是release编译的,gdb不出什么信息,显示错误在LMDB中:
感觉不太可能是LMDB的问题,于是编译了debug版本的conver_imageset-d,gdb core出来的信息是:
这回可以确定问题出在OpenCL,cv::ocl::haveOpenCL() 函数中。搜索了一下,确实有人在调用这个函数的时候收不到响应,但也没有帖子能说明为什么。于是我想是否是OpenCL没装好,于是打算重装OpenCL-》重装OpenCV-》最后重装caffe(鉴于依赖关系)。
当重装OpenCL的时候,cuda的相应项都被自动删除了,并换上了其他版本,reboot之后使用nvidia-smi就一直hang住没有响应。
看来保留opencl功能还需要进一步探索,而此机器上的opencv又急需使用,于是只能弃车保帅,使用如下选项编译了一版opencv,放弃了opencl。
cmake -DWITH_OPENCL=OFF -DWITH_CUDA=ON -D CMAKE_BUILD_TYPE=RELEASE -D WITH_FFMPEG=ON -D WITH_TBB=ON -D OPENCV_EXTRA_MODULES_PATH= ~/opencv_contrib/modules -D CMAKE_INSTALL_PREFIX= /usr/local ..
然后一切都work了,就是速度比我CPU的mac上还慢一点。