Hybrid Query Processing Engine for Coprocessing in Database Systems
HyPE
algorithm_measurement.cpp
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines