aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/benchFFT.cpp
diff options
context:
space:
mode:
authorGravatar Mark Borgerding <mark@borgerding.net>2009-05-23 10:09:48 -0400
committerGravatar Mark Borgerding <mark@borgerding.net>2009-05-23 10:09:48 -0400
commit9c0fcd0f6213143216710a5b215aa2bb4a857ce5 (patch)
tree7c6e700387fb5f5e9bbb80c18b8af8fcc29b0192 /bench/benchFFT.cpp
parent8b4afe3debb47bf15ea291a7f2d21d863d546536 (diff)
started real optimization, added benchmark for FFT
Diffstat (limited to 'bench/benchFFT.cpp')
-rw-r--r--bench/benchFFT.cpp64
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";
+}