Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 尝试使用任何CUDA功能时出现分段错误_Opencv_Cuda - Fatal编程技术网

Opencv 尝试使用任何CUDA功能时出现分段错误

Opencv 尝试使用任何CUDA功能时出现分段错误,opencv,cuda,Opencv,Cuda,工作环境: Ubuntu 14.04和股票开发工具(CMake 3.4.3,GCC 4.8.4.) OpenCV 3.1.0 CUDA 7.5 OpenCV使用以下cmake配置构建并安装OK build,所有“正常”功能均按预期工作 cmake -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WI

工作环境:

  • Ubuntu 14.04和股票开发工具(CMake 3.4.3,GCC 4.8.4.)
  • OpenCV 3.1.0
  • CUDA 7.5
OpenCV使用以下cmake配置构建并安装OK build,所有“正常”功能均按预期工作

cmake -D CMAKE_BUILD_TYPE=DEBUG -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.1.0/modules -D PYTHON_INCLUDE_DIR=$(python-config --prefix)/include/python2.7 -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=ON ..
cmake报告的OpenCV配置:

-- General configuration for OpenCV 3.1.0 =====================================
--   Version control:               d097d6d
-- 
--   Platform:
--     Host:                        Linux 4.2.0-27-generic x86_64
--     CMake:                       3.4.3
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               DEBUG
-- 
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ Compiler:                /usr/bin/c++  (ver 4.8.4)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffast-math -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffast-math -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffast-math -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffast-math -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):
--     Linker flags (Debug):
--     Precompiled headers:         YES
--     Extra dependencies:          /usr/lib/x86_64-linux-gnu/libpng.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libtiff.so /usr/lib/x86_64-linux-gnu/libjasper.so /usr/lib/x86_64-linux-gnu/libjpeg.so gtk-x11-2.0 gdk-x11-2.0 atk-1.0 gio-2.0 pangoft2-1.0 pangocairo-1.0 gdk_pixbuf-2.0 cairo pango-1.0 fontconfig gobject-2.0 freetype gthread-2.0 glib-2.0 dc1394 v4l1 v4l2 avcodec avformat avutil swscale dl m pthread rt cudart nppc nppi npps cublas cufft -L/usr/local/cuda/lib64
--     3rdparty dependencies:       libwebp IlmImf libprotobuf
-- 
--   OpenCV modules:
--     To be built:                 cudev core cudaarithm flann imgproc ml reg surface_matching video cudabgsegm cudafilters cudaimgproc cudawarping dnn fuzzy imgcodecs photo shape videoio cudacodec highgui objdetect plot xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib cudafeatures2d cudalegacy cudaobjdetect cudaoptflow cudastereo datasets rgbd stereo structured_light superres tracking videostab xfeatures2d ximgproc aruco optflow stitching python2
--     Disabled:                    world contrib_world
--     Disabled by dependency:      -
--     Unavailable:                 java python3 ts viz cvv hdf matlab sfm
-- 
--   GUI: 
--     QT:                          NO
--     GTK+ 2.x:                    YES (ver 2.24.23)
--     GThread :                    YES (ver 2.40.2)
--     GtkGlExt:                    NO
--     OpenGL support:              NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.8)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver )
--     WEBP:                        build (ver 0.3.1)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.2.50)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 - 4.0.3)
--     JPEG 2000:                   /usr/lib/x86_64-linux-gnu/libjasper.so (ver 1.900.1)
--     OpenEXR:                     build (ver 1.7.1)
--     GDAL:                        NO
-- 
--   Video I/O:
--     DC1394 1.x:                  NO
--     DC1394 2.x:                  YES (ver 2.2.1)
--     FFMPEG:                      YES
--       codec:                     YES (ver 54.35.0)
--       format:                    YES (ver 54.20.4)
--       util:                      YES (ver 52.3.0)
--       swscale:                   YES (ver 2.1.1)
--       resample:                  NO
--       gentoo-style:              YES
--     GStreamer:                   NO
--     OpenNI:                      NO
--     OpenNI PrimeSensor Modules:  NO
--     OpenNI2:                     NO
--     PvAPI:                       NO
--     GigEVisionSDK:               NO
--     UniCap:                      NO
--     UniCap ucil:                 NO
--     V4L/V4L2:                    Using libv4l1 (ver 1.0.1) / libv4l2 (ver 1.0.1)
--     XIMEA:                       NO
--     Xine:                        NO
--     gPhoto2:                     NO
-- 
--   Parallel framework:            pthreads
-- 
--   Other third-party libraries:
--     Use IPP:                     9.0.1 [9.0.1]
--          at:                     /home/developer/projects/opencv/3rdparty/ippicv/unpack/ippicv_lnx
--     Use IPP Async:               NO
--     Use VA:                      NO
--     Use Intel VA-API/OpenCL:     NO
--     Use Eigen:                   NO
--     Use Cuda:                    YES (ver 7.5)
--     Use OpenCL:                  YES
--     Use custom HAL:              NO
-- 
--   NVIDIA CUDA
--     Use CUFFT:                   YES
--     Use CUBLAS:                  YES
--     USE NVCUVID:                 NO
--     NVIDIA GPU arch:             20 21 30 35
--     NVIDIA PTX archs:            30
--     Use fast math:               YES
-- 
--   OpenCL:
--     Version:                     dynamic
--     Include path:                /home/developer/projects/opencv/3rdparty/include/opencl/1.2
--     Use AMDFFT:                  NO
--     Use AMDBLAS:                 NO
-- 
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.6)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython2.7.so (ver 2.7.6)
--     numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.8.2)
--     packages path:               lib/python2.7/dist-packages
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3.4 (ver 3.4.3)
-- 
--   Python (for build):            /usr/bin/python2.7
-- 
--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Matlab:                        Matlab not found or implicitly disabled
-- 
--   Tests and samples:
--     Tests:                       NO
--     Performance tests:           NO
--     C/C++ Examples:              YES
-- 
--   Install path:                  /usr/local
-- 
--   cvconfig.h is in:              /home/developer/projects/opencv/build
-- -----------------------------------------------------------------
但是任何调用opencv gpu加速CUDA功能的尝试都会导致分段错误。samples/gpu中的任何示例项目都无法正常运行。似乎非平凡的CUDA函数在初始函数调用中出现seg fault,但是观察到一些平凡的CUDA函数,如getCudaEnabledDeviceCount()和printShortCudaDeviceInfo()似乎执行OK并返回合理的数据,但是后续的opencv调用(不一定是CUDA函数)随后将出现seg故障

