added BFM perf. test
authorAlexey Spizhevoy <no@email>
Wed, 26 Jan 2011 15:28:42 +0000 (15:28 +0000)
committerAlexey Spizhevoy <no@email>
Wed, 26 Jan 2011 15:28:42 +0000 (15:28 +0000)
samples/gpu/performance/performance.cpp
samples/gpu/performance/tests.cpp

index dd665e3..b45dd54 100644 (file)
@@ -56,7 +56,7 @@ void TestSystem::flushSubtestData()
     int cpu_time = static_cast<int>(cpu_elapsed_ / getTickFrequency() * 1000.0);\r
     int gpu_time = static_cast<int>(gpu_elapsed_ / getTickFrequency() * 1000.0);\r
 \r
-    double speedup = static_cast<double>(cpu_elapsed_) / gpu_elapsed_;\r
+    double speedup = static_cast<double>(cpu_elapsed_) / std::max((int64)1, gpu_elapsed_);\r
     speedup_total_ += speedup;\r
 \r
     printItem(cpu_time, gpu_time, speedup);\r
@@ -80,7 +80,7 @@ void TestSystem::printSummary()
 {\r
     cout << setiosflags(ios_base::fixed);\r
     cout << "\naverage GPU speedup: x" \r
-        << setprecision(3) << speedup_total_ / num_subtests_called_ \r
+        << setprecision(3) << speedup_total_ / std::max(1, num_subtests_called_) \r
         << endl;\r
     cout << resetiosflags(ios_base::fixed);\r
 }\r
index d591fdf..953a444 100644 (file)
@@ -273,4 +273,78 @@ TEST(SURF)
     d_surf(d_src1, gpu::GpuMat(), d_keypoints1);\r
     d_surf(d_src2, gpu::GpuMat(), d_keypoints2);\r
     GPU_OFF;\r
+}\r
+\r
+\r
+TEST(BruteForceMatcher)\r
+{\r
+    RNG rng(0);\r
+\r
+    // Init CPU matcher\r
+\r
+    int desc_len = 128;\r
+    int num_trains = rng.uniform(1, 5);\r
+\r
+    BruteForceMatcher< L2<float> > matcher;\r
+\r
+    Mat query; \r
+    gen(query, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);\r
+\r
+    vector<Mat> trains(num_trains);\r
+    for (int i = 0; i < num_trains; ++i)\r
+    {\r
+        Mat train; \r
+        gen(train, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);\r
+        trains[i] = train;\r
+    }\r
+    matcher.add(trains);\r
+\r
+    // Init GPU matcher\r
+\r
+    gpu::BruteForceMatcher_GPU< L2<float> > d_matcher;\r
+\r
+    gpu::GpuMat d_query(query);\r
+\r
+    vector<gpu::GpuMat> d_trains(num_trains);\r
+    for (int i = 0; i < num_trains; ++i)\r
+    {\r
+        d_trains[i] = trains[i];\r
+    }\r
+    d_matcher.add(d_trains);\r
+\r
+    // Output\r
+    vector< vector<DMatch> > matches(1);\r
+    vector< vector<DMatch> > d_matches(1);\r
+\r
+    SUBTEST << "match";\r
+\r
+    CPU_ON;\r
+    matcher.match(query, matches[0]);\r
+    CPU_OFF;\r
+\r
+    GPU_ON;\r
+    d_matcher.match(d_query, d_matches[0]);\r
+    GPU_OFF;\r
+\r
+    SUBTEST << "knnMatch";\r
+    int knn = rng.uniform(3, 10);\r
+\r
+    CPU_ON;\r
+    matcher.knnMatch(query, matches, knn);\r
+    CPU_OFF;\r
+\r
+    GPU_ON;\r
+    d_matcher.knnMatch(d_query, d_matches, knn);\r
+    GPU_OFF;\r
+\r
+    SUBTEST << "radiusMatch";\r
+    float max_distance = rng.uniform(25.0f, 65.0f);\r
+\r
+    CPU_ON;\r
+    matcher.radiusMatch(query, matches, max_distance);\r
+    CPU_OFF;\r
+\r
+    GPU_ON;\r
+    d_matcher.radiusMatch(d_query, d_matches, max_distance);\r
+    GPU_OFF;\r
 }
\ No newline at end of file