source: XIOS/dev/dev_olga/src/extern/blitz/include/blitz/benchext.h @ 1022

Last change on this file since 1022 was 1022, checked in by mhnguyen, 7 years ago
File size: 4.0 KB
Line 
1// -*- C++ -*-
2/***************************************************************************
3 * blitz/benchext.h      BenchmarkExt classes (Benchmarks with external
4 *                       control)
5 *
6 * $Id$
7 *
8 * Copyright (C) 1997-2011 Todd Veldhuizen <tveldhui@acm.org>
9 *
10 * This file is a part of Blitz.
11 *
12 * Blitz is free software: you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation, either version 3
15 * of the License, or (at your option) any later version.
16 *
17 * Blitz is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 * GNU Lesser General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with Blitz.  If not, see <http://www.gnu.org/licenses/>.
24 *
25 * Suggestions:          blitz-devel@lists.sourceforge.net
26 * Bugs:                 blitz-support@lists.sourceforge.net   
27 *
28 * For more information, please see the Blitz++ Home Page:
29 *    https://sourceforge.net/projects/blitz/
30 *
31 ***************************************************************************/
32
33#ifndef BZ_BENCHEXT_H
34#define BZ_BENCHEXT_H
35
36//#ifndef BZ_MATRIX_H
37#include <blitz/array.h>
38//#endif
39 #include <vector>
40
41#ifndef BZ_TIMER_H
42 #include <blitz/timer.h>
43#endif
44
45#include <math.h>
46#include <string>
47
48// NEEDS_WORK: replace use of const char* with <string>, once standard
49// library is widely supported.
50
51BZ_NAMESPACE(blitz)
52
53// Declaration of class BenchmarkExt<T>
54// The template parameter T is the parameter type which is varied in
55// the benchmark.  Typically T will be an unsigned, and will represent
56// the length of a vector, size of an array, etc.
57
58template<typename P_parameter = unsigned>
59class BenchmarkExt {
60
61public:
62    typedef P_parameter T_parameter;
63
64    BenchmarkExt(const char* description, int numImplementations);
65
66    ~BenchmarkExt();
67
68    void setNumParameters(int numParameters);
69  void setParameterVector(Array<T_parameter,1> parms);
70    void setParameterDescription(const char* string);
71  void setIterations(Array<long,1> iters);
72  void setOpsPerIteration(Array<double,1> flopsPerIteration);
73  void setDependentVariable(const char* string);
74
75    void beginBenchmarking();
76
77    void beginImplementation(const char* description);
78    bool doneImplementationBenchmark() const;
79  const string& currentImplementation() const;
80
81    T_parameter getParameter() const;
82    long        getIterations() const;
83
84    inline void start();
85    inline void stop();
86
87    void startOverhead();
88    void stopOverhead();
89    void skip();
90
91
92    void endImplementation();
93
94    void endBenchmarking();
95    double getMflops(unsigned implementation, unsigned parameterNum) const;
96    double getinstrperc(int implementation, int parameterNum) const;
97    double getflopsperc(int implementation, int parameterNum) const;
98
99    void saveMatlabGraph(const char* filename, const char* graphType="semilogx") const;
100    void savePylabGraph(const char* filename, const char* graphType="semilogx") const;
101
102protected:
103    BenchmarkExt(const BenchmarkExt<P_parameter>&) { }
104    void operator=(const BenchmarkExt<P_parameter>&) { }
105
106    enum { initializing, benchmarking, benchmarkingImplementation, 
107       running, runningOverhead, done } state_;
108
109    unsigned numImplementations_;
110    unsigned implementationNumber_;
111
112  std::string description_;
113  std::vector<std::string> implementationDescriptions_;
114
115  Array<double,2> times_;       // Elapsed time
116  Array<long long,2> instr_;       // instructions according to timer
117  Array<long long,2> flops_;       // flops according to timer
118
119  Array<T_parameter,1> parameters_;
120  Array<long,1> iterations_;
121  Array<double,1> flopsPerIteration_;
122
123    Timer timer_;
124
125  std::string parameterDescription_;
126  std::string depvar_;
127  double timerconversion_;
128
129    unsigned numParameters_;
130    unsigned parameterNumber_;
131};
132
133BZ_NAMESPACE_END
134
135#include <blitz/benchext.cc> 
136
137#endif // BZ_BENCHEXT_H
Note: See TracBrowser for help on using the repository browser.