On Sun, Jun 14, 2009 at 06:17:20PM +0200, Jens M Andreasen wrote:
...
This is called for each of the four filters like:
for (j = 0; j < bands_count; j++)
{
param_sect_proc(filter_ptr->sect + j, k,
sig, sfreq[j], sband[j], sgain[j]);
}
.. where the parameters are unique for each filter but the input signal
is the result of the previous run, which creates an unfortunate
dependency.
If sig instead had been splatted out on the 4 elements of an SSE vector,
all 4 filters could have been calculated in parallel, quite possibly
auto-vectorizable.
param_sect_proc(filter_ptr->sect + j, k,
sig[j], sfreq[j], sband[j], sgain[j]);
Which would not be a correct implementation. Results will
be similar only if the frequency bands handled by each
section do not overlap. For example two filters with
the same F and B and opposite gains would not cancel.
Ciao,
--
FA
Io lo dico sempre: l'Italia è troppo stretta e lunga.