tvm
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
executable.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
24 #ifndef TVM_RUNTIME_VM_EXECUTABLE_H_
25 #define TVM_RUNTIME_VM_EXECUTABLE_H_
26 
29 #include <tvm/runtime/module.h>
30 #include <tvm/runtime/object.h>
33 
34 #include <map>
35 #include <string>
36 #include <unordered_map>
37 #include <vector>
38 
39 namespace tvm {
40 namespace runtime {
41 namespace vm {
42 
43 struct VMFunction;
44 
57 class TVM_DLL Executable : public ModuleNode {
58  public:
67  PackedFunc GetFunction(const String& name, const ObjectPtr<Object>& sptr_to_self) final;
68 
71 
80  void SaveToBinary(dmlc::Stream* stream) final;
81 
91  void SaveToFile(const String& path, const String& format) final;
92 
103 
114  static runtime::Module Load(const std::string& code, const runtime::Module lib);
115 
125  void MoveLateBoundConstantsToStream(dmlc::Stream* stream, size_t byte_limit);
126 
130  void MoveLateBoundConstantsToFile(const std::string& path, size_t byte_limit);
131 
136 
143  void LoadLateBoundConstantsFromStream(dmlc::Stream* stream);
144 
152 
156  void LoadLateBoundConstantsFromFile(const std::string& path);
157 
190  std::string GetBytecode() const;
191 
196  std::string GetConstants() const;
197 
202  std::string GetVirtualDevices() const;
203 
209  std::string GetPrimitives() const;
210 
215  std::string Stats() const;
216 
224 
235  void SetLib(const runtime::Module& lib);
236 
242  const VMFunction& GetVMFunctionWithName(const std::string& func_name) const;
243 
249  int GetFunctionArity(std::string func) const;
250 
257  std::string GetFunctionParameterName(std::string func, uint32_t index) const;
258 
259  virtual ~Executable() {}
260 
261  const char* type_key() const final { return "VMExecutable"; }
262 
267  std::vector<Device> virtual_devices;
272  int host_device_index = -1;
279  std::vector<ObjectRef> constants;
284  std::vector<String> late_bound_constant_names;
285 
287  std::unordered_map<std::string, Index> global_map;
291  std::unordered_map<std::string, Index> primitive_map;
293  std::map<Index, Map<String, ObjectRef>> op_attrs;
295  std::vector<VMFunction> functions;
297  std::vector<Index> const_device_indexes;
298 
299  private:
305  void SaveVirtualDevicesSection(dmlc::Stream* strm);
306 
312  void SaveGlobalSection(dmlc::Stream* strm);
313 
319  void SaveConstantSection(dmlc::Stream* stream);
320 
326  void LoadConstantSection(dmlc::Stream* stream);
327 
333  void SavePrimitiveOpNames(dmlc::Stream* strm);
334 
340  void SaveCodeSection(dmlc::Stream* strm);
341 
347  void LoadVirtualDevicesSection(dmlc::Stream* strm);
348 
354  void LoadGlobalSection(dmlc::Stream* strm);
355 
361  void LoadPrimitiveOpNames(dmlc::Stream* strm);
362 
368  void LoadCodeSection(dmlc::Stream* strm);
369 
371  std::string code_;
372 };
373 
374 } // namespace vm
375 } // namespace runtime
376 } // namespace tvm
377 
378 #endif // TVM_RUNTIME_VM_EXECUTABLE_H_
The bytecode for Relay virtual machine.
Map container of NodeRef->NodeRef in DSL graph. Map implements copy on write semantics,...
Definition: map.h:1271
Base container of module.
Definition: module.h:142
Module container of TVM.
Definition: module.h:79
A custom smart pointer for Object.
Definition: object.h:358
Packed function is a type-erased function. The arguments are passed by packed format.
Definition: packed_func.h:138
Reference to string objects.
Definition: string.h:98
The executable emitted by the VM compiler.
Definition: executable.h:57
void SetLib(const runtime::Module &lib)
Set the lib module in an executable.
std::map< Index, Map< String, ObjectRef > > op_attrs
The structural hashes of the operators in this function.
Definition: executable.h:293
void LoadLateBoundConstantsFromFile(const std::string &path)
As for LoadLateBoundConstantsFromStream, but load from file at path.
PackedFunc GetFunction(const String &name, const ObjectPtr< Object > &sptr_to_self) final
Get a PackedFunc from an executable module.
std::vector< String > late_bound_constant_names
For each constant index the name of the late-bound constant, or null if constant is immediate....
Definition: executable.h:284
void LoadLateBoundConstantsFromStream(dmlc::Stream *stream)
Restores the late-bound constants for the executable (if any) from given byte-stream.
std::string GetVirtualDevices() const
Returns a description of all the (virtual) devices in the executable in human-readable format....
std::vector< Index > const_device_indexes
The index of the device holding each constant.
Definition: executable.h:297
static runtime::Module Load(const std::string &code, const runtime::Module lib)
Load the saved VM executable.
std::string Stats() const
Print the detailed statistics of the given code, i.e. number of globls and constants,...
std::vector< ObjectRef > constants
The global constant array.
Definition: executable.h:279
int GetFunctionArity(std::string func) const
Get the arity of the VMFunction.
void SaveToBinary(dmlc::Stream *stream) final
Write the Executable to the binary stream in serialized form.
std::string GetPrimitives() const
Returns a description of all the 'primitive' (ie PackedFuncs) in the executable in human-readable for...
void MoveLateBoundConstantsToStream(dmlc::Stream *stream, size_t byte_limit)
Returns the late-bound constants for the executable (if any) as a byte-stream. Leaves the executable'...
int GetPropertyMask() const final
Get the property of the runtime module .
Definition: executable.h:70
virtual ~Executable()
Definition: executable.h:259
std::unordered_map< std::string, Index > global_map
A map from globals (as strings) to their index in the Relay function map.
Definition: executable.h:287
void LoadLateBoundConstantsFromMap(Map< String, NDArray > map)
Restores the late-bound constants for the executable (if any) from given map.
void SaveToFile(const String &path, const String &format) final
Write the Executable to the provided path as a file containing its serialized content.
runtime::Module GetLib() const
Get the lib module in an executable. Users have the flexibility to call export_library from the front...
std::vector< Device > virtual_devices
The (compile-time, virtual) devices corresponding to each device index. Currently we only support at ...
Definition: executable.h:267
std::string GetFunctionParameterName(std::string func, uint32_t index) const
Get the parameter name given the function name and parameter index.
std::unordered_map< std::string, Index > primitive_map
A mapping from the packed function's global name (as string) to the index that corresponds to the pos...
Definition: executable.h:291
void MoveLateBoundConstantsToFile(const std::string &path, size_t byte_limit)
As for MoveLateBoundConstantsToStream, but save to file at path.
Map< String, NDArray > GetLateBoundConstants(size_t byte_limit)
Get a map of all constants with larger that byte_limit in size.
const char * type_key() const final
Definition: executable.h:261
std::string GetBytecode() const
Get the serialized form of the functions. This is essentially bytecode serialization.
std::vector< VMFunction > functions
The virtual machine's function table.
Definition: executable.h:295
std::string GetConstants() const
Returns a description of all the constants in the executable in human-readable format....
TVMByteArray Save()
Serialize the executable into global section, constant section, and code section. This object must ou...
const VMFunction & GetVMFunctionWithName(const std::string &func_name) const
Get VMFunction.
Runtime Map container types.
@ kBinarySerializable
kBinarySerializable we can serialize the module to the stream of bytes. CUDA/OpenCL/JSON runtime are ...
Definition: module.h:56
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
A managed object in the TVM runtime.
Type-erased function used across TVM API.
Runtime container of the functions generated by TVM, This is used to support dynamically link,...
Runtime String container types.
Byte array type used to pass in byte array When kTVMBytes is used as data type.
Definition: c_runtime_api.h:221
A representation of a Relay function in the VM.
Definition: vm.h:77