From: marina.kolpakova Date: Tue, 9 Oct 2012 21:34:21 +0000 (+0400) Subject: GPU module performance tests are aligned with other OpenCV pefrofmance tests X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~4180^2~12 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f5d6367ea1541c24434df92aae15e560292155ad;p=platform%2Fupstream%2Fopencv.git GPU module performance tests are aligned with other OpenCV pefrofmance tests --- diff --git a/modules/gpu/perf/perf_labeling.cpp b/modules/gpu/perf/perf_labeling.cpp index 1a81265..ce20d6b 100644 --- a/modules/gpu/perf/perf_labeling.cpp +++ b/modules/gpu/perf/perf_labeling.cpp @@ -106,7 +106,7 @@ PERF_TEST_P(Image, Labeling_ConnectedComponents, Values("gpu/labeling/al cv::Mat image = readImage(GetParam(), cv::IMREAD_GRAYSCALE); - if (runOnGpu) + if (PERF_RUN_GPU()) { cv::gpu::GpuMat mask; mask.create(image.rows, image.cols, CV_8UC1); @@ -122,6 +122,8 @@ PERF_TEST_P(Image, Labeling_ConnectedComponents, Values("gpu/labeling/al { cv::gpu::labelComponents(mask, components); } + + GPU_SANITY_CHECK(components); } else { @@ -135,6 +137,8 @@ PERF_TEST_P(Image, Labeling_ConnectedComponents, Values("gpu/labeling/al { host(host._labels); } + + CPU_SANITY_CHECK(host._labels); } } diff --git a/modules/gpu/perf/perf_main.cpp b/modules/gpu/perf/perf_main.cpp index 75a070a..e8c7b20 100644 --- a/modules/gpu/perf/perf_main.cpp +++ b/modules/gpu/perf/perf_main.cpp @@ -1,72 +1,3 @@ #include "perf_precomp.hpp" -using namespace std; -using namespace cv; -using namespace cv::gpu; -using namespace cvtest; -using namespace testing; - -int main(int argc, char** argv) -{ - const std::string keys = - "{ h help ? | | Print help}" - "{ i info | | Print information about system and exit }" - "{ device | 0 | Device on which tests will be executed }" - "{ cpu | | Run tests on cpu }" - ; - - CommandLineParser cmd(argc, (const char**) argv, keys); - - if (cmd.has("help")) - { - cmd.printMessage(); - return 0; - } - - ts::printOsInfo(); - ts::printCudaInfo(); - - - if (cmd.has("info")) - { - return 0; - } - - int device = cmd.get("device"); - bool cpu = cmd.has("cpu"); -#if !defined HAVE_CUDA || defined(CUDA_DISABLER) - cpu = true; -#endif - - if (cpu) - { - runOnGpu = false; - - cout << "Run tests on CPU \n" << endl; - } - else - { - runOnGpu = true; - - if (device < 0 || device >= getCudaEnabledDeviceCount()) - { - cerr << "Incorrect device index - " << device << endl; - return -1; - } - - DeviceInfo info(device); - if (!info.isCompatible()) - { - cerr << "Device " << device << " [" << info.name() << "] is NOT compatible with current GPU module build" << endl; - return -1; - } - - setDevice(device); - - cout << "Run tests on device " << device << " [" << info.name() << "] \n" << endl; - } - - InitGoogleTest(&argc, argv); - perf::TestBase::Init(argc, argv); - return RUN_ALL_TESTS(); -} +CV_PERF_TEST_MAIN(gpu) \ No newline at end of file diff --git a/modules/gpu/perf/utility.hpp b/modules/gpu/perf/utility.hpp index e3b5fe6..bb1ca76 100644 --- a/modules/gpu/perf/utility.hpp +++ b/modules/gpu/perf/utility.hpp @@ -53,4 +53,15 @@ namespace ts { void printCudaInfo(); } +#define GPU_SANITY_CHECK(dmat, ...) \ + do{ \ + cv::Mat d##dmat(dmat); \ + SANITY_CHECK(d##dmat, ## __VA_ARGS__); \ + } while(0); + +#define CPU_SANITY_CHECK(cmat, ...) \ + do{ \ + SANITY_CHECK(cmat, ## __VA_ARGS__); \ + } while(0); + #endif // __OPENCV_PERF_GPU_UTILITY_HPP__ diff --git a/modules/ts/include/opencv2/ts/ts_perf.hpp b/modules/ts/include/opencv2/ts/ts_perf.hpp index 909a346..e58d27a 100644 --- a/modules/ts/include/opencv2/ts/ts_perf.hpp +++ b/modules/ts/include/opencv2/ts/ts_perf.hpp @@ -205,6 +205,19 @@ private: #define SANITY_CHECK_KEYPOINTS(array, ...) ::perf::Regression::addKeypoints(this, #array, array , ## __VA_ARGS__) #define SANITY_CHECK_MATCHES(array, ...) ::perf::Regression::addMatches(this, #array, array , ## __VA_ARGS__) +#ifdef HAVE_CUDA +//#error "CUDA" +class CV_EXPORTS GpuPerf +{ +public: + static bool targetDevice(); +}; + +# define PERF_RUN_GPU() ::perf::GpuPerf::targetDevice() +#else +# define PERF_RUN_GPU() +#endif + /*****************************************************************************************\ * Container for performance metrics * diff --git a/modules/ts/src/ts_perf.cpp b/modules/ts/src/ts_perf.cpp index 626459b..0a04743 100644 --- a/modules/ts/src/ts_perf.cpp +++ b/modules/ts/src/ts_perf.cpp @@ -26,6 +26,9 @@ const std::string command_line_keys = #endif "{ perf_max_deviation |1.0 |}" "{ help h | |print help info}" + #ifdef HAVE_CUDA + "{ perf_run_cpu |false |run GPU performance tests for analogy CPU functions}" + #endif ; static double param_max_outliers; @@ -36,10 +39,15 @@ static uint64 param_seed; static double param_time_limit; static int param_tbb_nthreads; static bool param_write_sanity; +#ifdef HAVE_CUDA +static bool param_run_cpu; +#endif #ifdef ANDROID static int param_affinity_mask; static bool log_power_checkpoints; + + #include #include static void setCurrentThreadAffinityMask(int mask) @@ -608,6 +616,10 @@ void TestBase::Init(int argc, const char* const argv[]) log_power_checkpoints = args.has("perf_log_power_checkpoints"); #endif +#ifdef HAVE_CUDA + param_run_cpu = args.has("perf_run_cpu"); +#endif + if (!args.check()) { args.printErrors(); @@ -1186,6 +1198,17 @@ TestBase::_declareHelper::_declareHelper(TestBase* t) : test(t) } /*****************************************************************************************\ +* ::perf::GpuPerf +\*****************************************************************************************/ +#ifdef HAVE_CUDA +bool perf::GpuPerf::targetDevice() +{ + return !param_run_cpu; +} +#endif + + +/*****************************************************************************************\ * ::perf::PrintTo \*****************************************************************************************/ namespace perf