PandA-2024.02
scheduling.cpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
46 #include "scheduling.hpp"
47 
48 #include "Parameter.hpp"
49 #include "allocation.hpp"
51 #include "dbgPrintHelper.hpp"
52 #include "fu_binding.hpp"
53 #include "hls.hpp"
54 #include "hls_constraints.hpp"
55 #include "hls_manager.hpp"
56 #include "op_graph.hpp"
59 #include "refcount.hpp"
60 #include "utility.hpp"
61 
62 Scheduling::Scheduling(const ParameterConstRef _Param, const HLS_managerRef _HLSMgr, unsigned int _funId,
63  const DesignFlowManagerConstRef _design_flow_manager, const HLSFlowStep_Type _hls_flow_step_type,
64  const HLSFlowStepSpecializationConstRef _hls_flow_step_specialization)
65  : HLSFunctionStep(_Param, _HLSMgr, _funId, _design_flow_manager, _hls_flow_step_type,
66  _hls_flow_step_specialization),
67  speculation(_Param->getOption<bool>(OPT_speculative))
68 {
69 }
70 
71 Scheduling::~Scheduling() = default;
72 
74 {
76  if(HLS->Rsch)
77  {
78  HLS->Rsch->Initialize();
79  }
80  else
81  {
82  const FunctionBehaviorConstRef FB = HLSMgr->CGetFunctionBehavior(funId);
84  }
85  if(parameters->getOption<int>(OPT_memory_banks_number) > 1 && !parameters->isOption(OPT_context_switch))
86  {
88  }
89  else
90  {
92  }
93 }
94 
97 {
99  switch(relationship_type)
100  {
102  {
103 #if HAVE_FROM_PRAGMA_BUILT
104  if(parameters->getOption<bool>(OPT_parse_pragma))
105  {
106  ret.insert(std::make_tuple(HLSFlowStep_Type::OMP_ALLOCATION, HLSFlowStepSpecializationConstRef(),
108  }
109  else
110 #endif
111  {
114  }
117  break;
118  }
120  {
121  break;
122  }
124  {
125  break;
126  }
127  default:
128  THROW_UNREACHABLE("");
129  }
130  return ret;
131 }
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
const HLS_managerRef HLSMgr
information about all the HLS synthesis
Definition: hls_step.hpp:205
Data structure representing the entire HLS information.
File containing functions and utilities to support the printing of debug messagges.
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.
Definition: scheduling.cpp:62
refcount< fu_binding > fu_bindingRef
RefCount type definition of the fu_binding class structure.
Definition: fu_binding.hpp:402
refcount< Schedule > ScheduleRef
Refcount definition of the class.
Definition: schedule.hpp:410
Class managing the schedule of the operations.
Definition: schedule.hpp:118
static fu_bindingRef create_fu_binding(const HLS_managerConstRef _HLSMgr, const unsigned int _function_id, const ParameterConstRef _parameters)
create_fu_binding: factory method for fu_binding
Definition: fu_binding.cpp:135
RelationshipType
The relationship type.
Source must be executed to satisfy target.
const unsigned int funId
identifier of the function to be processed (0 means that it is a global step)
void Initialize() override
Initialize the step (i.e., like a constructor, but executed just before exec.
Definition: scheduling.cpp:73
void Initialize()
Initialize the data structure.
Definition: schedule.cpp:1397
bool
Definition: bellmanford.c:29
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
fu_bindingRef Rfu
Store the refcounted functional unit binding of the operations.
Definition: hls.hpp:121
ScheduleRef Rsch
Store the refcounted scheduling of the operations.
Definition: hls.hpp:118
Base class for all scheduling algorithms.
HLSFlowStep_Type
Definition: hls_step.hpp:95
Data structure used to store the functional-unit binding of the vertices.
const ParameterConstRef parameters
Set of input parameters.
This package is used by all HLS packages to manage resource constraints and characteristics.
This file collects some utility functions and macros.
Data structure definition for HLS constraints.
Template definition of refcount.
Class definition of the list_based structure.
Data structure used to store the functional-unit binding of the vertexes.
const OpGraphConstRef CGetOpGraph(FunctionBehavior::graph_type gt) const
This method returns the operation graphs.
hlsRef HLS
HLS data structure of the function to be analyzed.
Data structures used in operations graph.
Template borrowed from the ANTLR library by Terence Parr (http://www.jGuru.com - Software rights: htt...
Definition: refcount.hpp:94
System dependence + anti-dependence + output dependence graph + flow graph.
this class is used to manage the command-line or XML options.
This package is used by all HLS packages to manage resource constraints and characteristics.
refcount< const HLSFlowStepSpecialization > HLSFlowStepSpecializationConstRef
const refcount definition of the class
Definition: hls_step.hpp:93
virtual const CustomUnorderedSet< std::tuple< HLSFlowStep_Type, HLSFlowStepSpecializationConstRef, HLSFlowStep_Relationship > > ComputeHLSRelationships(const DesignFlowStep::RelationshipType relationship_type) const override
Compute the relationship of this step.
Definition: scheduling.cpp:96
~Scheduling() override
Destructor.
Data structure definition for high-level synthesis flow.
Superclass include.

Generated on Mon Feb 12 2024 13:02:54 for PandA-2024.02 by doxygen 1.8.13