Class ov::MemorySolver¶
-
class MemorySolver¶
Helps to solve issue of optimal memory allocation only for particular execution order.
It works with abstract data description where
Example:
Mem(offset) | |____| Box {4, 5} | |_____________| Box {2, 6} | |____| Box {3, 4} | |____| Box {2, 3} | |____| Box {6, 7} |_____________________________________ 1 2 3 4 5 6 7 8 9 ExecOrder
Boxes which has an ExecOrder-axis intersection should have no Mem-axis intersections. The goal is to define a minimal required memory blob to store all boxes with such constraints and specify all corresponding position on Mem axis(through offset field).
NOTE! Exec order is predefined.
Public Functions
-
inline int64_t solve()¶
Solve memory location with maximal reuse.
- Returns
Size of common memory blob required for storing all
-
inline int64_t get_offset(int id) const¶
Provides calculated offset for specified box id
-
inline int64_t max_depth()¶
Additional info. Max sum of box sizes required for any time stamp.
-
inline int64_t max_top_depth()¶
Additional info. Max num of boxes required for any time stamp.
Public Static Functions
-
struct Box¶
Representation of edge (size and live time)
Public Members
-
int start¶
Execution order index of first use. The data will be produced here.
-
int finish¶
The execution order index of last use. After that data will be released. -1 is a reserved value for “till to end”. The data will be alive to very end of execution.
-
int64_t size¶
Size of data. In abstract unit of measure (byte, simd, cache line, …)
-
int start¶
-
inline int64_t solve()¶