This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[RFC] Selective scheduling pass
- From: Andrey Belevantsev <abel at ispras dot ru>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jim Wilson <wilson at tuliptree dot org>, Vladimir Makarov <vmakarov at redhat dot com>
- Date: Tue, 03 Jun 2008 18:16:12 +0400
- Subject: [RFC] Selective scheduling pass
Hello,
The patches in this thread introduce selective scheduler in GCC,
implemented by myself, Dmitry Melnik, Dmitry Zhurikhin, Alexander
Monakov, and Maxim Kuvyrkov while he was at ISP RAS. Selective
scheduler is aimed at scheduling eager targets such as ia64, power6, and
cell. The implementation contains both the scheduler and the software
pipeliner, which can be used on loops with control flow not handled by
SMS. The scheduler can work either before or after register allocation,
but it is currently tuned to work after.
The scheduler was bootstrapped and tested on ia64, with all default
languages, both as a first and as a second scheduler. It was also
bootstrapped with c, c++, and fortran enabled on ppc64 and x86-64.
On ia64, test results on SPEC2k FP comparing -O3 -ffast-math on trunk
and sel-sched branch show 3.8% speedup on average, SPEC INT shows both
small speedups and regressions, staying around neutral in average:
168.wupwise 513 552 7,60%
171.swim 757 772 1,98%
172.mgrid 570 643 12,81%
173.applu 503 524 4,17%
177.mesa 796 795 -0,13%
178.galgel 814 787 -3,32%
179.art 1990 2098 5,43%
183.equake 513 569 10,92%
187.facerec 958 991 3,44%
188.ammp 765 775 1,31%
189.lucas 860 869 1,05%
191.fma3d 549 536 -2,37%
200.sixtrack 300 323 7,67%
301.apsi 522 546 4,60%
Geomean 673,97 699,87 3,84%
164.gzip 683 682 -0,15%
175.vpr 814 802 -1,47%
176.gcc 1080 1069 -1,02%
181.mcf 701 708 1,00%
186.crafty 872 855 -1,95%
197.parser 729 728 -0,14%
252.eon 793 785 -1,01%
253.perlbmk 824 839 1,82%
254.gap 558 569 1,97%
255.vortex 1012 966 -4,55%
256.bzip2 758 762 0,53%
300.twolf 1005 1015 1,00%
Geomean 806,04 803,25 -0,35%
On power6, Revital Eres saw speedups on several tests; additional tuning
is required to get good results there, which is complicated because we
don't have power6. On cell, there was some third-party testing in 2007,
showing 4-6% speedups, but I don't have more detailed information.
Compile time slowdown measured with --enable-checking=assert is quite
significant -- about 12% on spec int and about 18% on spec fp and
cc1-i-files collection. For this reason, we have enabled selective
scheduler by default at -O3 on ia64 and disabled by default on other
targets.
Our current plan is to work on further compile time improvements and
performance tuning for ppc and cell, hopefully with the help of IBM
Haifa folks. If we will complete this work before the end of stage2,
then we can enable selective scheduling at -O3 also for ppc in 4.4. In
the mid-term, we will work on removing the ebb scheduler, as it is now
used on ia64 only and will be superseded by selective scheduler when
we'll further improve compile time.
Andrey