1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//=====================================================
2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// File   :  static_size_generator.hh
3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Author :  L. Plagne <laurent.plagne@edf.fr)>
4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) EDF R&D,  mar d�c 3 18:59:36 CET 2002
5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//=====================================================
6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is free software; you can redistribute it and/or
8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// modify it under the terms of the GNU General Public License
9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// as published by the Free Software Foundation; either version 2
10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// of the License, or (at your option) any later version.
11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This program is distributed in the hope that it will be useful,
13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// but WITHOUT ANY WARRANTY; without even the implied warranty of
14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// GNU General Public License for more details.
16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// You should have received a copy of the GNU General Public License
17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// along with this program; if not, write to the Free Software
18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//
20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef _STATIC_SIZE_GENERATOR_HH
21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define _STATIC_SIZE_GENERATOR_HH
22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <vector>
23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std;
25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//recursive generation of statically defined matrix and vector sizes
27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <int SIZE,template<class> class Perf_Analyzer, template<class> class Action, template<class,int> class Interface>
29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct static_size_generator{
30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  static void go(vector<double> & tab_sizes, vector<double> & tab_mflops)
31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  {
32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    tab_sizes.push_back(SIZE);
33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    std::cout << tab_sizes.back() << " \t" << std::flush;
34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    Perf_Analyzer<Action<Interface<REAL_TYPE,SIZE> > > perf_action;
35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    tab_mflops.push_back(perf_action.eval_mflops(SIZE));
36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    std::cout << tab_mflops.back() << " MFlops" << std::endl;
37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    static_size_generator<SIZE-1,Perf_Analyzer,Action,Interface>::go(tab_sizes,tab_mflops);
38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  };
39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath};
40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//recursion end
42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <template<class> class Perf_Analyzer, template<class> class Action, template<class,int> class Interface>
44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct static_size_generator<1,Perf_Analyzer,Action,Interface>{
45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  static  void go(vector<double> & tab_sizes, vector<double> & tab_mflops)
46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  {
47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    tab_sizes.push_back(1);
48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    Perf_Analyzer<Action<Interface<REAL_TYPE,1> > > perf_action;
49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath    tab_mflops.push_back(perf_action.eval_mflops(1));
50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath  };
51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath};
52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif
54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath
58