Sorry, I forgot that pdf file is not permitted. Therefore I am
resending my email without it.
On 1/23/2014, 5:56 PM, Chris Lattner wrote:
On Jan 23, 2014, at 12:14 PM, Steven Bosscher <stevenb....@gmail.com> wrote:
(Hint: read http://vmakarov.fedorapeople.org/spec/ as an example of a
better-supported point of view.)
Unrelated to this thread, it would be great for this web page to get updated. You may
find it to be "a better-supported point of view", but it is also comparing
against clang 3.2, which is from the end of 2012, and a lot has changed since then.
Modern clang versions have its autovectorizor on by default (like GCC's) and generate
much better code in general. http://www.phoronix.com/ has done some benchmarks across a
wider range of code than just spec (which is notoriously "hacked" by compiler
developers) and Clang generates better code (and faster) than GCC in many cases.
-Chris
I am going to do this when gcc4.9 is released. I have data for gcc4.8
and 3.3 but I never published them. Here is an excerpt from my slides
about the compiler release comparison:
------------------------------
SPEC2000 Setup
o Intel Haswell 3.4Ghz (i5-4670)
p Common opts: -mtune=corei7 -march=i686
o peak:
o LLVM: -O3
o GCC: -Ofast -fno-fast-math
o LTO:
o LLVM: -O4
o GCC: -Ofast -fno-fast-math -flto -fwhole-program
o 32-bit: additionally -mpc64
o Only 4 SPECFP2000 (C) tests as LLVM has no Fortran FE
SPEC2000 Results
SPECInt LLVM-3.2 LLVM-3.3 GCC-4.7 GCC-4.8
32-bit peak
3302 (0.0%) 3305 (+0.06%) 3525 (+6.7%) 3543 (+7.3%)
32-bit LTO
3592 (0.0%) 3596 (+0.06%) 3704 (+3.1%) 3740 (+4.2%)
64-bit peak
3537 (0.0%) 3517 (-0.57%) 3692 (+4.4%) 3724 (+5.4%)
64-bit LTO
3787 (0.0%) 3789 (+0.05%) 3806 (+0.5%) 3846 (+1.6%)
SPECFP LLVM-3.2 LLVM-3.3 GCC-4.7 GCC-4.8
32-bit peak
3583 (0.0%) 3580 (-0.08%) 4888 (+36%) 4985 (+39%)
32-bit LTO
3661 (0.0%) 3668 (+0.19%) 4878 (+33%) 5011 (+37%)
64-bit peak
5468 (0.0%) 5431 (-0.68%) 5799 (+6%) 5917 (+8.2%)
64-bit LTO
5659 (0.0%) 5659 (0.0%) 5881 (+3.9%) 6005 (+6.1%)
Conclusions
o LLVM 3.2 -> 3.3: No progress, even small 64-bit peak degradation (0.6%)
o GCC4.7-> 4.8: Steady progress (1%-4%)
o Still LLVM is dangerously close to GCC on some tests (1.6% on 64-bit
LTO SPECInt)
----------------------------------------
I also already have some comparison data for the trunk and llvm 3.4 but
I don't want to publish it here as the trunk is not a release.
As for Phoronix, so far I saw several pitfalls in their testing methodology:
o Micro-benchmarking. E.g. favorite benchmark Scimark2 contains a few
tests with only one small hot loop, like LU-factorization where most
benchmark time is spent in 2-lines loop. It means that the worse
results for GCC can be easily fixed as Jakub Jelinek recently improved
Scimark SOR by 42% by a small patch:
http://gcc.gnu.org/ml/gcc-patches/2013-12/msg01986.html
o Comparing LLVM and GCC on Fortran benchmarks. LLVM has no fortran FE
and just quietly call system GCC. So comparison of LLVM and GCC on
Fortran benchmarks means comparison of system GCC and a given GCC.
o IMHO, the data in articles lack credability may be because a wrong
setup (by me or by phoronix). E.g. I tried to reproduce Scimark results
for GCC4.8 and LLVM3.3 from his article "LLVM Clang 3.4 Already Has Some
Performance Changes":
http://www.phoronix.com/scan.php?page=article&item=llvm_clang34_first&num=2
Phoronix used i7-4770K for this. I used the closest machine I found
i5-4670 (with switched turbo mode off). The important difference is
0.1Ghz in frequency (3.5Ghz vs. 3.4 Ghz). I got GCC Scimark (-large)
composite score close to the article when I used -O and still on my
machine the composite score was 20% higher than the article reports
although the article says that -O3 -march=core-avx were used.
o Phoronix articles about LLVM and GCC usually contains a lot of
negative emotions about GCC and positive ones about LLVM. Such bias to
LLVM is suspicious at least for me and make me feel Phoronix as just
LLVM marketing machine.
Still I like that LLVM did a good progress in generated code
performance, it makes GCC people working on optimizations (including me)
to justify the importance of their work. In overall, competition is a
good thing for LLVM and GCC as it stimulates compiler developing in
faster pace. One time it was GCC vs Open64. Next time it would be GCC
and something else or LLVM and something else. Who knows.