Dear Boost Community Members, I am writing to ask if I could contribute a C++ FFT implementation to the boost library. I noticed that there is a boost::CRC so I thought it would be a good addition to have boost::FFT as well. MIT have an existing open-source FFTW library, but it is GPL-licensed which is much more restrictive than the Boost license.
Yes, in my opinion, Boost definitely needs FFT support --- even if only having a radix-2 decimation in frequency to start out. So it sounds pretty exciting. <snip>
I have working FFT code which I have tested on Ubuntu Linux GNU gcc and also Visual Studio Express 2012 (MS VC++) for Windows.
Is the code available for public viewing and benchmark?
My code, when run as a 2048-point FFT, agrees with the MIT FFTW one to a max error margin of 6 parts per million. It is implemented using templates in a .hpp file and is very easy to use:
<snip>
It's uniqueness compared to other FFT implementations is that it fully utilises the boost::thread library, to the extent that the user can give the number of threads they want to use as a parameter to the class template (above case is for 4 parallel threads).
Just out of interest, can it also use std::thread? Your VS Express 2012 and GCC > 4.7 compilers should support the C++ thread support library.
It is structured and organised so that users could customise/optimise it to specific processor architectures.
Everyone always wants to do this. But I strongly prefer parallel distribution over these kinds of specializations. <snip>
My code is a decimation-in-time radix-2 FFT, and users could in theory use the existing API as a basis to extend it to more complex implementations such as the Reverse/Inverse FFT, bit-reversal of inputs/outputs and multi-dimensional FFTs.
I did some work on radix-2 decimation using template metaprogramming. Perhaps our research overlaps here. As Paul mentioned, this is work in progress for Boost.Multiprecision for ultra high precision multiplication routines. It would really be great to pull a Boost FFT off the rack instead of rolling one solely for Boost.Multiprecision. For this application, though, we would also need the inverse transformation. And the convolution of the half-complex arrays is nice to have.
I look forward to your reply. Kind regards, Nathan Bliss Thanks for your heads-up.
Sincerely, Chris.