1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath//===================================================== 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// File : mean.cxx 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Author : L. Plagne <laurent.plagne@edf.fr)> 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) EDF R&D, lun sep 30 14:23:15 CEST 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#include "utilities.h" 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <vector> 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <string> 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <iostream> 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <fstream> 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "bench_parameter.hh" 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include "utils/xy_file.hh" 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#include <set> 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathusing namespace std; 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathdouble mean_calc(const vector<int> & tab_sizes, const vector<double> & tab_mflops, const int size_min, const int size_max); 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass Lib_Mean{ 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathpublic: 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lib_Mean( void ):_lib_name(),_mean_in_cache(),_mean_out_of_cache(){ 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Lib_mean Default Ctor"); 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("!!! should not be used"); 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath exit(0); 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lib_Mean(const string & name, const double & mic, const double & moc):_lib_name(name),_mean_in_cache(mic),_mean_out_of_cache(moc){ 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Lib_mean Ctor"); 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lib_Mean(const Lib_Mean & lm):_lib_name(lm._lib_name),_mean_in_cache(lm._mean_in_cache),_mean_out_of_cache(lm._mean_out_of_cache){ 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Lib_mean Copy Ctor"); 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ~Lib_Mean( void ){ 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath MESSAGE("Lib_mean Dtor"); 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double _mean_in_cache; 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double _mean_out_of_cache; 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath string _lib_name; 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath bool operator < ( const Lib_Mean &right) const 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath //return ( this->_mean_out_of_cache > right._mean_out_of_cache) ; 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return ( this->_mean_in_cache > right._mean_in_cache) ; 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathint main( int argc , char *argv[] ) 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (argc<6){ 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS("!!! Error ... usage : main what mic Mic moc Moc filename1 finename2..."); 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath exit(0); 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS(argc); 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int min_in_cache=atoi(argv[2]); 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int max_in_cache=atoi(argv[3]); 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int min_out_of_cache=atoi(argv[4]); 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int max_out_of_cache=atoi(argv[5]); 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath multiset<Lib_Mean> s_lib_mean ; 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=6;i<argc;i++){ 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath string filename=argv[i]; 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS(filename); 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double mic=0; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double moc=0; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath { 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath vector<int> tab_sizes; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath vector<double> tab_mflops; 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath read_xy_file(filename,tab_sizes,tab_mflops); 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mic=mean_calc(tab_sizes,tab_mflops,min_in_cache,max_in_cache); 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath moc=mean_calc(tab_sizes,tab_mflops,min_out_of_cache,max_out_of_cache); 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lib_Mean cur_lib_mean(filename,mic,moc); 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath s_lib_mean.insert(cur_lib_mean); 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << "<TABLE BORDER CELLPADDING=2>" << endl ; 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TR>" << endl ; 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> " << argv[1] << " </TH>" << endl ; 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> <a href=""#mean_marker""> in cache <BR> mean perf <BR> Mflops </a></TH>" << endl ; 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> in cache <BR> % best </TH>" << endl ; 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> <a href=""#mean_marker""> out of cache <BR> mean perf <BR> Mflops </a></TH>" << endl ; 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> out of cache <BR> % best </TH>" << endl ; 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> details </TH>" << endl ; 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TH ALIGN=CENTER> comments </TH>" << endl ; 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " </TR>" << endl ; 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath multiset<Lib_Mean>::iterator is = s_lib_mean.begin(); 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath Lib_Mean best(*is); 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){ 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TR>" << endl ; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << is->_lib_name << " </TD>" << endl ; 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << is->_mean_in_cache << " </TD>" << endl ; 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << 100*(is->_mean_in_cache/best._mean_in_cache) << " </TD>" << endl ; 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << is->_mean_out_of_cache << " </TD>" << endl ; 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << 100*(is->_mean_out_of_cache/best._mean_out_of_cache) << " </TD>" << endl ; 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "<a href=\"#"<<is->_lib_name<<"_"<<argv[1]<<"\">snippet</a>/" 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "<a href=\"#"<<is->_lib_name<<"_flags\">flags</a> </TD>" << endl ; 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " <TD> " << 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath "<a href=\"#"<<is->_lib_name<<"_comments\">click here</a> </TD>" << endl ; 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << " </TR>" << endl ; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath cout << "</TABLE>" << endl ; 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ofstream output_file ("../order_lib",ios::out) ; 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){ 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath output_file << is->_lib_name << endl ; 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath output_file.close(); 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathdouble mean_calc(const vector<int> & tab_sizes, const vector<double> & tab_mflops, const int size_min, const int size_max){ 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int size=tab_sizes.size(); 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int nb_sample=0; 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath double mean=0.0; 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath for (int i=0;i<size;i++){ 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if ((tab_sizes[i]>=size_min)&&(tab_sizes[i]<=size_max)){ 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath nb_sample++; 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath mean+=tab_mflops[i]; 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath if (nb_sample==0){ 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath INFOS("no data for mean calculation"); 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return 0.0; 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath } 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath return mean/nb_sample; 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 183