zoukankan      html  css  js  c++  java
  • Loop Unrolling 循环展开

    在csapp第五章5.2中提到了循环展开(loop unrolling)。这里展开一下为什么循环展开可以提升程序的效率。

    以书中计算数组和的两段代码为例:

    1.未展开:

     void psum1(float a[], float p[], long int n)
     {
     long int i;
     p[0] = a[0];
     for (i = 1; i < n; i++)
     p[i] = p[i-1] + a[i];
     }
    

    2.展开:

     void psum2(float a[], float p[], long int n)
     {
     long int i;
     p[0] = a[0];
     for (i = 1; i < n-1; i+=2) {
     float mid_val = p[i-1] + a[i];
     p[i] = mid_val;
     p[i+1] = mid_val + a[i+1];
     }
     /* For odd n, finish remaining element */
     if (i < n)
     p[i] = p[i-1] + a[i];
     }
    

    以上两段代码在功能上是相等的(计算数组和),但是经过展开的代码运行起来会更快。关键在于,展开后的代码使得编译器需要执行的指令减少了。

    当循环未展开时,采用for循环对整个数组进行迭代,每次执行一次叠加操作——这意味着,数组有多长,编译器就会执行多少次对for循环条件的判断运算

  • 相关阅读:
    python字符串操作
    python学习【一】基础入门
    markdown 编辑器
    jenkins学习笔记-安装
    算法
    python 修改文件内容
    python基础,python第四课
    python基础,python第三课
    python基础,python第二课
    python基础,python第一课
  • 原文地址:https://www.cnblogs.com/liez/p/11621282.html
Copyright © 2011-2022 走看看