From 1b4afcca30f1dbb26219a5ad0d6a4b3c25510a5a Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Mon, 18 Mar 2013 12:45:52 +0400 Subject: [PATCH] Move OpenCl SURF perf tests to nonfree and fix build of samples --- modules/nonfree/perf/perf_precomp.hpp | 9 ++- .../perf/perf_surf.ocl.cpp} | 80 ++++++++++--------- samples/ocl/CMakeLists.txt | 4 - samples/ocl/performance.cpp | 1 + samples/ocl/surf_matcher.cpp | 1 + 5 files changed, 51 insertions(+), 44 deletions(-) rename modules/{ocl/perf/perf_surf.cpp => nonfree/perf/perf_surf.ocl.cpp} (63%) diff --git a/modules/nonfree/perf/perf_precomp.hpp b/modules/nonfree/perf/perf_precomp.hpp index 3dafdb206b..50a7f98f53 100644 --- a/modules/nonfree/perf/perf_precomp.hpp +++ b/modules/nonfree/perf/perf_precomp.hpp @@ -9,14 +9,15 @@ #ifndef __OPENCV_PERF_PRECOMP_HPP__ #define __OPENCV_PERF_PRECOMP_HPP__ -#include "cvconfig.h" -#include "opencv2/opencv_modules.hpp" - #include "opencv2/ts/ts.hpp" -#include "opencv2/ts/gpu_perf.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv_modules.hpp" +#ifdef HAVE_OPENCV_OCL +# include "opencv2/nonfree/ocl.hpp" +#endif + #if defined(HAVE_OPENCV_GPU) && defined(HAVE_CUDA) #include "opencv2/nonfree/gpu.hpp" #endif diff --git a/modules/ocl/perf/perf_surf.cpp b/modules/nonfree/perf/perf_surf.ocl.cpp similarity index 63% rename from modules/ocl/perf/perf_surf.cpp rename to modules/nonfree/perf/perf_surf.ocl.cpp index 6aa4f512a2..23b1f1ecd0 100644 --- a/modules/ocl/perf/perf_surf.cpp +++ b/modules/nonfree/perf/perf_surf.ocl.cpp @@ -43,61 +43,69 @@ // //M*/ -#include "precomp.hpp" -#include +#include "perf_precomp.hpp" -#ifdef HAVE_OPENCL +#ifdef HAVE_OPENCV_OCL using namespace cv; using namespace cv::ocl; -using namespace cvtest; -using namespace testing; using namespace std; -#define FILTER_IMAGE "../../../samples/gpu/road.png" +typedef perf::TestBaseWithParam OCL_SURF; -TEST(SURF, Performance) +#define SURF_IMAGES \ + "cv/detectors_descriptors_evaluation/images_datasets/leuven/img1.png",\ + "stitching/a3.png" + +PERF_TEST_P(OCL_SURF, DISABLED_with_data_transfer, testing::Values(SURF_IMAGES)) { - cv::Mat img = readImage(FILTER_IMAGE, cv::IMREAD_GRAYSCALE); + string filename = getDataPath(GetParam()); + Mat img = imread(filename, IMREAD_GRAYSCALE); ASSERT_FALSE(img.empty()); - ocl::SURF_OCL d_surf; - ocl::oclMat d_keypoints; - ocl::oclMat d_descriptors; + SURF_OCL d_surf; + oclMat d_keypoints; + oclMat d_descriptors; + Mat cpu_kp; + Mat cpu_dp; - double totalgputick = 0; - double totalgputick_kernel = 0; + declare.time(60); - double t1 = 0; - double t2 = 0; - for(int j = 0; j < LOOP_TIMES + 1; j ++) + TEST_CYCLE() { - t1 = (double)cvGetTickCount();//gpu start1 - - ocl::oclMat d_src(img);//upload - - t2 = (double)cvGetTickCount(); //kernel - d_surf(d_src, ocl::oclMat(), d_keypoints, d_descriptors); - t2 = (double)cvGetTickCount() - t2;//kernel + oclMat d_src(img); - cv::Mat cpu_kp, cpu_dp; - d_keypoints.download (cpu_kp);//download - d_descriptors.download (cpu_dp);//download + d_surf(d_src, oclMat(), d_keypoints, d_descriptors); - t1 = (double)cvGetTickCount() - t1;//gpu end1 - - if(j == 0) - continue; + d_keypoints.download(cpu_kp); + d_descriptors.download(cpu_dp); + } - totalgputick = t1 + totalgputick; + SANITY_CHECK(cpu_kp, 1); + SANITY_CHECK(cpu_dp, 1); +} - totalgputick_kernel = t2 + totalgputick_kernel; +PERF_TEST_P(OCL_SURF, DISABLED_without_data_transfer, testing::Values(SURF_IMAGES)) +{ + string filename = getDataPath(GetParam()); + Mat img = imread(filename, IMREAD_GRAYSCALE); + ASSERT_FALSE(img.empty()); - } + SURF_OCL d_surf; + oclMat d_keypoints; + oclMat d_descriptors; + oclMat d_src(img); - cout << "average gpu runtime is " << totalgputick / ((double)cvGetTickFrequency()* LOOP_TIMES * 1000.) << "ms" << endl; - cout << "average gpu runtime without data transfer is " << totalgputick_kernel / ((double)cvGetTickFrequency()* LOOP_TIMES * 1000.) << "ms" << endl; + declare.time(60); + TEST_CYCLE() d_surf(d_src, oclMat(), d_keypoints, d_descriptors); + Mat cpu_kp; + Mat cpu_dp; + d_keypoints.download(cpu_kp); + d_descriptors.download(cpu_dp); + SANITY_CHECK(cpu_kp, 1); + SANITY_CHECK(cpu_dp, 1); } -#endif //Have opencl \ No newline at end of file + +#endif // HAVE_OPENCV_OCL \ No newline at end of file diff --git a/samples/ocl/CMakeLists.txt b/samples/ocl/CMakeLists.txt index 40fe0e6e36..cdcf2f3e51 100644 --- a/samples/ocl/CMakeLists.txt +++ b/samples/ocl/CMakeLists.txt @@ -17,10 +17,6 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND) ocv_include_directories(${OPENCL_INCLUDE_DIR}) endif() - if(CMAKE_COMPILER_IS_GNUCXX AND NOT ENABLE_NOISY_WARNINGS) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") - endif() - # --------------------------------------------- # Define executable targets # --------------------------------------------- diff --git a/samples/ocl/performance.cpp b/samples/ocl/performance.cpp index b2a6d85ad9..695516f148 100644 --- a/samples/ocl/performance.cpp +++ b/samples/ocl/performance.cpp @@ -16,6 +16,7 @@ #define USE_OPENCL #ifdef USE_OPENCL #include "opencv2/ocl/ocl.hpp" +#include "opencv2/nonfree/ocl.hpp" #endif #define TAB " " diff --git a/samples/ocl/surf_matcher.cpp b/samples/ocl/surf_matcher.cpp index 8462300edc..ea6ee97cb2 100644 --- a/samples/ocl/surf_matcher.cpp +++ b/samples/ocl/surf_matcher.cpp @@ -50,6 +50,7 @@ #include "opencv2/highgui/highgui.hpp" #include "opencv2/ocl/ocl.hpp" #include "opencv2/nonfree/nonfree.hpp" +#include "opencv2/nonfree/ocl.hpp" #include "opencv2/calib3d/calib3d.hpp" using namespace std;