These are some speedups for arithmetic decoding, They show a ~15-20% performance increase when decoding Iframe only streams.
Further optimization is avaliable, please do comment on these if you wish. These patches are also avaliable in my public git tree: http://repo.or.cz/w/schroedinger/davidf-public.git on the arithdec-speedup branch I will be pushing this series into the main git tree unless i hear any major NAKs. Example speedup on an AMD opteron/amd64: 13.34 9ea686f... [decoder] don't zero subbands if arith data under/overr 13.32 aad375c... [buffer] Fix length member of SchroBuffer to be unsigne 13.33 df80aee... [arithdec] Use unsigned values for lut indexing 13.20 4c6d79e... [arithdec] Reorder SchroArith struct to keep useful val 12.94 2cfa058... [arithdec] Alter LUT to have values interleaved. 12.53 d1bcd88... [arithdec] Change bit insertion counter to decrement to 12.51 fec2dbb... [arithdec] contexts should be unsigned, when used to in 12.46 709a757... [arithdec] Remove redundant n + 1<<count 12.46 b80782a... [arithdec] Fix use of SCHRO_ARITH_DEFINE_INLINE 12.33 e62a499... [arithdec] renormalise before extracting a data bit 11.79 d6273ca... [arithdec] insert 8 bits at once into 'code' 11.55 4b5e803... [arithdec] use {range,code_minus_low} rather than {rang 11.89 98b663c... [arithdec] use variables for range and code rather than 11.79 2ed8658... [arithdec] move 16 bits into code at once rather than 8 11.83 16ef834... [arithdec] move range up by 16 bits. 11.26 b5b1cc7... [arithdec] test for infinite loop during arithmetic dec David Flynn (8): [buffer] Fix length member of SchroBuffer to be unsigned [arithdec] Use unsigned values for lut indexing [arithdec] Reorder SchroArith struct to keep useful values at start of struct [arithdec] Alter LUT to have values interleaved. [arithdec] Change bit insertion counter to decrement to 0 [arithdec] contexts should be unsigned, when used to index tables [arithdec] Remove redundant n + 1<<count [arithdec] Fix use of SCHRO_ARITH_DEFINE_INLINE Jonathan Rosser (8): [decoder] don't zero subbands if arith data under/overruns. [arithdec] renormalise before extracting a data bit [arithdec] insert 8 bits at once into 'code' [arithdec] use {range,code_minus_low} rather than {range,low,code} [arithdec] use variables for range and code rather than structure members [arithdec] move 16 bits into code at once rather than 8 [arithdec] move range up by 16 bits. [arithdec] test for infinite loop during arithmetic decoding not required schroedinger/schroarith.c | 79 +++++++++++++--------------- schroedinger/schroarith.h | 118 ++++++++++++++++++++++--------------------- schroedinger/schrobuffer.h | 2 +- schroedinger/schrodecoder.c | 4 ++ 4 files changed, 102 insertions(+), 101 deletions(-) ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Schrodinger-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/schrodinger-devel
