[flac-dev] PATCH for rice_parameter calculation

lvqcl lvqcl.mail at gmail.com
Wed Oct 9 08:54:46 PDT 2013


MSVS profiler shows that the following code in stream_encoder.c takes
several percent of CPU time:

     for(rice_parameter = 0, k = partition_samples; k < mean; rice_parameter++, k <<= 1)
         ;

this code is equivalent to:

     rice_parameter = 0; k = partition_samples;
     while(k < mean) {
         rice_parameter++; k <<= 1;
     }

The idea was to accelerate it:

     rice_parameter = 0; k = partition_samples;
     while(k*2 < mean) {
         rice_parameter+=2; k <<= 2;
     }
     while(k < mean) {
         rice_parameter++; k <<= 1;
     }

or:
     rice_parameter = 0; k = partition_samples;
     while(k*4 < mean) {
         rice_parameter+=3; k <<= 3;
     }
     while(k < mean) {
         rice_parameter++; k <<= 1;
     }


After tuning the code for 16-/24-bit WAV and 32-/64-bit compiles
I wrote more complex code (see attach). It doesn't look pretty but
it's faster than the current version. For highest compression preset,
24-bit input and 32-bit exe the encoding speed increases by 6..7%.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rice_parameter.patch
Type: application/octet-stream
Size: 1616 bytes
Desc: not available
Url : http://lists.xiph.org/pipermail/flac-dev/attachments/20131009/4934c85d/attachment.obj 


More information about the flac-dev mailing list