[opus] [PATCH] Make CELT FFT twiddle complex type aligned

Zheng Lv lvzheng at google.com
Mon Oct 24 02:31:03 UTC 2022


Hi Team,

Can anyone take a look? We are already using this optimization in
production.

Best regards,
Zheng

On Thu, 15 Sept 2022 at 19:04, Zheng Lv <lvzheng at google.com> wrote:

> This makes kiss_twiddle_cpx 4-byte aligned (instead of 2-byte) for
> fixed-point builds. Tested with an armv6j+nofp development board, CELT
> encoding becomes 1.4x as fast, and decoding over 2x.
>
> Performance gain is mostly attributed to the proper alignment of the
> static const array mdct_twiddles960.
>
> Co-authored-by: David Gao <davidgao at google.com>
> ---
>  celt/kiss_fft.h | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/celt/kiss_fft.h b/celt/kiss_fft.h
> index bffa2bfa..267f72f9 100644
> --- a/celt/kiss_fft.h
> +++ b/celt/kiss_fft.h
> @@ -49,31 +49,41 @@ extern "C" {
>  #ifdef FIXED_POINT
>  #include "arch.h"
>
>  #  define kiss_fft_scalar opus_int32
>  #  define kiss_twiddle_scalar opus_int16
>
> +/* Some 32-bit CPUs would load/store a kiss_twiddle_cpx with a single
> memory
> + * access, and could benefit from additional alignment.
> + */
> +#  define KISS_TWIDDLE_CPX_ALIGNMENT (sizeof(opus_int32))
>
>  #else
>  # ifndef kiss_fft_scalar
>  /*  default is float */
>  #   define kiss_fft_scalar float
>  #   define kiss_twiddle_scalar float
>  #   define KF_SUFFIX _celt_single
>  # endif
>  #endif
>
> +#if defined(__GNUC__) && defined(KISS_TWIDDLE_CPX_ALIGNMENT)
> +#define KISS_TWIDDLE_CPX_ALIGNED
> __attribute__((aligned(KISS_TWIDDLE_CPX_ALIGNMENT)))
> +#else
> +#define KISS_TWIDDLE_CPX_ALIGNED
> +#endif
> +
>  typedef struct {
>      kiss_fft_scalar r;
>      kiss_fft_scalar i;
>  }kiss_fft_cpx;
>
>  typedef struct {
>     kiss_twiddle_scalar r;
>     kiss_twiddle_scalar i;
> -}kiss_twiddle_cpx;
> +} KISS_TWIDDLE_CPX_ALIGNED kiss_twiddle_cpx;
>
>  #define MAXFACTORS 8
>  /* e.g. an fft of length 128 has 4 factors
>   as far as kissfft is concerned
>   4*4*4*2
>   */
> --
> 2.37.2.789.g6183377224-goog
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xiph.org/pipermail/opus/attachments/20221024/5e831677/attachment.htm>


More information about the opus mailing list