92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | // Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com> | ||
|  | 
 | ||
|  | // Use, modification and distribution is subject to the Boost Software | ||
|  | // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | ||
|  | // http://www.boost.org/LICENSE_1_0.txt) | ||
|  | 
 | ||
|  | /** @file timer.hpp | ||
|  |  * | ||
|  |  *  This header provides the @c timer class, which provides access to | ||
|  |  *  the MPI timers. | ||
|  |  */ | ||
|  | #ifndef BOOST_MPI_TIMER_HPP | ||
|  | #define BOOST_MPI_TIMER_HPP | ||
|  | 
 | ||
|  | #include <boost/mpi/config.hpp> | ||
|  | #include <boost/limits.hpp> | ||
|  | 
 | ||
|  | namespace boost { namespace mpi { | ||
|  | 
 | ||
|  | /** @brief A simple timer that provides access to the MPI timing | ||
|  |  * facilities. | ||
|  |  * | ||
|  |  *  The @c timer class is a simple wrapper around the MPI timing | ||
|  |  *  facilities that mimics the interface of the Boost Timer library. | ||
|  |  */ | ||
|  | class BOOST_MPI_DECL timer { | ||
|  | public: | ||
|  |   /** Initializes the timer | ||
|  |    * | ||
|  |    * @post @c elapsed() == 0 | ||
|  |    */ | ||
|  |   timer(); | ||
|  | 
 | ||
|  |   /** Restart the timer. | ||
|  |    * | ||
|  |    * @post @c elapsed() == 0 | ||
|  |    */ | ||
|  |   void restart(); | ||
|  | 
 | ||
|  |   /** Return the amount of time that has elapsed since the last | ||
|  |    *  construction or reset, in seconds. | ||
|  |    */ | ||
|  |   double elapsed() const; | ||
|  | 
 | ||
|  |   /** Return an estimate of the maximum possible value of | ||
|  |    *  elapsed(). Note that this routine may return too high a value on | ||
|  |    *  some systems.  | ||
|  |    */ | ||
|  |   double elapsed_max() const;   | ||
|  | 
 | ||
|  |   /** Returns the minimum non-zero value that @c elapsed() may | ||
|  |    *  return. This is the resolution of the timer. | ||
|  |    */ | ||
|  |   double elapsed_min() const; | ||
|  | 
 | ||
|  |   /** Determines whether the elapsed time values are global times or | ||
|  |       local processor times. */ | ||
|  |   static bool time_is_global(); | ||
|  | 
 | ||
|  | private: | ||
|  |   double start_time; | ||
|  | }; // timer | ||
|  | 
 | ||
|  | inline timer::timer()  | ||
|  | {  | ||
|  |   restart();  | ||
|  | } | ||
|  | 
 | ||
|  | inline void timer::restart() | ||
|  | { | ||
|  |   start_time = MPI_Wtime(); | ||
|  | } | ||
|  | 
 | ||
|  | inline double timer::elapsed() const | ||
|  | { | ||
|  |   return MPI_Wtime() - start_time; | ||
|  | } | ||
|  | 
 | ||
|  | inline double timer::elapsed_max() const | ||
|  | { | ||
|  |   return (std::numeric_limits<double>::max)(); | ||
|  | } | ||
|  | 
 | ||
|  | inline double timer::elapsed_min() const | ||
|  | { | ||
|  |   return MPI_Wtick(); | ||
|  | } | ||
|  | 
 | ||
|  | } } // end namespace boost::mpi | ||
|  | 
 | ||
|  | #endif // BOOST_MPI_TIMER_HPP |