added minMaxLoc performance tests
This commit is contained in:
parent
6b4047eb46
commit
8644c6f86b
@ -33,9 +33,8 @@ void TestSystem::run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
cout << setiosflags(ios_base::fixed | ios_base::left);
|
cout << setiosflags(ios_base::fixed | ios_base::left);
|
||||||
cout << "\nCPU Total: " << setprecision(3) << cpu_total_ / getTickFrequency() << " sec\n";
|
cout << "\nAverage GPU Speedup: x" << setprecision(3)
|
||||||
cout << "GPU Total: " << setprecision(3) << gpu_total_ / getTickFrequency() << " sec (x"
|
<< speedup_total_ / num_subtests_called_ << endl;
|
||||||
<< setprecision(3) << static_cast<double>(cpu_total_) / gpu_total_ << ")\n";
|
|
||||||
cout << resetiosflags(ios_base::fixed | ios_base::left);
|
cout << resetiosflags(ios_base::fixed | ios_base::left);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +46,9 @@ void TestSystem::flush()
|
|||||||
|
|
||||||
int cpu_time = static_cast<int>(cpu_elapsed_ / getTickFrequency() * 1000.0);
|
int cpu_time = static_cast<int>(cpu_elapsed_ / getTickFrequency() * 1000.0);
|
||||||
int gpu_time = static_cast<int>(gpu_elapsed_ / getTickFrequency() * 1000.0);
|
int gpu_time = static_cast<int>(gpu_elapsed_ / getTickFrequency() * 1000.0);
|
||||||
|
|
||||||
double speedup = static_cast<double>(cpu_time) / gpu_time;
|
double speedup = static_cast<double>(cpu_time) / gpu_time;
|
||||||
|
speedup_total_ += speedup;
|
||||||
|
|
||||||
cpu_elapsed_ = 0;
|
cpu_elapsed_ = 0;
|
||||||
gpu_elapsed_ = 0;
|
gpu_elapsed_ = 0;
|
||||||
@ -72,6 +73,7 @@ void TestSystem::flush()
|
|||||||
cout << resetiosflags(ios_base::fixed | ios_base::left) << endl;
|
cout << resetiosflags(ios_base::fixed | ios_base::left) << endl;
|
||||||
|
|
||||||
can_flush_ = false;
|
can_flush_ = false;
|
||||||
|
num_subtests_called_++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@ public:
|
|||||||
{
|
{
|
||||||
int64 delta = cv::getTickCount() - cpu_started_;
|
int64 delta = cv::getTickCount() - cpu_started_;
|
||||||
cpu_elapsed_ += delta;
|
cpu_elapsed_ += delta;
|
||||||
cpu_total_ += delta;
|
|
||||||
can_flush_ = true;
|
can_flush_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +51,6 @@ public:
|
|||||||
{
|
{
|
||||||
int64 delta = cv::getTickCount() - gpu_started_;
|
int64 delta = cv::getTickCount() - gpu_started_;
|
||||||
gpu_elapsed_ += delta;
|
gpu_elapsed_ += delta;
|
||||||
gpu_total_ += delta;
|
|
||||||
can_flush_ = true;
|
can_flush_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,9 +62,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestSystem(): can_flush_(false),
|
TestSystem(): can_flush_(false), cpu_elapsed_(0), gpu_elapsed_(0),
|
||||||
cpu_elapsed_(0), cpu_total_(0),
|
speedup_total_(0.0), num_subtests_called_(0) {};
|
||||||
gpu_elapsed_(0), gpu_total_(0) {};
|
|
||||||
|
|
||||||
void flush();
|
void flush();
|
||||||
|
|
||||||
@ -77,8 +74,11 @@ private:
|
|||||||
|
|
||||||
bool can_flush_;
|
bool can_flush_;
|
||||||
|
|
||||||
int64 cpu_started_, cpu_elapsed_, cpu_total_;
|
int64 cpu_started_, cpu_elapsed_;
|
||||||
int64 gpu_started_, gpu_elapsed_, gpu_total_;
|
int64 gpu_started_, gpu_elapsed_;
|
||||||
|
|
||||||
|
double speedup_total_;
|
||||||
|
int num_subtests_called_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,24 +7,52 @@ using namespace cv;
|
|||||||
|
|
||||||
TEST(matchTemplate)
|
TEST(matchTemplate)
|
||||||
{
|
{
|
||||||
|
Mat image, templ, result;
|
||||||
|
gen(image, 3000, 3000, CV_8U);
|
||||||
|
|
||||||
|
gpu::GpuMat d_image(image), d_templ, d_result;
|
||||||
|
|
||||||
for (int templ_size = 5; templ_size <= 1000; templ_size *= 2)
|
for (int templ_size = 5; templ_size <= 1000; templ_size *= 2)
|
||||||
{
|
{
|
||||||
SUBTEST << "img 3000, templ " << templ_size << ", 8U, SQDIFF";
|
SUBTEST << "img 3000, templ " << templ_size << ", 8U, SQDIFF";
|
||||||
|
|
||||||
Mat image; gen(image, 3000, 3000, CV_8U);
|
gen(templ, templ_size, templ_size, CV_8U);
|
||||||
Mat templ; gen(templ, templ_size, templ_size, CV_8U);
|
|
||||||
Mat result;
|
|
||||||
|
|
||||||
CPU_ON;
|
CPU_ON;
|
||||||
matchTemplate(image, templ, result, CV_TM_SQDIFF);
|
matchTemplate(image, templ, result, CV_TM_SQDIFF);
|
||||||
CPU_OFF;
|
CPU_OFF;
|
||||||
|
|
||||||
gpu::GpuMat d_image(image);
|
d_templ = templ;
|
||||||
gpu::GpuMat d_templ(templ);
|
|
||||||
gpu::GpuMat d_result;
|
|
||||||
|
|
||||||
GPU_ON;
|
GPU_ON;
|
||||||
gpu::matchTemplate(d_image, d_templ, d_result, CV_TM_SQDIFF);
|
gpu::matchTemplate(d_image, d_templ, d_result, CV_TM_SQDIFF);
|
||||||
GPU_OFF;
|
GPU_OFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEST(minMaxLoc)
|
||||||
|
{
|
||||||
|
Mat src;
|
||||||
|
gpu::GpuMat d_src;
|
||||||
|
|
||||||
|
double min_val, max_val;
|
||||||
|
Point min_loc, max_loc;
|
||||||
|
|
||||||
|
for (int size = 2000; size <= 8000; size *= 2)
|
||||||
|
{
|
||||||
|
SUBTEST << "img " << size << ", 32F, no mask";
|
||||||
|
|
||||||
|
gen(src, size, size, CV_32F);
|
||||||
|
|
||||||
|
CPU_ON;
|
||||||
|
minMaxLoc(src, &min_val, &max_val, &min_loc, &max_loc);
|
||||||
|
CPU_OFF;
|
||||||
|
|
||||||
|
d_src = src;
|
||||||
|
|
||||||
|
GPU_ON;
|
||||||
|
gpu::minMaxLoc(d_src, &min_val, &max_val, &min_loc, &max_loc);
|
||||||
|
GPU_OFF;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user