PhoenixMicroBenchmark  1.0.1
Toolset for function micro-benchmarking
Loading...
Searching...
No Matches
micro_benchmark_common.cpp
Go to the documentation of this file.
1/***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5****************************************/
6
7#include <cmath>
8#include <sstream>
10
12
15void micro_benchmarkVecToMap(MapOrderedTime & mapOrderTime, const VecEllapsedTime & vecTime){
16 for(VecEllapsedTime::const_iterator it(vecTime.begin()); it != vecTime.end(); ++it){
17 MapOrderedTime::iterator itFindTime = mapOrderTime.find(*it);
18 if(itFindTime != mapOrderTime.end()){
19 itFindTime->second += 1lu;
20 }else{
21 mapOrderTime[*it] = 1lu;
22 }
23 }
24}
25
27
32void micro_benchmarkComputeTime(double & ellapsedTimeNs, double & ellapsedTimeErrorNs, const MapOrderedTime & mapOrderTime, size_t nbValueToBeUsed){
33 double sumValue(0.0), sumSquare(0.0);
34 size_t nbValue(0lu);
35 for(MapOrderedTime::const_iterator it(mapOrderTime.begin()); it != mapOrderTime.end() && nbValue < nbValueToBeUsed; ++it){
36 double val(it->first);
37
38 sumValue += val*((double)it->second);
39 sumSquare += val*val*((double)it->second);
40 nbValue += it->second;
41 }
42 ellapsedTimeNs = sumValue/((double)nbValue);
43 double meanSquare(sumSquare/((double)nbValue));
44 ellapsedTimeErrorNs = std::sqrt(meanSquare - ellapsedTimeNs*ellapsedTimeNs);
45}
46
49 std::cout << "micro_benchmarkParseArg : expect only a list of INT such as: \"1000,2000,3000,4000\"" << std::endl;
50}
51
53
57bool findCharInString(const std::string& str, char ch){
58 std::string::const_iterator it = str.begin();
59 while(it != str.end()){
60 if(*it == ch) return true;
61 ++it;
62 }
63 return false;
64}
65
67
71std::vector<std::string> cutStringOnChars(const std::string & strIn, const std::string & setChars){
72 std::vector<std::string> vecOut;
73 std::string strTmp("");
74 for(std::string::const_iterator it(strIn.begin()); it != strIn.end(); ++it){
75 if(findCharInString(setChars, *it)){
76 if(strTmp != ""){vecOut.push_back(strTmp);}
77 strTmp = "";
78 }else{
79 strTmp += *it;
80 }
81 }
82 if(strTmp != ""){vecOut.push_back(strTmp);}
83 return vecOut;
84}
85
87
92int micro_benchmarkParseArg(int argc, char** argv, EvaluateTimeFct evalFunc){
94 if(argc != 2){
96 return -1;
97 }
98 std::string argument(argv[1]);
99 if(argument == "--help" || argument == "-h"){
101 return 0;
102 }
103 std::vector<std::string> vecSize(cutStringOnChars(argument, ", \t\n"));
104 for(std::vector<std::string>::iterator it(vecSize.begin()); it != vecSize.end(); ++it){
105 std::stringstream converterStr(*it);
106 size_t nbElement(0lu);
107 converterStr >> nbElement;
108 evalFunc(nbElement);
109 }
110 return 0;
111}
112
115 std::cout << "micro_benchmarkParseArg2d : expect only two list of INT such as: \"1000,2000,3000,4000\"" << std::endl;
116}
117
119
124int micro_benchmarkParseArg2d(int argc, char** argv, EvaluateTimeFct2d evalFunc){
126 if(argc != 3){
128 return -1;
129 }
130 std::string argumentX(argv[1]), argumentY(argv[2]);
131
132 std::vector<std::string> vecSizeX(cutStringOnChars(argumentX, ", \t\n"));
133 std::vector<std::string> vecSizeY(cutStringOnChars(argumentY, ", \t\n"));
134 if(vecSizeX.size() != vecSizeY.size()){
135 std::cerr << "Vector X and Y must ave the same size vecSizeX("<<vecSizeX.size()<<") != vecSizeY("<<vecSizeY.size()<<")" << std::endl;
136 std::cout << "Vector X and Y must ave the same size vecSizeX("<<vecSizeX.size()<<") != vecSizeY("<<vecSizeY.size()<<")" << std::endl;
137 return -1;
138 }
139 for(std::vector<std::string>::iterator itX(vecSizeX.begin()); itX != vecSizeX.end(); ++itX){
140 std::stringstream converterStrX(*itX);
141 size_t nbElementX(0lu);
142 converterStrX >> nbElementX;
143 std::cout << "\t" << nbElementX;
144 }
145 std::cout << std::endl;
146
147 for(std::vector<std::string>::iterator itY(vecSizeY.begin()); itY != vecSizeY.end(); ++itY){
148 std::stringstream converterStrY(*itY);
149 size_t nbElementY(0lu);
150 converterStrY >> nbElementY;
151 std::cout << nbElementY;
152 for(std::vector<std::string>::iterator itX(vecSizeX.begin()); itX != vecSizeX.end(); ++itX){
153 std::stringstream converterStrX(*itX);
154 size_t nbElementX(0lu);
155 converterStrX >> nbElementX;
156 double res = evalFunc(nbElementX, nbElementY);
157 std::cerr << nbElementX << "\t" << nbElementY << "\t" << res << std::endl;
158 std::cout << "\t" << res;
159 }
160 std::cerr << std::endl;
161 std::cout << std::endl;
162 }
163 return 0;
164}
165
166
167
void micro_benchmarkHelpFunction()
Help function of the micro benchmarking program argument parse.
void micro_benchmarkVecToMap(MapOrderedTime &mapOrderTime, const VecEllapsedTime &vecTime)
Fill the map of ordered time with the vector.
int micro_benchmarkParseArg(int argc, char **argv, EvaluateTimeFct evalFunc)
Call the evalFunc by respect to the arguments given to the program.
int micro_benchmarkParseArg2d(int argc, char **argv, EvaluateTimeFct2d evalFunc)
Call the evalFunc by respect to the arguments given to the program.
bool findCharInString(const std::string &str, char ch)
Tells if a chararacter is in a string.
void micro_benchmarkComputeTime(double &ellapsedTimeNs, double &ellapsedTimeErrorNs, const MapOrderedTime &mapOrderTime, size_t nbValueToBeUsed)
Compute the total computing time and associated error with the given data.
std::vector< std::string > cutStringOnChars(const std::string &strIn, const std::string &setChars)
Cut a string on determined chars.
void micro_benchmarkHelpFunction2d()
Help function of the micro benchmarking program argument parse.
std::map< double, size_t > MapOrderedTime
Map of the ordered ellapsed time.
double(& EvaluateTimeFct2d)(size_t, size_t)
std::vector< double > VecEllapsedTime
Vector of ellapsed time measurement.
void(& EvaluateTimeFct)(size_t)
#define PIN_THREAD_TO_CORE