added performance tests for log, exp, add, magnitude
authorAlexey Spizhevoy <no@email>
Fri, 28 Jan 2011 07:45:01 +0000 (07:45 +0000)
committerAlexey Spizhevoy <no@email>
Fri, 28 Jan 2011 07:45:01 +0000 (07:45 +0000)
samples/gpu/performance/performance.cpp
samples/gpu/performance/performance.h
samples/gpu/performance/tests.cpp

index b45dd54..ebf9889 100644 (file)
@@ -123,7 +123,7 @@ void gen(Mat& mat, int rows, int cols, int type, Scalar low, Scalar high)
 \r
 string abspath(const string& relpath)\r
 {\r
-    return TestSystem::instance()->workingDir() + relpath;\r
+    return TestSystem::instance().workingDir() + relpath;\r
 }\r
 \r
 \r
@@ -131,7 +131,7 @@ int CV_CDECL cvErrorCallback(int /*status*/, const char* /*func_name*/,
                              const char* err_msg, const char* /*file_name*/,\r
                              int /*line*/, void* /*userdata*/)\r
 {\r
-    TestSystem::instance()->printError(err_msg);\r
+    TestSystem::instance().printError(err_msg);\r
     return 0;\r
 }\r
 \r
@@ -144,11 +144,11 @@ int main(int argc, char** argv)
     }\r
     else\r
     {\r
-        TestSystem::instance()->setWorkingDir(argv[1]);\r
+        TestSystem::instance().setWorkingDir(argv[1]);\r
     }\r
 \r
     redirectError(cvErrorCallback);\r
-    TestSystem::instance()->run();\r
+    TestSystem::instance().run();\r
 \r
     return 0;\r
 }
\ No newline at end of file
index 373fe0f..1bfcff8 100644 (file)
@@ -26,10 +26,10 @@ private:
 class TestSystem\r
 {\r
 public:\r
-    static TestSystem* instance()\r
+    static TestSystem& instance()\r
     {\r
         static TestSystem me;\r
-        return &me;\r
+        return me;\r
     }\r
 \r
     void addInit(Runnable* init) { inits_.push_back(init); }\r
@@ -106,10 +106,9 @@ private:
 \r
 \r
 #define INIT(name) \\r
-    struct name##_init: Runnable \\r
-    { \\r
+    struct name##_init: Runnable { \\r
         name##_init(): Runnable(#name) { \\r
-            TestSystem::instance()->addInit(this); \\r
+            TestSystem::instance().addInit(this); \\r
         } \\r
         void run(); \\r
     } name##_init_instance; \\r
@@ -117,21 +116,20 @@ private:
 \r
 \r
 #define TEST(name) \\r
-    struct name##_test: Runnable \\r
-    { \\r
+    struct name##_test: Runnable { \\r
         name##_test(): Runnable(#name) { \\r
-            TestSystem::instance()->addTest(this); \\r
+            TestSystem::instance().addTest(this); \\r
         } \\r
         void run(); \\r
     } name##_test_instance; \\r
     void name##_test::run()\r
 \r
-#define SUBTEST TestSystem::instance()->subtest()\r
-#define DESCRIPTION TestSystem::instance()->subtest()\r
-#define CPU_ON TestSystem::instance()->cpuOn()\r
-#define GPU_ON TestSystem::instance()->gpuOn()\r
-#define CPU_OFF TestSystem::instance()->cpuOff()\r
-#define GPU_OFF TestSystem::instance()->gpuOff()\r
+#define SUBTEST TestSystem::instance().subtest()\r
+#define DESCRIPTION TestSystem::instance().subtest()\r
+#define CPU_ON TestSystem::instance().cpuOn()\r
+#define GPU_ON TestSystem::instance().gpuOn()\r
+#define CPU_OFF TestSystem::instance().cpuOff()\r
+#define GPU_OFF TestSystem::instance().gpuOff()\r
 \r
 void gen(cv::Mat& mat, int rows, int cols, int type, cv::Scalar low, \r
          cv::Scalar high);\r
index b47e8b4..ebece94 100644 (file)
@@ -332,4 +332,112 @@ TEST(BruteForceMatcher)
     GPU_ON;\r
     d_matcher.radiusMatch(d_query, d_train, d_matches, max_distance);\r
     GPU_OFF;\r
+}\r
+\r
+\r
+TEST(magnitude)\r
+{\r
+    Mat x, y, mag;\r
+    gpu::GpuMat d_x, d_y, d_mag;\r
+\r
+    for (int size = 2000; size <= 4000; size += 1000)\r
+    {\r
+        SUBTEST << "size " << size;\r
+\r
+        gen(x, size, size, CV_32F, 0, 1);\r
+        gen(y, size, size, CV_32F, 0, 1);\r
+        mag.create(size, size, CV_32F);\r
+\r
+        CPU_ON;\r
+        magnitude(x, y, mag);\r
+        CPU_OFF;\r
+\r
+        d_x = x;\r
+        d_y = y;\r
+        d_mag.create(size, size, CV_32F);\r
+\r
+        GPU_ON;\r
+        gpu::magnitude(d_x, d_y, d_mag);\r
+        GPU_OFF;\r
+    }\r
+}\r
+\r
+\r
+TEST(add)\r
+{\r
+    Mat src1, src2, dst;\r
+    gpu::GpuMat d_src1, d_src2, d_dst;\r
+\r
+    for (int size = 2000; size <= 4000; size += 1000)\r
+    {\r
+        SUBTEST << "size " << size << ", 32F";\r
+\r
+        gen(src1, size, size, CV_32F, 0, 1);\r
+        gen(src2, size, size, CV_32F, 0, 1);\r
+        dst.create(size, size, CV_32F);\r
+\r
+        CPU_ON;\r
+        add(src1, src2, dst);\r
+        CPU_OFF;\r
+\r
+        d_src1 = src1;\r
+        d_src2 = src2;\r
+        d_dst.create(size, size, CV_32F);\r
+\r
+        GPU_ON;\r
+        gpu::add(d_src1, d_src2, d_dst);\r
+        GPU_OFF;\r
+    }\r
+}\r
+\r
+\r
+TEST(log)\r
+{\r
+    Mat src, dst;\r
+    gpu::GpuMat d_src, d_dst;\r
+\r
+    for (int size = 2000; size <= 4000; size += 1000)\r
+    {\r
+        SUBTEST << "size " << size << ", 32F";\r
+\r
+        gen(src, size, size, CV_32F, 1, 10);\r
+        dst.create(size, size, CV_32F);\r
+\r
+        CPU_ON;\r
+        log(src, dst);\r
+        CPU_OFF;\r
+\r
+        d_src = src;\r
+        d_dst.create(size, size, CV_32F);\r
+\r
+        GPU_ON;\r
+        gpu::log(d_src, d_dst);\r
+        GPU_OFF;\r
+    }\r
+}\r
+\r
+\r
+TEST(exp)\r
+{\r
+    Mat src, dst;\r
+    gpu::GpuMat d_src, d_dst;\r
+\r
+    for (int size = 2000; size <= 4000; size += 1000)\r
+    {\r
+        SUBTEST << "size " << size << ", 32F";\r
+\r
+        gen(src, size, size, CV_32F, 0, 1);\r
+        dst.create(size, size, CV_32F);\r
+\r
+        CPU_ON;\r
+        exp(src, dst);\r
+        CPU_OFF;\r
+\r
+        d_src = src;\r
+        d_dst.create(size, size, CV_32F);\r
+\r
+        GPU_ON;\r
+        gpu::exp(d_src, d_dst);\r
+        GPU_OFF;\r
+    }\r
 }
\ No newline at end of file