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()#