tvm
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Static Public Member Functions | List of all members
tvm::runtime::Timer Class Reference

Timer for a specific device. More...

#include <profiling.h>

Inheritance diagram for tvm::runtime::Timer:
Collaboration diagram for tvm::runtime::Timer:

Public Member Functions

 TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS (Timer, ObjectRef, TimerNode)
 
- Public Member Functions inherited from tvm::runtime::ObjectRef
 ObjectRef ()=default
 default constructor More...
 
 ObjectRef (ObjectPtr< Object > data)
 Constructor from existing object ptr. More...
 
bool same_as (const ObjectRef &other) const
 Comparator. More...
 
bool operator== (const ObjectRef &other) const
 Comparator. More...
 
bool operator!= (const ObjectRef &other) const
 Comparator. More...
 
bool operator< (const ObjectRef &other) const
 Comparator. More...
 
bool defined () const
 
const Objectget () const
 
const Objectoperator-> () const
 
bool unique () const
 
int use_count () const
 
template<typename ObjectType >
const ObjectType * as () const
 Try to downcast the internal Object to a raw pointer of a corresponding type. More...
 

Static Public Member Functions

static Timer Start (Device dev)
 Get a device specific timer. More...
 

Additional Inherited Members

- Public Types inherited from tvm::runtime::ObjectRef
using ContainerType = Object
 type indicate the container type. More...
 
- Static Public Attributes inherited from tvm::runtime::ObjectRef
static constexpr bool _type_is_nullable = true
 
- Protected Member Functions inherited from tvm::runtime::ObjectRef
Objectget_mutable () const
 
- Static Protected Member Functions inherited from tvm::runtime::ObjectRef
template<typename T >
static T DowncastNoCheck (ObjectRef ref)
 Internal helper function downcast a ref without check. More...
 
static void FFIClearAfterMove (ObjectRef *ref)
 Clear the object ref data field without DecRef after we successfully moved the field. More...
 
template<typename ObjectType >
static ObjectPtr< ObjectType > GetDataPtr (const ObjectRef &ref)
 Internal helper function get data_ as ObjectPtr of ObjectType. More...
 
- Protected Attributes inherited from tvm::runtime::ObjectRef
ObjectPtr< Objectdata_
 Internal pointer that backs the reference. More...
 

Detailed Description

Timer for a specific device.

This is a managed reference to a TimerNode.

See also
TimerNode

Member Function Documentation

◆ Start()

static Timer tvm::runtime::Timer::Start ( Device  dev)
static

Get a device specific timer.

Parameters
devThe device to time.
Returns
A Timer that has already been started.

Use this function to time runtime of arbitrary regions of code on a specific device. The code that you want to time should be running on the device otherwise the timer will not return correct results. This is a lower level interface than TimeEvaluator and only runs the timed code once (TimeEvaluator runs the code multiple times).

A default timer is used if a device specific one does not exist. This timer performs synchronization between the device and CPU, which can lead to overhead in the reported results.

Example usage:

Timer t = Timer::Start(Device::cpu());
my_long_running_function();
t->Stop();
... // some more computation
int64_t nanosecs = t->SyncAndGetElapsedNanos() // elapsed time in nanoseconds

To add a new device-specific timer, register a new function "profiler.timer.my_device" (where my_device is the DeviceName of your device). This function should accept a Device and return a new Timer that has already been started.

For example, this is how the CPU timer is implemented:

class CPUTimerNode : public TimerNode {
public:
virtual void Start() { start_ = std::chrono::high_resolution_clock::now(); }
virtual void Stop() { duration_ = std::chrono::high_resolution_clock::now() - start_; }
virtual int64_t SyncAndGetElapsedNanos() { return duration_.count(); }
virtual ~CPUTimerNode() {}
static constexpr const char* _type_key = "CPUTimerNode";
TVM_DECLARE_FINAL_OBJECT_INFO(CPUTimerNode, TimerNode);
private:
std::chrono::high_resolution_clock::time_point start_;
std::chrono::duration<int64_t, std::nano> duration_;
};
TVM_REGISTER_GLOBAL("profiling.timer.cpu").set_body_typed([](Device dev) {
return Timer(make_object<CPUTimerNode>());
});

◆ TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS()

tvm::runtime::Timer::TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS ( Timer  ,
ObjectRef  ,
TimerNode   
)

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