diff options
author | Mark Borgerding <mark@borgerding.net> | 2009-05-23 10:09:48 -0400 |
---|---|---|
committer | Mark Borgerding <mark@borgerding.net> | 2009-05-23 10:09:48 -0400 |
commit | 9c0fcd0f6213143216710a5b215aa2bb4a857ce5 (patch) | |
tree | 7c6e700387fb5f5e9bbb80c18b8af8fcc29b0192 /bench/benchFFT.cpp | |
parent | 8b4afe3debb47bf15ea291a7f2d21d863d546536 (diff) |
started real optimization, added benchmark for FFT
Diffstat (limited to 'bench/benchFFT.cpp')
-rw-r--r-- | bench/benchFFT.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/bench/benchFFT.cpp b/bench/benchFFT.cpp new file mode 100644 index 000000000..041576b75 --- /dev/null +++ b/bench/benchFFT.cpp @@ -0,0 +1,64 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. Eigen itself is part of the KDE project. +// +// Copyright (C) 2009 Mark Borgerding mark a borgerding net +// +// Eigen is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 3 of the License, or (at your option) any later version. +// +// Alternatively, 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. +// +// Eigen 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 Lesser General Public License or the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License and a copy of the GNU General Public License along with +// Eigen. If not, see <http://www.gnu.org/licenses/>. + +#include <complex> +#include <vector> +#include <Eigen/Core> +#include <bench/BenchTimer.h> +#include <unsupported/Eigen/FFT.h> + +using namespace Eigen; +using namespace std; + +#ifndef NFFT +#define NFFT 1024 +#endif + +#ifndef TYPE +#define TYPE float +#endif + +#ifndef NITS +#define NITS (10000000/NFFT) +#endif + +int main() +{ + vector<complex<TYPE> > inbuf(NFFT); + vector<complex<TYPE> > outbuf(NFFT); + Eigen::FFT<TYPE> fft; + + fft.fwd( outbuf , inbuf); + + BenchTimer timer; + timer.reset(); + for (int k=0;k<8;++k) { + timer.start(); + for(int i = 0; i < NITS; i++) + fft.fwd( outbuf , inbuf); + timer.stop(); + } + double mflops = 5.*NFFT*log2((double)NFFT) / (1e6 * timer.value() / (double)NITS ); + cout << "NFFT=" << NFFT << " " << (double(1e-6*NFFT*NITS)/timer.value()) << " MS/s " << mflops << "MFLOPS\n"; +} |