[non-be][rend-non-be][split-non-be][allow regression]Complexity reduction of formulate2x2MixingMatrixfx()
Reason why this change is needed
formulate2x2MixingMatrix() can be simplified if there are no cross-terms (CinRe, CinIm == 0), which is every second call the case. Also the basop/float ratio of > 2 can be brought down, if, after the energy normalization to 1.0 only native BASOPS are used in the calculations instead of using a mantissa/exponent format which requires scaling operations and the usage of the BASOP_Util_Add_Mant32Exp() function.
Description of the change
formulate2x2MixingMatrix(), chol2x2_fx() and eig2x2_fx() have been refactored completely.
The following performance improvements have been made (Bit stream for performance measurements used is stv3OA32c.bit)
CMLD: -fr 20 BINAURAL 32 stv3OA32c.bit dec_basop.wav
W/O #NONBE_2169_BINAURAL_MIXING_MATRIX_OP
--- Complexity analysis [WMOPS] ---
|------ SELF ------| |--- CUMULATIVE ---|
routine calls min max avg min max avg
--------------- ------ ------ ------ ------ ------ ------ ------
ivas_jbm_dec_tc 1.00 1.891 1.915 1.915 26.344 39.006 29.323
ivas_spar_decode 1.00 1.010 1.041 1.019 2.544 2.684 2.628
ivas_spar_dec_MD 1.00 1.526 1.665 1.609 1.526 1.665 1.609
ivas_sce_dec 1.00 0.246 0.246 0.246 21.794 34.503 24.780
ivas_core_dec 1.00 3.152 11.376 7.869 21.547 34.257 24.534
acelp_core_dec 0.61 12.542 18.737 14.364 12.542 18.737 14.364
ivas_dec_prepare_renderer 1.00 6.054 7.686 6.140 6.054 7.686 6.140
ivas_dec_render 1.00 73.005 84.525 84.038 77.158 88.783 88.296
ivas_sba_prototype_renderer 4.00 3.922 4.258 4.258 3.922 4.258 4.258
stereo_tcx_core_dec 0.39 17.651 31.024 20.312 17.651 31.024 20.312
--------------- ------ ------ ------ ------
total 1000.00 114.658 133.989 123.758
formulate2x2MixingMatrix_fx 320.00 6.429 7.074 7.061 28.753 39.314 39.096
With #NONBE_2169_BINAURAL_MIXING_MATRIX_OP
--- Complexity analysis [WMOPS] ---
|------ SELF ------| |--- CUMULATIVE ---|
routine calls min max avg min max avg
--------------- ------ ------ ------ ------ ------ ------ ------
ivas_jbm_dec_tc 1.00 1.891 1.915 1.915 26.344 39.006 29.581
ivas_spar_decode 1.00 1.010 1.041 1.019 2.544 2.684 2.628
ivas_spar_dec_MD 1.00 1.526 1.665 1.609 1.526 1.665 1.609
ivas_sce_dec 1.00 0.246 0.246 0.246 21.794 34.503 25.038
ivas_core_dec 1.00 3.152 11.376 7.869 21.547 34.257 24.792
acelp_core_dec 0.61 12.887 19.460 14.784 12.887 19.460 14.784
ivas_dec_prepare_renderer 1.00 6.054 7.686 6.140 6.054 7.686 6.140
ivas_dec_render 1.00 51.025 68.987 68.319 55.178 73.245 72.577
ivas_sba_prototype_renderer 4.00 3.922 4.258 4.258 3.922 4.258 4.258
stereo_tcx_core_dec 0.39 17.651 31.024 20.312 17.651 31.024 20.312
--------------- ------ ------ ------ ------
total 1000.00 92.678 118.542 108.297
formulate2x2MixingMatrix_fx 320.00 1.274 4.051 3.996 6.248 23.139 22.846
Roughly 16 WMOPS saving, ratio BASOP/FLOAT for formulate2x2MixingMatrix_fx() is now 1.1 (before 1.9). Beside the WMOPS savings, overall precision has been improved. (e.g. 66 improvements_MIN_SSNR vs. 2 regressions_MIN_SSNR)
Affected operating points
- Produced bitstream is BE for EVS-MONO compared to previous state
- Produced bitstream is non-BE for IVAS, but it is fully backwards compatible for decoding. Decoded output may differ.