Commit 8beb514e authored by Alexander Alekhin's avatar Alexander Alekhin

ocl: merge with upstream/2.4

parent 16adbda4
...@@ -614,7 +614,7 @@ double cv::ocl::norm(const oclMat &src1, const oclMat &src2, int normType) ...@@ -614,7 +614,7 @@ double cv::ocl::norm(const oclMat &src1, const oclMat &src2, int normType)
CV_Assert(!src1.empty()); CV_Assert(!src1.empty());
CV_Assert(src2.empty() || (src1.type() == src2.type() && src1.size() == src2.size())); CV_Assert(src2.empty() || (src1.type() == src2.type() && src1.size() == src2.size()));
if (!src1.clCxt->supportsFeature(Context::CL_DOUBLE) && src1.depth() == CV_64F) if (!src1.clCxt->supportsFeature(FEATURE_CL_DOUBLE) && src1.depth() == CV_64F)
{ {
CV_Error(CV_GpuNotSupported, "Selected device doesn't support double"); CV_Error(CV_GpuNotSupported, "Selected device doesn't support double");
} }
...@@ -1261,7 +1261,7 @@ int cv::ocl::countNonZero(const oclMat &src) ...@@ -1261,7 +1261,7 @@ int cv::ocl::countNonZero(const oclMat &src)
CV_Error(CV_GpuNotSupported, "selected device doesn't support double"); CV_Error(CV_GpuNotSupported, "selected device doesn't support double");
} }
size_t groupnum = src.clCxt->computeUnits(); size_t groupnum = src.clCxt->getDeviceInfo().maxComputeUnits;
CV_Assert(groupnum != 0); CV_Assert(groupnum != 0);
int dbsize = groupnum; int dbsize = groupnum;
...@@ -1708,7 +1708,7 @@ void cv::ocl::pow(const oclMat &x, double p, oclMat &y) ...@@ -1708,7 +1708,7 @@ void cv::ocl::pow(const oclMat &x, double p, oclMat &y)
void cv::ocl::setIdentity(oclMat& src, const Scalar & scalar) void cv::ocl::setIdentity(oclMat& src, const Scalar & scalar)
{ {
Context *clCxt = Context::getContext(); Context *clCxt = Context::getContext();
if (!clCxt->supportsFeature(Context::CL_DOUBLE) && src.depth() == CV_64F) if (!clCxt->supportsFeature(FEATURE_CL_DOUBLE) && src.depth() == CV_64F)
{ {
CV_Error(CV_GpuNotSupported, "Selected device doesn't support double\r\n"); CV_Error(CV_GpuNotSupported, "Selected device doesn't support double\r\n");
return; return;
......
...@@ -43,9 +43,13 @@ ...@@ -43,9 +43,13 @@
// //
//M*/ //M*/
#include "precomp.hpp" #include "precomp.hpp"
#include "opencl_kernels.hpp"
using namespace cv; using namespace cv;
using namespace ocl; using namespace ocl;
namespace cv { namespace ocl {
#if 1 #if 1
typedef float Qfloat; typedef float Qfloat;
#define QFLOAT_TYPE CV_32F #define QFLOAT_TYPE CV_32F
...@@ -54,14 +58,6 @@ typedef double Qfloat; ...@@ -54,14 +58,6 @@ typedef double Qfloat;
#define QFLOAT_TYPE CV_64F #define QFLOAT_TYPE CV_64F
#endif #endif
namespace cv
{
namespace ocl
{
///////////////////////////OpenCL kernel strings///////////////////////////
extern const char *svm;
}
}
class CvSVMKernel_ocl: public CvSVMKernel class CvSVMKernel_ocl: public CvSVMKernel
{ {
public: public:
...@@ -612,7 +608,7 @@ static void matmul_rbf(oclMat& src, oclMat& src_e, oclMat& dst, int src_rows, in ...@@ -612,7 +608,7 @@ static void matmul_rbf(oclMat& src, oclMat& src_e, oclMat& dst, int src_rows, in
args.push_back(make_pair(sizeof(cl_int), (void* )&src2_cols)); args.push_back(make_pair(sizeof(cl_int), (void* )&src2_cols));
args.push_back(make_pair(sizeof(cl_int), (void* )&width)); args.push_back(make_pair(sizeof(cl_int), (void* )&width));
float gamma = 0.0f; float gamma = 0.0f;
if(!Context::getContext()->supportsFeature(Context::CL_DOUBLE)) if(!Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE))
{ {
gamma = (float)gamma1; gamma = (float)gamma1;
args.push_back(make_pair(sizeof(cl_float), (void* )&gamma)); args.push_back(make_pair(sizeof(cl_float), (void* )&gamma));
...@@ -748,7 +744,7 @@ float CvSVM_OCL::predict(const CvMat* samples, CV_OUT CvMat* results) const ...@@ -748,7 +744,7 @@ float CvSVM_OCL::predict(const CvMat* samples, CV_OUT CvMat* results) const
if(params.kernel_type == CvSVM::RBF) if(params.kernel_type == CvSVM::RBF)
{ {
sv_.upload(sv_temp); sv_.upload(sv_temp);
if(!Context::getContext()->supportsFeature(Context::CL_DOUBLE)) if(!Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE))
{ {
dst = oclMat(sample_count, sv_total, CV_32FC1); dst = oclMat(sample_count, sv_total, CV_32FC1);
} }
...@@ -886,7 +882,7 @@ bool CvSVMSolver_ocl::solve_generic( CvSVMSolutionInfo& si ) ...@@ -886,7 +882,7 @@ bool CvSVMSolver_ocl::solve_generic( CvSVMSolutionInfo& si )
if(params->kernel_type == CvSVM::RBF) if(params->kernel_type == CvSVM::RBF)
{ {
src_e = src; src_e = src;
if(!Context::getContext()->supportsFeature(Context::CL_DOUBLE)) if(!Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE))
{ {
dst = oclMat(sample_count, sample_count, CV_32FC1); dst = oclMat(sample_count, sample_count, CV_32FC1);
} }
...@@ -1053,7 +1049,7 @@ void CvSVMKernel_ocl::calc( int vcount, const int row_idx, Qfloat* results, Mat& ...@@ -1053,7 +1049,7 @@ void CvSVMKernel_ocl::calc( int vcount, const int row_idx, Qfloat* results, Mat&
//int j; //int j;
(this->*calc_func_ocl)( vcount, row_idx, results, src); (this->*calc_func_ocl)( vcount, row_idx, results, src);
#if defined HAVE_CLAMDBLAS // FIXIT #if defined HAVE_CLAMDBLAS
const Qfloat max_val = (Qfloat)(FLT_MAX * 1e-3); const Qfloat max_val = (Qfloat)(FLT_MAX * 1e-3);
int j; int j;
for( j = 0; j < vcount; j++ ) for( j = 0; j < vcount; j++ )
...@@ -1063,7 +1059,7 @@ void CvSVMKernel_ocl::calc( int vcount, const int row_idx, Qfloat* results, Mat& ...@@ -1063,7 +1059,7 @@ void CvSVMKernel_ocl::calc( int vcount, const int row_idx, Qfloat* results, Mat&
results[j] = max_val; results[j] = max_val;
} }
} }
#endif // FIXIT #endif
} }
bool CvSVMKernel_ocl::create( const CvSVMParams* _params, Calc_ocl _calc_func, Calc _calc_func1 ) bool CvSVMKernel_ocl::create( const CvSVMParams* _params, Calc_ocl _calc_func, Calc _calc_func1 )
{ {
...@@ -1115,7 +1111,7 @@ void CvSVMKernel_ocl::calc_non_rbf_base( int vcount, const int row_idx, Qfloat* ...@@ -1115,7 +1111,7 @@ void CvSVMKernel_ocl::calc_non_rbf_base( int vcount, const int row_idx, Qfloat*
} }
void CvSVMKernel_ocl::calc_rbf( int vcount, const int row_idx, Qfloat* results, Mat& src) void CvSVMKernel_ocl::calc_rbf( int vcount, const int row_idx, Qfloat* results, Mat& src)
{ {
if(!Context::getContext()->supportsFeature(Context::CL_DOUBLE)) if(!Context::getContext()->supportsFeature(FEATURE_CL_DOUBLE))
{ {
for(int m = 0; m < vcount; m++) for(int m = 0; m < vcount; m++)
{ {
...@@ -1140,14 +1136,14 @@ void CvSVMKernel_ocl::calc_poly( int vcount, const int row_idx, Qfloat* results, ...@@ -1140,14 +1136,14 @@ void CvSVMKernel_ocl::calc_poly( int vcount, const int row_idx, Qfloat* results,
calc_non_rbf_base( vcount, row_idx, results, src); calc_non_rbf_base( vcount, row_idx, results, src);
#if defined HAVE_CLAMDBLAS //FIXIT #if defined HAVE_CLAMDBLAS
CvMat R = cvMat( 1, vcount, QFLOAT_TYPE, results ); CvMat R = cvMat( 1, vcount, QFLOAT_TYPE, results );
if( vcount > 0 ) if( vcount > 0 )
{ {
cvPow( &R, &R, params->degree ); cvPow( &R, &R, params->degree );
} }
#endif //FIXIT #endif
} }
...@@ -1155,11 +1151,11 @@ void CvSVMKernel_ocl::calc_sigmoid( int vcount, const int row_idx, Qfloat* resul ...@@ -1155,11 +1151,11 @@ void CvSVMKernel_ocl::calc_sigmoid( int vcount, const int row_idx, Qfloat* resul
{ {
calc_non_rbf_base( vcount, row_idx, results, src); calc_non_rbf_base( vcount, row_idx, results, src);
// TODO: speedup this // TODO: speedup this
#if defined HAVE_CLAMDBLAS //FIXIT #if defined HAVE_CLAMDBLAS
for(int j = 0; j < vcount; j++ ) for(int j = 0; j < vcount; j++ )
{ {
Qfloat t = results[j]; Qfloat t = results[j];
double e = exp(-fabs(t)); double e = ::exp(-fabs(t));
if( t > 0 ) if( t > 0 )
{ {
results[j] = (Qfloat)((1. - e) / (1. + e)); results[j] = (Qfloat)((1. - e) / (1. + e));
...@@ -1169,7 +1165,7 @@ void CvSVMKernel_ocl::calc_sigmoid( int vcount, const int row_idx, Qfloat* resul ...@@ -1169,7 +1165,7 @@ void CvSVMKernel_ocl::calc_sigmoid( int vcount, const int row_idx, Qfloat* resul
results[j] = (Qfloat)((e - 1.) / (e + 1.)); results[j] = (Qfloat)((e - 1.) / (e + 1.));
} }
} }
#endif //FIXIT #endif
} }
CvSVM_OCL::CvSVM_OCL() CvSVM_OCL::CvSVM_OCL()
{ {
...@@ -1199,3 +1195,5 @@ void CvSVM_OCL::create_solver( ) ...@@ -1199,3 +1195,5 @@ void CvSVM_OCL::create_solver( )
{ {
solver = new CvSVMSolver_ocl(&params); solver = new CvSVMSolver_ocl(&params);
} }
} }
...@@ -132,7 +132,7 @@ typedef ConvertToTestBase ConvertTo; ...@@ -132,7 +132,7 @@ typedef ConvertToTestBase ConvertTo;
TEST_P(ConvertTo, Accuracy) TEST_P(ConvertTo, Accuracy)
{ {
if((src_depth == CV_64F || dst_depth == CV_64F) && if((src_depth == CV_64F || dst_depth == CV_64F) &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
...@@ -228,7 +228,7 @@ typedef CopyToTestBase CopyTo; ...@@ -228,7 +228,7 @@ typedef CopyToTestBase CopyTo;
TEST_P(CopyTo, Without_mask) TEST_P(CopyTo, Without_mask)
{ {
if((src.depth() == CV_64F) && if((src.depth() == CV_64F) &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
...@@ -246,7 +246,7 @@ TEST_P(CopyTo, Without_mask) ...@@ -246,7 +246,7 @@ TEST_P(CopyTo, Without_mask)
TEST_P(CopyTo, With_mask) TEST_P(CopyTo, With_mask)
{ {
if(src.depth() == CV_64F && if(src.depth() == CV_64F &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
...@@ -342,7 +342,7 @@ typedef SetToTestBase SetTo; ...@@ -342,7 +342,7 @@ typedef SetToTestBase SetTo;
TEST_P(SetTo, Without_mask) TEST_P(SetTo, Without_mask)
{ {
if(depth == CV_64F && if(depth == CV_64F &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
...@@ -360,7 +360,7 @@ TEST_P(SetTo, Without_mask) ...@@ -360,7 +360,7 @@ TEST_P(SetTo, Without_mask)
TEST_P(SetTo, With_mask) TEST_P(SetTo, With_mask)
{ {
if(depth == CV_64F && if(depth == CV_64F &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
...@@ -430,7 +430,7 @@ PARAM_TEST_CASE(convertC3C4, MatType, bool) ...@@ -430,7 +430,7 @@ PARAM_TEST_CASE(convertC3C4, MatType, bool)
TEST_P(convertC3C4, Accuracy) TEST_P(convertC3C4, Accuracy)
{ {
if(depth == CV_64F && if(depth == CV_64F &&
!cv::ocl::Context::getContext()->supportsFeature(cv::ocl::Context::CL_DOUBLE)) !cv::ocl::Context::getContext()->supportsFeature(cv::ocl::FEATURE_CL_DOUBLE))
{ {
return; // returns silently return; // returns silently
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment