Improvements of Instruction Scheduling

Instruction Scheduling as a compiler optimization is a very powerful technique to enable instruction level parallelism for many types of modern architectures. Instruction Scheduling can be used for making best fill of the micro-architecture pipeline (by minimizing the number of pipeline stalls) and is also of critical importance for keeping as busy as possible the multiple execution units for the architectures with parallel execution sets (like VLIW, EPIC or VLES architectures). This paper will present a set of improvements that can be brought to an instruction scheduling technique implemented in a real compiler for a VLIW architecture, where both pipeline aspects and multiple execution units are exploited. The improvements are based on practical and theoretical observations. They include a possible false-WAW dependence improvement, another improvement by considering inter-block latencies and also some improvements about hyper-block scheduling and IF-conversion integration with instruction scheduling.

[1]  Mahmut T. Kandemir,et al.  Instruction Scheduling for Low Power , 2004, J. VLSI Signal Process..

[2]  Peter van Beek,et al.  Learning heuristics for basic block instruction scheduling , 2008, J. Heuristics.

[3]  Josep Llosa,et al.  A comparative study of modulo scheduling techniques , 2002, ICS '02.

[4]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[5]  Scott A. Mahlke,et al.  Trimaran: An Infrastructure for Research in Instruction-Level Parallelism , 2004, LCPC.

[6]  David I. August,et al.  Decoupled software pipelining with the synchronization array , 2004, Proceedings. 13th International Conference on Parallel Architecture and Compilation Techniques, 2004. PACT 2004..

[7]  Peter van Beek,et al.  Optimal Basic Block Instruction Scheduling for Multiple-Issue Processors Using Constraing Programming , 2006, ICTAI.

[8]  B. Ramakrishna Rau,et al.  Iterative modulo scheduling: an algorithm for software pipelining loops , 1994, MICRO 27.

[9]  Sebastian Winkel,et al.  Exploring the performance potential of Itanium/spl reg/ processors with ILP-based scheduling , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[10]  Alexandru Nicolau A Fine-Grain Parallelizing Compiler , 1986 .

[11]  Joseph A. Fisher,et al.  Trace Scheduling: A Technique for Global Microcode Compaction , 1981, IEEE Transactions on Computers.

[12]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[13]  Glenn Reinman,et al.  Precise Instruction Scheduling , 2005, J. Instr. Level Parallelism.