VTK-m  2.1
Public Member Functions | Private Member Functions | Private Attributes | List of all members
vtkm::cont::Timer Class Reference

A class that can be used to time operations in VTK-m that might be occuring in parallel. More...

#include <Timer.h>

Public Member Functions

 Timer ()
 
 Timer (vtkm::cont::DeviceAdapterId device)
 
 ~Timer ()
 
void Reset ()
 Restores the initial state of the :class:vtkm::cont::Timer. More...
 
void Reset (vtkm::cont::DeviceAdapterId device)
 Resets the timer and changes the device to time on. More...
 
void Start ()
 Causes the Timer to begin timing. More...
 
void Stop ()
 Causes the Timer() to finish timing. More...
 
bool Started () const
 Returns true if Start() has been called. More...
 
bool Stopped () const
 Returns true if Timer::Stop() has been called. More...
 
bool Ready () const
 Used to check if Timer has finished the synchronization to get the result from the device. More...
 
vtkm::Float64 GetElapsedTime () const
 Returns the amount of time that has elapsed between calling Start() and Stop(). More...
 
vtkm::cont::DeviceAdapterId GetDevice () const
 Returns the id of the device adapter for which this timer is synchronized. More...
 
void Synchronize () const
 Synchronize the device(s) that this timer is monitoring without starting or stopping the timer. More...
 

Private Member Functions

 Timer (const Timer &)=delete
 Some timers are ill-defined when copied, so disallow that for all timers. More...
 
void operator= (const Timer &)=delete
 

Private Attributes

vtkm::cont::DeviceAdapterId Device
 
std::unique_ptr< detail::EnabledDeviceTimerImpls > Internal
 

Detailed Description

A class that can be used to time operations in VTK-m that might be occuring in parallel.

Users are recommended to provide a device adapter at construction time which matches the one being used to execute algorithms to ensure that thread synchronization is correct and accurate. If no device adapter is provided at construction time, the maximum elapsed time of all enabled deivces will be returned. Normally cuda is expected to have the longest execution time if enabled. Per device adapter time query is also supported. It's useful when users want to reuse the same timer to measure the cuda kernal call as well as the cuda device execution. It is also possible to change the device adapter after construction by calling the form of the Reset method with a new DeviceAdapterId.

The there is no guaranteed resolution of the time but should generally be good to about a millisecond.

Constructor & Destructor Documentation

◆ Timer() [1/3]

vtkm::cont::Timer::Timer ( )

◆ Timer() [2/3]

vtkm::cont::Timer::Timer ( vtkm::cont::DeviceAdapterId  device)

◆ ~Timer()

vtkm::cont::Timer::~Timer ( )

◆ Timer() [3/3]

vtkm::cont::Timer::Timer ( const Timer )
privatedelete

Some timers are ill-defined when copied, so disallow that for all timers.

Member Function Documentation

◆ GetDevice()

vtkm::cont::DeviceAdapterId vtkm::cont::Timer::GetDevice ( ) const
inline

Returns the id of the device adapter for which this timer is synchronized.

If the device adapter has the same id as vtkm::cont::DeviceAdapterTagAny (the default), then the timer will synchronize on all devices.

◆ GetElapsedTime()

vtkm::Float64 vtkm::cont::Timer::GetElapsedTime ( ) const

Returns the amount of time that has elapsed between calling Start() and Stop().

If Stop() was not called, then the amount of time between calling Start() and GetElapsedTime() is returned. GetElapsedTime() can optionally take a device adapter tag or id to specify for which device to return the elapsed time. Returns the device for which this timer is synchronized. If the device adapter has the same id as vtkm::cont::DeviceAdapterTagAny, then the timer will synchronize all devices.

◆ operator=()

void vtkm::cont::Timer::operator= ( const Timer )
privatedelete

◆ Ready()

bool vtkm::cont::Timer::Ready ( ) const

Used to check if Timer has finished the synchronization to get the result from the device.

◆ Reset() [1/2]

void vtkm::cont::Timer::Reset ( )

Restores the initial state of the :class:vtkm::cont::Timer.

All previous recorded time is erased. Reset() optionally takes a device adapter tag or id that specifies on which device to time and synchronize.

◆ Reset() [2/2]

void vtkm::cont::Timer::Reset ( vtkm::cont::DeviceAdapterId  device)

Resets the timer and changes the device to time on.

◆ Start()

void vtkm::cont::Timer::Start ( )

Causes the Timer to begin timing.

The elapsed time will record an interval beginning when this method is called.

◆ Started()

bool vtkm::cont::Timer::Started ( ) const

Returns true if Start() has been called.

It is invalid to try to get the elapsed time if Started() is not true.

◆ Stop()

void vtkm::cont::Timer::Stop ( )

Causes the Timer() to finish timing.

The elapsed time will record an interval ending when this method is called. It is invalid to stop the timer if Started() is not true.

◆ Stopped()

bool vtkm::cont::Timer::Stopped ( ) const

Returns true if Timer::Stop() has been called.

If Stopped() is true, then the elapsed time will no longer increase. If Stopped() is false and Started() is true, then the timer is still running.

◆ Synchronize()

void vtkm::cont::Timer::Synchronize ( ) const

Synchronize the device(s) that this timer is monitoring without starting or stopping the timer.

This is useful for ensuring that external events are synchronized to this timer.

Note that this method will allways block until the device(s) finish even if the Start/Stop methods do not actually block. For example, the timer for CUDA does not actually wait for asynchronous operations to finish. Rather, it inserts a fence and records the time as fences are encounted. But regardless, this Synchronize method will block for the CUDA device.

Member Data Documentation

◆ Device

vtkm::cont::DeviceAdapterId vtkm::cont::Timer::Device
private

◆ Internal

std::unique_ptr<detail::EnabledDeviceTimerImpls> vtkm::cont::Timer::Internal
private

The documentation for this class was generated from the following file: