[GSOC] Optimising GCC, conclusion

Dimitrios Apostolou jimis@gmx.net
Mon Aug 22 21:47:00 GMT 2011


Monday 22nd of August, 2011: pencils down.

Today my GSOC adventure comes to an end. For whoever doesn't know, this 
summer I've been trying to make GCC faster. A task that proved much harder 
than I initially thought.

My proposal was about doing many small improvements in various parts of 
the compiler, both in CPU and memory utilisation. All in all I touched 
parts from the back-end and the middle-end, to the C frontend, but only 
regarding CPU utilisation. Unfortunately improvements were much less 
significant than I expected and many things I tried turned out fruitless. 
Also I didn't have any time left to profile C++ frontend which most people 
really needed, hopefully it will benefit a tiny bit from the generic 
changes I have introduced, until I do some actual profiling in the future.

No matter the difficulties, the experience has been very positive for me. 
I have certainly learned many things about GCC and how to work with the 
open source community. I even managed to speed-up GCC a little and
finished with a 3-page long TODO list with ideas.

Various results were measured after applying all of my final patches, and 
making sure the resulting tree (mytrunk) passes all tests on both i386 and 
x86_64. For anyone that wants to reproduce the tree that I used for final 
measurements, he should apply all patches I sent the last couple of days, 
in particular:

http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01711.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01712.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01713.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01714.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01717.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01719.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01722.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01723.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01729.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01740.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01752.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01782.html
http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01796.html


Time and instruction count measurements:

Example compilation of ext4's super.c, in linux-3.0 on x86_64 (-O2 -g):

trunk:		3.177s		7996.5 M instr
mytrunk:	3.059s		7645.0 M instr

Example compilation of tcp_ipv4.c on i386, with flags changed to -O0 and 
no debug symbols:

trunk:		0.622s		1438.4 M instr
mytrunk:	0.592s		1368.5 M instr

Compiling the whole linux-3.0 tarball on a ramdrive, using make -j NCPUs+1:

trunk:		7:33s
mytrunk:	7:23s


At this point I want to thank Steven Bosscher and Paolo Bonzini for 
mentoring me, together with jakub, richi, djgpp, lxo and others I'm 
probably forgetting for helping me on IRC the strangest hours. :-) Thanks 
also to ICS-FORTH for allowing me to work from the premises of CARV 
laboratory (www.ics.forth.gr/carv), hopefully I'll be working there for 
the rest of the year. Finally special thanks to maraz (CC'd) to whom I now 
owe some bet prize...

But most of all I must thank Google, that gave me the opportunity to get 
paid while working on Open Source.


I will most likely disappear for the following two weeks or so. I have 
some exams I must study for, plus I should dedicate some time to other 
work I have pending. Nevertheless please do send me any comments regarding 
my project and the patches I submitted since I plan to stay in contact 
with the GCC community, and I'll try addressing them the soonest possible. 
I also plan to update the performance related pages on the wiki, hopefully
other people will find information on GCC performance useful.


Dimitris



More information about the Gcc mailing list