Hybrid Query Processing Engine for Coprocessing in Database Systems
HyPE
|
The Scheduler is the central component for interaction of the application and the library. More...
#include <scheduler.hpp>
Classes | |
class | ProcessingDevices |
Public Types | |
typedef std::map< std::string, std::tr1::shared_ptr < Operation > > | MapNameToOperation |
Public Member Functions | |
bool | addAlgorithm (const AlgorithmSpecification &alg_spec, const DeviceSpecification &dev_spec) |
adds an Algorithm to the AlgorithmPool of an operation defined by alg_spec on the processing device defined by dev_spec. | |
bool | setOptimizationCriterion (const std::string &name_of_operation, const std::string &name_of_optimization_criterion) |
assigns the OptimizationCriterion name_of_optimization_criterion to Operation name_of_operation | |
bool | setStatisticalMethod (const std::string &name_of_algorithm, const std::string &name_of_statistical_method) |
assigns the StatisticalMethod name_of_statistical_method to an existing Algorithm | |
bool | setRecomputationHeuristic (const std::string &name_of_algorithm, const std::string &name_of_recomputation_strategy) |
assigns the StatisticalMethod name_of_statistical_method to an existing Algorithm | |
const SchedulingDecision | getOptimalAlgorithm (const OperatorSpecification &op_spec, const DeviceConstraint &dev_constr) |
Returns a Scheduling Decision, which contains the name of the estimated optimal Algorithm w.r.t. the user specified optimization criterion. | |
bool | addObservation (const SchedulingDecision &sched_dec, const double &measured_execution_time) |
adds an observed execution time to the algorithm previously choosen by getOptimalAlgorithmName. | |
const AlgorithmPtr | getAlgorithm (const std::string &name_of_algorithm) |
requests a pointer to Algorithm named name_of_algorithm | |
EstimatedTime | getEstimatedExecutionTime (const OperatorSpecification &op_spec, const std::string &alg_name) |
void | print () |
ProcessingDevices & | getProcessingDevices () |
Static Public Member Functions | |
static Scheduler & | instance () |
This method implements the singelton concept for the Scheduler class to avoid multiple instances. | |
Private Member Functions | |
Scheduler () | |
Constructor is private to avoid multiple instances of Scheduler. | |
Scheduler (const Scheduler &) | |
Copy Constructor is private to avoid copying of the single instance of Scheduler. | |
Scheduler & | operator= (const Scheduler &) |
Copy assignment operator is private to avoid copying of the single instance of Scheduler. | |
Private Attributes | |
MapNameToOperation | map_operationname_to_operation_ |
maps the name of an Operation to a pointer to an Operation object | |
StatisticalMethodMap | map_statisticalmethodname_to_statisticalmethod_ |
maps the name of a StatisticalMethod to a pointer to a StatisticalMethod object | |
ProcessingDevices | proc_devs_ |
stores the processing devices, which were specified by the user |
The Scheduler provides two main functionalities. First, it provides the service to decide on the optimal algorithm for an operation w.r.t. a user specified optimization criterion. Second, the Scheduler implements an interface to add new Observations to the executed Algorithm. Hence, it is the central component for interaction of the application and the library. Since it is not meaningful to have multiple instances of the Scheduler class, it is not possible to create multiple Scheduler instances. This property is implemented by using the singelton concept. Additionally, the Scheduler enables the user to setup the Operations with their respective Algorithms as well as to configure for each algorithm a statistical method and a recomputation heuristic and for each operation an optimization criterion. Note that the statistical method and the recomputation statistic can be exchanged at run-time, because the Algortihm uses the pointer to implementation technique (or pimpl-idiom).
Definition at line 37 of file scheduler.hpp.
typedef std::map<std::string,std::tr1::shared_ptr<Operation> > hype::core::Scheduler::MapNameToOperation |
Definition at line 40 of file scheduler.hpp.
hype::core::Scheduler::Scheduler | ( | ) | [private] |
Definition at line 18 of file scheduler.cpp.
References hype::core::PluginLoader::loadPlugins().
hype::core::Scheduler::Scheduler | ( | const Scheduler & | ) | [private] |
reference | to existing Scheduler object |
bool hype::core::Scheduler::addAlgorithm | ( | const AlgorithmSpecification & | alg_spec, |
const DeviceSpecification & | dev_spec | ||
) |
If the specified operation does not exist, it is created. Multiple calls to addAlgorithm with an AlgorithmSpecification having the same Operation name will add the respective algorithms to the algorithm pool of the specified Operation
alg_spec | defines properties of the algorithm, e.g., name, the operation it belongs to, etc. |
dev_spec | defines properties of the processing device the algorithm runs on, e.g., device type (CPU or GPU) and the device id |
Definition at line 24 of file scheduler.cpp.
References hype::core::Scheduler::ProcessingDevices::addDevice(), hype::core::Scheduler::ProcessingDevices::exists(), hype::core::AlgorithmSpecification::getAlgorithmName(), hype::core::AlgorithmSpecification::getOperationName(), hype::core::AlgorithmSpecification::getRecomputationHeuristicName(), hype::core::AlgorithmSpecification::getStatisticalMethodName(), hype::core::global_mutex, map_operationname_to_operation_, and proc_devs_.
bool hype::core::Scheduler::addObservation | ( | const SchedulingDecision & | sched_dec, |
const double & | measured_execution_time | ||
) |
sched_dec | the scheduling decision, this observation belongs to |
measured_execution_time | measured execution time, in nanoseconds!!! |
Definition at line 213 of file scheduler.cpp.
References hype::core::SchedulingDecision::getEstimatedExecutionTimeforAlgorithm(), hype::core::SchedulingDecision::getFeatureValues(), hype::core::SchedulingDecision::getNameofChoosenAlgorithm(), hype::core::global_mutex, map_operationname_to_operation_, proc_devs_, and hype::core::Scheduler::ProcessingDevices::removeSchedulingDecision().
const AlgorithmPtr hype::core::Scheduler::getAlgorithm | ( | const std::string & | name_of_algorithm | ) |
name_of_algorithm | name of the Algorithm where the pointer is requested |
Definition at line 114 of file scheduler.cpp.
References map_operationname_to_operation_.
Referenced by getEstimatedExecutionTime(), hype::core::Report::getRelativeEstimationError(), setRecomputationHeuristic(), and setStatisticalMethod().
EstimatedTime hype::core::Scheduler::getEstimatedExecutionTime | ( | const OperatorSpecification & | op_spec, |
const std::string & | alg_name | ||
) |
Definition at line 232 of file scheduler.cpp.
References getAlgorithm(), hype::core::OperatorSpecification::getFeatureVector(), hype::core::OperatorSpecification::getOperatorName(), and hype::core::global_mutex.
const SchedulingDecision hype::core::Scheduler::getOptimalAlgorithm | ( | const OperatorSpecification & | op_spec, |
const DeviceConstraint & | dev_constr | ||
) |
op_spec | OperatorSpecification, contains all available information about the operator to execute |
dev_constr | DeviceConstraint, restricting the available algorithms to a subset of the algorithm pool (e.g., allow only CPU algorithms) |
Definition at line 159 of file scheduler.cpp.
References hype::core::OperatorSpecification::getFeatureVector(), hype::core::OperatorSpecification::getOperatorName(), hype::core::global_mutex, and map_operationname_to_operation_.
Definition at line 271 of file scheduler.cpp.
References proc_devs_.
Referenced by hype::core::WaitingTimeAwareResponseTime::getOptimalAlgorithm_internal().
Scheduler & hype::core::Scheduler::instance | ( | ) | [static] |
Definition at line 54 of file scheduler.cpp.
Referenced by hype::core::AlgorithmMeasurement::afterAlgorithmExecution(), hype::core::WaitingTimeAwareResponseTime::getOptimalAlgorithm_internal(), hype::core::Report::getRelativeEstimationError(), and hype_printStatus().
reference | to existing Scheduler object |
void hype::core::Scheduler::print | ( | ) |
Definition at line 244 of file scheduler.cpp.
References map_operationname_to_operation_.
Referenced by hype_printStatus().
bool hype::core::Scheduler::setOptimizationCriterion | ( | const std::string & | name_of_operation, |
const std::string & | name_of_optimization_criterion | ||
) |
name_of_operation | name of the Operation |
name_of_optimization_criterion | Name of OptimizationCriterion |
Definition at line 89 of file scheduler.cpp.
References hype::core::getNewOptimizationCriterionbyName(), hype::core::global_mutex, and map_operationname_to_operation_.
bool hype::core::Scheduler::setRecomputationHeuristic | ( | const std::string & | name_of_algorithm, |
const std::string & | name_of_recomputation_strategy | ||
) |
name_of_algorithm | Name of Algorithm |
name_of_recomputation_strategy | assigns the RecomputationHeuristic name_of_recomputation_strategy to an existing Algorithm |
Definition at line 144 of file scheduler.cpp.
References getAlgorithm(), hype::core::getNewRecomputationHeuristicbyName(), and hype::core::global_mutex.
bool hype::core::Scheduler::setStatisticalMethod | ( | const std::string & | name_of_algorithm, |
const std::string & | name_of_statistical_method | ||
) |
name_of_algorithm | Name of Algorithm |
name_of_statistical_method | assigns the StatisticalMethod name_of_statistical_method to an existing Algorithm |
Definition at line 127 of file scheduler.cpp.
References getAlgorithm(), hype::core::getNewStatisticalMethodbyName(), and hype::core::global_mutex.
Definition at line 154 of file scheduler.hpp.
Referenced by addAlgorithm(), addObservation(), getAlgorithm(), getOptimalAlgorithm(), print(), and setOptimizationCriterion().
StatisticalMethodMap hype::core::Scheduler::map_statisticalmethodname_to_statisticalmethod_ [private] |
Definition at line 156 of file scheduler.hpp.
Definition at line 187 of file scheduler.hpp.
Referenced by addAlgorithm(), addObservation(), and getProcessingDevices().