PandA-2024.02
Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
parametric_list_based Class Reference

Class managing list based scheduling algorithms. More...

#include <parametric_list_based.hpp>

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

Public Member Functions

 parametric_list_based (const ParameterConstRef parameters, const HLS_managerRef HLSMgr, unsigned int _funId, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization)
 This is the constructor of the list_based. More...
 
 ~parametric_list_based () override
 Destructor. More...
 
DesignFlowStep_Status InternalExec () override
 Execute the step. More...
 
void exec (const OpVertexSet &operations, ControlStep current_cycle)
 Function that computes the List-Based scheduling of the graph. More...
 
void Initialize () override
 Initialize the step (i.e., like a constructor, but executed just before exec. More...
 
- Public Member Functions inherited from Scheduling
 Scheduling (const ParameterConstRef Param, const HLS_managerRef HLSMgr, unsigned int funId, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization=HLSFlowStepSpecializationConstRef())
 Constructor. More...
 
 ~Scheduling () override
 Destructor. More...
 
const CustomUnorderedMap< vertex, bool > & get_spec () const
 It returns speculation property map. More...
 
void Initialize () override
 Initialize the step (i.e., like a constructor, but executed just before exec. More...
 
- Public Member Functions inherited from HLSFunctionStep
 HLSFunctionStep (const ParameterConstRef Param, const HLS_managerRef HLSMgr, unsigned int funId, const DesignFlowManagerConstRef design_flow_manager, const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization=HLSFlowStepSpecializationConstRef())
 Constructor. More...
 
 ~HLSFunctionStep () override
 Destructor. More...
 
bool HasToBeExecuted () const override
 Check if this step has actually to be executed. More...
 
std::string GetSignature () const final
 Return a unified identifier of this design step. More...
 
std::string GetName () const final
 Return the name of this design step. More...
 
DesignFlowStep_Status Exec () final
 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...
 

Private Member Functions

void compute_exec_stage_time (const unsigned int fu_type, double &stage_period, const ControlStep cs, const OpGraphConstRef op_graph, vertex v, double &op_execution_time, double &phi_extra_time, double current_starting_time, double setup_hold_time)
 
void compute_starting_ending_time_asap (const CustomUnorderedSet< vertex > &operations, const vertex v, const unsigned int fu_type, const ControlStep cs, double &current_starting_time, double &current_ending_time, double &stage_period, bool &cannot_be_chained, fu_bindingRef res_binding, const ScheduleConstRef schedule, double &phi_extra_time, double setup_hold_time, CustomMap< std::pair< unsigned int, unsigned int >, double > &local_connection_map)
 Given the control step in which an operation is scheduled, compute the exact starting and ending time of an operation. More...
 
bool BB_update_resources_use (unsigned int &used_resources, const unsigned int fu_type) const
 Update the resource map. More...
 
void add_to_priority_queues (PriorityQueues &priority_queue, std::set< unsigned int, resource_ordering_functor > &ready_resources, const vertex v) const
 Adds the vertex v to the priority queues. More...
 
bool store_in_chaining_with_load_in (const CustomUnorderedSet< vertex > &operations, unsigned int current_vertex_cstep, vertex v)
 store_in_chaining_with_load checks if a store is chained with a load operation or vice versa More...
 
bool store_in_chaining_with_load_out (const CustomUnorderedSet< vertex > &operations, unsigned int current_vertex_cstep, vertex v)
 
bool check_non_direct_operation_chaining (const CustomUnorderedSet< vertex > &operations, vertex current_v, unsigned int v_fu_type, const ControlStep cs, const ScheduleConstRef schedule, fu_bindingRef res_binding) const
 
bool check_direct_operation_chaining (const CustomUnorderedSet< vertex > &operations, vertex current_v, const ControlStep cs, const ScheduleConstRef schedule, fu_bindingRef res_binding) const
 
bool check_LOAD_chaining (const CustomUnorderedSet< vertex > &operations, vertex current_v, const ControlStep cs, const ScheduleConstRef schedule) const
 
void CheckSchedulabilityConditions (const CustomUnorderedSet< vertex > &operations, const vertex &current_vertex, ControlStep current_cycle, double &current_starting_time, double &current_ending_time, double &current_stage_period, CustomMap< std::pair< unsigned int, unsigned int >, double > &local_connection_map, double current_cycle_starting_time, double current_cycle_ending_time, double setup_hold_time, double &phi_extra_time, double scheduling_mux_margins, bool unbounded, bool unbounded_Functions, bool LoadStoreOp, const std::set< std::string > &proxy_functions_used, bool cstep_has_RET_conflict, unsigned int fu_type, const vertex2obj< ControlStep > &current_ASAP, const fu_bindingRef res_binding, const ScheduleRef schedule, bool &predecessorsCond, bool &pipeliningCond, bool &cannotBeChained0, bool &chainingRetCond, bool &cannotBeChained1, bool &asyncCond, bool &cannotBeChained2, bool &cannotBeChained3, bool &MultiCond0, bool &MultiCond1, bool &LoadStoreFunctionConflict, bool &FunctionStoreconflict, bool &proxyFunCond, bool unbounded_RW, bool seeMulticycle)
 
const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships (const DesignFlowStep::RelationshipType relationship_type) const override
 Compute the relationship of this step. More...
 
void compute_function_topological_order ()
 compute_function_topological_order compute reachable function topological order More...
 

Private Attributes

const ParametricListBased_Metric parametric_list_based_metric
 The used metric. More...
 
OpGraphConstRef flow_graph
 The dependence graph. More...
 
OpGraphConstRef flow_graph_with_feedbacks
 The dependence graph with feedbacks. More...
 
vertex2float starting_time
 The starting time given the scheduling (used for chaining) More...
 
OpVertexMap< double > ending_time
 The ending time given the scheduling (used for chaining) More...
 
double clock_cycle
 The clock cycle. More...
 
CustomUnorderedMapUnstable< std::pair< vertex, unsigned int >, boolis_complex
 memoization table used for connection estimation More...
 
std::map< std::string, std::set< std::string > > reachable_proxy_functions
 reachable proxy from a given function More...
 

Static Private Attributes

static const double EPSILON = 0.000000001
 

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 HLSFunctionStep
static std::string ComputeSignature (const HLSFlowStep_Type hls_flow_step_type, const HLSFlowStepSpecializationConstRef hls_flow_step_specialization, const unsigned int function_id)
 Compute the signature of a hls flow step. 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...
 
- Protected Member Functions inherited from HLSFunctionStep
void ComputeRelationships (DesignFlowStepSet &design_flow_step_set, const DesignFlowStep::RelationshipType relationship_type) override
 Compute the relationships of a step with other steps. More...
 
- Protected Attributes inherited from Scheduling
CustomUnorderedMap< vertex, boolspec
 Map for speculation property of each operation vertex. More...
 
const bool speculation
 flag to check speculation More...
 
- Protected Attributes inherited from HLSFunctionStep
std::map< unsigned int, unsigned int > last_bb_ver
 last bb version of the called functions More...
 
std::map< unsigned int, unsigned int > last_bitvalue_ver
 The version of bit value IR representation on which this step was applied. More...
 
const unsigned int funId
 identifier of the function to be processed (0 means that it is a global step) More...
 
hlsRef HLS
 HLS data structure of the function to be analyzed. More...
 
unsigned int bb_version
 The version of bb intermediate representation on which this step was applied. More...
 
unsigned int bitvalue_version
 The version of bitvalue on which this step was applied. More...
 
unsigned int memory_version
 The version of memory 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...
 
- 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

Class managing list based scheduling algorithms.

Definition at line 144 of file parametric_list_based.hpp.

Constructor & Destructor Documentation

◆ parametric_list_based()

parametric_list_based::parametric_list_based ( const ParameterConstRef  parameters,
const HLS_managerRef  HLSMgr,
unsigned int  _funId,
const DesignFlowManagerConstRef  design_flow_manager,
const HLSFlowStepSpecializationConstRef  hls_flow_step_specialization 
)

This is the constructor of the list_based.

Parameters
parametersis the set of input parameters
HLSmgris the HLS manager
function_idis the function index of the function
design_flow_manageris the hls design flow
hls_flow_step_specializationspecifies how specialize this step

Definition at line 318 of file parametric_list_based.cpp.

References DesignFlowStep::debug_level, GET_CLASS, DesignFlowStep::parameters, and ~parametric_list_based().

Here is the call graph for this function:

◆ ~parametric_list_based()

parametric_list_based::~parametric_list_based ( )
overridedefault

Destructor.

Referenced by parametric_list_based().

Here is the caller graph for this function:

Member Function Documentation

◆ add_to_priority_queues()

void parametric_list_based::add_to_priority_queues ( PriorityQueues priority_queue,
std::set< unsigned int, resource_ordering_functor > &  ready_resources,
const vertex  v 
) const
private

Adds the vertex v to the priority queues.

Parameters
priority_treesare the priority_queues
ready_resourcesis the set of resources which have at least one ready operation
vis the vertex.

Definition at line 1762 of file parametric_list_based.cpp.

References hls::allocation_information, AllocationInformation::can_implement_set(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, flow_graph, AllocationInformation::get_fu_name(), GET_NAME, HLSFunctionStep::HLS, INDENT_DBG_MEX, and AllocationInformation::is_vertex_bounded_with().

Referenced by exec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BB_update_resources_use()

bool parametric_list_based::BB_update_resources_use ( unsigned int &  used_resources,
const unsigned int  fu_type 
) const
private

Update the resource map.

Parameters
used_resources_fuis the resource map.
fu_typeis the functional unit type on which operation is scheduled
Returns
true if the assignment is feasible

Definition at line 1749 of file parametric_list_based.cpp.

References hls::allocation_information, AllocationInformation::get_number_fu(), and HLSFunctionStep::HLS.

Referenced by exec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_direct_operation_chaining()

bool parametric_list_based::check_direct_operation_chaining ( const CustomUnorderedSet< vertex > &  operations,
vertex  current_v,
const ControlStep  cs,
const ScheduleConstRef  schedule,
fu_bindingRef  res_binding 
) const
private

compute the set of operations on the control step frontier

Definition at line 2099 of file parametric_list_based.cpp.

References hls::allocation_information, flow_graph, fu_binding::get_assign(), GET_TYPE, HLSFunctionStep::HLS, AllocationInformation::is_direct_access_memory_unit(), and TYPE_LOAD.

Here is the call graph for this function:

◆ check_LOAD_chaining()

bool parametric_list_based::check_LOAD_chaining ( const CustomUnorderedSet< vertex > &  operations,
vertex  current_v,
const ControlStep  cs,
const ScheduleConstRef  schedule 
) const
private

compute the set of operations on the control step frontier

Definition at line 2140 of file parametric_list_based.cpp.

References flow_graph, GET_TYPE, and TYPE_LOAD.

Referenced by compute_starting_ending_time_asap().

Here is the caller graph for this function:

◆ check_non_direct_operation_chaining()

bool parametric_list_based::check_non_direct_operation_chaining ( const CustomUnorderedSet< vertex > &  operations,
vertex  current_v,
unsigned int  v_fu_type,
const ControlStep  cs,
const ScheduleConstRef  schedule,
fu_bindingRef  res_binding 
) const
private

◆ CheckSchedulabilityConditions()

void parametric_list_based::CheckSchedulabilityConditions ( const CustomUnorderedSet< vertex > &  operations,
const vertex current_vertex,
ControlStep  current_cycle,
double &  current_starting_time,
double &  current_ending_time,
double &  current_stage_period,
CustomMap< std::pair< unsigned int, unsigned int >, double > &  local_connection_map,
double  current_cycle_starting_time,
double  current_cycle_ending_time,
double  setup_hold_time,
double &  phi_extra_time,
double  scheduling_mux_margins,
bool  unbounded,
bool  unbounded_Functions,
bool  LoadStoreOp,
const std::set< std::string > &  proxy_functions_used,
bool  cstep_has_RET_conflict,
unsigned int  fu_type,
const vertex2obj< ControlStep > &  current_ASAP,
const fu_bindingRef  res_binding,
const ScheduleRef  schedule,
bool predecessorsCond,
bool pipeliningCond,
bool cannotBeChained0,
bool chainingRetCond,
bool cannotBeChained1,
bool asyncCond,
bool cannotBeChained2,
bool cannotBeChained3,
bool MultiCond0,
bool MultiCond1,
bool LoadStoreFunctionConflict,
bool FunctionStoreconflict,
bool proxyFunCond,
bool  unbounded_RW,
bool  seeMulticycle 
)
private

◆ compute_exec_stage_time()

void parametric_list_based::compute_exec_stage_time ( const unsigned int  fu_type,
double &  stage_period,
const ControlStep  cs,
const OpGraphConstRef  op_graph,
vertex  v,
double &  op_execution_time,
double &  phi_extra_time,
double  current_starting_time,
double  setup_hold_time 
)
private

check for PHIs attached to the output. They may require one or more muxes.

corrections for the memory controllers

corrections in case the unit first fits in a clock period and then after all the additions does not fit anymore

recompute the execution time from scratch

Stage period has already been used for computing ending time of operation If the operation has registered inputs, the stage period of first stage is 0 (mux delay is described by connection time)

Definition at line 1657 of file parametric_list_based.cpp.

References hls::allocation_information, OpGraph::CGetOpNodeInfo(), clock_cycle, DesignFlowStep::debug_level, DEBUG_LEVEL_VERY_PEDANTIC, EPSILON, flow_graph, flow_graph_with_feedbacks, from_strongtype_cast(), AllocationInformation::get_correction_time(), AllocationInformation::get_cycles(), AllocationInformation::get_execution_time(), AllocationInformation::get_initiation_time(), GET_NAME, AllocationInformation::GetConnectionTime(), AllocationInformation::GetFuType(), AllocationInformation::GetTimeLatency(), HLSFunctionStep::HLS, INDENT_DBG_MEX, AllocationInformation::is_indirect_access_memory_unit(), AllocationInformation::is_operation_PI_registered(), max, AllocationInformation::mux_time_unit(), DesignFlowStep::parameters, SCALAR, STR, THROW_ERROR, and USE.

Referenced by compute_starting_ending_time_asap().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ compute_function_topological_order()

void parametric_list_based::compute_function_topological_order ( )
private

compute_function_topological_order compute reachable function topological order

Definition at line 1795 of file parametric_list_based.cpp.

References DesignFlowStep::debug_level, DEBUG_LEVEL_VERBOSE, HLSFunctionStep::funId, HLS_step::HLSMgr, PRINT_DBG_MEX, and reachable_proxy_functions.

Referenced by InternalExec().

Here is the caller graph for this function:

◆ compute_starting_ending_time_asap()

void parametric_list_based::compute_starting_ending_time_asap ( const CustomUnorderedSet< vertex > &  operations,
const vertex  v,
const unsigned int  fu_type,
const ControlStep  cs,
double &  current_starting_time,
double &  current_ending_time,
double &  stage_period,
bool cannot_be_chained,
fu_bindingRef  res_binding,
const ScheduleConstRef  schedule,
double &  phi_extra_time,
double  setup_hold_time,
CustomMap< std::pair< unsigned int, unsigned int >, double > &  local_connection_map 
)
private

Given the control step in which an operation is scheduled, compute the exact starting and ending time of an operation.

Parameters
vis the vertex of the operation
fu_typeis the functional unit type
csis the control step
current_starting_timeis where starting_time will be stored
current_ending_timeis where ending_time will be stored
stage_periodis the minimum period of the pipelined unit fu_type

ending time is equal to the connection time plus the maximum between the controller time and the operation ending time

Check for chaining

Definition at line 1550 of file parametric_list_based.cpp.

References hls::allocation_information, AllocationInformation::CanBeChained(), OpGraph::CGetOpNodeInfo(), check_LOAD_chaining(), check_non_direct_operation_chaining(), clock_cycle, compute_exec_stage_time(), DesignFlowStep::debug_level, DEBUG_LEVEL_VERBOSE, DEBUG_LEVEL_VERY_PEDANTIC, ending_time, AllocationInformation::estimate_controller_delay_fb(), AllocationInformation::EstimateControllerDelay(), flow_graph, from_strongtype_cast(), fu_binding::get_assign(), AllocationInformation::get_memory_var(), GET_NAME, AllocationInformation::get_number_channels(), AllocationInformation::get_proxy_memory_var(), GET_TYPE, AllocationInformation::GetConnectionTime(), HLSFunctionStep::HLS, HLS_step::HLSMgr, INDENT_DBG_MEX, AllocationInformation::is_memory_unit(), AllocationInformation::is_one_cycle_direct_access_memory_unit(), AllocationInformation::is_readonly_memory_unit(), max, DesignFlowStep::parameters, PRINT_DBG_MEX, starting_time, STR, TYPE_IF, TYPE_LOAD, TYPE_MULTIIF, TYPE_PHI, TYPE_STORE, TYPE_SWITCH, and TYPE_VPHI.

Referenced by CheckSchedulabilityConditions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ComputeHLSRelationships()

const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > parametric_list_based::ComputeHLSRelationships ( const DesignFlowStep::RelationshipType  relationship_type) const
overrideprivatevirtual

Compute the relationship of this step.

Parameters
relationship_typeis the type of relationship to be considered
Returns
the steps in relationship with this

Reimplemented from Scheduling.

Definition at line 2178 of file parametric_list_based.cpp.

References Scheduling::ComputeHLSRelationships(), DesignFlowStep::DEPENDENCE_RELATIONSHIP, DOMINATOR_ALLOCATION, HLSFunctionStep::funId, HLS_step::HLSMgr, DesignFlowStep::INVALIDATION_RELATIONSHIP, DesignFlowStep::parameters, DesignFlowStep::PRECEDENCE_RELATIONSHIP, SAME_FUNCTION, THROW_UNREACHABLE, and WHOLE_APPLICATION.

Here is the call graph for this function:

◆ exec()

void parametric_list_based::exec ( const OpVertexSet operations,
ControlStep  current_cycle 
)

Function that computes the List-Based scheduling of the graph.

The scheduling

Current ASAP

The binding

Number of predecessors of a vertex already scheduled

The clock cycle

The setup+hold time delay

The set of resources for which the list of ready operations is not empty

Set of ready operations (needed for update priority)

vertices still live at the beginning of the current control step

select the type of graph

Number of operation to be scheduled

compute asap and alap

compute the set of vertices without input edges. At least one vertex is expected

Updating structure for already scheduled operations

Check if all its predecessors have been scheduled. In this case the vertex is ready

Setting priority

priory queues set up

definition of the data structure used to check if a resource is available given a vertex in case a vertex is not included in a map this mean that the used resources are zero. First index is the functional unit type, second index is the controller node, third index is the condition

Operations which can be scheduled in this control step because precedences are satisfied, but they can't be scheduled in this control step for some reasons Index is the functional unit type

Adding information about operation still live

Ignore empty list

Ignore already scheduled operation

remove current_vertex from the queue

true if operation is schedulable check if there exist enough resources available

check compatibility

put these type of operations as last operation scheduled for the basic block

starting time of the operation

ending time of the operation

stage period for pipelined units

checking if predecessors have finished

scheduling is now possible

update resource usage

check if we have functions accessing the memory

check if we have unbounded resources

check if we have memory accesses

update cstep_vuses

set the schedule information

check if we have operations taking more than one cycle

set the binding information

Check if some successors have become ready

check if to_v should be considered as ready

update priorities and possibly rehash the queues

clear the vuses

move to the next cycle

Definition at line 522 of file parametric_list_based.cpp.

References add_to_priority_queues(), Schedule::AddConnectionTimes(), ASLAP::ALAP_fast, ASLAP::ALAP_with_partial_scheduling, hls::allocation_information, BB_update_resources_use(), fu_binding::bind(), FunctionBehavior::CFG, OpGraph::CGetOpGraphInfo(), OpGraph::CGetOpNodeInfo(), check_if_is_live_in_next_cycle(), CheckSchedulabilityConditions(), clock_cycle, CTRL_STEP_MULTIPLIER, DesignFlowStep::debug_level, DEBUG_LEVEL_VERBOSE, DEBUG_LEVEL_VERY_PEDANTIC, DYNAMIC_MOBILITY, ending_time, Schedule::ending_times, FunctionBehavior::FFLSAODG, flow_graph, flow_graph_with_feedbacks, FunctionBehavior::FLSAODG, from_strongtype_cast(), HLSFunctionStep::funId, fu_binding::get_assign(), AllocationInformation::get_execution_time(), AllocationInformation::get_fu_name(), AllocationInformation::get_initiation_time(), AllocationInformation::get_memory_var(), GET_NAME, AllocationInformation::get_number_fu(), AllocationInformation::get_number_fu_types(), AllocationInformation::get_proxy_memory_var(), AllocationInformation::get_setup_hold_time(), GET_TYPE, tree_helper::GetMangledFunctionName(), HLSFunctionStep::HLS, hls::HLS_C, HLS_step::HLSMgr, INDENT_DBG_MEX, AllocationInformation::is_direct_access_memory_unit(), AllocationInformation::is_memory_unit(), AllocationInformation::is_operation_bounded(), Schedule::is_scheduled(), max, AllocationInformation::mux_time_unit(), Schedule::num_scheduled(), DesignFlowStep::parameters, parametric_list_based_metric, PRINT_DBG_MEX, reachable_proxy_functions, hls::Rfu, hls::Rsch, Schedule::set_csteps(), Schedule::set_execution(), Schedule::set_execution_end(), FunctionBehavior::SG, Scheduling::speculation, starting_time, Schedule::starting_times, STATIC_FIXED, STATIC_MOBILITY, STR, lenet_tvm::target, THROW_ASSERT, THROW_ERROR, THROW_UNREACHABLE, THROW_WARNING, TYPE_EXTERNAL, TYPE_FOR, TYPE_GOTO, TYPE_IF, TYPE_LOAD, TYPE_MULTIIF, TYPE_RET, TYPE_RW, TYPE_STORE, TYPE_SWITCH, and TYPE_WHILE.

Referenced by InternalExec().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Initialize()

void parametric_list_based::Initialize ( )
overridevirtual

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

Reimplemented from HLSFunctionStep.

Definition at line 337 of file parametric_list_based.cpp.

References FunctionBehavior::CFG, FunctionBehavior::CGetOpGraph(), ending_time, HLSFunctionStep::funId, HLS_step::HLSMgr, and Scheduling::Initialize().

Here is the call graph for this function:

◆ InternalExec()

DesignFlowStep_Status parametric_list_based::InternalExec ( )
overridevirtual

◆ store_in_chaining_with_load_in()

bool parametric_list_based::store_in_chaining_with_load_in ( const CustomUnorderedSet< vertex > &  operations,
unsigned int  current_vertex_cstep,
vertex  v 
)
private

store_in_chaining_with_load checks if a store is chained with a load operation or vice versa

Parameters
current_vertex_cstepcontrol step of vertex v
vvertex considered
Returns
true in case vertex v is a store or a load operation and it is chained with a load or store operation

Definition at line 1954 of file parametric_list_based.cpp.

References OpGraph::CGetOpNodeInfo(), clock_cycle, ending_time, flow_graph, GET_TYPE, TYPE_LOAD, and TYPE_STORE.

Here is the call graph for this function:

◆ store_in_chaining_with_load_out()

bool parametric_list_based::store_in_chaining_with_load_out ( const CustomUnorderedSet< vertex > &  operations,
unsigned int  current_vertex_cstep,
vertex  v 
)
private

Definition at line 1996 of file parametric_list_based.cpp.

References OpGraph::CGetOpNodeInfo(), clock_cycle, flow_graph, GET_TYPE, starting_time, TYPE_LOAD, and TYPE_STORE.

Here is the call graph for this function:

Field Documentation

◆ clock_cycle

double parametric_list_based::clock_cycle
private

◆ ending_time

OpVertexMap<double> parametric_list_based::ending_time
private

The ending time given the scheduling (used for chaining)

Definition at line 166 of file parametric_list_based.hpp.

Referenced by compute_starting_ending_time_asap(), exec(), Initialize(), InternalExec(), and store_in_chaining_with_load_in().

◆ EPSILON

const double parametric_list_based::EPSILON = 0.000000001
staticprivate

◆ flow_graph

OpGraphConstRef parametric_list_based::flow_graph
private

◆ flow_graph_with_feedbacks

OpGraphConstRef parametric_list_based::flow_graph_with_feedbacks
private

The dependence graph with feedbacks.

Definition at line 160 of file parametric_list_based.hpp.

Referenced by compute_exec_stage_time(), and exec().

◆ is_complex

CustomUnorderedMapUnstable<std::pair<vertex, unsigned int>, bool> parametric_list_based::is_complex
private

memoization table used for connection estimation

Definition at line 172 of file parametric_list_based.hpp.

◆ parametric_list_based_metric

const ParametricListBased_Metric parametric_list_based::parametric_list_based_metric
private

The used metric.

Definition at line 154 of file parametric_list_based.hpp.

Referenced by exec().

◆ reachable_proxy_functions

std::map<std::string, std::set<std::string> > parametric_list_based::reachable_proxy_functions
private

reachable proxy from a given function

Definition at line 175 of file parametric_list_based.hpp.

Referenced by CheckSchedulabilityConditions(), compute_function_topological_order(), and exec().

◆ starting_time

vertex2float parametric_list_based::starting_time
private

The starting time given the scheduling (used for chaining)

Definition at line 163 of file parametric_list_based.hpp.

Referenced by compute_starting_ending_time_asap(), exec(), and store_in_chaining_with_load_out().


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

Generated on Mon Feb 12 2024 13:04:00 for PandA-2024.02 by doxygen 1.8.13