PandA-2024.02
|
#include <mem_dominator_allocation.hpp>
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 DesignFlowManager > | design_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_Type > | command_line_name_to_enum |
Map hls step name to enum. More... | |
Definition at line 59 of file mem_dominator_allocation.hpp.
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.
design_flow_manager | is the design flow manager |
Definition at line 84 of file mem_dominator_allocation.cpp.
References DesignFlowStep::debug_level, GET_CLASS, and ~mem_dominator_allocation().
|
overridedefault |
|
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.
|
overridevirtual |
Execute the 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.
|
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().
|
protected |
user defined base address
Definition at line 63 of file mem_dominator_allocation.hpp.
Referenced by Initialize(), and InternalExec().
|
protected |
Definition at line 67 of file mem_dominator_allocation.hpp.
Referenced by Initialize(), and is_internal_obj().
|
protected |
Definition at line 65 of file mem_dominator_allocation.hpp.
Referenced by Initialize(), and is_internal_obj().