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