20 #ifndef PERFORMANCETESTCLASSES_H
21 #define PERFORMANCETESTCLASSES_H
57 virtual string valueAsString() = 0;
63 virtual string valueAsString (
unsigned int step ) = 0;
89 return toString ( mean );
98 return toString ( valueAtStep ( step ) );
112 }
else if ( deltaLog ) {
113 return pow ( 10.0, ( log10 ( max ) - log10 ( min ) ) * step / ( steps - 1 ) ) * min;
115 return ( max - min ) * step / ( steps - 1 ) + min;
137 template<
typename... U>
164 virtual void runTests (
unsigned int repetitions,
const string &path =
"./" );
170 static void runRegisteredTests (
unsigned int repetitions,
const string &path =
"./" );
176 static void enableTest (
const string &name,
bool enabled );
181 static void enableAllTests (
bool enabled );
186 static void unregisterTest (
const string &name );
190 static void dumpTestInfo();
202 static bool runRespectiveTest (
const string &name,
tester &myTester,
unsigned int repetitions,
char **arguments,
int &offset,
int argumentscount );
211 virtual void actualTestMethod (
tester &test,
char **arguments,
int &offset,
unsigned int argumentscount ) = 0;
216 virtual string getComment() = 0;
224 displayPlots = display;
234 return parameters[varryParam]->steps;
244 virtual string getParamsString (
int varryParam,
unsigned int step,
const string &delimiter =
" " );
251 virtual string getTestOutfile (
int varryParam,
unsigned int step );
258 virtual void resultToTempFile (
int varryParam,
unsigned int step, ofstream &file );
265 virtual vector<string> splitString (
const string &in,
char delimiter );
278 virtual string generateGnuplotScript (
const string &infile,
const string &name,
const string &xlabel,
const string &ylabel,
const string &title,
bool log,
int paramColumn );
285 virtual void handleTimingInfos (
int varryParam,
unsigned int step,
unsigned int repetitions );
293 virtual vector<vector<string>> getRelevantTimingParts ( ifstream &in,
unsigned long long start,
unsigned long long end );
300 virtual void timingInfosToFile ( ofstream &out,
const vector<vector<string>> &relevantTimingParts,
unsigned long long &starttime );
310 virtual void plotTimingInfos ( ofstream &gnutemp,
const string &outname,
const string &dataFile,
unsigned int measurements,
unsigned int repetitions,
bool linesPoints );
320 virtual void plotTimingHitMissInfos ( ofstream &gnutemp,
const string &outname,
const string &dataFile,
unsigned int measurements,
unsigned int repetitions,
bool linesPoints );
328 virtual string generateMyGnuplotPlotPart (
const string &file,
int paramColumn ) = 0;
336 bool plotTimingStats =
true;
344 template<
typename T,
typename... U>
354 this->parameters.push_back ( ¶meter );
368 #define PARAMREFS(number, param, params...) testParameter<param> ¶meter##number = (performanceTest<param, ##params>::parameter)
370 #define ONEPARAM(param) PARAMREFS(1, param)
371 #define TWOPARAMS(param1, param2) PARAMREFS(1, param1, param2); \
373 #define THREEARAMS(param1, param2, param3) PARAMREFS(1, param1, param2, param3); \
374 PARAMREFS(2, param2, param3); \
377 #define ONECONVERT(param) param p = convert<param>(arguments[offset++]); \
378 actualTestMethod(test, p)
379 #define TWOCONVERT(param1, param2) param1 p1 = convert<param1>(arguments[offset++]); \
380 param2 p2 = convert<param2>(arguments[offset++]); \
381 actualTestMethod(test, p1, p2)
382 #define THREECONVERT(param1, param2, param3) param1 p1 = convert<param1>(arguments[offset++]); \
383 param2 p2 = convert<param2>(arguments[offset++]); \
384 param3 p3 = convert<param3>(arguments[offset++]); \
385 actualTestMethod(test, p1, p2, p3)
387 #define TESTCLASS(name, parammacro, convertmacro, params...) \
388 class name : public performanceTest<params> \
393 virtual inline void actualTestMethod(tester& test, char **arguments, int& offset, unsigned int argumentscount); \
394 virtual void actualTestMethod(tester&, params); \
395 virtual inline string getComment() { return comment; } \
397 static string comment; \
399 virtual string generateMyGnuplotPlotPart(const string& file, int paramColumn); \
400 template<typename T> \
401 inline T convert(char* str) { \
406 inline int name::convert<int>(char* str) { \
409 void name::actualTestMethod(tester& test, char **arguments, int& offset, unsigned int argumentscount) { \
410 if (argumentscount - offset < parameters.size()) { \
411 cerr << "Not enough parameters supplied for test!" << endl; \
416 extern name name##Instance
418 #define ONEPARAMTEST(name, param) TESTCLASS(name, ONEPARAM(param), ONECONVERT(param), param)
419 #define TWOPARAMTEST(name, param1, param2) TESTCLASS(name, TWOPARAMS(param1, param2), TWOCONVERT(param1, param2), param1, param2)
420 #define THREEPARAMTEST(name, param1, param2, param3) TESTCLASS(name, THREEPARAMS(param1, param2, param3), THREECONVERT(param1, param2, param3), param1, param2, param3)
428 #ifndef OpenMP_NOT_FOUND
429 TWOPARAMTEST ( matrixCleverTransposeOpenMPTest,
int,
int );
431 TWOPARAMTEST ( matrixCleverBlockTransposeTest,
int,
int );
432 #ifndef OpenMP_NOT_FOUND
433 TWOPARAMTEST ( matrixCleverBlockTransposeOpenMPTest,
int,
int );
436 #ifndef OpenMP_NOT_FOUND
440 #ifndef OpenMP_NOT_FOUND
444 #ifndef OpenMP_NOT_FOUND
448 TWOPARAMTEST ( measurePreemptiveSpeedupTest,
int,
int );
449 TWOPARAMTEST ( measureExplicitAsyncSpeedupTest,
int,
int );
452 #endif // PERFORMANCETESTCLASSES_H
virtual string valueAsString(unsigned int step)
Cast the encapsulated parameter to a string and return it's value at a certain step.
TWOPARAMTEST(matrixTransposeTest, int, int)
virtual ~performanceTest()
Cleanup.
vector< testParameterBase * > parameters
performanceTest(const char *name)
Create a new test object and register it for usage.
virtual unsigned int getStepsForParam(unsigned int varryParam)
Get the amount of steps for parameter variation.
Class to encapsulate parameters given by type T.
string toString(const T &t)
Convert a value of the parameter type to a string.
virtual ~testParameterBase()
Cleanup.
static map< string, performanceTest<> * > testClasses
vector< string > plotParts
Derived performance test classes which take parameter types as template arguments.
virtual ~testParameter()
Cleanup.
static void setDisplayPlots(bool display)
If the generated plots shall be immediately displayed.
A basic class to be used by tests. Provides helper methods and functionality e.g. time measurements...
virtual string valueAsString()
Cast the encapsulated parameter to a string and return it's mean value.
testParameter< T > parameter
virtual ~performanceTest()
Cleanup.
T valueAtStep(unsigned int step)
Look up the parameter value at a certain step.
ONEPARAMTEST(measureConstSpeedupTest, int)
A base class to encapsulate parameters for performance tests.