Well, after some amount of experimentation with sysctl settings, I’ve
been able to construct a single-thread FFT
that has an input bandwidth of 8Msps, and an FFT size of 8M points!!!
This is much better than I was hoping for, and it will allow me to build
a SETI analyser with 1Hz resolution.
I had to balloon out kernel.shmmax to 512MB to support this application.
This thing is a monster, though. The virtual size of the process is
over 4G, and the resident set size is about 2.3G!!
It consumes about 30% of my Quad-core Q6600 system that is overclocked
to 3.5GHz. The CPU consumption was less
than I was expecting, but these Core-2 CPUs have awesome
floating-point performance (about 7GFLOP/core) at standard
clock speeds, and even better when overclocked.
My estimate of the number of FLOPs required per FFT at this size is
So, now I’m trying to decide how to code the analyser. My previous
analyser was done in Python, using
spectral estimates stored in an FFT probe buffer. But at 8M points,
I’ll need to code the analysis phase
in C/C++. So, do I make a “SETI Analyser” block, or use a named-pipe
and feed an external analysis process?
I did a FIFO-based program for purposes of testing last night, which
simply takes the raw FFT outputs, and
runs them through a single-pole IIR filter, and then reduces the
number of bins for display using Gnu Plot.
That works just fine.
Principal Investigator, Shirleys Bay Radio Astronomy Consortium