23#ifndef TVM_RUNTIME_VM_VM_H_
24#define TVM_RUNTIME_VM_VM_H_
26#include <tvm/ffi/extra/module.h>
32#include <unordered_map>
76 VMClosure(ffi::String func_name, ffi::Function impl);
87 static ffi::Function
BindLastArgs(ffi::Function func, std::vector<ffi::Any> last_args);
145 ffi::PackedArgs args, ffi::Any* rv) = 0;
174 template <typename T, typename = std::enable_if_t<std::is_base_of<VMExtension, T>::value>>
176 using ContainerType =
typename T::ContainerType;
177 uint32_t key = ContainerType::RuntimeTypeIndex();
179 ffi::Any value = (*it).second;
180 return value.cast<T>();
182 auto [it, _] =
extensions.emplace(key, T::Create());
183 ffi::Any value = (*it).second;
184 return value.cast<T>();
191 static ffi::ObjectPtr<VirtualMachine>
Create();
The bytecode for the virtual machine.
An object representing a vm closure.
Definition vm.h:55
TVM_FFI_DECLARE_OBJECT_INFO_FINAL("relax.vm.Closure", VMClosureObj, ffi::Object)
ffi::String func_name
The function name. The function could be any function object that is compatible to the VM runtime.
Definition vm.h:61
ffi::Function impl
The implementation of the Closure.
Definition vm.h:69
reference to closure.
Definition vm.h:74
VMClosure(ffi::String func_name, ffi::Function impl)
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(VMClosure, ffi::ObjectRef, VMClosureObj)
static ffi::Function BindLastArgs(ffi::Function func, std::vector< ffi::Any > last_args)
Create another ffi::Function with last arguments already bound to last_args.
Represent a VM extension. A VM extension allows the user to extend the VM with target specific functi...
Definition vm.h:98
TVM_FFI_DECLARE_OBJECT_INFO("runtime.VMExtension", VMExtensionObj, ffi::Object)
Managed reference to VM extension.
Definition vm.h:104
TVM_FFI_DEFINE_OBJECT_REF_METHODS_NOTNULLABLE(VMExtension, ffi::ObjectRef, VMExtensionObj)
The virtual machine.
Definition vm.h:120
static ffi::ObjectPtr< VirtualMachine > Create()
Create a specific instance of VM.
~VirtualMachine()
Definition vm.h:200
virtual void LoadExecutable(ffi::ObjectPtr< VMExecutable > exec)=0
Load the executable for the virtual machine.
virtual void Init(const std::vector< Device > &devices)=0
Initialize the virtual machine for a set of devices.
virtual VMClosure GetClosure(const ffi::String &func_name)=0
Get global function in the VM.
static VirtualMachine * GetContextPtr(ffi::AnyView arg)
Helper function for vm closure functions to get the context ptr.
Definition vm.h:196
virtual void InvokeClosurePacked(const ffi::ObjectRef &closure_or_packedfunc, ffi::PackedArgs args, ffi::Any *rv)=0
Invoke closure or packed function using ffi::Function convention.
virtual void SetInstrument(ffi::Function instrument)=0
Set an instrumentation function.
std::unordered_map< uint32_t, Any > extensions
The VM extensions. Mapping from the type index of the extension to the extension instance.
Definition vm.h:211
T GetOrCreateExtension()
Get or create a VM extension. Once created, the extension will be stored in the VM and held until the...
Definition vm.h:175
std::vector< Device > devices
Runtime physical device list.
Definition vm.h:208
std::vector< ffi::ObjectPtr< TensorMemoryPool > > memory_pools
Owning memory pools for the physical devices.
Definition vm.h:206
Abstract device memory management API.
@ kNoOp
skip and do not do anything.
VMInstrumentReturnKind
Possible instrument actions.
Definition vm.h:45
@ kSkipRun
Skip the following run, only valid in before.
An object that builds and maintains block scope and StmtSref mapping for Dependence analysis.
Definition attr.h:23
Device-independent tensor allocation, copies, views and serialization.