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

📅  最后修改于: 2021-06-28 06:52:04             🧑  作者: 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;
    }