Compilation speed of Linaro's gcc compared to e.g. Ubuntu's version

2012-10-28 Thread Frank Müller
Dear all,

we have an ARM Cortex-A8 board where we are running our application. I am in 
charge of maintaining the Linux on it and the toolchain/SDK setup. So far we've 
been running Poky/OpenEmbedded and using the cross compiler that came about 
during the compilation.

For easier maintenance, we are now switching to Linaro. The image is set up and 
I can compile, however I notice a peculiar fact: the binary distribution of 
Linaro's gcc 
(https://launchpad.net/linaro-toolchain-binaries/trunk/2012.10/+download/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121022_linux.tar.bz2)
 has a significantly larger compilation speed than a version of 
arm-linux-gnueabihf-gcc that is shipping with Ubuntu. In our particular case, 
using Ubuntu's version it takes less than 6 minutes to compile our software, 
but 10 minutes when we use Linaro's version. The makefiles and source are 
exactly the same, only the compiler is different. I also tried an older version 
(4.6) of Linaro's gcc to match the Ubuntu one (tested the 12.04 shipped 
version), with no significant difference.

Compiler flags for the system are -march=armv7-a -mtune=cortex-a8 -mfpu=neon 
-mfloat-abi=hard

Running with -ftime-report, most of the additional time seems to be spent in 
the parser. Adding -fno-graphite-identity -fno-graphite for Linaro's gcc did 
not make a difference.

I believe I tried to use crosstool-ng to make my own version, but I don't 
remember the results as this was over 7 weeks ago. I also did not have a chance 
to compare performance of the binaries. I do notice a difference in compilation 
sizes (4.8 MB for Ubuntu's 4.6 version, 4.1 MB for Linaro's 4.7 versions - 
can't test anything other right now).

I would like to use Linaro's gcc as the crosscompiler for our project, as it is 
an easy setup. Repackaging Ubuntu's version is an option, though (some of the 
team do not use Ubuntu, plus I'd like everybody to use EXACTLY the same version 
of the crosscompiler). So there is no real "problem" for me, per se, but I am 
extremely curious as to what is going on here. It seems that Linaro's gcc has 
additional patches or maybe just different default settings that cause 
additional time to be spent in the parser. It would be interesting to know what 
exactly this is and whether/how it can be disabled in those cases where time of 
compilation is more important than e.g. performance gain.

TIA for replying.

Best

Frank

___
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain


Re: Compilation speed of Linaro's gcc compared to e.g. Ubuntu's version

2012-10-29 Thread Frank Müller
Mans Rullgard  wrote:
> On 28 October 2012 18:08, "Frank Müller"  wrote:
> > For easier maintenance, we are now switching to Linaro. The image is set
> up and I can compile, however I notice a peculiar fact: the binary
> distribution of Linaro's gcc
> (https://launchpad.net/linaro-toolchain-binaries/trunk/2012.10/+download/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121022_linux.tar.bz2)
> has a significantly larger compilation speed than a version of
> arm-linux-gnueabihf-gcc that is shipping with Ubuntu. In our particular case, 
> using
> Ubuntu's version it takes less than 6 minutes to compile our software, but 10
> minutes when we use Linaro's version. The makefiles and source are exactly
> the same, only the compiler is different. I also tried an older version
> (4.6) of Linaro's gcc to match the Ubuntu one (tested the 12.04 shipped
> version), with no significant difference.
> >
> > Compiler flags for the system are -march=armv7-a -mtune=cortex-a8
> -mfpu=neon -mfloat-abi=hard
> 
> Could you please show us the full output from compiling one of your
> source files adding -v to the flags with both compilers?  This will
> reveal any differences in how they were configured.

Of course. I've also updated to the Ubuntu 12.10 g++-arm-linux-gnueabihf_4.7.2 
version so it matches a bit better. For better readability I've added "=" 
lines between the outputs.

Compiling one file with Ubuntu 12.10's arm-linux-gnueabihf-g++-4.7 with -v:

