This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Selective scheduling pass


Andrey Belevantsev wrote:

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.

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:

That's a very good result. Congratulations!


I know that this scheduler is aimed at CPUs like the ones you mention above. However, would it function correctly on other CPUs with more "traditional" characteristics, like older ARM, MIPS, or x86 cores? And, would it be reasonably possible to tune it for those CPUs as well?

As with the IRA allocator, I'd like to avoid having multiple schedulers in GCC. (I know we've done that for a while, but I still think it's undesirable.) So, I'd like to see if we can get this to work well across all of the Primary and Secondary CPUs, and then just make it "the GCC scheduler" rather than an optional thing enabled at some optimization levels on some CPUs.

Do you think that's feasible? Or do you think that there are inherent aspects of the algorithm that mean that we need to have this new scheduler for one class of CPUs and the old scheduler for the other class? Is there any way to make the new scheduler do a reasonable job with the existing descriptions in GCC, so that port maintainers can tune later, or is a level of effort like that for Itanium require

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.

Do you understand what's causing the compile-time slowdown?


Thanks,

--
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]