TVM  0.9.4
SubstitutionUnit.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/api.h>
6 
7 #include <tvm/Range.h>
10 #include <tvm/hint/Substitution.h>
12 
13 #include <Eigen/Core>
14 
15 #include <vector>
16 
17 namespace tvm
18 {
19 
20 namespace hint
21 {
22 
23 namespace internal
24 {
29 {
30 public:
36  SubstitutionUnit(const std::vector<Substitution> & substitutionPool,
37  const std::vector<std::vector<size_t>> & groups,
38  const std::vector<size_t> order);
39 
41  void update();
42 
44  const std::vector<VariablePtr> & variables() const;
49  const std::vector<std::shared_ptr<function::BasicLinearFunction>> & variableSubstitutions() const;
51  const std::vector<VariablePtr> & additionalVariables() const;
53  const std::vector<std::shared_ptr<constraint::BasicLinearConstraint>> & additionalConstraints() const;
55  const std::vector<VariablePtr> & otherVariables() const;
56 
57 private:
61  void extractSubstitutions(const std::vector<Substitution> & substitutionPool,
62  const std::vector<std::vector<size_t>> & groups,
63  const std::vector<size_t> order);
68  void scanSubstitutions();
70  void computeDependencies();
72  void initializeMatrices();
74  void createFunctions();
75 
77  int m_;
79  std::vector<Substitution> substitutions_;
81  std::vector<std::shared_ptr<abstract::SubstitutionCalculatorImpl>> calculators_;
83  std::vector<LinearConstraintPtr> constraints_;
85  VariableVector x_;
87  VariableVector y_;
89  VariableVector z_;
93  std::vector<Range> substitutionMRanges_;
98  std::vector<Range> substitutionNRanges_;
99 
103  std::vector<std::vector<size_t>> sub2cstr_;
107  std::vector<std::vector<size_t>> sub2x_;
111  std::vector<size_t> x2sub_;
115  std::vector<Range> xRange_;
116 
118  std::vector<std::vector<int>> constraintsY_;
120  std::vector<std::vector<int>> CXdependencies_;
122  std::vector<std::vector<int>> XYdependencies_;
124  std::vector<std::vector<int>> XZdependencies_;
126  std::vector<std::vector<int>> SYdependencies_;
128  std::vector<std::vector<int>> SZdependencies_;
129 
131  std::vector<std::shared_ptr<function::BasicLinearFunction>> varSubstitutions_;
133  std::vector<std::shared_ptr<constraint::BasicLinearConstraint>> remaining_;
134 
139  Eigen::MatrixXd B_;
144  Eigen::MatrixXd Z_;
148  Eigen::VectorXd c_;
150  std::vector<bool> cIsZero_;
156  Eigen::MatrixXd M_;
162  Eigen::MatrixXd AsZ_;
164  Eigen::VectorXd u_;
168  std::vector<bool> uIsZero_;
172  std::vector<Eigen::MatrixXd> StB_;
176  std::vector<Eigen::MatrixXd> StZ_;
178  std::vector<Eigen::VectorXd> Stc_;
179 
181  std::vector<bool> firstY_;
183  std::vector<bool> firstZ_;
184 };
185 
186 } // namespace internal
187 
188 } // namespace hint
189 
190 } // namespace tvm
#define TVM_DLLAPI
Definition: api.h:35
Definition: VariableVector.h:41
Definition: SubstitutionUnit.h:29
const std::vector< VariablePtr > & variables() const
const std::vector< std::shared_ptr< constraint::BasicLinearConstraint > > & additionalConstraints() const
const std::vector< VariablePtr > & additionalVariables() const
const std::vector< std::shared_ptr< function::BasicLinearFunction > > & variableSubstitutions() const
const std::vector< VariablePtr > & otherVariables() const
SubstitutionUnit(const std::vector< Substitution > &substitutionPool, const std::vector< std::vector< size_t >> &groups, const std::vector< size_t > order)
Definition: Clock.h:12