Loop Optimization in Compiler Design
Loop Optimization is the process of increasing execution speed and reducing the overheads associated with loops. It plays an important role in improving cache performance and making effective use of parallel processing capabilities. Most execution time of a scientific program is spent on loops.
Loop Optimization is a machine independent optimization.
Decreasing the number of instructions in an inner loop improves the running time of a program even if the amount of code outside that loop is increased.
Loop Optimization Techniques:
- Frequency Reduction (Code Motion):
In frequency reduction, the amount of code in loop is decreased. A statement or expression, which can be moved outside the loop body without affecting the semantics of the program, is moved outside the loop.Example:
Initial code: while(i<100) { a = Sin(x)/Cos(x) + i; i++; } Optimized code: t = Sin(x)/Cos(x); while(i<100) { a = t + i; i++; }
- Loop Unrolling:
Loop unrolling is a loop transformation technique that helps to optimize the execution time of a program. We basically remove or reduce iterations. Loop unrolling increases the program’s speed by eliminating loop control instruction and loop test instructions.Example:
Initial code: for (int i=0; i<5; i++) printf("Pankaj\n"); Optimized code: printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n"); printf("Pankaj\n");
- Loop Jamming:
Loop jamming is the combining the two or more loops in a single loop. It reduces the time taken to compile the many number of loops.Example:
Initial Code: for(int i=0; i<5; i++) a = i + 5; for(int i=0; i<5; i++) b = i + 10; Optimized code: for(int i=0; i<5; i++) { a = i + 5; b = i + 10; }
Recommended Posts:
- Peephole Optimization in Compiler Design
- Code Optimization in Compiler Design
- Compiler Design | Detection of a Loop in Three Address Code
- Bootstrapping in Compiler Design
- Why FIRST and FOLLOW in Compiler Design?
- Introduction of Compiler Design
- Types of Parsers in Compiler Design
- Runtime Environments in Compiler Design
- Basic Blocks in Compiler Design
- Input Buffering in Compiler Design
- Labeling Algorithm in Compiler Design
- Error Handling in Compiler Design
- Semantic Analysis in Compiler Design
- Introduction of Object Code in Compiler Design
- Introduction to Syntax Analysis in Compiler Design
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.