Changes between Version 31 and Version 32 of Examples/Fft2dHighpass
 Timestamp:
 Nov 29, 2013, 6:26:09 AM (10 years ago)
Legend:
 Unmodified
 Added
 Removed
 Modified

Examples/Fft2dHighpass
v31 v32 11 11 == Code == 12 12 13 The main algorithm is at [http ://code.ouroborus.net/repa/repahead/repaalgorithms/Data/Array/Repa/Algorithms/FFT.hs FFT.hs]13 The main algorithm is at [https://github.com/benl23x5/repa/repahead/repaalgorithms/Data/Array/Repa/Algorithms/FFT.hs FFT.hs] 14 14 15 The wrapper is at [http ://code.ouroborus.net/repa/repahead/repaexamples/examples/FFT/HighPass2d/srcrepa/Main.hs Main.hs]15 The wrapper is at [https://github.com/benl23x5/repa/repahead/repaexamples/examples/FFT/HighPass2d/srcrepa/Main.hs Main.hs] 16 16 17 17 == Test Data == … … 42 42 43 43  Version  Time(s)  Source  44  Using Data.Vector.Unboxed  2.88  [http ://code.ouroborus.net/repa/repahead/repaexamples/FFT/HighPass2d/legacy/vector/FFT.hs FFT.hs] 45  Using Jones's inplace C implementation  0.24  [http ://code.ouroborus.net/repa/repahead/repaexamples/FFT/HighPass2d/legacy/c/Jones.c Jones.c] 46  Using FFTW using Estimate mode  0.09  [http ://code.ouroborus.net/repa/repahead/repaexamples/FFT/HighPass2d/legacy/c/FFTW.c FFTW.c] 44  Using Data.Vector.Unboxed  2.88  [https://github.com/benl23x5/repa/repahead/repaexamples/FFT/HighPass2d/legacy/vector/FFT.hs FFT.hs]  45  Using Jones's inplace C implementation  0.24  [https://github.com/benl23x5/repa/repahead/repaexamples/FFT/HighPass2d/legacy/c/Jones.c Jones.c]  46  Using FFTW using Estimate mode  0.09  [https://github.com/benl23x5/repa/repahead/repaexamples/FFT/HighPass2d/legacy/c/FFTW.c FFTW.c]  47 47 48 48 The vector version uses the same recursive radix2 decimation in time (DIT) algorithm as the Repa version, but is not rank generalised. It applies a recursive 1d FFT to each row and then transposes the matrix, twice each. Recursive FFT algorithms tend to be slower than inplace ones because intermediate data is written into new vectors at each recursion. A 512 point FFT is built from two 256 point FFTs, which are built from 4 128 point FFTs and so on. The result of each FFT is a new vector which needs to be allocated, filled, then unboxed again during the next recursion. The base case is a 2 point vector, so there are 256 of them to allocate then unbox at the lowest step.