tvm
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 , typename = std::enable_if_t<std::is_base_of_v<Object, ObjectType>>>
const ObjectType * as () const
 Try to downcast the internal Object to a raw pointer of a corresponding type. More...
 
template<typename ObjectRefType , typename = std::enable_if_t<std::is_base_of_v<ObjectRef, ObjectRefType>>>
Optional< ObjectRefType > as () const
 Try to downcast the ObjectRef to a Optional<T> of the requested 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
static Timer Start(Device dev)
Get a device specific timer.

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>());
});
DLDevice Device
Definition: ndarray.h:43
#define TVM_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)
helper macro to declare type information in a final class.
Definition: object.h:702
#define TVM_REGISTER_OBJECT_TYPE(TypeName)
Helper macro to register the object type to runtime. Makes sure that the runtime type table is correc...
Definition: object.h:725
#define TVM_REGISTER_GLOBAL(OpName)
Register a function globally.
Definition: registry.h:384

◆ 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: