summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'btl/data/mean.cxx')
-rw-r--r--btl/data/mean.cxx182
1 files changed, 182 insertions, 0 deletions
diff --git a/btl/data/mean.cxx b/btl/data/mean.cxx
new file mode 100644
index 0000000..c567ef3
--- /dev/null
+++ b/btl/data/mean.cxx
@@ -0,0 +1,182 @@
+//=====================================================
+// File : mean.cxx
+// Author : L. Plagne <laurent.plagne@edf.fr)>
+// Copyright (C) EDF R&D, lun sep 30 14:23:15 CEST 2002
+//=====================================================
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+#include "utilities.h"
+#include <vector>
+#include <string>
+#include <iostream>
+#include <fstream>
+#include "bench_parameter.hh"
+#include "utils/xy_file.hh"
+#include <set>
+
+using namespace std;
+
+double mean_calc(const vector<int> & tab_sizes, const vector<double> & tab_mflops, const int size_min, const int size_max);
+
+class Lib_Mean{
+
+public:
+ Lib_Mean( void ):_lib_name(),_mean_in_cache(),_mean_out_of_cache(){
+ MESSAGE("Lib_mean Default Ctor");
+ MESSAGE("!!! should not be used");
+ exit(0);
+ }
+ Lib_Mean(const string & name, const double & mic, const double & moc):_lib_name(name),_mean_in_cache(mic),_mean_out_of_cache(moc){
+ MESSAGE("Lib_mean Ctor");
+ }
+ 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){
+ MESSAGE("Lib_mean Copy Ctor");
+ }
+ ~Lib_Mean( void ){
+ MESSAGE("Lib_mean Dtor");
+ }
+
+ double _mean_in_cache;
+ double _mean_out_of_cache;
+ string _lib_name;
+
+ bool operator < ( const Lib_Mean &right) const
+ {
+ //return ( this->_mean_out_of_cache > right._mean_out_of_cache) ;
+ return ( this->_mean_in_cache > right._mean_in_cache) ;
+ }
+
+};
+
+
+int main( int argc , char *argv[] )
+{
+
+ if (argc<6){
+ INFOS("!!! Error ... usage : main what mic Mic moc Moc filename1 finename2...");
+ exit(0);
+ }
+ INFOS(argc);
+
+ int min_in_cache=atoi(argv[2]);
+ int max_in_cache=atoi(argv[3]);
+ int min_out_of_cache=atoi(argv[4]);
+ int max_out_of_cache=atoi(argv[5]);
+
+
+ multiset<Lib_Mean> s_lib_mean ;
+
+ for (int i=6;i<argc;i++){
+
+ string filename=argv[i];
+
+ INFOS(filename);
+
+ double mic=0;
+ double moc=0;
+
+ {
+
+ vector<int> tab_sizes;
+ vector<double> tab_mflops;
+
+ read_xy_file(filename,tab_sizes,tab_mflops);
+
+ mic=mean_calc(tab_sizes,tab_mflops,min_in_cache,max_in_cache);
+ moc=mean_calc(tab_sizes,tab_mflops,min_out_of_cache,max_out_of_cache);
+
+ Lib_Mean cur_lib_mean(filename,mic,moc);
+
+ s_lib_mean.insert(cur_lib_mean);
+
+ }
+
+ }
+
+
+ cout << "<TABLE BORDER CELLPADDING=2>" << endl ;
+ cout << " <TR>" << endl ;
+ cout << " <TH ALIGN=CENTER> " << argv[1] << " </TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> <a href=""#mean_marker""> in cache <BR> mean perf <BR> Mflops </a></TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> in cache <BR> % best </TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> <a href=""#mean_marker""> out of cache <BR> mean perf <BR> Mflops </a></TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> out of cache <BR> % best </TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> details </TH>" << endl ;
+ cout << " <TH ALIGN=CENTER> comments </TH>" << endl ;
+ cout << " </TR>" << endl ;
+
+ multiset<Lib_Mean>::iterator is = s_lib_mean.begin();
+ Lib_Mean best(*is);
+
+
+ for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){
+
+ cout << " <TR>" << endl ;
+ cout << " <TD> " << is->_lib_name << " </TD>" << endl ;
+ cout << " <TD> " << is->_mean_in_cache << " </TD>" << endl ;
+ cout << " <TD> " << 100*(is->_mean_in_cache/best._mean_in_cache) << " </TD>" << endl ;
+ cout << " <TD> " << is->_mean_out_of_cache << " </TD>" << endl ;
+ cout << " <TD> " << 100*(is->_mean_out_of_cache/best._mean_out_of_cache) << " </TD>" << endl ;
+ cout << " <TD> " <<
+ "<a href=\"#"<<is->_lib_name<<"_"<<argv[1]<<"\">snippet</a>/"
+ "<a href=\"#"<<is->_lib_name<<"_flags\">flags</a> </TD>" << endl ;
+ cout << " <TD> " <<
+ "<a href=\"#"<<is->_lib_name<<"_comments\">click here</a> </TD>" << endl ;
+ cout << " </TR>" << endl ;
+
+ }
+
+ cout << "</TABLE>" << endl ;
+
+ ofstream output_file ("../order_lib",ios::out) ;
+
+ for (is=s_lib_mean.begin(); is!=s_lib_mean.end() ; is++){
+ output_file << is->_lib_name << endl ;
+ }
+
+ output_file.close();
+
+}
+
+double mean_calc(const vector<int> & tab_sizes, const vector<double> & tab_mflops, const int size_min, const int size_max){
+
+ int size=tab_sizes.size();
+ int nb_sample=0;
+ double mean=0.0;
+
+ for (int i=0;i<size;i++){
+
+
+ if ((tab_sizes[i]>=size_min)&&(tab_sizes[i]<=size_max)){
+
+ nb_sample++;
+ mean+=tab_mflops[i];
+
+ }
+
+
+ }
+
+ if (nb_sample==0){
+ INFOS("no data for mean calculation");
+ return 0.0;
+ }
+
+ return mean/nb_sample;
+}
+
+
+
+