You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					147 lines
				
				3.9 KiB
			
		
		
			
		
	
	
					147 lines
				
				3.9 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								// Copyright (C) 2006, 2009 International Business Machines and others.
							 | 
						||
| 
								 | 
							
								// All Rights Reserved.
							 | 
						||
| 
								 | 
							
								// This code is published under the Eclipse Public License.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// $Id: IpTimedTask.hpp 1861 2010-12-21 21:34:47Z andreasw $
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Authors:  Andreas Waechter               IBM    2005-09-19
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __IPTIMEDTASK_HPP__
							 | 
						||
| 
								 | 
							
								#define __IPTIMEDTASK_HPP__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "IpUtils.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Ipopt
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  /** This class is used to collect timing information for a
							 | 
						||
| 
								 | 
							
								   *  particular task. */
							 | 
						||
| 
								 | 
							
								  class TimedTask
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    /**@name Constructors/Destructors */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Default constructor. */
							 | 
						||
| 
								 | 
							
								    TimedTask()
							 | 
						||
| 
								 | 
							
								        :
							 | 
						||
| 
								 | 
							
								        total_cputime_(0.),
							 | 
						||
| 
								 | 
							
								        total_systime_(0.),
							 | 
						||
| 
								 | 
							
								        total_walltime_(0.),
							 | 
						||
| 
								 | 
							
								        start_called_(false),
							 | 
						||
| 
								 | 
							
								        end_called_(true)
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Default destructor */
							 | 
						||
| 
								 | 
							
								    ~TimedTask()
							 | 
						||
| 
								 | 
							
								    {}
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method for resetting time to zero. */
							 | 
						||
| 
								 | 
							
								    void Reset()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      total_cputime_ = 0.;
							 | 
						||
| 
								 | 
							
								      total_systime_ = 0.;
							 | 
						||
| 
								 | 
							
								      total_walltime_ = 0.;
							 | 
						||
| 
								 | 
							
								      start_called_ = false;
							 | 
						||
| 
								 | 
							
								      end_called_ = true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method that is called before execution of the task. */
							 | 
						||
| 
								 | 
							
								    void Start()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(end_called_);
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(!start_called_);
							 | 
						||
| 
								 | 
							
								      end_called_ = false;
							 | 
						||
| 
								 | 
							
								      start_called_ = true;
							 | 
						||
| 
								 | 
							
								      start_cputime_ = CpuTime();
							 | 
						||
| 
								 | 
							
								      start_systime_ = SysTime();
							 | 
						||
| 
								 | 
							
								      start_walltime_ = WallclockTime();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method that is called after execution of the task. */
							 | 
						||
| 
								 | 
							
								    void End()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(!end_called_);
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(start_called_);
							 | 
						||
| 
								 | 
							
								      end_called_ = true;
							 | 
						||
| 
								 | 
							
								      start_called_ = false;
							 | 
						||
| 
								 | 
							
								      total_cputime_ += CpuTime() - start_cputime_;
							 | 
						||
| 
								 | 
							
								      total_systime_ += SysTime() - start_systime_;
							 | 
						||
| 
								 | 
							
								      total_walltime_ += WallclockTime() - start_walltime_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method that is called after execution of the task for which
							 | 
						||
| 
								 | 
							
								     *  timing might have been started.  This only updates the timing
							 | 
						||
| 
								 | 
							
								     *  if the timing has indeed been conducted. This is useful to
							 | 
						||
| 
								 | 
							
								     *  stop timing after catching exceptions. */
							 | 
						||
| 
								 | 
							
								    void EndIfStarted()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      if (start_called_) {
							 | 
						||
| 
								 | 
							
								        end_called_ = true;
							 | 
						||
| 
								 | 
							
								        start_called_ = false;
							 | 
						||
| 
								 | 
							
								        total_cputime_ += CpuTime() - start_cputime_;
							 | 
						||
| 
								 | 
							
								        total_systime_ += SysTime() - start_systime_;
							 | 
						||
| 
								 | 
							
								        total_walltime_ += WallclockTime() - start_walltime_;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(end_called_);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method returning total CPU time spend for task so far. */
							 | 
						||
| 
								 | 
							
								    Number TotalCpuTime() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(end_called_);
							 | 
						||
| 
								 | 
							
								      return total_cputime_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method returning total system time spend for task so far. */
							 | 
						||
| 
								 | 
							
								    Number TotalSysTime() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(end_called_);
							 | 
						||
| 
								 | 
							
								      return total_systime_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Method returning total wall clock time spend for task so far. */
							 | 
						||
| 
								 | 
							
								    Number TotalWallclockTime() const
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      DBG_ASSERT(end_called_);
							 | 
						||
| 
								 | 
							
								      return total_walltime_;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    /**@name Default Compiler Generated Methods (Hidden to avoid
							 | 
						||
| 
								 | 
							
								     * implicit creation/calling).  These methods are not
							 | 
						||
| 
								 | 
							
								     * implemented and we do not want the compiler to implement them
							 | 
						||
| 
								 | 
							
								     * for us, so we declare them private and do not define
							 | 
						||
| 
								 | 
							
								     * them. This ensures that they will not be implicitly
							 | 
						||
| 
								 | 
							
								     * created/called. */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    /** Copy Constructor */
							 | 
						||
| 
								 | 
							
								    TimedTask(const TimedTask&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Overloaded Equals Operator */
							 | 
						||
| 
								 | 
							
								    void operator=(const TimedTask&);
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** CPU time at beginning of task. */
							 | 
						||
| 
								 | 
							
								    Number start_cputime_;
							 | 
						||
| 
								 | 
							
								    /** Total CPU time for task measured so far. */
							 | 
						||
| 
								 | 
							
								    Number total_cputime_;
							 | 
						||
| 
								 | 
							
								    /** System time at beginning of task. */
							 | 
						||
| 
								 | 
							
								    Number start_systime_;
							 | 
						||
| 
								 | 
							
								    /** Total system time for task measured so far. */
							 | 
						||
| 
								 | 
							
								    Number total_systime_;
							 | 
						||
| 
								 | 
							
								    /** Wall clock time at beginning of task. */
							 | 
						||
| 
								 | 
							
								    Number start_walltime_;
							 | 
						||
| 
								 | 
							
								    /** Total wall clock time for task measured so far. */
							 | 
						||
| 
								 | 
							
								    Number total_walltime_;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @name fields for debugging */
							 | 
						||
| 
								 | 
							
								    //@{
							 | 
						||
| 
								 | 
							
								    bool start_called_;
							 | 
						||
| 
								 | 
							
								    bool end_called_;
							 | 
						||
| 
								 | 
							
								    //@}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								} // namespace Ipopt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |