Hybrid Query Processing Engine for Coprocessing in Database Systems
HyPE
|
00001 00002 #include <core/algorithm_measurement.hpp> 00003 #include <core/scheduler.hpp> 00004 #include <boost/lexical_cast.hpp> 00005 #include <exception> 00006 00007 using namespace std; 00008 00009 namespace hype{ 00010 namespace core{ 00011 00012 AlgorithmMeasurement::AlgorithmMeasurement(const SchedulingDecision& scheduling_decision) 00013 : timestamp_begin_(getTimestamp()), 00014 scheduling_decision_(scheduling_decision){ 00015 //feature_values_(values),name_of_algorithm_(name_of_algorithm){ 00016 00017 } 00018 00019 void AlgorithmMeasurement::afterAlgorithmExecution(){ 00020 uint64_t timestamp_end = getTimestamp(); 00021 if(timestamp_begin_>timestamp_end){ 00022 std::cout << "FATAL ERROR: " << "STEMOD: measured time duration is negative!!!" << std::endl; 00023 exit(-1); 00024 } 00025 MeasuredTime measured_time(double(timestamp_end-timestamp_begin_)); 00026 if(!quiet){ 00027 Tuple t = scheduling_decision_.getFeatureValues(); 00028 string input_data_features("("); 00029 for(unsigned int i=0;i<t.size();i++){ 00030 //cout << t[i] << endl; 00031 input_data_features+= boost::lexical_cast<std::string>(t[i]); 00032 if(i!=t.size()-1) input_data_features+=", "; 00033 } 00034 input_data_features+=")"; 00035 assert(t.size()>0); 00036 00037 cout << "Algorithm: '" << scheduling_decision_.getNameofChoosenAlgorithm() 00038 << "' Input Data Feature Vector: " << input_data_features 00039 << " Estimated Execution Time: " << scheduling_decision_.getEstimatedExecutionTimeforAlgorithm().getTimeinNanoseconds() << "ns" 00040 << " Measured Execution Time: " << measured_time.getTimeinNanoseconds() << "ns" 00041 << " Relative Error: " << (measured_time.getTimeinNanoseconds()-scheduling_decision_.getEstimatedExecutionTimeforAlgorithm().getTimeinNanoseconds())/scheduling_decision_.getEstimatedExecutionTimeforAlgorithm().getTimeinNanoseconds() << "%" << endl; 00042 } 00043 00044 //MeasurementPair mp(scheduling_decision_.getFeatureValues(), measured_time, scheduling_decision_.getEstimatedExecutionTimeforAlgorithm()); 00045 if(!core::Scheduler::instance().addObservation(scheduling_decision_,measured_time.getTimeinNanoseconds())){ 00046 string error_message=string("STEMOD: Algorithm '")+scheduling_decision_.getNameofChoosenAlgorithm()+string("' does not exist!"); 00047 cout << error_message << endl; 00048 throw new invalid_argument(error_message); 00049 } 00050 } 00051 00052 };//end namespace core 00053 }; //end namespace hype 00054