tvm
memory_pools.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_IR_MEMORY_POOLS_H_
25 #define TVM_IR_MEMORY_POOLS_H_
26 
27 #include <tvm/runtime/registry.h>
28 #include <tvm/target/target.h>
29 
30 struct TVMConstantInfo;
31 namespace tvm {
32 
36 struct PoolInfoNode : public Object {
37  public:
61  bool is_internal = false;
62 
65 
67  v->Visit("pool_name", &pool_name);
68  v->Visit("targets", &targets);
69  v->Visit("size_hint_bytes", &size_hint_bytes);
70  v->Visit("clock_frequency_hz", &clock_frequency_hz);
71  v->Visit("read_bandwidth_bytes_per_cycle", &read_bandwidth_bytes_per_cycle);
72  v->Visit("write_bandwidth_bytes_per_cycle", &write_bandwidth_bytes_per_cycle);
73  v->Visit("read_latency_cycles", &read_latency_cycles);
74  v->Visit("write_latency_cycles", &write_latency_cycles);
75  v->Visit("target_burst_bytes", &target_burst_bytes);
76  v->Visit("is_internal", &is_internal);
77  }
78 
79  bool SEqualReduce(const PoolInfoNode* other, SEqualReducer equal) const {
80  return equal(pool_name, other->pool_name) && equal(size_hint_bytes, other->size_hint_bytes) &&
87  equal(is_internal, other->is_internal);
88  }
89 
90  void SHashReduce(SHashReducer hash_reduce) const {
91  hash_reduce(pool_name);
92  hash_reduce(size_hint_bytes);
93  hash_reduce(clock_frequency_hz);
94  hash_reduce(read_bandwidth_bytes_per_cycle);
96  hash_reduce(read_latency_cycles);
97  hash_reduce(write_latency_cycles);
98  hash_reduce(target_burst_bytes);
99  hash_reduce(is_internal);
100  }
101 
102  static constexpr const char* _type_key = "ir.PoolInfo";
104 };
105 
111 static constexpr const char* kTargetPoolReadWriteAccess = "rw";
112 
118 static constexpr const char* kTargetPoolReadOnlyAccess = "ro";
119 
121 static const int kUnrestrictedPoolSizeHint = -1;
122 
124 static const int kUnknownClockFrequency = -1;
125 
127 static const int kUnknownReadBandwidth = -1;
128 
130 static const int kUnknownWriteBandwidth = -1;
131 
133 class PoolInfo : public ObjectRef {
134  protected:
135  TVM_DLL PoolInfo(String pool_name, Integer size_hint_bytes = kUnrestrictedPoolSizeHint,
136  Integer clock_frequency_hz = kUnknownClockFrequency,
137  Integer read_bandwidth_bytes_per_cycle = kUnknownReadBandwidth,
138  Integer write_bandwidth_bytes_per_cycle = kUnknownWriteBandwidth,
139  Integer read_latency_cycles = 0, Integer write_latency_cycles = 0,
140  Map<Target, Integer> target_burst_bytes = {}, Bool is_internal = Bool(false));
141 
142  public:
144 };
145 
154  Integer size_hint_bytes = kUnrestrictedPoolSizeHint;
156  Integer clock_frequency_hz = kUnknownClockFrequency;
158  Integer read_bandwidth_bytes_per_cycle = kUnknownReadBandwidth;
160  Integer write_bandwidth_bytes_per_cycle = kUnknownWriteBandwidth;
171  bool is_internal = false;
172 
174  v->Visit("size_hint_bytes", &size_hint_bytes);
175  v->Visit("clock_frequency_hz", &clock_frequency_hz);
176  v->Visit("read_bandwidth_bytes_per_cycle", &read_bandwidth_bytes_per_cycle);
177  v->Visit("write_bandwidth_bytes_per_cycle", &write_bandwidth_bytes_per_cycle);
178  v->Visit("read_latency_cycles", &read_latency_cycles);
179  v->Visit("write_latency_cycles", &write_latency_cycles);
180  v->Visit("target_burst_bytes", &target_burst_bytes);
181  v->Visit("is_internal", &is_internal);
182  }
183 
185  return equal(size_hint_bytes, other->size_hint_bytes) &&
192  equal(is_internal, other->is_internal);
193  }
194 
195  void SHashReduce(SHashReducer hash_reduce) const {
196  hash_reduce(size_hint_bytes);
197  hash_reduce(clock_frequency_hz);
198  hash_reduce(read_bandwidth_bytes_per_cycle);
199  hash_reduce(write_bandwidth_bytes_per_cycle);
200  hash_reduce(read_latency_cycles);
201  hash_reduce(write_latency_cycles);
202  hash_reduce(target_burst_bytes);
203  hash_reduce(is_internal);
204  }
205 
206  static constexpr const char* _type_key = "ir.PoolInfoProperties";
208 };
209 
211  public:
212  TVM_DLL PoolInfoProperties(Integer size_hint_bytes,
213  Integer clock_frequency_hz = kUnknownClockFrequency,
214  Integer read_bandwidth_bytes_per_cycle = kUnknownReadBandwidth,
215  Integer write_bandwidth_bytes_per_cycle = kUnknownWriteBandwidth,
216  Integer read_latency_cycles = 0, Integer write_latency_cycles = 0,
217  Map<Target, Integer> target_burst_bytes = {},
218  Bool is_internal = Bool(false));
220 };
221 
222 /* \brief Represents RW memory area */
225 
227  return PoolInfoNode::SEqualReduce(other, equal);
228  }
229 
230  void SHashReduce(SHashReducer hash_reduce) const { PoolInfoNode::SHashReduce(hash_reduce); }
231 
232  static constexpr const char* _type_key = "ir.WorkspacePoolInfo";
234 };
235 
236 class WorkspacePoolInfo : public PoolInfo {
237  public:
239  String pool_name, Array<Target> targets,
240  PoolInfoProperties properties = PoolInfoProperties(kUnrestrictedPoolSizeHint));
242 };
243 
244 /*
245  * \brief The ConstantInfoNode contains numeric literal in RO pool
246  * Used to initialise RO memory in ConstantPoolInfo
247  */
248 struct ConstantInfoNode : public Object {
252 
254  v->Visit("name_hint", &name_hint);
255  v->Visit("byte_offset", &byte_offset);
256  v->Visit("data", &data);
257  }
258 
259  bool SEqualReduce(const ConstantInfoNode* other, SEqualReducer equal) const {
260  return equal(name_hint, other->name_hint) && equal(byte_offset, other->byte_offset) &&
261  equal(data, other->data);
262  }
263 
264  void SHashReduce(SHashReducer hash_reduce) const {
265  hash_reduce(name_hint);
266  hash_reduce(byte_offset);
267  hash_reduce(data);
268  }
269 
270  static constexpr const char* _type_key = "ir.ConstantInfo";
271  static constexpr bool _type_has_method_sequal_reduce = true;
272  static constexpr bool _type_has_method_shash_reduce = true;
274 };
275 
276 class ConstantInfo : public ObjectRef {
277  public:
278  TVM_DLL ConstantInfo(const struct ::TVMConstantInfo* data);
279  ConstantInfo(String name, Integer byte_offset, runtime::NDArray data);
281 };
282 
283 /* \brief ConstantPoolInfoNode represents an RO memory area initialized with
284  * data from constant_info_array */
287 
290  v->Visit("constant_info_array", &constant_info_array);
291  }
292 
294  return PoolInfoNode::SEqualReduce(other, equal) &&
296  }
297 
298  void SHashReduce(SHashReducer hash_reduce) const {
299  PoolInfoNode::SHashReduce(hash_reduce);
300  hash_reduce(constant_info_array);
301  }
302 
303  static constexpr const char* _type_key = "ir.ConstantPoolInfo";
305 };
306 
307 class ConstantPoolInfo : public PoolInfo {
308  public:
310  String pool_name, Array<Target> targets, Array<ConstantInfo> constant_info_array,
311  PoolInfoProperties properties = PoolInfoProperties(kUnrestrictedPoolSizeHint));
313 };
314 
315 /* \brief A container for WorkspacePoolInfo objects */
318 
319  void VisitAttrs(tvm::AttrVisitor* v) { v->Visit("pools", &pools); }
320 
322  return equal(pools, other->pools);
323  }
324 
325  void SHashReduce(SHashReducer hash_reduce) const { hash_reduce(pools); }
326 
327  static constexpr const char* _type_key = "ir.WorkspaceMemoryPools";
329 };
330 
332  public:
335 };
336 
337 /* \brief A container for ConstantPoolInfo objects */
340 
341  void VisitAttrs(tvm::AttrVisitor* v) { v->Visit("pools", &pools); }
342 
344  return equal(pools, other->pools);
345  }
346 
347  void SHashReduce(SHashReducer hash_reduce) const { hash_reduce(pools); }
348 
349  static constexpr const char* _type_key = "ir.ConstantMemoryPools";
351 };
352 
354  public:
357 };
358 
359 } // namespace tvm
360 
361 #endif // TVM_IR_MEMORY_POOLS_H_
Visitor class to get the attributes of an AST/IR node. The content is going to be called for each fie...
Definition: reflection.h:52
Boolean constant.
Definition: expr.h:597
Definition: memory_pools.h:276
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(ConstantInfo, ObjectRef, ConstantInfoNode)
ConstantInfo(const struct ::TVMConstantInfo *data)
ConstantInfo(String name, Integer byte_offset, runtime::NDArray data)
Definition: memory_pools.h:353
ConstantMemoryPools(Array< ConstantPoolInfo > pools)
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(ConstantMemoryPools, ObjectRef, ConstantMemoryPoolsNode)
Definition: memory_pools.h:307
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(ConstantPoolInfo, PoolInfo, ConstantPoolInfoNode)
ConstantPoolInfo(String pool_name, Array< Target > targets, Array< ConstantInfo > constant_info_array, PoolInfoProperties properties=PoolInfoProperties(kUnrestrictedPoolSizeHint))
Container of constant int that adds more constructors.
Definition: expr.h:632
Definition: memory_pools.h:210
PoolInfoProperties(Integer size_hint_bytes, Integer clock_frequency_hz=kUnknownClockFrequency, Integer read_bandwidth_bytes_per_cycle=kUnknownReadBandwidth, Integer write_bandwidth_bytes_per_cycle=kUnknownWriteBandwidth, Integer read_latency_cycles=0, Integer write_latency_cycles=0, Map< Target, Integer > target_burst_bytes={}, Bool is_internal=Bool(false))
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(PoolInfoProperties, ObjectRef, PoolInfoPropertiesNode)
Base class for WorkspacePoolInfo and ConstantPoolInfo.
Definition: memory_pools.h:133
PoolInfo(String pool_name, Integer size_hint_bytes=kUnrestrictedPoolSizeHint, Integer clock_frequency_hz=kUnknownClockFrequency, Integer read_bandwidth_bytes_per_cycle=kUnknownReadBandwidth, Integer write_bandwidth_bytes_per_cycle=kUnknownWriteBandwidth, Integer read_latency_cycles=0, Integer write_latency_cycles=0, Map< Target, Integer > target_burst_bytes={}, Bool is_internal=Bool(false))
TVM_DEFINE_OBJECT_REF_METHODS(PoolInfo, ObjectRef, PoolInfoNode)
A Reducer class to reduce the structural equality result of two objects.
Definition: structural_equal.h:137
A Reducer class to reduce the structural hash value.
Definition: structural_hash.h:121
Definition: memory_pools.h:331
WorkspaceMemoryPools(Array< PoolInfo > pools)
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(WorkspaceMemoryPools, ObjectRef, WorkspaceMemoryPoolsNode)
Definition: memory_pools.h:236
WorkspacePoolInfo(String pool_name, Array< Target > targets, PoolInfoProperties properties=PoolInfoProperties(kUnrestrictedPoolSizeHint))
TVM_DEFINE_MUTABLE_OBJECT_REF_METHODS(WorkspacePoolInfo, PoolInfo, WorkspacePoolInfoNode)
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:289
Map container of NodeRef->NodeRef in DSL graph. Map implements copy on write semantics,...
Definition: map.h:1271
Managed NDArray. The array is backed by reference counted blocks.
Definition: ndarray.h:51
Base class of all object reference.
Definition: object.h:519
base class of all object containers.
Definition: object.h:171
Reference to string objects.
Definition: string.h:98
Box< bool > Bool
Boxed version of C++ bool.
Definition: boxed_primitive.h:121
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
PrimExpr equal(PrimExpr a, PrimExpr b, Span span=Span())
equal
This file defines the TVM global function registry.
Describes one constant argument to run_model.
Definition: metadata_types.h:94
Definition: memory_pools.h:248
String name_hint
Definition: memory_pools.h:249
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:253
bool SEqualReduce(const ConstantInfoNode *other, SEqualReducer equal) const
Definition: memory_pools.h:259
runtime::NDArray data
Definition: memory_pools.h:251
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:264
TVM_DECLARE_FINAL_OBJECT_INFO(ConstantInfoNode, Object)
static constexpr bool _type_has_method_sequal_reduce
Definition: memory_pools.h:271
static constexpr const char * _type_key
Definition: memory_pools.h:270
static constexpr bool _type_has_method_shash_reduce
Definition: memory_pools.h:272
Integer byte_offset
Definition: memory_pools.h:250
Definition: memory_pools.h:338
bool SEqualReduce(const ConstantMemoryPoolsNode *other, SEqualReducer equal) const
Definition: memory_pools.h:343
static constexpr const char * _type_key
Definition: memory_pools.h:349
Array< ConstantPoolInfo > pools
Definition: memory_pools.h:339
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:341
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:347
TVM_DECLARE_FINAL_OBJECT_INFO(ConstantMemoryPoolsNode, Object)
Definition: memory_pools.h:285
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:288
TVM_DECLARE_FINAL_OBJECT_INFO(ConstantPoolInfoNode, PoolInfoNode)
Array< ConstantInfo > constant_info_array
Definition: memory_pools.h:286
bool SEqualReduce(const ConstantPoolInfoNode *other, SEqualReducer equal) const
Definition: memory_pools.h:293
static constexpr const char * _type_key
Definition: memory_pools.h:303
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:298
Describes a pool of memory accessible by one or more targets.
Definition: memory_pools.h:36
Integer read_bandwidth_bytes_per_cycle
The read bandwidth in bytes/cycle.
Definition: memory_pools.h:48
Integer read_latency_cycles
The read latency in cycles.
Definition: memory_pools.h:52
String pool_name
The name of the memory pool.
Definition: memory_pools.h:39
Integer write_bandwidth_bytes_per_cycle
The write bandwidth in bytes/cycle.
Definition: memory_pools.h:50
static constexpr const char * _type_key
Definition: memory_pools.h:102
Integer write_latency_cycles
The write latency in cycles.
Definition: memory_pools.h:54
Array< Target > targets
The targets linked to the pool.
Definition: memory_pools.h:64
Integer clock_frequency_hz
The clock frequency of the memory in Hz.
Definition: memory_pools.h:46
Map< Target, Integer > target_burst_bytes
The burst length in bytes for each Target.
Definition: memory_pools.h:56
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:90
TVM_DECLARE_BASE_OBJECT_INFO(PoolInfoNode, Object)
Integer size_hint_bytes
The expected size hint to be used by the allocator. The size_hint_bytes is set to kUnrestrictedPoolSi...
Definition: memory_pools.h:44
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:66
bool is_internal
Whether pool is internally generated. The internal pools will be generated as part of the entry point...
Definition: memory_pools.h:61
bool SEqualReduce(const PoolInfoNode *other, SEqualReducer equal) const
Definition: memory_pools.h:79
Describes a pool of memory properties.
Definition: memory_pools.h:149
Integer write_latency_cycles
The write latency in cycles.
Definition: memory_pools.h:164
static constexpr const char * _type_key
Definition: memory_pools.h:206
Integer write_bandwidth_bytes_per_cycle
The write bandwidth in bytes/cycle.
Definition: memory_pools.h:160
TVM_DECLARE_FINAL_OBJECT_INFO(PoolInfoPropertiesNode, Object)
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:195
Map< Target, Integer > target_burst_bytes
The burst length in bytes for each Target.
Definition: memory_pools.h:166
bool is_internal
Whether pool is internally generated. The internal pools will be generated as part of the entry point...
Definition: memory_pools.h:171
bool SEqualReduce(const PoolInfoPropertiesNode *other, SEqualReducer equal) const
Definition: memory_pools.h:184
Integer clock_frequency_hz
The clock frequency of the memory in Hz.
Definition: memory_pools.h:156
Integer read_latency_cycles
The read latency in cycles.
Definition: memory_pools.h:162
Integer size_hint_bytes
The expected size hint to be used by the allocator. The size_hint_bytes is set to kUnrestrictedPoolSi...
Definition: memory_pools.h:154
Integer read_bandwidth_bytes_per_cycle
The read bandwidth in bytes/cycle.
Definition: memory_pools.h:158
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:173
Definition: memory_pools.h:316
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:319
static constexpr const char * _type_key
Definition: memory_pools.h:327
Array< PoolInfo > pools
Definition: memory_pools.h:317
bool SEqualReduce(const WorkspaceMemoryPoolsNode *other, SEqualReducer equal) const
Definition: memory_pools.h:321
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:325
TVM_DECLARE_FINAL_OBJECT_INFO(WorkspaceMemoryPoolsNode, Object)
Definition: memory_pools.h:223
static constexpr const char * _type_key
Definition: memory_pools.h:232
void VisitAttrs(tvm::AttrVisitor *v)
Definition: memory_pools.h:224
TVM_DECLARE_FINAL_OBJECT_INFO(WorkspacePoolInfoNode, PoolInfoNode)
void SHashReduce(SHashReducer hash_reduce) const
Definition: memory_pools.h:230
bool SEqualReduce(const WorkspacePoolInfoNode *other, SEqualReducer equal) const
Definition: memory_pools.h:226
Compilation target object.