crown
1.0.0
|
00001 /* 00002 Copyright 2015 Nicolas Melot 00003 00004 This file is part of Pelib. 00005 00006 Pelib is free software: you can redistribute it and/or modify 00007 it under the terms of the GNU General Public License as published by 00008 the Free Software Foundation, either version 3 of the License, or 00009 (at your option) any later version. 00010 00011 Pelib is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 GNU General Public License for more details. 00015 00016 You should have received a copy of the GNU General Public License 00017 along with Pelib. If not, see <http://www.gnu.org/licenses/>. 00018 */ 00019 00020 #include <pelib/Scheduler.hpp> 00021 #include <pelib/Solver.hpp> 00022 #include <pelib/Algebra.hpp> 00023 #include <pelib/Taskgraph.hpp> 00024 #include <pelib/Platform.hpp> 00025 #include <pelib/Schedule.hpp> 00026 #include <pelib/constraints.hpp> 00027 00028 #include <crown/CrownConfig.hpp> 00029 00030 #ifndef CROWN_SCHEDULER 00031 #define CROWN_SCHEDULER 00032 00033 namespace pelib 00034 { 00035 namespace crown 00036 { 00037 class CrownScheduler : public Scheduler 00038 { 00039 public: 00040 CrownScheduler(const CrownConfig* = NULL, bool showOutput = false, bool showError = false); 00041 CrownScheduler(const Algebra ¶m, const CrownConfig* = NULL, bool showOutput = false, bool showError = false); 00042 CrownScheduler(const Taskgraph &tg, const Platform &pt, const Algebra ¶m, const CrownConfig* = NULL, bool showOutput = false, bool showError = false); 00043 CrownScheduler(const CrownScheduler &src); 00044 virtual ~CrownScheduler(); 00045 virtual Schedule schedule(const Taskgraph &tg, const Platform &pt, std::map<const string, double>&) const = 0; 00046 virtual Schedule schedule(const Taskgraph &tg, const Platform &pt, const Algebra ¶m, std::map<const string, double>&) const = 0; 00047 virtual float complexity(const Algebra &problem) const; 00048 virtual float complexity(const Taskgraph&, const Platform&, const Algebra&) const; 00049 const Algebra* solve() const; 00050 const Algebra* solve(map<const string, double>&) const; 00051 virtual Algebra solve(const Algebra &tg, const Algebra &pt, const pelib::Algebra ¶m, std::map<const std::basic_string<char>, double> &statistics) const = 0; 00052 virtual CrownScheduler* clone() const = 0; 00053 virtual std::string getShortDescription() const; 00054 // TODO: make it protected 00055 static Algebra crownToSchedule(const Algebra &crown); 00056 const CrownConfig* getCrownConfig() const; 00057 const CrownConfig *config; 00058 Algebra addCrownConfig(const Taskgraph&, const Platform&, const Algebra&, std::map<const string, double>&) const; 00059 protected: 00060 CrownConfig* getDefaultConfig() const; 00061 bool showError, showOutput; 00062 Taskgraph tg; 00063 Platform pt; 00064 Algebra param; 00065 private: 00066 void initialize(const CrownConfig* = NULL); 00067 }; 00068 } 00069 } 00070 00071 #endif