26 #ifndef TVM_RUNTIME_MODULE_H_
27 #define TVM_RUNTIME_MODULE_H_
30 #include <tvm/ffi/cast.h>
31 #include <tvm/ffi/extra/module.h>
32 #include <tvm/ffi/function.h>
33 #include <tvm/ffi/memory.h>
34 #include <tvm/ffi/string.h>
65 template <
typename T,
typename R,
typename... Args>
68 static TVM_ALWAYS_INLINE
void Call(ffi::Any* rv, T*
self,
MemFnType f, ffi::PackedArgs args) {
69 auto wrapped = [
self, f](Args... args) -> R {
return (self->*f)(std::forward<Args>(args)...); };
70 ffi::details::unpack_call<R>(std::make_index_sequence<
sizeof...(Args)>{},
nullptr, wrapped,
71 args.data(), args.size(), rv);
75 template <
typename T,
typename R,
typename... Args>
78 static TVM_ALWAYS_INLINE
void Call(ffi::Any* rv, T*
self,
MemFnType f, ffi::PackedArgs args) {
79 auto wrapped = [
self, f](Args... args) -> R {
return (self->*f)(std::forward<Args>(args)...); };
80 ffi::details::unpack_call<R>(std::make_index_sequence<
sizeof...(Args)>{},
nullptr, wrapped,
81 args.data(), args.size(), rv);
85 template <
typename T,
typename... Args>
88 static TVM_ALWAYS_INLINE
void Call(ffi::Any* rv, T*
self,
MemFnType f, ffi::PackedArgs args) {
89 auto wrapped = [
self, f](Args... args) ->
void { (
self->*f)(std::forward<Args>(args)...); };
90 ffi::details::unpack_call<void>(std::make_index_sequence<
sizeof...(Args)>{},
nullptr, wrapped,
91 args.data(), args.size(), rv);
95 template <
typename T,
typename... Args>
98 static TVM_ALWAYS_INLINE
void Call(ffi::Any* rv, T*
self,
MemFnType f, ffi::PackedArgs args) {
99 auto wrapped = [
self, f](Args... args) ->
void { (
self->*f)(std::forward<Args>(args)...); };
100 ffi::details::unpack_call<void>(std::make_index_sequence<
sizeof...(Args)>{},
nullptr, wrapped,
101 args.data(), args.size(), rv);
108 #define TVM_MODULE_VTABLE_BEGIN(TypeKey) \
109 const char* kind() const final { return TypeKey; } \
110 ::tvm::ffi::Optional<::tvm::ffi::Function> GetFunction(const String& _name) override { \
111 using SelfPtr = std::remove_cv_t<decltype(this)>; \
112 ::tvm::ffi::ObjectPtr<::tvm::ffi::Object> _self = \
113 ::tvm::ffi::GetObjectPtr<::tvm::ffi::Object>(this);
114 #define TVM_MODULE_VTABLE_END() \
115 return std::nullopt; \
117 #define TVM_MODULE_VTABLE_END_WITH_DEFAULT(MemFunc) \
119 auto f = (MemFunc); \
120 return (this->*f)(_name); \
123 #define TVM_MODULE_VTABLE_ENTRY(Name, MemFunc) \
124 if (_name == Name) { \
125 return ffi::Function::FromPacked([_self](ffi::PackedArgs args, ffi::Any* rv) -> void { \
126 using Helper = ::tvm::runtime::details::ModuleVTableEntryHelper<decltype(MemFunc)>; \
127 SelfPtr self = static_cast<SelfPtr>(_self.get()); \
128 Helper::Call(rv, self, MemFunc, args); \
131 #define TVM_MODULE_VTABLE_ENTRY_PACKED(Name, MemFunc) \
132 if (_name == Name) { \
133 return ffi::Function([_self](ffi::PackedArgs args, ffi::Any* rv) -> void { \
134 (static_cast<SelfPtr>(_self.get())->*(MemFunc))(args, rv); \
constexpr const char * tvm_set_device
global function to set device
Definition: module.h:53
constexpr const char * tvm_global_barrier_state
Auxiliary counter to global barrier.
Definition: module.h:55
constexpr const char * tvm_prepare_global_barrier
Prepare the global barrier before kernels that uses global barrier.
Definition: module.h:57
bool RuntimeEnabled(const String &target)
Check if runtime module is enabled for target.
Performance counters for profiling via the PAPI library.
Definition: analyzer.h:37
A managed object in the TVM runtime.
R(T::*)(Args...) const MemFnType
Definition: module.h:67
static TVM_ALWAYS_INLINE void Call(ffi::Any *rv, T *self, MemFnType f, ffi::PackedArgs args)
Definition: module.h:68
R(T::*)(Args...) MemFnType
Definition: module.h:77
static TVM_ALWAYS_INLINE void Call(ffi::Any *rv, T *self, MemFnType f, ffi::PackedArgs args)
Definition: module.h:78
void(T::*)(Args...) const MemFnType
Definition: module.h:87
static TVM_ALWAYS_INLINE void Call(ffi::Any *rv, T *self, MemFnType f, ffi::PackedArgs args)
Definition: module.h:88
static TVM_ALWAYS_INLINE void Call(ffi::Any *rv, T *self, MemFnType f, ffi::PackedArgs args)
Definition: module.h:98
void(T::*)(Args...) MemFnType
Definition: module.h:97