/usr/bin/arm-linux-gnueabihf-g++-4.7 -Wno-psabi -DNDEBUG -Isrc 
-Iobj/Build/Release -include obj/Build/Release/default.h  -O3 -Werror -Wall -v 
-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard -isystem 
src/messages -Wfatal-errors -Wpointer-arith -Wcast-qual -Wwrite-strings 
-Wno-long-long -Wno-variadic-macros -Wno-multichar -Woverloaded-virtual 
-Wctor-dtor-privacy -Wstrict-null-sentinel -Wsign-promo -ggdb1 --param 
inline-unit-growth=200 --param large-function-growth=1000 -MMD -MP -fpch-deps 
-std=c++0x -ftree-vectorize -funroll-loops -fomit-frame-pointer  -o 
"obj/Build/Release/main.o" -MF obj/Build/Release/main.d -c "src/main.cpp"
Using built-in specs.
COLLECT_GCC=/usr/bin/arm-linux-gnueabihf-g++-4.7
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 
4.7.2-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs 
--enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr 
--program-suffix=-4.7 --enable-shared --enable-linker-build-id 
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext 
--enable-threads=posix 
--with-gxx-include-dir=/usr/arm-linux-gnueabihf/include/c++/4.7.2 
--libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug 
--enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm 
--enable-plugin --enable-objc-gc --enable-multilib --disable-sjlj-exceptions 
--with-arch=armv7-a --with-fpu=vfpv3-d16 --with-float=hard --with-mode=thumb 
--disable-werror --enable-checking=release --build=x86_64-linux-gnu 
--host=x86_64-linux-gnu --target=arm-linux-gnueabihf 
--program-prefix=arm-linux-gnueabihf- 
--includedir=/usr/arm-linux-gnueabihf/include 
--with-headers=/usr/arm-linux-gnueabihf/include 
--with-libs=/usr/arm-linux-gnueabihf/lib
Thread model: posix
gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1) 
COLLECT_GCC_OPTIONS='-Wno-psabi' '-D' 'NDEBUG' '-I' 'src' '-I' 
'obj/Build/Release' '-include' 'obj/Build/Release/default.h' '-O3' '-Werror' 
'-Wall' '-v' '-march=armv7-a' '-mtune=cortex-a8' '-mfpu=neon' 
'-mfloat-abi=hard' '-isystem' 'src/messages' '-Wfatal-errors' '-Wpointer-arith' 
'-Wcast-qual' '-Wwrite-strings' '-Wno-long-long' '-Wno-variadic-macros' 
'-Wno-multichar' '-Woverloaded-virtual' '-Wctor-dtor-privacy' 
'-Wstrict-null-sentinel' '-Wsign-promo' '-ggdb1' '--param' 
'inline-unit-growth=200' '--param' 'large-function-growth=1000' '-MMD' '-MP' 
'-fpch-deps' '-std=c++11' '-ftree-vectorize' '-funroll-loops' 
'-fomit-frame-pointer' '-o' 'obj/Build/Release/main.o' '-MF' 
'obj/Build/Release/main.d' '-c' '-shared-libgcc' '-mthumb' '-mtls-dialect=gnu'
 /usr/lib/gcc/arm-linux-gnueabihf/4.7/cc1plus -quiet -v -I src -I 
obj/Build/Release -imultiarch arm-linux-gnueabihf -MMD obj/Build/Release/main.d 
-MF obj/Build/Release/main.d -MP -MQ obj/Build/Release/main.o -D_GNU_SOURCE -D 
NDEBUG -include obj/Bui

Re: Compilation speed of Linaro's gcc compared to e.g. Ubuntu's version

2012-11-05 Thread Frank Müller
Hi

