diff options
author | Narayan Kamath <narayan@google.com> | 2012-11-02 10:59:05 +0000 |
---|---|---|
committer | Xiaotao Duan <xiaotao@google.com> | 2012-11-07 14:17:48 -0800 |
commit | c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd (patch) | |
tree | 54d1c7d66098154c1d7c5bd414394ef4cf255810 /bench/btl/generic_bench/bench.hh | |
parent | 63f67d748682b46d58be31235a0a2d64d81b998c (diff) | |
download | eigen-c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd.tar.gz |
Initial import of eigen 3.1.1android-cts-4.4_r4android-cts-4.2_r2android-4.4_r1.2.0.1android-4.4_r1.2android-4.4_r1.1.0.1android-4.4_r1.1android-4.4_r1.0.1android-4.4_r1android-4.4_r0.9android-4.4_r0.8android-4.3_r2.3android-4.3_r2.2android-4.3_r2.1android-4.3_r2android-4.3_r1.1android-4.3_r1android-4.3_r0.9.1android-4.3_r0.9android-4.2.2_r1.2android-4.2.2_r1.1android-4.2.2_r1kitkat-releasekitkat-cts-releasejb-mr2.0-releasejb-mr2-releasejb-mr1.1-releasejb-mr1.1-dev
Added a README.android and a MODULE_LICENSE_MPL2 file.
Added empty Android.mk and CleanSpec.mk to optimize Android build.
Non MPL2 license code is disabled in ./Eigen/src/Core/util/NonMPL2.h.
Trying to include such files will lead to an error.
Change-Id: I0e148b7c3e83999bcc4dfaa5809d33bfac2aac32
Diffstat (limited to 'bench/btl/generic_bench/bench.hh')
-rw-r--r-- | bench/btl/generic_bench/bench.hh | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/bench/btl/generic_bench/bench.hh b/bench/btl/generic_bench/bench.hh new file mode 100644 index 000000000..005c36395 --- /dev/null +++ b/bench/btl/generic_bench/bench.hh @@ -0,0 +1,168 @@ +//===================================================== +// File : bench.hh +// Author : L. Plagne <laurent.plagne@edf.fr)> +// Copyright (C) EDF R&D, lun sep 30 14:23:16 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. +// +#ifndef BENCH_HH +#define BENCH_HH + +#include "btl.hh" +#include "bench_parameter.hh" +#include <iostream> +#include "utilities.h" +#include "size_lin_log.hh" +#include "xy_file.hh" +#include <vector> +#include <string> +#include "timers/portable_perf_analyzer.hh" +// #include "timers/mixed_perf_analyzer.hh" +// #include "timers/x86_perf_analyzer.hh" +// #include "timers/STL_perf_analyzer.hh" +#ifdef HAVE_MKL +extern "C" void cblas_saxpy(const int, const float, const float*, const int, float *, const int); +#endif +using namespace std; + +template <template<class> class Perf_Analyzer, class Action> +BTL_DONT_INLINE void bench( int size_min, int size_max, int nb_point ) +{ + if (BtlConfig::skipAction(Action::name())) + return; + + string filename="bench_"+Action::name()+".dat"; + + INFOS("starting " <<filename); + + // utilities + + std::vector<double> tab_mflops(nb_point); + std::vector<int> tab_sizes(nb_point); + + // matrices and vector size calculations + size_lin_log(nb_point,size_min,size_max,tab_sizes); + + std::vector<int> oldSizes; + std::vector<double> oldFlops; + bool hasOldResults = read_xy_file(filename, oldSizes, oldFlops, true); + int oldi = oldSizes.size() - 1; + + // loop on matrix size + Perf_Analyzer<Action> perf_action; + for (int i=nb_point-1;i>=0;i--) + { + //INFOS("size=" <<tab_sizes[i]<<" ("<<nb_point-i<<"/"<<nb_point<<")"); + std::cout << " " << "size = " << tab_sizes[i] << " " << std::flush; + + BTL_DISABLE_SSE_EXCEPTIONS(); + #ifdef HAVE_MKL + { + float dummy; + cblas_saxpy(1,0,&dummy,1,&dummy,1); + } + #endif + + tab_mflops[i] = perf_action.eval_mflops(tab_sizes[i]); + std::cout << tab_mflops[i]; + + if (hasOldResults) + { + while (oldi>=0 && oldSizes[oldi]>tab_sizes[i]) + --oldi; + if (oldi>=0 && oldSizes[oldi]==tab_sizes[i]) + { + if (oldFlops[oldi]<tab_mflops[i]) + std::cout << "\t > "; + else + std::cout << "\t < "; + std::cout << oldFlops[oldi]; + } + --oldi; + } + std::cout << " MFlops (" << nb_point-i << "/" << nb_point << ")" << std::endl; + } + + if (!BtlConfig::Instance.overwriteResults) + { + if (hasOldResults) + { + // merge the two data + std::vector<int> newSizes; + std::vector<double> newFlops; + int i=0; + int j=0; + while (i<tab_sizes.size() && j<oldSizes.size()) + { + if (tab_sizes[i] == oldSizes[j]) + { + newSizes.push_back(tab_sizes[i]); + newFlops.push_back(std::max(tab_mflops[i], oldFlops[j])); + ++i; + ++j; + } + else if (tab_sizes[i] < oldSizes[j]) + { + newSizes.push_back(tab_sizes[i]); + newFlops.push_back(tab_mflops[i]); + ++i; + } + else + { + newSizes.push_back(oldSizes[j]); + newFlops.push_back(oldFlops[j]); + ++j; + } + } + while (i<tab_sizes.size()) + { + newSizes.push_back(tab_sizes[i]); + newFlops.push_back(tab_mflops[i]); + ++i; + } + while (j<oldSizes.size()) + { + newSizes.push_back(oldSizes[j]); + newFlops.push_back(oldFlops[j]); + ++j; + } + tab_mflops = newFlops; + tab_sizes = newSizes; + } + } + + // dump the result in a file : + dump_xy_file(tab_sizes,tab_mflops,filename); + +} + +// default Perf Analyzer + +template <class Action> +BTL_DONT_INLINE void bench( int size_min, int size_max, int nb_point ){ + + // if the rdtsc is not available : + bench<Portable_Perf_Analyzer,Action>(size_min,size_max,nb_point); + // if the rdtsc is available : +// bench<Mixed_Perf_Analyzer,Action>(size_min,size_max,nb_point); + + + // Only for small problem size. Otherwize it will be too long +// bench<X86_Perf_Analyzer,Action>(size_min,size_max,nb_point); +// bench<STL_Perf_Analyzer,Action>(size_min,size_max,nb_point); + +} + +#endif |