aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/benchFFT.cpp
diff options
context:
space:
mode:
authorGravatar Mark Borgerding <mark@borgerding.net>2010-01-21 21:09:26 -0500
committerGravatar Mark Borgerding <mark@borgerding.net>2010-01-21 21:09:26 -0500
commit7a6cb2a39cfae99ca0bfb1f467c3616242acd22a (patch)
treee013650afb38c66c5c5f445d678bb1989568a7d1 /bench/benchFFT.cpp
parentf1a025185a25e53eb1c4817141c0523cf48f70bc (diff)
added benchmark for unscaled and half-spectrum FFTs
Diffstat (limited to 'bench/benchFFT.cpp')
-rw-r--r--bench/benchFFT.cpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/bench/benchFFT.cpp b/bench/benchFFT.cpp
index 3104929ba..0f0c9bb93 100644
--- a/bench/benchFFT.cpp
+++ b/bench/benchFFT.cpp
@@ -54,7 +54,7 @@ template <> string nameof<long double>() {return "long double";}
using namespace Eigen;
template <typename T>
-void bench(int nfft,bool fwd)
+void bench(int nfft,bool fwd,bool unscaled=false, bool halfspec=false)
{
typedef typename NumTraits<T>::Real Scalar;
typedef typename std::complex<Scalar> Complex;
@@ -63,16 +63,28 @@ void bench(int nfft,bool fwd)
vector<Complex > outbuf(nfft);
FFT< Scalar > fft;
+ if (unscaled) {
+ fft.SetFlag(fft.Unscaled);
+ cout << "unscaled ";
+ }
+ if (halfspec) {
+ fft.SetFlag(fft.HalfSpectrum);
+ cout << "halfspec ";
+ }
+
+
+ std::fill(inbuf.begin(),inbuf.end(),0);
fft.fwd( outbuf , inbuf);
BenchTimer timer;
timer.reset();
for (int k=0;k<8;++k) {
timer.start();
- for(int i = 0; i < nits; i++)
- if (fwd)
+ if (fwd)
+ for(int i = 0; i < nits; i++)
fft.fwd( outbuf , inbuf);
- else
+ else
+ for(int i = 0; i < nits; i++)
fft.inv(inbuf,outbuf);
timer.stop();
}
@@ -86,6 +98,7 @@ void bench(int nfft,bool fwd)
mflops /= 2;
}
+
if (fwd)
cout << " fwd";
else
@@ -100,6 +113,9 @@ int main(int argc,char ** argv)
bench<complex<float> >(NFFT,false);
bench<float>(NFFT,true);
bench<float>(NFFT,false);
+ bench<float>(NFFT,false,true);
+ bench<float>(NFFT,false,true,true);
+
bench<complex<double> >(NFFT,true);
bench<complex<double> >(NFFT,false);
bench<double>(NFFT,true);