Michael Hope 
> On 30 October 2012 22:11, Mans Rullgard  wrote:
> > On 29 October 2012 16:28, "Frank Müller"  wrote:
> >> Mans Rullgard  wrote:
> >>> On 28 October 2012 18:08, "Frank Müller"  wrote:
> >>> > For easier maintenance, we are now switching to Linaro. The image is
> set
> >>> up and I can compile, however I notice a peculiar fact: the binary
> >>> distribution of Linaro's gcc
> >>>
> (https://launchpad.net/linaro-toolchain-binaries/trunk/2012.10/+download/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121022_linux.tar.bz2)
> >>> has a significantly larger compilation speed than a version of
> >>> arm-linux-gnueabihf-gcc that is shipping with Ubuntu. In our
> particular case, using
> >>> Ubuntu's version it takes less than 6 minutes to compile our software,
> but 10
> >>> minutes when we use Linaro's version. The makefiles and source are
> exactly
> >>> the same, only the compiler is different. I also tried an older
> version
> >>> (4.6) of Linaro's gcc to match the Ubuntu one (tested the 12.04
> shipped
> >>> version), with no significant difference.
> >>> >
> >>> > Compiler flags for the system are -march=armv7-a -mtune=cortex-a8
> >>> -mfpu=neon -mfloat-abi=hard
> >>>
> >>> Could you please show us the full output from compiling one of your
> >>> source files adding -v to the flags with both compilers?  This will
> >>> reveal any differences in how they were configured.
> >>
> >> Of course. I've also updated to the Ubuntu 12.10
> g++-arm-linux-gnueabihf_4.7.2 version so it matches a bit better. For better 
> readability I've
> added "=" lines between the outputs.
> >
> > Your Linaro compiler is a 32-bit build, the Ubuntu one 64-bit.  That
> > might explain at least part of the difference.
> 
> Hi Frank.  I had a quick play and built a 64 bit version of the
> current release.  See:
> 
> http://people.linaro.org/~michaelh/incoming/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121015_linux64.tar.xz
> 
> Could you give it a try under Ubuntu Precise and see if the
> compilation speed changes?  If not we can look further.

I tried your 64 bit version and got a compilation time of 11m5.699s. 

So the updated "benchmark" overview is now

6m24s/4.6mb gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
7m2s/4.0mb  gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1) 
10m51s/4.0mbgcc version 4.7.3 20121001 (prerelease) 32 bit
11m3s/4.2mb same (4.7.3/Linaro) but with -mtune=cortex-a9
11m5s/4.0mb gcc version 4.7.3 20121001 (prerelease) 64 bit

Has anybody done any performance comparisons with the two compilers (Ubuntu vs 
Linaro)? Should I try to make an example project that exhibits this "problem"?

Frank

___
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain


Re: Compilation speed of Linaro's gcc compared to e.g. Ubuntu's version

2012-11-08 Thread Frank Müller
I now had some time to try out making my own compiler, and started off with a 
few different configurations with crosstool-ng 1.16.0. Interestingly the 
results were as slow (if not slightly slower with almost 12 minutes) in 
compilation as Linaro's gcc. 

So maybe my question should not be why Linaro's gcc is so slow, but why 
Ubuntu's is so fast. Though I also should note that a) a native (i686/x86_64) 
build is around the same speed as Ubuntu's crosscompiler and b) Ubuntu's 
version is maintained by Linaro as well. 

Marcin Juszkiewicz, if you're on this list, maybe you could offer some insight 
what the main difference is?

May binutil versions and whether eglibc/glibc/uclibc was used play into it?

Frank


