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);
{
cv::gpu::labelComponents(mask, components);
}
+
+ GPU_SANITY_CHECK(components);
}
else
{
{
host(host._labels);
}
+
+ CPU_SANITY_CHECK(host._labels);
}
}
#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<int>("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
void printCudaInfo();\r
}\r
\r
+#define GPU_SANITY_CHECK(dmat, ...) \\r
+ do{ \\r
+ cv::Mat d##dmat(dmat); \\r
+ SANITY_CHECK(d##dmat, ## __VA_ARGS__); \\r
+ } while(0);\r
+\r
+#define CPU_SANITY_CHECK(cmat, ...) \\r
+ do{ \\r
+ SANITY_CHECK(cmat, ## __VA_ARGS__); \\r
+ } while(0);\r
+\r
#endif // __OPENCV_PERF_GPU_UTILITY_HPP__\r
#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 *
#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;
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 <sys/syscall.h>
#include <pthread.h>
static void setCurrentThreadAffinityMask(int mask)
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();
}
/*****************************************************************************************\
+* ::perf::GpuPerf
+\*****************************************************************************************/
+#ifdef HAVE_CUDA
+bool perf::GpuPerf::targetDevice()
+{
+ return !param_run_cpu;
+}
+#endif
+
+
+/*****************************************************************************************\
* ::perf::PrintTo
\*****************************************************************************************/
namespace perf