Compiler Design | Loop Optimization

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:

  1. 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++;
    } 
  2. 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"); 
  3. 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;
    } 



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.