VTK-m
2.2
|
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 |
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.
vtkm::cont::Timer::Timer | ( | ) |
vtkm::cont::Timer::Timer | ( | vtkm::cont::DeviceAdapterId | device | ) |
vtkm::cont::Timer::~Timer | ( | ) |
|
privatedelete |
Some timers are ill-defined when copied, so disallow that for all timers.
|
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.
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.
|
privatedelete |
bool vtkm::cont::Timer::Ready | ( | ) | const |
Used to check if Timer has finished the synchronization to get the result from the device.
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.
void vtkm::cont::Timer::Reset | ( | vtkm::cont::DeviceAdapterId | device | ) |
Resets the timer and changes the device to time on.
void vtkm::cont::Timer::Start | ( | ) |
Causes the Timer
to begin timing.
The elapsed time will record an interval beginning when this method is called.
bool vtkm::cont::Timer::Started | ( | ) | const |
void vtkm::cont::Timer::Stop | ( | ) |
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.
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.
|
private |
|
private |