提交 185faf99 编写于 作者: A Alexander Alekhin

ocl: simplify ocl::Timer interface

上级 c63b4433
......@@ -742,13 +742,16 @@ public:
~Timer();
void start();
void stop();
float milliSeconds();
float microSeconds();
float seconds();
uint64 durationNS() const; //< duration in nanoseconds
protected:
struct Impl;
Impl* p;
Impl* const p;
private:
Timer(const Timer&); // disabled
Timer& operator=(const Timer&); // disabled
};
CV_EXPORTS MatAllocator* getOpenCLAllocator();
......
......@@ -5288,68 +5288,37 @@ struct Timer::Impl
#endif
}
float microSeconds()
uint64 durationNS() const
{
#ifdef HAVE_OPENCL
return (float)timer.getTimeMicro();
return (uint64)(timer.getTimeSec() * 1e9);
#else
return 0;
#endif
}
float milliSeconds()
{
#ifdef HAVE_OPENCL
return (float)timer.getTimeMilli();
#else
return 0;
#endif
}
float seconds()
{
#ifdef HAVE_OPENCL
return (float)timer.getTimeSec();
#else
return 0;
#endif
}
TickMeter timer;
};
Timer::Timer(const Queue& q)
{
p = new Impl(q);
}
Timer::~Timer()
{
if(p)
{
delete p;
p = 0;
}
}
Timer::Timer(const Queue& q) : p(new Impl(q)) { }
Timer::~Timer() { delete p; }
void Timer::start()
{
if(p)
p->start();
CV_Assert(p);
p->start();
}
void Timer::stop()
{
if(p)
p->stop();
CV_Assert(p);
p->stop();
}
float Timer::microSeconds()
{ return p ? p->microSeconds() : 0; }
float Timer::milliSeconds()
{ return p ? p->milliSeconds() : 0; }
float Timer::seconds()
{ return p ? p->seconds() : 0; }
uint64 Timer::durationNS() const
{
CV_Assert(p);
return p->durationNS();
}
}}
}} // namespace
......@@ -890,7 +890,7 @@ float OCL4DNNConvSpatial<float>::timedConvolve(const UMat &bottom, UMat &top,
return 1e5;
}
float elapsedTime = timer.milliSeconds() / loop_cnt;
float elapsedTime = timer.durationNS() * 1e-6 / loop_cnt;
#ifdef dbg
double out_w = output_w_;
double out_h = output_h_;
......@@ -899,9 +899,9 @@ float OCL4DNNConvSpatial<float>::timedConvolve(const UMat &bottom, UMat &top,
double k_h = kernel_h_;
double k_z = channels_;
double totalFlops = ((k_w*k_h*k_z -1)*2)*(out_w*out_h*out_z)*num_;
std::cout << "\tEstimated Gflops:" << ((totalFlops/1000)/1000)/1000
std::cout << "\tEstimated Gflops:" << (totalFlops * 1e-9)
<< std::endl;
std::cout << "\tEstimated GFLOPS/S: " << (((totalFlops/1000)/1000)/1000)*(1000.0/elapsedTime)
std::cout << "\tEstimated GFLOPS/S: " << ((totalFlops * 1e-9)*(1000.0/elapsedTime))
<< std::endl;
#if 0
std::cout << "Estimated utilization: " <<
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册