-
-
Notifications
You must be signed in to change notification settings - Fork 56.5k
OpenCL: UMat deallocation error when using FP16 #18457
Description
System information (version)
- OpenCV => recent master ( 0dc28d3 ), message is different but run time exception has been capture on 3.4 branch.
- Operating System / Platform => Firefly RK3399, ODROID-N2, ODROID-N2+ (All Aarch64)
- Compiler => 5.4.0, 7.5.0, 9.3.0
Detailed description
When running opencv_perf_dnn , deallocation error happens
[ RUN ] Conv.conv/87, where GetParam() = (GFLOPS=1.006, K=[3 x 3], IN={1, 1024, 10, 10}, OCN=546, PM=SAME, BIAS, OCV/OCL)
IN=400 Kb [ 1 1024 10 10 ] OUT=214 Kb [ 1 546 10 10 ] Weights(parameters): 19659 Kb MFLOPS=1006.44
[ PERFSTAT ] (samples=10 mean=553.22 median=553.08 min=550.59 stddev=1.42 (0.3%))
[ OK ] Conv.conv/87 (7361 ms)
[ RUN ] Conv.conv/88, where GetParam() = (GFLOPS=1.006, K=[3 x 3], IN={1, 1024, 10, 10}, OCN=546, PM=SAME, BIAS, OCV/OCL_FP16)
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.0-pre) /opencv/modules/core/src/ocl.cpp:5392: error: (-215:Assertion failed) u->refcount == 0 && "UMat deallocation error: some derived Mat is still alive" in function 'deallocate'
Aborted
This only happens when enabling FP16 on iGPU with OPENCV_DNN_OPENCL_ALLOW_ALL_DEVICES="true"
The direct cause is this clEnqueueMapBuffer returns failure (-14)
opencv/modules/core/src/ocl.cpp
Lines 5641 to 5644 in 0dc28d3
| u->data = (uchar*)clEnqueueMapBuffer(q, (cl_mem)u->handle, CL_TRUE, | |
| (CL_MAP_READ | CL_MAP_WRITE), | |
| 0, u->size, 0, 0, 0, &retval); | |
| CV_OCL_DBG_CHECK_RESULT(retval, cv::format("clEnqueueMapBuffer(handle=%p, sz=%lld) => %p", (void*)u->handle, (long long int)u->size, u->data).c_str()); |
OpenCV(OpenCL:-14): clEnqueueMapBuffer(handle=0x559679a400, sz=109200) => (nil)
OpenCV(OpenCL:-14): clEnqueueReadBuffer(q, handle=0x559679a400, CL_TRUE, 0, sz=109200, data=0x5596b99000, 0, 0, 0)
Curious thing is that FP32 version (Conv.conv/87) passes but not the FP16 version (Conv.conv/88).
It's clear that it's not the memory size, since FP16 consumes less memory than FP32.
I traced a lot using gdb.
Here's a back trace when run time exception was thrown.
#0 0x0000007fb719cfb4 in __cxa_throw () from /usr/lib/aarch64-linux-gnu/libstdc++.so.6
#1 0x0000007fb747e4a8 in cv::error (exc=...) at /opencv-fork/modules/core/src/system.cpp:1136
#2 0x0000007fb747f190 in cv::error (_code=_code@entry=-220, _err="OpenCL error CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST (-14) during call: clEnqueueReadBuffer(q, handle=0x555580e400, CL_TRUE, 0, sz=109200, data=0x5555c0fd00, 0, 0, 0)", _func=_func@entry=0x7fb74df198 <cv::ocl::OpenCLAllocator::map(cv::UMatData*, cv::AccessFlag) const::__func__> "map", _file=_file@entry=0x7fb74dbba8 "/opencv-fork/modules/core/src/ocl.cpp", _line=_line@entry=5674) at /opencv-fork/modules/core/src/system.cpp:1148
#3 0x0000007fb7434540 in cv::ocl::OpenCLAllocator::map (this=<optimized out>, u=0x5555bc84c0, accessFlags=<optimized out>) at /opencv-fork/modules/core/src/ocl.cpp:5673
#4 0x0000007fb748cf28 in cv::UMat::getMat (this=this@entry=0x7fffffd538, accessFlags=cv::ACCESS_RW, accessFlags@entry=cv::ACCESS_WRITE) at /opencv-fork/modules/core/src/umatrix.cpp:827
#5 0x0000007fb748e33c in cv::UMat::setTo (this=this@entry=0x7fffffd538, _value=..., _mask=...) at /opencv-fork/modules/core/src/umatrix.cpp:1098
#6 0x0000007fb748ed28 in cv::UMat::operator= (this=this@entry=0x7fffffd538, s=...) at /opencv-fork/modules/core/src/umatrix.cpp:1105
#7 0x0000007fb748fa4c in cv::UMat::UMat (_usageFlags=cv::USAGE_DEFAULT, _s=..., _type=<optimized out>, _sz=<optimized out>, _dims=<optimized out>, this=0x7fffffd538) at /opencv-fork/modules/core/include/opencv2/core/mat.inl.hpp:3667
#8 cv::UMat::zeros (ndims=ndims@entry=4, sz=sz@entry=0x7fffffce98, type=<optimized out>) at /opencv-fork/modules/core/src/umatrix.cpp:1210
#9 0x0000007fb7dd8414 in cv::dnn::ocl4dnn::OCL4DNNConvSpatial<float>::verifyResult (this=this@entry=0x55558f8fa0, bottom=..., top=..., weight=..., bias=..., numImages=numImages@entry=1, config=config@entry=0x5555bba910, verifyTop=...) at /opencv-fork/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp:1256
#10 0x0000007fb7ddf6b4 in cv::dnn::ocl4dnn::OCL4DNNConvSpatial<float>::useFirstAvailable (this=this@entry=0x55558f8fa0, bottom=..., top=..., weight=..., bias=..., numImages=1, verifyTop=...) at /opencv-fork/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp:1739
#11 0x0000007fb7ddfbb0 in cv::dnn::ocl4dnn::OCL4DNNConvSpatial<float>::prepareKernel (this=this@entry=0x55558f8fa0, bottom=..., top=..., weight=..., bias=..., numImages=numImages@entry=1) at /opencv-fork/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp:1964
#12 0x0000007fb7ddfd10 in cv::dnn::ocl4dnn::OCL4DNNConvSpatial<float>::Forward (this=this@entry=0x55558f8fa0, bottom=..., bottom2=..., weight=..., bias=..., top=..., numImages=numImages@entry=1) at /opencv-fork/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp:597
#13 0x0000007fb7d429d4 in cv::dnn::ConvolutionLayerImpl::forward_ocl (this=this@entry=0x55557cdfd0, inps=..., outs=..., internals=...) at /opencv-fork/modules/dnn/src/layers/convolution_layer.cpp:1685
#14 0x0000007fb7d44c04 in cv::dnn::ConvolutionLayerImpl::forward (this=0x55557cdfd0, inputs_arr=..., outputs_arr=..., internals_arr=...) at /opencv-fork/modules/dnn/src/layers/convolution_layer.cpp:1701
#15 0x0000007fb7d10ccc in cv::dnn::dnn4_v20200908::Net::Impl::forwardLayer (this=this@entry=0x5555767b10, ld=...) at /opencv-fork/modules/dnn/src/dnn.cpp:3131
#16 0x0000007fb7d11ffc in cv::dnn::dnn4_v20200908::Net::Impl::forwardToLayer (this=this@entry=0x5555767b10, ld=..., clearFlags=clearFlags@entry=true) at /opencv-fork/modules/dnn/src/dnn.cpp:3357
#17 0x0000007fb7d29bbc in cv::dnn::dnn4_v20200908::Net::forward (this=this@entry=0x7fffffeb48, outputName="") at /opencv-fork/modules/dnn/src/dnn.cpp:3943
#18 0x0000005555576128 in opencv_test::Conv_conv_Test::PerfTestBody (this=0x5555700330) at /opencv-fork/modules/dnn/perf/perf_convolution.cpp:646
#19 0x00000055555c2340 in perf::TestBase::RunPerfTestBody (this=this@entry=0x5555700330) at /opencv-fork/modules/ts/src/ts_perf.cpp:2000
#20 0x000000555556ebc4 in opencv_test::Conv_conv_Test::TestBody (this=this@entry=0x5555700330) at /opencv-fork/modules/dnn/perf/perf_convolution.cpp:580
#21 0x00000055555c04d4 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void> (location=0x55555d3330 "the test body", method=<optimized out>, object=0x5555700330) at /opencv-fork/modules/ts/src/ts_gtest.cpp:3917
#22 testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void> (object=object@entry=0x5555700330, method=<optimized out>, location=location@entry=0x55555d3330 "the test body") at /opencv-fork/modules/ts/src/ts_gtest.cpp:3953
#23 0x00000055555c06ec in testing::Test::Run (this=0x5555700330) at /opencv-fork/modules/ts/src/ts_gtest.cpp:3992
#24 0x00000055555c09e8 in testing::TestInfo::Run (this=0x55556d1640) at /opencv-fork/modules/ts/src/ts_gtest.cpp:4167
#25 0x00000055555c0c68 in testing::TestCase::Run (this=0x55556c35f0) at /opencv-fork/modules/ts/src/ts_gtest.cpp:4285
#26 0x00000055555c0f10 in testing::internal::UnitTestImpl::RunAllTests (this=this@entry=0x5555622780) at /opencv-fork/modules/ts/src/ts_gtest.cpp:6660
#27 0x00000055555c1264 in testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (location=0x55555d33e0 "auxiliary test code (environments or event listeners)", method=<optimized out>, object=0x5555622780) at /opencv-fork/modules/ts/src/ts_gtest.cpp:3917
#28 testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> (location=0x55555d33e0 "auxiliary test code (environments or event listeners)", method=(bool (testing::internal::UnitTestImpl::*)(testing::internal::UnitTestImpl * const)) 0x55555c0d08 <testing::internal::UnitTestImpl::RunAllTests()>, object=0x5555622780) at /opencv-fork/modules/ts/src/ts_gtest.cpp:3953
#29 testing::UnitTest::Run (this=0x555560bfa0 <testing::UnitTest::GetInstance()::instance>) at /opencv-fork/modules/ts/src/ts_gtest.cpp:6269
#30 0x000000555556b6f8 in RUN_ALL_TESTS () at /opencv-fork/modules/ts/include/opencv2/ts/ts_gtest.h:22228
#31 main (argc=<optimized out>, argv=<optimized out>) at /opencv-fork/modules/dnn/perf/perf_main.cpp:14
If I enable CV_OPENCL_TRACE_CHECK in ocl.cpp,
opencv/modules/core/src/ocl.cpp
Line 81 in 0dc28d3
| #define CV_OPENCL_TRACE_CHECK 0 |
I get following message while I run the performance tests
[ RUN ] Conv.conv/88, where GetParam() = (GFLOPS=1.006, K=[3 x 3], IN={1, 1024, 10, 10}, OCN=546, PM=SAME, BIAS, OCV/OCL_FP16)
OpenCV(OpenCL:0): clCreateBuffer(capacity=409600) => 0x5583a26400
OpenCV(OpenCL:0): clEnqueueWriteBuffer(q, handle=0x5583a26400, CL_TRUE, offset=0, sz=409600, data=0x558397e9c0, 0, 0, 0)
OpenCV(OpenCL:0): clCreateBuffer(capacity=204800) => 0x5583a26000
OpenCV(OpenCL:0): clEnqueueWriteBuffer(q, handle=0x5583a26000, CL_TRUE, offset=0, sz=204800, data=0x55839e4340, 0, 0, 0)
OpenCV(OpenCL:0): clCreateBuffer(capacity=110592) => 0x5583a25c00
OpenCV(OpenCL:0): clEnqueueWriteBuffer(q, handle=0x5583a25c00, CL_TRUE, offset=0, sz=109200, data=0x5583a8de80, 0, 0, 0)
OpenCV(OpenCL:0): clEnqueueMapBuffer(handle=0x5583a26000, sz=204800) => 0x7f9c1f9000
OpenCV(OpenCL:0): clEnqueueUnmapMemObject(handle=0x5583a26000, data=0x7f9c1f9000, [sz=204800])
OpenCV(OpenCL:0): clCreateBuffer(capacity=20971520) => 0x5583a25800
OpenCV(OpenCL:0): clEnqueueWriteBuffer(q, handle=0x5583a25800, CL_TRUE, offset=0, sz=20127744, data=0x7f8dccb040, 0, 0, 0)
OpenCV(OpenCL:0): clCreateBuffer(capacity=4096) => 0x5583a25400
OpenCV(OpenCL:0): clEnqueueWriteBuffer(q, handle=0x5583a25400, CL_TRUE, offset=0, sz=2184, data=0x5583917d00, 0, 0, 0)
OpenCV(OpenCL:0): clCreateBuffer(capacity=4096) => 0x5583a25000
OpenCV(OpenCL:0): clBuildProgram(binary: core/halfconvert)
OpenCV(OpenCL:0): result = clGetProgramBuildInfo(handle, devices[0], CL_PROGRAM_BUILD_STATUS, sizeof(build_status), &build_status, &retsz)
OpenCV(OpenCL:0): clCreateKernel('convertFp16')
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=0, cl_mem=0x5583a25400)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=1, step_value=2184)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=2, offset_value=0)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=3, cl_mem=0x5583a25000)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=4, step_value=1092)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=5, offset_value=0)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=6, rows_value=1)
OpenCV(OpenCL:0): clSetKernelArg('convertFp16', arg_index=7, cols_value=546)
OpenCV(OpenCL:0): clSetEventCallback(asyncEvent, CL_COMPLETE, oclCleanupCallback, this)
OpenCV(OpenCL:0): clReleaseEvent(asyncEvent)
OpenCV(OpenCL:0): clReleaseKernel(handle)
OpenCV(OpenCL:0): clEnqueueMapBuffer(handle=0x5583a25800, sz=20127744) => 0x7f8c800000
OpenCV(OpenCL:0): clCreateBuffer(capacity=10092544) => 0x5583a24c00
OpenCV(OpenCL:0): clEnqueueMapBuffer(handle=0x5583a24c00, sz=10063872) => 0x7f86600000
OpenCV(OpenCL:0): clEnqueueUnmapMemObject(handle=0x5583a24c00, data=0x7f86600000, [sz=10063872])
OpenCV(OpenCL:0): clEnqueueUnmapMemObject(handle=0x5583a25800, data=0x7f8c800000, [sz=20127744])
OpenCV(ocl4dnn): consider to specify kernel configuration cache directory
via OPENCV_OCL4DNN_CONFIG_PATH parameter.
OpenCV(OpenCL:0): clCreateBuffer(capacity=110592) => 0x5583a24800
OpenCV(OpenCL:0): clCreateProgramWithSource
OpenCV(OpenCL:0): clBuildProgram(source: -cl-no-subgroup-ifp)
OpenCL program build log: dnn/dummy
Status -43: CL_INVALID_BUILD_OPTIONS
-cl-no-subgroup-ifp
error: unknown OpenCL C option '-cl-no-subgroup-ifp'
OpenCV(OpenCL:0): clReleaseProgram(handle)
OpenCV(OpenCL:0): clBuildProgram(binary: dnn/conv_layer_spatial)
OpenCV(OpenCL:0): result = clGetProgramBuildInfo(handle, devices[0], CL_PROGRAM_BUILD_STATUS, sizeof(build_status), &build_status, &retsz)
OpenCV(OpenCL:0): clCreateKernel('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1')
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=0, cl_mem=0x5583a26000)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=1, size=4, value=0x7fdd93adf0)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=2, cl_mem=0x5583a24c00)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=3, size=4, value=0x7fdd93ae20)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=4, cl_mem=0x5583a25000)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=5, size=4, value=0x7fdd93add8)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=6, cl_mem=0x5583a24800)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=7, size=4, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=8, size=4, value=0x7fdd93adf8)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=9, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=10, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=11, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=12, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=13, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetKernelArg('BASIC_k3x3_cn1024_g1_s1x1_d1x1_b1_in16x16_p1x1_num1_M546_activ0_eltwise0_FP16_4_1_1_1', arg_index=14, size=2, value=0x7fdd93af10)
OpenCV(OpenCL:0): clSetEventCallback(asyncEvent, CL_COMPLETE, oclCleanupCallback, this)
OpenCV(OpenCL:0): clReleaseEvent(asyncEvent)
OpenCV(OpenCL:0): clCreateBuffer(capacity=110592) => 0x5583a24400
OpenCV(OpenCL:0): clReleaseKernel(handle)
OpenCV(OpenCL:-14): clEnqueueMapBuffer(handle=0x5583a24400, sz=109200) => (nil)
OpenCV(OpenCL:-14): clEnqueueReadBuffer(q, handle=0x5583a24400, CL_TRUE, 0, sz=109200, data=0x5583e24cc0, 0, 0, 0)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:-14): clEnqueueMapBuffer(handle=0x5583a26000, sz=204800) => (nil)
OpenCV(OpenCL:-14): clEnqueueReadBuffer(q, handle=0x5583a26000, CL_TRUE, 0, sz=204800, data=0x5583e3f780, 0, 0, 0)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
OpenCV(OpenCL:0): clReleaseMemObject(entry.clBuffer_)
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.0-pre) /opencv-fork/modules/core/src/ocl.cpp:5392: error: (-215:Assertion failed) u->refcount == 0 && "UMat deallocation error: some derived Mat is still alive" in function 'deallocate'
Aborted
Now I can't dig in further, since clEnqueueReadBuffer is a OpenCL API call.
But looking in the call stack, I see suspicious declaration
#12 0x0000007fb7ddfd10 in cv::dnn::ocl4dnn::OCL4DNNConvSpatial<float>::Forward (this=this@entry=0x55558f8fa0, bottom=..., bottom2=..., weight=..., bias=..., top=..., numImages=numImages@entry=1) at /opencv-fork/modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp:597
^^^^^
Though there is a path to FP16 the code is fixed to use float
opencv/modules/dnn/src/layers/convolution_layer.cpp
Lines 243 to 244 in f6aa9ac
| #ifdef HAVE_OPENCL | |
| Ptr<OCL4DNNConvSpatial<float> > convolutionOp; |
There are dozen of places that hires "fixed" float than run-time selection
opencv/modules/dnn/src/layers/convolution_layer.cpp
Lines 237 to 244 in f6aa9ac
| enum { VEC_ALIGN = 8, DFT_TYPE = CV_32F }; | |
| Mat weightsMat; | |
| std::vector<float> biasvec; | |
| std::vector<float> reluslope; | |
| Ptr<ActivationLayer> activ; | |
| #ifdef HAVE_OPENCL | |
| Ptr<OCL4DNNConvSpatial<float> > convolutionOp; |
Still, in the OpenCL path, the kernels are trying to run
I'm not sure about the cause of this deallocation error, and I remember that FP16 mode is not well supported on non-Intel platform.
Maybe I should forget about this perf test for now ?
Steps to reproduce
$ time cmake -DOPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules -DBUILD_EXAMPLES=true -DOPENCV_ENABLE_NONFREE=true ..
$ make -j 3 all
$ export OPENCV_DNN_OPENCL_ALLOW_ALL_DEVICES="true"
$ export GTEST_FILTER="Conv.conv/88"
$ ./bin/opencv_perf_dnn
Issue submission checklist
- I report the issue, it's not a question
- I checked the problem with documentation, FAQ, open issues,
answers.opencv.org, Stack Overflow, etc and have not found solution - I updated to latest OpenCV version and the issue is still there
- There is reproducer code and related data files: videos, images, onnx, etc