[FFmpeg-devel] [PATCH 2/2] swresample/resample: speed up Blackman Nuttall filter

Ganesh Ajjanagadde gajjanag at mit.edu
Tue Nov 10 00:43:06 CET 2015


On Mon, Nov 9, 2015 at 5:14 PM, Michael Niedermayer
<michael at niedermayer.cc> wrote:
> On Mon, Nov 09, 2015 at 09:38:44AM -0500, Ganesh Ajjanagadde wrote:
>> This may be a slightly surprising optimization, but is actually based on
>> an understanding of how math libraries compute trigonometric functions.
>> Explanation is given here so that future development uses libm more effectively
>> across the codebase.
>>
>> All libm's essentially compute transcendental functions via some kind of
>> polynomial approximation, be it Taylor-Maclaurin or Chebyshev.
>> Correction terms are added via polynomial correction factors when needed
>> to squeeze out the last bits of accuracy. Lookup tables are also
>> inserted strategically.
>>
>> In the case of trigonometric functions, periodicity is exploited via
>> first doing a range reduction to an interval around zero, and then using
>> some polynomial approximation.
>>
>> This range reduction is the most natural way of doing things - else one
>> would need polynomials for ranges in different periods which makes no
>> sense whatsoever.
>>
>> To avoid the need for the range reduction, it is helpful to feed in
>> arguments as close to the origin as possible for the trigonometric
>> functions. In fact, this also makes sense from an accuracy point of view:
>> IEEE floating point has far more resolution for small numbers than big ones.
>>
>> This patch does this for the Blackman-Nuttall filter, and yields a
>> non-negligible speedup.
>>
>> Sample benchmark (x86-64, Haswell, GNU/Linux)
>> test: fate-swr-resample-dblp-2626-44100
>> old:
>> 18893514 decicycles in build_filter (loop 1000),     256 runs,      0 skips
>> 18599863 decicycles in build_filter (loop 1000),     512 runs,      0 skips
>> 18445574 decicycles in build_filter (loop 1000),    1000 runs,     24 skips
>>
>> new:
>> 16290697 decicycles in build_filter (loop 1000),     256 runs,      0 skips
>> 16267172 decicycles in build_filter (loop 1000),     512 runs,      0 skips
>> 16251105 decicycles in build_filter (loop 1000),    1000 runs,     24 skips
>>
>> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
>> ---
>>  libswresample/resample.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> LGTM
>
> thanks

pushed, thanks
>
> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Many that live deserve death. And some that die deserve life. Can you give
> it to them? Then do not be too eager to deal out death in judgement. For
> even the very wise cannot see all ends. -- Gandalf
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list