我尝试过从/usr/local/CUDA-7.5/samples(1_实用程序/deviceQuery,1_实用程序/bandwithTest)构建和运行两个CUDA库示例,它们看起来不错

显示问题的简单程序:

生成文件

CFLAGS = `pkg-config --cflags opencv`
LIBS = `pkg-config --libs opencv`

fail : fail.cpp
        g++ $(CFLAGS) $< $(LIBS) -o $@
程序输出:

got to here #1
Segmentation fault (core dumped)
注释掉getCudaEnabledDeviceCount()语句,它将按预期运行到完成

有点像opencv和CUDA库之间的调用约定不匹配或类似的东西,但会认为这应该“正常工作”

[编辑]

启用核心转储后,在gdb中获取以下调用堆栈

developer@odin:~/projects/temp/opencv_CUDA$ gdb -c core -e fail
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

warning: exec file is newer than core file.
[New LWP 28690]
[New LWP 28691]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./fail'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
66  ../nptl/pthread_mutex_lock.c: No such file or directory.
(gdb) bt
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
#1  0x00007f9e85782008 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#2  0x00007f9e85836671 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#3  0x00007f9e858367e5 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#4  0x00007f9e85787cb4 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#5  0x00007f9e857894e7 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#6  0x00007f9e8575cc66 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#7  0x00007f9e8565bf3d in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#8  0x00007f9e8565bed8 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#9  0x00007f9e85fe2022 in ?? () from /usr/local/cuda/lib64/libOpenCL.so
#10 0x00007f9e85fe3d42 in ?? () from /usr/local/cuda/lib64/libOpenCL.so
#11 0x00007f9e85fe34d0 in clGetPlatformIDs () from /usr/local/cuda/lib64/libOpenCL.so
#12 0x00007f9e895cea83 in (anonymous namespace)::opencl_fn3<58, int, unsigned int, _cl_platform_id**, unsigned int*>::switch_fn (p1=0, p2=0x0, 
p3=0x7ffe56410aac) at /home/developer/projects/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:127
#13 0x00007f9e8965c452 in cv::ocl::haveOpenCL () at /home/developer/projects/opencv/modules/core/src/ocl.cpp:1466
#14 0x00007f9e8965c4af in cv::ocl::useOpenCL () at /home/developer/projects/opencv/modules/core/src/ocl.cpp:1487
#15 0x00007f9e896a6962 in cv::transpose (_src=..., _dst=...) at /home/developer/projects/opencv/modules/core/src/matrix.cpp:3235
#16 0x0000000000400f3c in ?? ()
#17 0x00007ffe56410e88 in ?? ()
#18 0x0000000156410df8 in ?? ()
#19 0x00007ffe56410dd0 in ?? ()
#20 0x000000018a755d48 in ?? ()
#21 0x0000000001010000 in ?? ()
#22 0x00007ffe56410cd0 in ?? ()
#23 0x0000000000000000 in ?? ()
developer@odin:~/projects/temp/opencv\u CUDA$gdb-c core-e失败
GNU gdb(Ubuntu 7.7.1-0ubuntu5~14.04.2)7.7.1
版权所有(C)2014免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“x86_64-linux-gnu”。
键入“显示配置”以获取配置详细信息。
有关错误报告说明,请参阅:
.
在线查找GDB手册和其他文档资源,网址为:
.
要获得帮助,请键入“帮助”。
键入“apropos word”搜索与“word”相关的命令。
警告:exec文件比核心文件新。
[新LWP 28690]
[新LWP 28691]
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/x86_64-linux-gnu/libthread_db.so.1”。
核心是由“./fail”生成的。
程序以信号SIGSEGV终止,分段故障。
#位于../nptl/pthread_mutex_lock.c:66的0__GI__pthread_mutex_lock(mutex=0x0)
66../nptl/pthread_mutex_lock.c:没有这样的文件或目录。
(gdb)英国电信
#位于../nptl/pthread_mutex_lock.c:66的0__GI__pthread_mutex_lock(mutex=0x0)
#1 0x00007f9e85782008英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#2 0x00007f9e85836671英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#3 0x00007f9e858367e5英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#4 0x00007f9e85787cb4英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#5 0x00007f9e857894e7英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#6 0x00007f9e8575cc66英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#7 0x00007f9e8565bf3d英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#8 0x00007F9E85658英寸??()来自/usr/lib/x86_64-linux-gnu/libnvidia opencl.so.1
#9 0x00007f9e85fe2022英寸??()来自/usr/local/cuda/lib64/libOpenCL.so
#10 0x00007f9e85fe3d42英寸??()来自/usr/local/cuda/lib64/libOpenCL.so
#来自/usr/local/cuda/lib64/libOpenCL.so的clGetPlatformIDs()中的11 0x00007f9e85fe34d0
#(匿名命名空间)中的12 0x00007f9e895cea83::opencl_fn3::switch_fn(p1=0,p2=0x0,
p3=0x7ffe56410aac)at/home/developer/projects/opencv/modules/core/src/opencl/runtime/autogenerated/opencl\u core\u impl.hpp:127
#13 0x00007f9e8965c452位于/home/developer/projects/opencv/modules/core/src/ocl.cpp:1466的cv::ocl::haveOpenCL()中
#14 0x00007f9e8965c4af位于/home/developer/projects/opencv/modules/core/src/ocl.cpp:1487的cv::ocl::useOpenCL()中
#15 0x00007f9e896a6962在/home/developer/projects/opencv/modules/core/src/matrix.cpp:3235的cv::transpose(_src=…,_dst=…)中
#16 0x0000000000400f3c英寸??()
#17 0x00007ffe56410e88英寸??()
#18 0x0000000156410df8英寸??()
#19 0x00007ffe56410dd0英寸??()
#20 0x000000018a755d48英寸??()
#21 0x000000000010000英寸??()
#22 0x00007ffe56410cd0英寸??()
#23 0x0000000000000000英寸??()

