Skip to content

Commit feff022

Browse files
author
Alexey Spizhevoy
committed
added BFM perf. test
1 parent ba32b44 commit feff022

File tree

2 files changed

+76
-2
lines changed

2 files changed

+76
-2
lines changed

samples/gpu/performance/performance.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ void TestSystem::flushSubtestData()
5656
int cpu_time = static_cast<int>(cpu_elapsed_ / getTickFrequency() * 1000.0);
5757
int gpu_time = static_cast<int>(gpu_elapsed_ / getTickFrequency() * 1000.0);
5858

59-
double speedup = static_cast<double>(cpu_elapsed_) / gpu_elapsed_;
59+
double speedup = static_cast<double>(cpu_elapsed_) / std::max((int64)1, gpu_elapsed_);
6060
speedup_total_ += speedup;
6161

6262
printItem(cpu_time, gpu_time, speedup);
@@ -80,7 +80,7 @@ void TestSystem::printSummary()
8080
{
8181
cout << setiosflags(ios_base::fixed);
8282
cout << "\naverage GPU speedup: x"
83-
<< setprecision(3) << speedup_total_ / num_subtests_called_
83+
<< setprecision(3) << speedup_total_ / std::max(1, num_subtests_called_)
8484
<< endl;
8585
cout << resetiosflags(ios_base::fixed);
8686
}

samples/gpu/performance/tests.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,78 @@ TEST(SURF)
273273
d_surf(d_src1, gpu::GpuMat(), d_keypoints1);
274274
d_surf(d_src2, gpu::GpuMat(), d_keypoints2);
275275
GPU_OFF;
276+
}
277+
278+
279+
TEST(BruteForceMatcher)
280+
{
281+
RNG rng(0);
282+
283+
// Init CPU matcher
284+
285+
int desc_len = 128;
286+
int num_trains = rng.uniform(1, 5);
287+
288+
BruteForceMatcher< L2<float> > matcher;
289+
290+
Mat query;
291+
gen(query, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);
292+
293+
vector<Mat> trains(num_trains);
294+
for (int i = 0; i < num_trains; ++i)
295+
{
296+
Mat train;
297+
gen(train, rng.uniform(100, 300), desc_len, CV_32F, 0, 10);
298+
trains[i] = train;
299+
}
300+
matcher.add(trains);
301+
302+
// Init GPU matcher
303+
304+
gpu::BruteForceMatcher_GPU< L2<float> > d_matcher;
305+
306+
gpu::GpuMat d_query(query);
307+
308+
vector<gpu::GpuMat> d_trains(num_trains);
309+
for (int i = 0; i < num_trains; ++i)
310+
{
311+
d_trains[i] = trains[i];
312+
}
313+
d_matcher.add(d_trains);
314+
315+
// Output
316+
vector< vector<DMatch> > matches(1);
317+
vector< vector<DMatch> > d_matches(1);
318+
319+
SUBTEST << "match";
320+
321+
CPU_ON;
322+
matcher.match(query, matches[0]);
323+
CPU_OFF;
324+
325+
GPU_ON;
326+
d_matcher.match(d_query, d_matches[0]);
327+
GPU_OFF;
328+
329+
SUBTEST << "knnMatch";
330+
int knn = rng.uniform(3, 10);
331+
332+
CPU_ON;
333+
matcher.knnMatch(query, matches, knn);
334+
CPU_OFF;
335+
336+
GPU_ON;
337+
d_matcher.knnMatch(d_query, d_matches, knn);
338+
GPU_OFF;
339+
340+
SUBTEST << "radiusMatch";
341+
float max_distance = rng.uniform(25.0f, 65.0f);
342+
343+
CPU_ON;
344+
matcher.radiusMatch(query, matches, max_distance);
345+
CPU_OFF;
346+
347+
GPU_ON;
348+
d_matcher.radiusMatch(d_query, d_matches, max_distance);
349+
GPU_OFF;
276350
}

0 commit comments

Comments
 (0)