ocl: simplify ocl::Timer interface
authorAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 18 Oct 2017 12:59:16 +0000 (15:59 +0300)
committerAlexander Alekhin <alexander.alekhin@intel.com>
Wed, 18 Oct 2017 13:01:21 +0000 (16:01 +0300)
modules/core/include/opencv2/core/ocl.hpp
modules/core/src/ocl.cpp
modules/dnn/src/ocl4dnn/src/ocl4dnn_conv_spatial.cpp

index c36252a..5f13e04 100644 (file)
@@ -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();
index b523308..984307e 100644 (file)
@@ -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
index 13d5afb..cd94e44 100644 (file)
@@ -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: " <<