|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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_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; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|