"Frank Müller" 
> Michael Hope 
> > On 30 October 2012 22:11, Mans Rullgard 
> wrote:
> > > On 29 October 2012 16:28, "Frank Müller"  wrote:
> > >> Mans Rullgard  wrote:
> > >>> On 28 October 2012 18:08, "Frank Müller" 
> wrote:
> > >>> > For easier maintenance, we are now switching to Linaro. The image
> is
> > set
> > >>> up and I can compile, however I notice a peculiar fact: the binary
> > >>> distribution of Linaro's gcc
> > >>>
> >
> (https://launchpad.net/linaro-toolchain-binaries/trunk/2012.10/+download/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121022_linux.tar.bz2)
> > >>> has a significantly larger compilation speed than a version of
> > >>> arm-linux-gnueabihf-gcc that is shipping with Ubuntu. In our
> > particular case, using
> > >>> Ubuntu's version it takes less than 6 minutes to compile our
> software,
> > but 10
> > >>> minutes when we use Linaro's version. The makefiles and source are
> > exactly
> > >>> the same, only the compiler is different. I also tried an older
> > version
> > >>> (4.6) of Linaro's gcc to match the Ubuntu one (tested the 12.04
> > shipped
> > >>> version), with no significant difference.
> > >>> >
> > >>> > Compiler flags for the system are -march=armv7-a -mtune=cortex-a8
> > >>> -mfpu=neon -mfloat-abi=hard
> > >>>
> > >>> Could you please show us the full output from compiling one of your
> > >>> source files adding -v to the flags with both compilers?  This will
> > >>> reveal any differences in how they were configured.
> > >>
> > >> Of course. I've also updated to the Ubuntu 12.10
> > g++-arm-linux-gnueabihf_4.7.2 version so it matches a bit better. For
> better readability I've
> > added "=" lines between the outputs.
> > >
> > > Your Linaro compiler is a 32-bit build, the Ubuntu one 64-bit.  That
> > > might explain at least part of the difference.
> > 
> > Hi Frank.  I had a quick play and built a 64 bit version of the
> > current release.  See:
> > 
> >
> http://people.linaro.org/~michaelh/incoming/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121015_linux64.tar.xz
> > 
> > Could you give it a try under Ubuntu Precise and see if the
> > compilation speed changes?  If not we can look further.
> 
> I tried your 64 bit version and got a compilation time of 11m5.699s. 
> 
> So the updated "benchmark" overview is now
> 
> 6m24s/4.6mb   gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
> 7m2s/4.0mbgcc version 4.7.2 (Ubuntu/Linaro 4.7.2-1ubuntu1) 
> 10m51s/4.0mb  gcc version 4.7.3 20121001 (prerelease) 32 bit
> 11m3s/4.2mb   same (4.7.3/Linaro) but with -mtune=cortex-a9
> 11m5s/4.0mb   gcc version 4.7.3 20121001 (prerelease) 64 bit
> 
> Has anybody done any performance comparisons with the two compilers
> (Ubuntu vs Linaro)? Should I try to make an example project that exhibits this
> "problem"?
> 
> Frank

___
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain


Re: Compilation speed of Linaro's gcc compared to e.g. Ubuntu's version

2012-11-13 Thread Frank Müller
Hi,

Michael Hope :
> With our configuration, crosstool-NG sets CFLAGS to -pipe
> -fno-stack-protector -U_FORTIFY.  This overrides the default -O2 -g
> for later stages and gives us an unoptimised GCC.
>
> The test build has just come in.  Before:
> 
> michaelh@crucis:$ time arm-linux-gnueabihf-gcc ... -O3 -mfpu=neon -c
> -o pcre_compile.lo pcre_compile.c
> 
> real  0m5.752s
> user  0m5.692s
> sys   0m0.040s
> 
> After:
> 
> real  0m2.689s
> user  0m2.640s
> sys   0m0.036s
> 
> Frank, I've put a test build up at:
> 
> http://people.linaro.org/~michaelh/incoming/gcc-linaro-arm-linux-gnueabihf-4.7-2012.10-20121024+bzr2512_linux.tar.xz
> 
> Could you give it a try?  I'll commit the fix now and it'll be part of
> the end of month release.

I just tried it and can confirm the fix. Compile time for this version is now 
equal to the Ubuntu version (down from 12 to 7 minutes). Thank you so much for 
solving this, I'd never have figured this out on my own!

Frank

___
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain