• Ganesh Ajjanagadde's avatar
    avcodec/aac_tablegen: speed up table initialization · 96786a12
    Ganesh Ajjanagadde authored
    This speeds up aac_tablegen to a ludicruous degree (~97%), i.e to the point
    where it can be argued that runtime initialization can always be done instead of
    hard-coded tables. The only cost is essentially a trivial increase in
    the stack size.
    
    Even if one does not care about this, the patch also improves accuracy
    as detailed below.
    
    Performance:
    Benchmark obtained by looping 10^4 times over ff_aac_tableinit.
    
    Sample benchmark (x86-64, Haswell, GNU/Linux):
    old:
    1295292 decicycles in ff_aac_tableinit,     512 runs,      0 skips
    1275981 decicycles in ff_aac_tableinit,    1024 runs,      0 skips
    1272932 decicycles in ff_aac_tableinit,    2048 runs,      0 skips
    1262164 decicycles in ff_aac_tableinit,    4096 runs,      0 skips
    1256720 decicycles in ff_aac_tableinit,    8192 runs,      0 skips
    
    new:
    21112 decicycles in ff_aac_tableinit,     511 runs,      1 skips
    21269 decicycles in ff_aac_tableinit,    1023 runs,      1 skips
    21352 decicycles in ff_aac_tableinit,    2043 runs,      5 skips
    21386 decicycles in ff_aac_tableinit,    4080 runs,     16 skips
    21299 decicycles in ff_aac_tableinit,    8173 runs,     19 skips
    
    Accuracy:
    The previous code was resulting in needless loss of
    accuracy due to the pow being called in succession. As an illustration
    of this:
    ff_aac_pow34sf_tab[3]
    old : 0.000000000007598092294225
    new : 0.000000000007598091426864
    real: 0.000000000007598091778545
    
    truncated to float
    old : 0.000000000007598092294225
    new : 0.000000000007598091426864
    real: 0.000000000007598091426864
    
    showing that the old value was not correctly rounded. This affects a
    large number of elements of the array.
    
    Patch tested with FATE.
    Reviewed-by: 's avatarRostislav Pehlivanov <atomnuker@gmail.com>
    Signed-off-by: 's avatarGanesh Ajjanagadde <gajjanagadde@gmail.com>
    96786a12
Name
Last commit
Last update
compat Loading commit data...
doc Loading commit data...
libavcodec Loading commit data...
libavdevice Loading commit data...
libavfilter Loading commit data...
libavformat Loading commit data...
libavresample Loading commit data...
libavutil Loading commit data...
libpostproc Loading commit data...
libswresample Loading commit data...
libswscale Loading commit data...
presets Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.travis.yml Loading commit data...
COPYING.GPLv2 Loading commit data...
COPYING.GPLv3 Loading commit data...
COPYING.LGPLv2.1 Loading commit data...
COPYING.LGPLv3 Loading commit data...
CREDITS Loading commit data...
Changelog Loading commit data...
INSTALL.md Loading commit data...
LICENSE.md Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
RELEASE Loading commit data...
arch.mak Loading commit data...
cmdutils.c Loading commit data...
cmdutils.h Loading commit data...
cmdutils_common_opts.h Loading commit data...
cmdutils_opencl.c Loading commit data...
common.mak Loading commit data...
configure Loading commit data...
ffmpeg.c Loading commit data...
ffmpeg.h Loading commit data...
ffmpeg_dxva2.c Loading commit data...
ffmpeg_filter.c Loading commit data...
ffmpeg_opt.c Loading commit data...
ffmpeg_qsv.c Loading commit data...
ffmpeg_vdpau.c Loading commit data...
ffmpeg_videotoolbox.c Loading commit data...
ffplay.c Loading commit data...
ffprobe.c Loading commit data...
ffserver.c Loading commit data...
ffserver_config.c Loading commit data...
ffserver_config.h Loading commit data...
library.mak Loading commit data...
version.sh Loading commit data...