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