Column-oriented GPU-accelerated Database Management System
CoGaDB
|
00001 /*********************************************************************************************************** 00002 Copyright (c) 2012, Sebastian Breß, Otto-von-Guericke University of Magdeburg, Germany. All rights reserved. 00003 00004 This program and accompanying materials are made available under the terms of the 00005 GNU LESSER GENERAL PUBLIC LICENSE - Version 3, http://www.gnu.org/licenses/lgpl-3.0.txt 00006 ***********************************************************************************************************/ 00007 #pragma once 00008 00009 #include <iostream> 00010 #include <string> 00011 #include <vector> 00012 #include <core/operation.hpp> 00013 #include <core/time_measurement.hpp> 00014 #include <core/measurementpair.hpp> 00015 #include <core/specification.hpp> 00016 #include <query_processing/virtual_processing_device.hpp> 00017 00018 namespace hype{ 00019 namespace core{ 00020 00037 class Scheduler{ 00038 public: 00039 00040 typedef std::map<std::string,std::tr1::shared_ptr<Operation> > MapNameToOperation; 00041 00045 static Scheduler& instance(); 00046 00047 /* \brief adds an Algorithm to the AlgorithmPool of operation name_of_operation. 00048 * \details If the specified operation does not exist, it is created. Multiple calls to addAlgorithm 00049 * with the same Operation name will add the respective algorithms to the algorithm pool of the specified Operation 00050 * \param name_of_operation name of the operation, where the algorithm belongs to 00051 * \param name_of_algorithm Name of Algorithm to be created 00052 * \param name_of_statistical_method assigns the StatisticalMethod name_of_statistical_method to the new Algorithm 00053 * \param name_of_recomputation_strategy assigns the RecomputationHeuristic name_of_recomputation_strategy to the new Algorithm 00054 * \return returns true on success and false otherwise 00055 */ 00056 // bool addAlgorithm(const std::string& name_of_operation, 00057 // const std::string& name_of_algorithm, 00058 // ComputeDevice comp_dev, 00059 // const std::string& name_of_statistical_method, 00060 // const std::string& name_of_recomputation_strategy); 00061 00069 bool addAlgorithm(const AlgorithmSpecification& alg_spec, const DeviceSpecification& dev_spec); 00070 00076 bool setOptimizationCriterion(const std::string& name_of_operation, 00077 const std::string& name_of_optimization_criterion); 00083 bool setStatisticalMethod(const std::string& name_of_algorithm, 00084 const std::string& name_of_statistical_method); 00090 bool setRecomputationHeuristic(const std::string& name_of_algorithm, 00091 const std::string& name_of_recomputation_strategy); 00092 00093 /* \brief Returns a Scheduling Decision, which contains the name of the estimated optimal Algorithm 00094 * w.r.t. the user specified optimization criterion 00095 * \param name_of_operation name of the operation, where the optimal algorithm is requested 00096 * \param input_values features of the input dataset, which is needed to compute estimated execution times 00097 for all algortihms of the specified operation 00098 * \return SchedulingDecision, which contains the suggested algortihm for the specified information 00099 */ 00100 //const SchedulingDecision getOptimalAlgorithmName(const std::string& name_of_operation, const Tuple& input_values, DeviceTypeConstraint dev_constr = ANY_DEVICE); 00101 00108 const SchedulingDecision getOptimalAlgorithm(const OperatorSpecification& op_spec, const DeviceConstraint& dev_constr); 00109 00110 /* \brief adds an observed MeasurementPair to the algorithm previously choosen by getOptimalAlgorithmName. 00111 * \param name_of_algorithm name of the algorithm the MeasurementPair belongs to 00112 * \param mp the observed MeasurementPair 00113 * \return Scheduling Decision, which recommends the application the optimal Algorithm w.r.t. the specified 00114 * operation and features of the input data set 00115 */ 00116 //bool addObservation(const std::string& name_of_algorithm, const MeasurementPair& mp); 00117 00123 bool addObservation(const SchedulingDecision& sched_dec, const double& measured_execution_time); 00124 00129 const AlgorithmPtr getAlgorithm(const std::string& name_of_algorithm); 00130 /* \brief request an Estimated Execution Time from HyPE for an algorithm for a certain operator 00131 * \param op_spec OperatorSpecification, contains all available information about the operator to execute 00132 * \param alg_name algorithm name 00133 * \return estimated execution time 00134 */ 00135 EstimatedTime getEstimatedExecutionTime(const OperatorSpecification& op_spec, const std::string& alg_name); 00136 00137 void print(); 00138 private: 00141 Scheduler(); 00145 Scheduler(const Scheduler&); 00149 Scheduler& operator= (const Scheduler&); 00150 00151 //void addOperation(std::string operation_name); 00152 00154 MapNameToOperation map_operationname_to_operation_; 00156 StatisticalMethodMap map_statisticalmethodname_to_statisticalmethod_; 00157 00158 public: 00159 class ProcessingDevices{ 00160 public: 00161 typedef std::map<ProcessingDeviceID,queryprocessing::VirtualProcessingDevicePtr> Devices; 00162 00163 ProcessingDevices(); 00164 00165 queryprocessing::VirtualProcessingDevicePtr getProcessingDevice(ProcessingDeviceID); 00166 00167 bool addDevice(const DeviceSpecification&); 00168 00169 bool exists(const DeviceSpecification&) const throw(); 00170 00171 const Devices& getDevices() const throw(); 00172 00173 bool addSchedulingDecision(const SchedulingDecision&); 00174 00175 bool removeSchedulingDecision(const SchedulingDecision&); 00176 00177 void print() const throw(); 00178 private: 00179 Devices virt_comp_devs_; 00180 }; 00181 00182 00183 ProcessingDevices& getProcessingDevices(); 00184 00185 private: 00187 ProcessingDevices proc_devs_; 00188 00189 }; 00190 00191 }; //end namespace core 00192 }; //end namespace hype