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 13:47] – deva | conv:conv [2008/01/24 11:54] – 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.\\ | ||
+ | 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 (sometimes called "The Overlap-and-Save algorithm" | ||
+ | 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 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. | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
+ | {{: | ||
====Links==== | ====Links==== | ||
- | * http:// | + | |
- | * http:// | + | |
- | * http:// | + | * http:// |
- | * http:// | + | * http:// |
- | * http:// | + | * http:// |
+ | * http:// | ||
+ | * http:// | ||
+ | * http:// | ||
====Code==== | ====Code==== | ||
Line 17: | Line 46: | ||
g++ -O2 -mmmx -msse -msse2 conv_opt.cc -o conv_opt -DFFTW_FLOAT -lfftw3f -lsndfile | g++ -O2 -mmmx -msse -msse2 conv_opt.cc -o conv_opt -DFFTW_FLOAT -lfftw3f -lsndfile | ||
</ | </ | ||
- | to use floating point fftw instead of double. | + | to use floating point fftw instead of double.\\ |
+ | The actual code is shown below: | ||
<code c> | <code c> | ||
#include < | #include < | ||
Line 111: | Line 141: | ||
#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