conv:conv
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
conv:conv [2008/01/10 14:06] – deva | conv:conv [2008/01/24 12:08] – deva | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | =====Convolution implementation pages===== | + | =====Convolution implementation pages (Spring 2008 studies group under Ole Caprani)===== |
Our goal is to implement a realtime plugin to do convolution.\\ | Our goal is to implement a realtime plugin to do convolution.\\ | ||
- | The basic "Input Side" is way too slow, so we will be experimenting with a dft-multiply-idft algorithm instead.\\ | + | The basic "Input Side" is way too slow (convolution implemented with two for loops), so we will be experimenting with a dft-multiply-idft algorithm |
To do the actual fft we will use the fftw3 library (http:// | To do the actual fft we will use the fftw3 library (http:// | ||
+ | The next step is to implement at test the " | ||
+ | |||
+ | ====Group==== | ||
+ | * Jonas Suhr Christensen - // | ||
+ | * Bent Bisballe Nyeng - // | ||
+ | |||
+ | ====Analysis==== | ||
+ | The following graphs show the execution time of a single convolution iteration, using the overlap and save algorithm with various optimizations enabled.\\ | ||
+ | The timings are produced using a Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz, with 4096KB cache.\\ | ||
+ | The algorithm optimizations are named as follows: | ||
+ | * **Double** This is an implementation with no particular optimizations. | ||
+ | * **Float** This is a simple implementation using float as the internal datatype. | ||
+ | * **Real Double** This is an implementation using real ffts instead of complex. | ||
+ | * **Real Float** This is an implementation using real ffts instead of complex, with float as internal datatype. | ||
+ | * **MT Double** This is an implementation running on multiple CPUs. | ||
+ | * **MT Float** This is an implementation with float as internal datatype, running on multiple CPUs. | ||
+ | * **MT Real Double** This is an implementation using real ffts instead of complex, running on multiple CPUs. | ||
+ | * **MT Real Float** This is an implementation using real ffts instead of complex, with float as internal datatype, running on multiple CPUs. | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | As it is seen on the graphs the speed improves with the buffer size increasing, up to 1024 samples. At this point the iteration time starts fluctuating. This may be caused by internal cache size on the given CPU. | ||
====Links==== | ====Links==== | ||
Line 12: | Line 36: | ||
* http:// | * http:// | ||
* http:// | * http:// | ||
+ | * http:// | ||
====Code==== | ====Code==== | ||
Line 117: | Line 142: | ||
#define RE 0 | #define RE 0 | ||
#define IM 1 | #define IM 1 | ||
+ | |||
static FFTW_DATATYPE *hfft = NULL; | static FFTW_DATATYPE *hfft = NULL; |
conv/conv.txt · Last modified: 2008/09/04 12:09 by deva