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