发现了一些匹配到上面的调用栈在Web上,这表明根问题是在英伟达驱动程序中的一个bug。从361.93升级到367.57(我的GeForce GTX 970卡的当前驱动程序)似乎已解决问题

developer@odin:~/projects/temp/opencv_CUDA$ gdb -c core -e fail
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

warning: exec file is newer than core file.
[New LWP 28690]
[New LWP 28691]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `./fail'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
66  ../nptl/pthread_mutex_lock.c: No such file or directory.
(gdb) bt
#0  __GI___pthread_mutex_lock (mutex=0x0) at ../nptl/pthread_mutex_lock.c:66
#1  0x00007f9e85782008 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#2  0x00007f9e85836671 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#3  0x00007f9e858367e5 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#4  0x00007f9e85787cb4 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#5  0x00007f9e857894e7 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#6  0x00007f9e8575cc66 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#7  0x00007f9e8565bf3d in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#8  0x00007f9e8565bed8 in ?? () from /usr/lib/x86_64-linux-gnu/libnvidia-opencl.so.1
#9  0x00007f9e85fe2022 in ?? () from /usr/local/cuda/lib64/libOpenCL.so
#10 0x00007f9e85fe3d42 in ?? () from /usr/local/cuda/lib64/libOpenCL.so
#11 0x00007f9e85fe34d0 in clGetPlatformIDs () from /usr/local/cuda/lib64/libOpenCL.so
#12 0x00007f9e895cea83 in (anonymous namespace)::opencl_fn3<58, int, unsigned int, _cl_platform_id**, unsigned int*>::switch_fn (p1=0, p2=0x0, 
p3=0x7ffe56410aac) at /home/developer/projects/opencv/modules/core/src/opencl/runtime/autogenerated/opencl_core_impl.hpp:127
#13 0x00007f9e8965c452 in cv::ocl::haveOpenCL () at /home/developer/projects/opencv/modules/core/src/ocl.cpp:1466
#14 0x00007f9e8965c4af in cv::ocl::useOpenCL () at /home/developer/projects/opencv/modules/core/src/ocl.cpp:1487
#15 0x00007f9e896a6962 in cv::transpose (_src=..., _dst=...) at /home/developer/projects/opencv/modules/core/src/matrix.cpp:3235
#16 0x0000000000400f3c in ?? ()
#17 0x00007ffe56410e88 in ?? ()
#18 0x0000000156410df8 in ?? ()
#19 0x00007ffe56410dd0 in ?? ()
#20 0x000000018a755d48 in ?? ()
#21 0x0000000001010000 in ?? ()
#22 0x00007ffe56410cd0 in ?? ()
#23 0x0000000000000000 in ?? ()