📜  编译器设计中的循环优化

📅  最后修改于: 2021-09-27 14:39:36             🧑  作者: Mango

循环优化是提高执行速度和减少与循环相关的开销的过程。它在提高缓存性能和有效利用并行处理能力方面发挥着重要作用。科学程序的大部分执行时间都花在循环上。

减少内循环中的指令数量可以改善程序的运行时间,即使该循环外的代码量增加。

循环优化技术:

  1. 频率降低(代码运动):
    在频率降低方面,循环中的代码量减少了。可以移出循环体而不影响程序语义的语句或表达式被移出循环。

    例子:

    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. 循环展开:
    循环展开是一种循环转换技术,有助于优化程序的执行时间。我们基本上删除或减少迭代。循环展开通过消除循环控制指令和循环测试指令来提高程序的速度。

    例子:

    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. 环路干扰:
    环路干扰是将两个或多个环路组合在一个环路中。它减少了编译大量循环所需的时间。

    例子:

    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;
    }