Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
a05ce00a
Commit
a05ce00a
authored
Aug 04, 2014
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2879 from alalek:ocl_runtime_flags
parents
a58767ef
d9daa0cb
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
59 additions
and
10 deletions
+59
-10
ocl.hpp
modules/core/include/opencv2/core/ocl.hpp
+3
-0
arithm.cpp
modules/core/src/arithm.cpp
+3
-3
ocl.cpp
modules/core/src/ocl.cpp
+47
-1
stat.cpp
modules/core/src/stat.cpp
+6
-6
No files found.
modules/core/include/opencv2/core/ocl.hpp
View file @
a05ce00a
...
...
@@ -636,6 +636,9 @@ protected:
CV_EXPORTS
MatAllocator
*
getOpenCLAllocator
();
CV_EXPORTS_W
bool
isPerformanceCheckBypassed
();
#define OCL_PERFORMANCE_CHECK(condition) (cv::ocl::isPerformanceCheckBypassed() || (condition))
}}
#endif
modules/core/src/arithm.cpp
View file @
a05ce00a
...
...
@@ -1607,7 +1607,7 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
Size
sz1
=
dims1
<=
2
?
psrc1
->
size
()
:
Size
();
Size
sz2
=
dims2
<=
2
?
psrc2
->
size
()
:
Size
();
#ifdef HAVE_OPENCL
bool
use_opencl
=
_dst
.
isUMat
(
)
&&
dims1
<=
2
&&
dims2
<=
2
;
bool
use_opencl
=
OCL_PERFORMANCE_CHECK
(
_dst
.
isUMat
()
)
&&
dims1
<=
2
&&
dims2
<=
2
;
#endif
bool
src1Scalar
=
checkScalar
(
*
psrc1
,
type2
,
kind1
,
kind2
);
bool
src2Scalar
=
checkScalar
(
*
psrc2
,
type1
,
kind2
,
kind1
);
...
...
@@ -2982,7 +2982,7 @@ void cv::compare(InputArray _src1, InputArray _src2, OutputArray _dst, int op)
haveScalar
=
true
;
}
CV_OCL_RUN
(
_src1
.
dims
()
<=
2
&&
_src2
.
dims
()
<=
2
&&
_dst
.
isUMat
(
),
CV_OCL_RUN
(
_src1
.
dims
()
<=
2
&&
_src2
.
dims
()
<=
2
&&
OCL_PERFORMANCE_CHECK
(
_dst
.
isUMat
()
),
ocl_compare
(
_src1
,
_src2
,
_dst
,
op
,
haveScalar
))
int
kind1
=
_src1
.
kind
(),
kind2
=
_src2
.
kind
();
...
...
@@ -3500,7 +3500,7 @@ void cv::inRange(InputArray _src, InputArray _lowerb,
InputArray
_upperb
,
OutputArray
_dst
)
{
CV_OCL_RUN
(
_src
.
dims
()
<=
2
&&
_lowerb
.
dims
()
<=
2
&&
_upperb
.
dims
()
<=
2
&&
_dst
.
isUMat
(
),
_upperb
.
dims
()
<=
2
&&
OCL_PERFORMANCE_CHECK
(
_dst
.
isUMat
()
),
ocl_inRange
(
_src
,
_lowerb
,
_upperb
,
_dst
))
int
skind
=
_src
.
kind
(),
lkind
=
_lowerb
.
kind
(),
ukind
=
_upperb
.
kind
();
...
...
modules/core/src/ocl.cpp
View file @
a05ce00a
...
...
@@ -57,6 +57,28 @@
# endif
#endif
// TODO Move to some common place
static
bool
getBoolParameter
(
const
char
*
name
,
bool
defaultValue
)
{
const
char
*
envValue
=
getenv
(
name
);
if
(
envValue
==
NULL
)
{
return
defaultValue
;
}
cv
::
String
value
=
envValue
;
if
(
value
==
"1"
||
value
==
"True"
||
value
==
"true"
||
value
==
"TRUE"
)
{
return
true
;
}
if
(
value
==
"0"
||
value
==
"False"
||
value
==
"false"
||
value
==
"FALSE"
)
{
return
false
;
}
CV_ErrorNoReturn
(
cv
::
Error
::
StsBadArg
,
cv
::
format
(
"Invalid value for %s parameter: %s"
,
name
,
value
.
c_str
()));
}
// TODO Move to some common place
static
size_t
getConfigurationParameterForSize
(
const
char
*
name
,
size_t
defaultValue
)
{
...
...
@@ -1302,10 +1324,22 @@ OCL_FUNC(cl_int, clReleaseEvent, (cl_event event), (event))
#endif
static
bool
isRaiseError
()
{
static
bool
initialized
=
false
;
static
bool
value
=
false
;
if
(
!
initialized
)
{
value
=
getBoolParameter
(
"OPENCV_OPENCL_RAISE_ERROR"
,
false
);
initialized
=
true
;
}
return
value
;
}
#ifdef _DEBUG
#define CV_OclDbgAssert CV_DbgAssert
#else
#define CV_OclDbgAssert(expr)
(void)(expr
)
#define CV_OclDbgAssert(expr)
do { if (isRaiseError()) { CV_Assert(expr); } else { (void)(expr); } } while ((void)0, 0
)
#endif
namespace
cv
{
namespace
ocl
{
...
...
@@ -4711,4 +4745,16 @@ void* Image2D::ptr() const
return
p
?
p
->
handle
:
0
;
}
bool
isPerformanceCheckBypassed
()
{
static
bool
initialized
=
false
;
static
bool
value
=
false
;
if
(
!
initialized
)
{
value
=
getBoolParameter
(
"OPENCV_OPENCL_PERF_CHECK_BYPASS"
,
false
);
initialized
=
true
;
}
return
value
;
}
}}
modules/core/src/stat.cpp
View file @
a05ce00a
...
...
@@ -568,7 +568,7 @@ cv::Scalar cv::sum( InputArray _src )
{
#ifdef HAVE_OPENCL
Scalar
_res
;
CV_OCL_RUN_
(
_src
.
isUMat
(
)
&&
_src
.
dims
()
<=
2
,
CV_OCL_RUN_
(
OCL_PERFORMANCE_CHECK
(
_src
.
isUMat
()
)
&&
_src
.
dims
()
<=
2
,
ocl_sum
(
_src
,
_res
,
OCL_OP_SUM
),
_res
)
#endif
...
...
@@ -719,7 +719,7 @@ int cv::countNonZero( InputArray _src )
#ifdef HAVE_OPENCL
int
res
=
-
1
;
CV_OCL_RUN_
(
_src
.
isUMat
(
)
&&
_src
.
dims
()
<=
2
,
CV_OCL_RUN_
(
OCL_PERFORMANCE_CHECK
(
_src
.
isUMat
()
)
&&
_src
.
dims
()
<=
2
,
ocl_countNonZero
(
_src
,
res
),
res
)
#endif
...
...
@@ -1025,7 +1025,7 @@ static bool ocl_meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv
void
cv
::
meanStdDev
(
InputArray
_src
,
OutputArray
_mean
,
OutputArray
_sdv
,
InputArray
_mask
)
{
CV_OCL_RUN
(
_src
.
isUMat
(
)
&&
_src
.
dims
()
<=
2
,
CV_OCL_RUN
(
OCL_PERFORMANCE_CHECK
(
_src
.
isUMat
()
)
&&
_src
.
dims
()
<=
2
,
ocl_meanStdDev
(
_src
,
_mean
,
_sdv
,
_mask
))
Mat
src
=
_src
.
getMat
(),
mask
=
_mask
.
getMat
();
...
...
@@ -1571,7 +1571,7 @@ void cv::minMaxIdx(InputArray _src, double* minVal,
CV_Assert
(
(
cn
==
1
&&
(
_mask
.
empty
()
||
_mask
.
type
()
==
CV_8U
))
||
(
cn
>
1
&&
_mask
.
empty
()
&&
!
minIdx
&&
!
maxIdx
)
);
CV_OCL_RUN
(
_src
.
isUMat
(
)
&&
_src
.
dims
()
<=
2
&&
(
_mask
.
empty
()
||
_src
.
size
()
==
_mask
.
size
()),
CV_OCL_RUN
(
OCL_PERFORMANCE_CHECK
(
_src
.
isUMat
()
)
&&
_src
.
dims
()
<=
2
&&
(
_mask
.
empty
()
||
_src
.
size
()
==
_mask
.
size
()),
ocl_minMaxIdx
(
_src
,
minVal
,
maxVal
,
minIdx
,
maxIdx
,
_mask
))
Mat
src
=
_src
.
getMat
(),
mask
=
_mask
.
getMat
();
...
...
@@ -2234,7 +2234,7 @@ double cv::norm( InputArray _src, int normType, InputArray _mask )
#ifdef HAVE_OPENCL
double
_result
=
0
;
CV_OCL_RUN_
(
_src
.
isUMat
(
)
&&
_src
.
dims
()
<=
2
,
CV_OCL_RUN_
(
OCL_PERFORMANCE_CHECK
(
_src
.
isUMat
()
)
&&
_src
.
dims
()
<=
2
,
ocl_norm
(
_src
,
normType
,
_mask
,
_result
),
_result
)
#endif
...
...
@@ -2594,7 +2594,7 @@ double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _m
#ifdef HAVE_OPENCL
double
_result
=
0
;
CV_OCL_RUN_
(
_src1
.
isUMat
(
),
CV_OCL_RUN_
(
OCL_PERFORMANCE_CHECK
(
_src1
.
isUMat
()
),
ocl_norm
(
_src1
,
_src2
,
normType
,
_mask
,
_result
),
_result
)
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment