| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | 
							- /*! \file timer_linux.h
 
-  *  \brief Contains timer class that can be used by Linux systems.
 
-  */
 
- #ifndef TIMER_LINUX_H
 
- #define TIMER_LINUX_H
 
- #include <sys/time.h>
 
- #include <iostream>
 
- #include <vector>
 
- class Timer
 
- {
 
- private:
 
-     timeval timerStart;
 
-     timeval timerEnd;
 
-     
 
-     std::vector<double> multi_time; // used for estimating multi backends.
 
-     std::vector<double> time;
 
-     bool record_multi;
 
-     
 
-     
 
-     void addMultiMaxTime() // used to estimate when using multi-Backend
 
-     {
 
- 	double max = 0.0f; 
 
- 	//std::cout<<"AddMultiMaxTime call before"<<time.size()<<"\n";
 
- 	if(multi_time.empty())
 
- 	  return;
 
- 	for(std::vector<double>::iterator it = multi_time.begin(); it != multi_time.end(); ++it)
 
-         {
 
- 	  if (max < *it) 
 
- 	      max = *it;
 
- 	}
 
-         time.push_back( max );
 
- 	//std::cout<<"MAXXX:"<<max<<" ";
 
- 	
 
- 	multi_time.clear();  // clear it in both cases.
 
- 	//std::cout<<"AddMultiMaxTime call after reset"<<time.size()<<"\n";
 
-     }
 
-     
 
-     void addMultiMinTime() // used to estimate when using multi-Backend
 
-     {
 
- 	double min = 0.0f; 
 
- 	if(multi_time.empty())
 
- 	  return;
 
- 	for(std::vector<double>::iterator it = multi_time.begin(); it != multi_time.end(); ++it)
 
-         {
 
- 	  if (min > *it) 
 
- 	      min = *it;
 
- 	}
 
-         time.push_back( min );
 
- 	
 
- 	multi_time.clear();  // clear it in both cases.
 
-     }
 
-     
 
- public:
 
-       
 
-      void start_record_multi()
 
-      {
 
-        record_multi=true;
 
-        multi_time.clear();  // clear it in both cases.
 
-      }
 
-      
 
-      void stop_record_multi()
 
-      {
 
-        addMultiMaxTime();
 
-        record_multi=false;
 
-      }
 
-   
 
-     Timer() {record_multi=false;}
 
-     /*!
 
-      *  Starts the timimg.
 
-      */
 
-     void start()
 
-     {
 
-         gettimeofday(&timerStart, NULL);
 
- 	//std::cout<<"start_\n";
 
-     }
 
-     /*!
 
-      *  Stops the timimg and stores time in a vector.
 
-      */
 
-     void stop()
 
-     {
 
-         gettimeofday(&timerEnd, NULL);
 
- 	if(record_multi)
 
- 	  multi_time.push_back( (timerEnd.tv_sec - timerStart.tv_sec + (timerEnd.tv_usec - timerStart.tv_usec) / 1000000.0) * 1000 );
 
- 	else 
 
- 	  time.push_back( (timerEnd.tv_sec - timerStart.tv_sec + (timerEnd.tv_usec - timerStart.tv_usec) / 1000000.0) * 1000 );
 
- 	//std::cout<<"stop_\n";
 
-     }
 
-     /*!
 
-      *  Clears all timings taken.
 
-      */
 
-     void reset()
 
-     {
 
-       if(!record_multi)
 
-       {
 
- //	std::cout<<"Time reset:\n";
 
-         time.clear();
 
-       }
 
-       
 
-       multi_time.clear();  // clear it in both cases.
 
-       
 
-     }
 
-     
 
-     
 
-     
 
-     /*!
 
-      *  \param run The run to get timing of.
 
-      *
 
-      *  \return Time for a certain run.
 
-      */
 
-     double getTime(int run = 0)
 
-     {
 
-         return time.at(run);
 
-     }
 
-     /*!
 
-      *  \return Total time of all stored runs.
 
-      */
 
-     double getTotalTime()
 
-     {
 
-         double totalTime = 0.0f;
 
-         for(std::vector<double>::iterator it = time.begin(); it != time.end(); ++it)
 
-         {
 
-             totalTime += *it;
 
-         }
 
-         return totalTime;
 
-     }
 
-     /*!
 
-      *  \return Average time of all stored runs.
 
-      */
 
-     double getAverageTime()
 
-     {
 
-         double totalTime = 0.0f;
 
-         for(std::vector<double>::iterator it = time.begin(); it != time.end(); ++it)
 
-         {
 
-             totalTime += *it;
 
-         }
 
-         return (double)(totalTime/time.size());
 
-     }
 
-     
 
-     double getMaxTime()
 
-     {
 
-         double max = 0.0f; 
 
- 	for(std::vector<double>::iterator it = time.begin(); it != time.end(); ++it)
 
-         {
 
- 	  if (max < *it) 
 
- 	      max = *it;
 
- 	}
 
- 	return max;
 
-     }
 
-     
 
-     double getMinTime()
 
-     {
 
-         double min = 0.0f; 
 
- 	for(std::vector<double>::iterator it = time.begin(); it != time.end(); ++it)
 
-         {
 
- 	  if (min > *it) 
 
- 	      min = *it;
 
- 	}
 
- 	
 
- 	return min;
 
-     }
 
-     /*!
 
-      *  \return The resolution of the timer in micro seconds.
 
-      */
 
-     double getResolutionUs()
 
-     {
 
-         double result = 0.0f;
 
-         timeval tStart;
 
-         timeval tEnd;
 
-         gettimeofday(&tStart, NULL);
 
-         gettimeofday(&tEnd, NULL);
 
-         int delay = 0;
 
-         do
 
-         {
 
-             delay++;
 
-             gettimeofday(&tStart, NULL);
 
-             for(int i = 0; i < delay; ++i) ;
 
-             gettimeofday(&tEnd, NULL);
 
-             result = ((((double)tEnd.tv_sec)*1000000.0) + ((double)tEnd.tv_usec)) - ((((double)tStart.tv_sec)*1000000.0) + ((double)tStart.tv_usec));
 
-         } while(result == 0);
 
-         return result;
 
-     }
 
-     /*!
 
-      *  \return Number of runs stored in timer.
 
-      */
 
-     int getNumTimings()
 
-     {
 
-         return time.size();
 
-     }
 
- };
 
- #endif
 
 
  |