forked from mborgerding/kissfft
-
Notifications
You must be signed in to change notification settings - Fork 3
Fixed Point SIMD Modifications to Kiss FFT -- a Fast Fourier Transform (FFT) library that tries to Keep it Simple, Stupid
License
dornerworks/kissfft
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This fork exists to demonstrate the benefits and ease of use of SSE and AVX extensions added to Mark Borgerding's KISS FFT library. The KISS FFT library supports both floating point and fixed point FFT calculations, and the floating point implementation already supports SSE acceleration when utilizing the USE_SIMD compiler option. This fork uses SSE and AVX in the fixed point implementation. These modifications were developed by Stewart Hildebrand, Anthony Boorsma, and Kevin Kredit of DornerWorks Ltd. Visit https://dornerworks.com/ and https://dornerworks.com/blog/writing-vectorized-code to learn more about the company and writing vectorized code. Notice that the modifications were made for the functioning of the 'simd_sample_app'. The built-in KISS FFT test tools are broken, and would require significant work or rewriting to function with KISS FFT given the C, SSE, and AVX changes. That work will be left for a future time, when (1) these modifications are upstreamed into the original KISS FFT library, (2) an interested party engages DornerWorks to do more development, or (3) an interested party takes that task upon themselves. The simd_sample_app program showcases the runtime speeds of the different KISS FFT builds (C, SSE, and AVX) as well as using FFTW on the same fixed-point dataset. Because this is aimed at showcasing fixed-point FFTs, and FFTW does not support fixed-point FFTs, the runtime for FFTW includes the time required to translate the data to and from floating-point numbers. Please note that the runtimes vary significantly depending on CPU architecture. The sample app creates an array of number sets (a multiple of 8), then sends the array to each FFT implementation for timing. Each implementation does the FFT of each of the number sets in the array multiple times (based on the NUM_RUNS define), then sends the results of the last number set of the last run back for comparison. This is just a representative sample of all of the FFTs it calculated, for demonstration purposes. A real application would of course use all the FFT data. simd_sample_app was vectorized and improved by Stephen Ng of DornerWorks Ltd. ======== CONTENTS ======== * README - this file * LICENSE - the BSD 3-Clause “Revised” License, same as the original KISS FFT library * kiss_fft/ - the vectorized KISS FFT library; see git history for modifications * simd_sample_app/ - source for a sample application designed to demonstrate the ease of use and the acceleration resulting from the SSE and AVX extensions ===== USAGE ===== * simd_sample_app - prerequisite: FFTW3 is installed (for Cygwin, get libfftw3-devel) - This sample program can (and has been) built and run in Cygwin and on Linux. It has not been tested in a native Windows environment. - enter the simd_sample_app/ directory and `make` the program - execute the application with `./build/simd_sample_app` - observe the results * your own application - use simd_sample_app or any other application using the original KISS FFT library as an example - include and copy the source code into your application while respecting the terms of the license
About
Fixed Point SIMD Modifications to Kiss FFT -- a Fast Fourier Transform (FFT) library that tries to Keep it Simple, Stupid
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C 71.0%
- C++ 16.0%
- Python 8.6%
- Makefile 4.1%
- MATLAB 0.3%