Timer.h 2.79 KB
Newer Older
Kenneth Moreland's avatar
Kenneth Moreland committed
1 2 3 4 5 6 7 8 9 10
//============================================================================
//  Copyright (c) Kitware, Inc.
//  All rights reserved.
//  See LICENSE.txt for details.
//  This software is distributed WITHOUT ANY WARRANTY; without even
//  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
//  PURPOSE.  See the above copyright notice for more information.
//
//  Copyright 2014 Sandia Corporation.
//  Copyright 2014 UT-Battelle, LLC.
11
//  Copyright 2014 Los Alamos National Security.
Kenneth Moreland's avatar
Kenneth Moreland committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
//
//  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
//  the U.S. Government retains certain rights in this software.
//
//  Under the terms of Contract DE-AC52-06NA25396 with Los Alamos National
//  Laboratory (LANL), the U.S. Government retains certain rights in
//  this software.
//============================================================================
#ifndef vtk_m_cont_Timer_h
#define vtk_m_cont_Timer_h

#include <vtkm/cont/DeviceAdapter.h>

namespace vtkm {
namespace cont {

/// A class that can be used to time operations in VTK-m that might be occuring
/// in parallel. You should make sure that the device adapter for the timer
/// matches that being used to execute algorithms to ensure that the thread
/// synchronization is correct.
///
/// The there is no guaranteed resolution of the time but should generally be
/// good to about a millisecond.
///
template<class Device = VTKM_DEFAULT_DEVICE_ADAPTER_TAG>
class Timer
{
public:
  /// When a timer is constructed, all threads are synchronized and the
  /// current time is marked so that GetElapsedTime returns the number of
  /// seconds elapsed since the construction.
  VTKM_CONT_EXPORT
  Timer() : TimerImplementation() {  }

  /// Resets the timer. All further calls to GetElapsedTime will report the
  /// number of seconds elapsed since the call to this. This method
  /// synchronizes all asynchronous operations.
  ///
  VTKM_CONT_EXPORT
  void Reset()
  {
    this->TimerImplementation.Reset();
  }

  /// Returns the elapsed time in seconds between the construction of this
  /// class or the last call to Reset and the time this function is called. The
  /// time returned is measured in wall time. GetElapsedTime may be called any
  /// number of times to get the progressive time. This method synchronizes all
  /// asynchronous operations.
  ///
  VTKM_CONT_EXPORT
63
  vtkm::Float64 GetElapsedTime()
Kenneth Moreland's avatar
Kenneth Moreland committed
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
  {
    return this->TimerImplementation.GetElapsedTime();
  }

private:
  /// Some timers are ill-defined when copied, so disallow that for all timers.
  VTKM_CONT_EXPORT Timer(const Timer<Device> &);  // Not implemented.
  VTKM_CONT_EXPORT void operator=(const Timer<Device> &); // Not implemented.

  vtkm::cont::DeviceAdapterTimerImplementation<Device>
      TimerImplementation;
};

}
} // namespace vtkm::cont

#endif //vtk_m_cont_Timer_h