PandA-2024.02
Public Member Functions | Protected Member Functions | Protected Attributes
mem_dominator_allocation Class Reference

#include <mem_dominator_allocation.hpp>

Inheritance diagram for mem_dominator_allocation:
Inheritance graph
[legend]
Collaboration diagram for mem_dominator_allocation:
Collaboration graph
[legend]

Public Member Functions

 mem_dominator_allocation (const ParameterConstRef _parameters, const HLS_managerRef HLSMgr, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization, const HLSFlowStep_Type hls_flow_step_type=HLSFlowStep_Type::DOMINATOR_MEMORY_ALLOCATION)
 Constructor. More...
 
 ~mem_dominator_allocation () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 Execute the step. More...
 
void Initialize () override
 Initialize the step (i.e., like a constructor, but executed just before exec. More...
 
- Public Member Functions inherited from memory_allocation
 memory_allocation (const ParameterConstRef _parameters, const HLS_managerRef HLSMgr, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization=HLSFlowStepSpecializationConstRef())
 Constructor. More...
 
 ~memory_allocation () override
 Destructor. More...
 
void allocate_parameters (unsigned int functionId, memoryRef Rmem=nullptr)
 Allocate parameters for given function. More...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. More...
 
DesignFlowStep_Status Exec () override
 Execute the step. More...
 
- Public Member Functions inherited from HLS_step
 HLS_step (const ParameterConstRef _parameters, const HLS_managerRef HLSMgr, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization=HLSFlowStepSpecializationConstRef())
 Constructor. More...
 
 ~HLS_step () override
 Destructor. More...
 
std::string GetSignature () const override
 Return a unified identifier of this design step. More...
 
std::string GetName () const override
 Return the name of this design step. More...
 
virtual std::string GetKindText () const
 Return the name of the type of this frontend flow step. More...
 
DesignFlowStepFactoryConstRef CGetDesignFlowStepFactory () const final
 Return the factory to create this type of steps. More...
 
void ComputeRelationships (DesignFlowStepSet &design_flow_step_set, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. More...
 
- Public Member Functions inherited from DesignFlowStep
 DesignFlowStep (const DesignFlowManagerConstRef design_flow_manager, const ParameterConstRef parameters)
 Constructor. More...
 
virtual ~DesignFlowStep ()
 Destructor. More...
 
DesignFlowStep_Status GetStatus () const
 Return the status of this design step. More...
 
virtual void WriteDot (std::ostream &out) const
 Write the label for a dot graph. More...
 
bool IsComposed () const
 Returns if this step is composed. More...
 
int CGetDebugLevel () const
 Return the debug level of the step. More...
 
virtual void PrintInitialIR () const
 Dump the initial intermediate representation. More...
 
virtual void PrintFinalIR () const
 Dump the final intermediate representation. More...
 

Protected Member Functions

virtual bool is_internal_obj (unsigned int var_id, unsigned int fun_id, bool multiple_top_call_graph)
 function checking if the current variable has to allocated inside the accelerator or outside More...
 
- Protected Member Functions inherited from memory_allocation
void setup_memory_allocation ()
 Prepares the data structures for the memory allocation. More...
 
void finalize_memory_allocation ()
 Performs a final analysis of the memory allocation to finalize the data-structure. More...
 
const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships (const DesignFlowStep::RelationshipType relationship_type) const override
 Compute the relationship of this step. More...
 

Protected Attributes

unsigned long long int user_defined_base_address
 user defined base address More...
 
std::map< std::string, std::set< std::string > > user_internal_objects
 
std::map< std::string, std::set< std::string > > user_external_objects
 
- Protected Attributes inherited from memory_allocation
CustomOrderedSet< unsigned int > func_list
 list of functions to be analyzed More...
 
unsigned int memory_version
 The version of memory representation on which this step was applied. More...
 
std::map< unsigned int, unsigned int > last_bb_ver
 The version of BB IR representation on which this step was applied. More...
 
std::map< unsigned int, unsigned int > last_bitvalue_ver
 The version of bit value IR representation on which this step was applied. More...
 
- Protected Attributes inherited from HLS_step
const HLS_managerRef HLSMgr
 information about all the HLS synthesis More...
 
const HLSFlowStep_Type hls_flow_step_type
 The type of this step. More...
 
const HLSFlowStepSpecializationConstRef hls_flow_step_specialization
 The information about specialization. More...
 
- Protected Attributes inherited from DesignFlowStep
bool composed
 True if this step represents a composition of design flow steps (e.g., a flow); must be set by specialized constructors. More...
 
const Wrefcount< const DesignFlowManagerdesign_flow_manager
 The design flow manager. More...
 
const ParameterConstRef parameters
 Set of input parameters. More...
 
int debug_level
 The debug level. More...
 
const int output_level
 The output level. More...
 

Additional Inherited Members

- Public Types inherited from DesignFlowStep
enum  RelationshipType { DEPENDENCE_RELATIONSHIP, INVALIDATION_RELATIONSHIP, PRECEDENCE_RELATIONSHIP }
 The relationship type. More...
 
- Static Public Member Functions inherited from HLS_step
static std::string EnumToName (const HLSFlowStep_Type hls_flow_step_type)
 Given a HLS flow step type, return the name of the type. More...
 
static const std::string ComputeSignature (const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization)
 Compute the signature of a hls flow step. More...
 
- Static Protected Attributes inherited from HLS_step
static CustomUnorderedMap< std::string, HLSFlowStep_Typecommand_line_name_to_enum
 Map hls step name to enum. More...
 

Detailed Description

Definition at line 59 of file mem_dominator_allocation.hpp.

Constructor & Destructor Documentation

◆ mem_dominator_allocation()

mem_dominator_allocation::mem_dominator_allocation ( const ParameterConstRef  _parameters,
const HLS_managerRef  HLSMgr,
const DesignFlowManagerConstRef  design_flow_manager,
const HLSFlowStepSpecializationConstRef  hls_flow_step_specialization,
const HLSFlowStep_Type  hls_flow_step_type = HLSFlowStep_Type::DOMINATOR_MEMORY_ALLOCATION 
)

Constructor.

STD includes.

Parameters
design_flow_manageris the design flow manager

Definition at line 84 of file mem_dominator_allocation.cpp.

References DesignFlowStep::debug_level, GET_CLASS, and ~mem_dominator_allocation().

Here is the call graph for this function:

◆ ~mem_dominator_allocation()

mem_dominator_allocation::~mem_dominator_allocation ( )
overridedefault

Destructor.

Referenced by mem_dominator_allocation().

Here is the caller graph for this function:

Member Function Documentation

◆ Initialize()

void mem_dominator_allocation::Initialize ( )
overridevirtual

Initialize the step (i.e., like a constructor, but executed just before exec.

check xml consistency

Reimplemented from DesignFlowStep.

Definition at line 195 of file mem_dominator_allocation.cpp.

References CE_XVM, DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, XMLDomParser::Exec(), XMLDomParser::get_document(), INDENT_DBG_MEX, LOAD_XVM, DesignFlowStep::parameters, test_panda::parser, THROW_ERROR, user_defined_base_address, user_external_objects, and user_internal_objects.

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status mem_dominator_allocation::InternalExec ( )
overridevirtual

Execute the step.

Returns
the exit status of this step

For better understanding of containers' structure

TODO: to be fixed with information coming out from the target platform description

information about memory allocation to be shared across the functions

the analysis has to be performed only on the reachable functions

we do not need the exit vertex since the post-dominator graph is not used

custom function like printf may create problem to the pointer resolution

var referring vertex map

compute the number of instances for each function

find the common dominator and decide where to allocate

look for a single instance function in case the object is not a ROM and not a local var

find the common dominator between two candidates

check dynamic address use

we never have &(var_id_object)

read only memory

we never have &(var_id_object)

used in a single place

we never have &(var_id_object)

classify variable

change the alignment in case is requested

change the internal alignment to improve the decoding logic

Round up to the next highest power of 2

check dynamic address use

we never have &(var_id_object)

read only memory

add proxies

clean proxy library

Implements memory_allocation.

Definition at line 306 of file mem_dominator_allocation.cpp.

References tree_helper::AccessedMaximumBitsize(), tree_helper::AccessedMinimunBitsize(), memory_allocation::allocate_parameters(), BUILTIN_WAIT_CALL, FunctionBehavior::CFG, tree_helper::CGetType(), compute_n_bytes(), memory::create_memory(), DesignFlowStep::debug_level, DEBUG_LEVEL_NONE, DEBUG_LEVEL_VERBOSE, DEBUG_LEVEL_VERY_PEDANTIC, memory_allocation::finalize_memory_allocation(), memory_allocation::func_list, GET_CONST_NODE, GET_NAME, GET_NODE, get_remapped_vertex(), GET_TYPE, tree_helper::GetArrayElementSize(), tree_helper::GetBaseVariable(), tree_helper::GetConstValue(), functions::GetFUName(), HLS_step::HLSMgr, INDENT_DBG_MEX, INDENT_OUT_MEX, is_internal_obj(), tree_helper::IsArrayEquivType(), tree_helper::IsComplexType(), tree_helper::IsPackedType(), tree_helper::IsPointerResolved(), tree_helper::IsStructType(), tree_helper::IsUnionType(), max, MEMCMP, MEMCPY, MEMSET, NULL_VERTEX, DesignFlowStep::output_level, OUTPUT_LEVEL_MINIMUM, OUTPUT_LEVEL_NONE, OUTPUT_LEVEL_PEDANTIC, OUTPUT_LEVEL_VERBOSE, DesignFlowStep::parameters, print_cpu_time(), PROXY_LIBRARY, memory_allocation::setup_memory_allocation(), tree_helper::Size(), START_TIME, STOP_TIME, STR, SUCCESS, lenet_tvm::target, THROW_ASSERT, THROW_ERROR, THROW_WARNING, TYPE_LOAD, TYPE_STORE, UNCHANGED, user_defined_base_address, and WORK_LIBRARY.

Here is the call graph for this function:

◆ is_internal_obj()

bool mem_dominator_allocation::is_internal_obj ( unsigned int  var_id,
unsigned int  fun_id,
bool  multiple_top_call_graph 
)
protectedvirtual

function checking if the current variable has to allocated inside the accelerator or outside

Definition at line 96 of file mem_dominator_allocation.cpp.

References ALL_BRAM, EXT_PIPELINED_BRAM, GET_CONST_NODE, GSS, HLS_step::HLSMgr, LSS, NO_BRAM, NONE, THROW_UNREACHABLE, user_external_objects, and user_internal_objects.

Referenced by InternalExec().

Here is the caller graph for this function:

Field Documentation

◆ user_defined_base_address

unsigned long long int mem_dominator_allocation::user_defined_base_address
protected

user defined base address

Definition at line 63 of file mem_dominator_allocation.hpp.

Referenced by Initialize(), and InternalExec().

◆ user_external_objects

std::map<std::string, std::set<std::string> > mem_dominator_allocation::user_external_objects
protected

Definition at line 67 of file mem_dominator_allocation.hpp.

Referenced by Initialize(), and is_internal_obj().

◆ user_internal_objects

std::map<std::string, std::set<std::string> > mem_dominator_allocation::user_internal_objects
protected

Definition at line 65 of file mem_dominator_allocation.hpp.

Referenced by Initialize(), and is_internal_obj().


The documentation for this class was generated from the following files:

Generated on Mon Feb 12 2024 13:03:57 for PandA-2024.02 by doxygen 1.8.13