[LLVMdev] Polyhedron 2005 results for dragonegg 3.3svn
Duncan Sands
duncan.sands at gmail.com
Sun Jun 2 01:27:16 PDT 2013
Hi Jack, thanks for splitting out what the effects of LLVM's / GCC's vectorizers
is.
On 01/06/13 21:34, Jack Howarth wrote:
> On Sat, Jun 01, 2013 at 06:45:48AM +0200, Duncan Sands wrote:
>>
>> These results are very disappointing, I was hoping to see a big improvement
>> somewhere instead of no real improvement anywhere (except for gas_dyn) or a
>> regression (eg: mdbx). I think LLVM now has a reasonable array of fast-math
>> optimizations. I will try to find time to poke at gas_dyn and induct: since
>> turning on gcc's optimizations there halve the run-time, LLVM's IR optimizers
>> are clearly missing something important.
>>
>> Ciao, Duncan.
>
> Duncan,
> Appended are another set of benchmark runs where I attempted to decouple the
> fast math optimizations from the vectorization by passing -fno-tree-vectorize.
> I am unclear if dragonegg really honors -fno-tree-vectorize to disable the llvm
> vectorization.
Yes, it does disable LLVM vectorization.
>
> Tested on x86_apple-darwin12
>
> Compile Flags: -ffast-math -funroll-loops -O3 -fno-tree-vectorize
Maybe -march=native would be a good addition.
>
> de-gfc48: /sw/lib/gcc4.8/bin/gfortran -fplugin=/sw/lib/gcc4.8/lib/dragonegg.so -specs=/sw/lib/gcc4.8/lib/integrated-as.specs
> de-gfc48+optzns: /sw/lib/gcc4.8/bin/gfortran -fplugin=/sw/lib/gcc4.8/lib/dragonegg.so -specs=/sw/lib/gcc4.8/lib/integrated-as.spec
> s -fplugin-arg-dragonegg-enable-gcc-optzns
> gfortran48: /sw/bin/gfortran-fsf-4.8
>
> Run time (secs)
What is the standard deviation for each benchmark? If each run varies by +-5%
then that means that the changes in runtime of around 3% measured below don't
mean anything.
Comparing with your previous benchmarks, I see:
>
> Benchmark de-gfc48 de-gfc48 gfortran48
> +optzns
>
> ac 11.33 8.10 8.02
Turning on LLVM's vectorizer gives a 2% slowdown.
> aermod 16.03 14.45 16.13
Turning on LLVM's vectorizer gives a 2.5% slowdown.
> air 6.80 5.28 5.73
> capacita 39.89 35.21 34.96
Turning on LLVM's vectorizer gives a 5% speedup. GCC gets a 5.5% speedup from
its vectorizer.
> channel 2.06 2.29 2.69
GCC's gets a 30% speedup from its vectorizer which LLVM doesn't get. On the
other hand, without vectorization LLVM's version runs 23% faster than GCC's, so
while GCC's vectorizer leaps GCC into the lead, the final speed difference is
more in the order of GCC 10% faster.
> doduc 27.35 26.13 25.74
> fatigue 8.83 4.82 4.67
GCC's gets a 17% speedup from its vectorizer which LLVM doesn't get.
This is a good one to look at, because all the difference between GCC
and LLVM is coming from the mid-level optimizers: turning on GCC optzns
in dragonegg speeds up the program to GCC levels, so it is possible to
get LLVM IR with and without the effect of GCC optimizations, which should
make it fairly easy to understand what GCC is doing right here.
> gas_dyn 11.41 9.79 9.60
Turning on LLVM's vectorizer gives a 30% speedup. GCC gets a comparable
speedup from its vectorizer.
> induct 23.95 21.75 21.14
GCC's gets a 40% speedup from its vectorizer which LLVM doesn't get. Like
fatigue, this is a case where we can get IR showing all the improvements that
the GCC optimizers made.
> linpk 15.49 15.48 15.69
> mdbx 11.91 11.28 11.39
Turning on LLVM's vectorizer gives a 2% slowdown
> nf 29.92 29.57 27.99
> protein 36.34 33.94 31.91
Turning on LLVM's vectorizer gives a 3% speedup.
> rnflow 25.97 25.27 22.78
GCC's gets a 7% speedup from its vectorizer which LLVM doesn't get.
> test_fpu 11.48 10.91 9.64
GCC's gets a 17% speedup from its vectorizer which LLVM doesn't get.
> tfft 1.92 1.91 1.91
>
> Geom. Mean 13.12 11.70 11.64
Ciao, Duncan.
>
> Assuming that the de-gfc48+optzns run really has disabled the llvm vectorization,
> I am hoping that additional benchmarking of de-gfc48+optzns with individual
> -ffast-math optimizations disabled (such as passing -fno-unsafe-math-optimizations)
> may give us a clue as the the origin of the performance delta between the stock
> dragonegg results with -ffast-math and those with -fplugin-arg-dragonegg-enable-gcc-optzns.
> Jack
>
More information about the llvm-dev
mailing list