[mythtv] Compiler opt flags

Ben Bucksch linux.news at bucksch.org
Fri May 16 07:52:31 EDT 2003


I see that strong optimizing tops are enabled in settigns.pro for 
"release" (optimized) builds. That's a good idea, given that MythTV is 
very CPU-hungry.

Given that gcc 3.0 and later has special optimizations for Athlon, even 
distinguishing between Athlon types as I just saw, maybe add a note 
about that to the HOWTO 
<http://www.mythtv.org/docs/mythtv-HOWTO-5.html#ss5.1>?

But more importantly, it seems to me that avcodec and avformat, which 
are used to compress the video and do the actual hard and CPU-intensive 
work (right?), don't use these flags. The only opt flag I noticed was 
-O3, no CPU opt. The step from -march=pentium to -march=pentiumpro can 
mean 5-10% performance increase (tested with gcc 2.95 and Mozilla), so 
it seems significant, esp. considering that you build the rest of MythTV 
with those flags anyways.

To use these flags for avcodec, I use the following command:
CFLAGS="-funroll-loops -fexpensive-optimizations -O6 -march=athlon" 
./configure
Maybe someone else can figure out a saner way.

Ben Bucksch


man gcc (3.2)
Intel 386 and AMD x86-64 Options

       These -m options are defined for the i386 and x86-64 family of 
computers:

       -mcpu=cpu-type
           Tune to cpu-type everything applicable about the generated 
code, except for the
           ABI and the set of available instructions.  The choices for 
cpu-type are i386,
           i486, i586, i686, pentium, pentium-mmx, pentiumpro, pentium2, 
pentium3, pentium4,
           k6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp and 
athlon-mp.

           While picking a specific cpu-type will schedule things 
appropriately for that
           particular chip, the compiler will not generate any code that 
does not run on the
           i386 without the -march=cpu-type option being used.  i586 is 
equivalent to pen-
           tium and i686 is equivalent to pentiumpro.  k6 and athlon are 
the AMD chips as
           opposed to the Intel ones.

       -march=cpu-type
           Generate instructions for the machine type cpu-type.  The 
choices for cpu-type
           are the same as for -mcpu.  Moreover, specifying 
-march=cpu-type implies
           -mcpu=cpu-type.

    -mfpmath=unit
           generate floating point arithmetics for selected unit unit.  
the choices for unit
           are:
           [...]
           sse Use scalar floating point instructions present in the SSE 
instruction set.
               This instruction set is supported by Pentium3 and newer 
chips, in the AMD
               line by Athlon-4, Athlon-xp and Athlon-mp chips.  The 
earlier version of SSE
               instruction set supports only single precision 
arithmetics, thus the double
               and extended precision arithmetics is still done using 
387.  Later version,
               present only in Pentium4 and the future AMD x86-64 chips 
supports double pre-
               cision arithmetics too.

               For i387 you need to use -march=cpu-type, -msse or -msse2 
switches to enable
               SSE extensions and make this option effective.  For 
x86-64 compiler, these
               extensions are enabled by default.

               The resulting code should be considerably faster in 
majority of cases and
               avoid the numerical instability problems of 387 code, but 
may break some
               existing code that expects temporaries to be 80bit.





More information about the mythtv-dev mailing list