Page 1 of 3 123 LastLast
Results 1 to 10 of 24

Thread: The Performance Between GCC Optimization Levels

  1. #1
    Join Date
    Jan 2007
    Posts
    14,894

    Default The Performance Between GCC Optimization Levels

    Phoronix: The Performance Between GCC Optimization Levels

    For those that have never benchmarked the performance differences between GCC's different optimization levels, here are some recent test results comparing the performance differences when using an AMD FX-8150 processor with GCC 4.7.2.

    http://www.phoronix.com/vr.php?view=17986

  2. #2
    Join Date
    Nov 2007
    Posts
    1,024

    Default

    When it's a bit more stable, I would like to see some benchmarks with the new -Og option in the 4.8 dev series.

  3. #3

    Default

    These are a big improvement on previous benchmarks done by Phoronix. They would be better if tests that set -march=native tests in addition to the optimization level settings were also done.

    It would be useful if we could see the effect that cache has on optimization levels. Small caches are generally thought to favor lower optimization levels. In particular, -Os and -O2.

  4. #4
    Join Date
    Feb 2010
    Posts
    28

    Default

    Quote Originally Posted by ryao View Post
    These are a big improvement on previous benchmarks done by Phoronix. They would be better if tests that set -march=native tests in addition to the optimization level settings were also done.

    It would be useful if we could see the effect that cache has on optimization levels. Small caches are generally thought to favor lower optimization levels. In particular, -Os and -O2.
    I agree, especially w/ gentoo. GCC & binutils need to be optimized and errata pulled out to see the true benefits.

  5. #5
    Join Date
    Jul 2008
    Location
    Berlin, Germany
    Posts
    825

    Default

    Indeed, some optimizations will work better in combination with -march settings. The cache issue will show in benchmarks with highly parallelized workloads (such as web serving or databases with many clients).

    Regarding the article, it is interesting how the selection of benchmarks emphasizes floating-point heavy code, since this is what benefits a lot from -O3 (and -Ofast, but this may cause calculations result to be different from what you expect).

    For some historic reference, Linux Magazine already ran a comparison of -Os, -O2 and -O3 on Gentoo vs. Ubuntu a while back: http://www.linux-mag.com/id/7574/

  6. #6
    Join Date
    Apr 2011
    Posts
    405

    Default

    -O2 and -O3 can actually produce massive binary output size increases for not much gain over -Os.

    When you compile Mozilla software with -O3, you will get much larger binary size, which actually can make it take longer to load, and make the resulting program take up more space in RAM. I think Mozilla recommends -O2, but I've seen where some distributions use -Os, which doesn't make the binaries much smaller, but can hurt Firefox's score on things like Sunspider or Google's V8 benchmark. (-O3 doesn't help it enough to be worth the cost in load times and additional RAM usage)

    Obviously some things benefit so much from -O3 that it becomes worth the tradeoff in longer load times and higher RAM consumption. You can't take that for granted, though.

    Yes, there is such a thing as being too aggressive with optimization level. Unfortunately, it's hard to always know when you've gone too far because it varies from program to program. Just use Fedora and be happy. They usually do OK with things like this.

  7. #7

    Default

    Quote Originally Posted by DaemonFC View Post
    -O2 and -O3 can actually produce massive binary output size increases for not much gain over -Os.

    When you compile Mozilla software with -O3, you will get much larger binary size, which actually can make it take longer to load, and make the resulting program take up more space in RAM. I think Mozilla recommends -O2, but I've seen where some distributions use -Os, which doesn't make the binaries much smaller, but can hurt Firefox's score on things like Sunspider or Google's V8 benchmark. (-O3 doesn't help it enough to be worth the cost in load times and additional RAM usage)

    Obviously some things benefit so much from -O3 that it becomes worth the tradeoff in longer load times and higher RAM consumption. You can't take that for granted, though.

    Yes, there is such a thing as being too aggressive with optimization level. Unfortunately, it's hard to always know when you've gone too far because it varies from program to program. Just use Fedora and be happy. They usually do OK with things like this.
    -O2 -march=native is generally considered to be optimal outside of special cases.

  8. #8
    Join Date
    Feb 2012
    Posts
    70

    Default

    the GCC4.7 optimisation guide specifically says that using -O3 is not recommended over -O2. And that O3 was faster 'in the past' , but is now not faster than -O2.

    Is it OK to use -O3 to build the linux kernel ?

  9. #9
    Join Date
    Oct 2012
    Posts
    2

    Default

    Quote Originally Posted by mayankleoboy1 View Post
    the GCC4.7 optimisation guide specifically says that using -O3 is not recommended over -O2. And that O3 was faster 'in the past' , but is now not faster than -O2.

    Is it OK to use -O3 to build the linux kernel ?
    scriptkernel-x.x.x.sh= BFS + BFQ + CFLAG -Ofast

    http://sourceforge.net/projects/scriptkernel/files/

    scriptgcc-4.7.2_UBUNTU12_64BITS.sh = script compile source code gcc-4.7.2 automatic then ubuntu 12.04+

    http://sourceforge.net/projects/scri...TS.sh/download


    ...

  10. #10
    Join Date
    Oct 2012
    Posts
    2

    Default

    Quote Originally Posted by mayankleoboy1 View Post
    the GCC4.7 optimisation guide specifically says that using -O3 is not recommended over -O2. And that O3 was faster 'in the past' , but is now not faster than -O2.

    Is it OK to use -O3 to build the linux kernel ?
    scriptkernel-x.x.x.sh= BFS + BFQ + CFLAG -march=native -Ofast

    http://sourceforge.net/projects/scriptkernel/files/

    scriptgcc-4.7.2_UBUNTU12_64BITS.sh = script compile source code gcc-4.7.2 automatic then ubuntu 12.04+

    http://sourceforge.net/projects/scri...TS.sh/download


    ...

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •