Do you know how the performance compares to FFTW or, say, Intel MKL?
-----Original Message-----
From: Boost [mailto:boost-bounces@lists.boost.org] On Behalf Of Nathan Bliss
Sent: Tuesday, May 28, 2013 3:12 PM
To: boost@lists.boost.org
Subject: [boost] Request to contribute boost::FFT
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. I should imagine a commercial FFTW license would be very expensive.
I have working FFT code which I have tested on Ubuntu Linux GNU gcc and also Visual Studio Express 2012 (MS VC++) for Windows. 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:
------------------------------------------------------------------------------------------------------------[fft.hpp]
templateclass FFT;///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////[Invocation example] typedef double My_type;FFT user_fft;user_fft.initialise_FFT();get_input_samples(*user_fft.input_value_array, user_fft.m_fft_size);user_fft.execute_FFT();print_output_csv(user_fft.output_value_array, 2048);------------------------------------------------------------------------------------------------------------
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).
It is structured and organised so that users could customise/optimise it to specific processor architectures.
I've also tried to develop it in the spirit of Boost in that all class members which users should not access are private, only making public what is necessary to the API. 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 look forward to your reply.
Kind regards,Nathan Bliss
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost