深入理解计算机系统:优化程序性能

原创 2013年12月04日 22:43:52
     在现代编译过程中可以依靠先进的编译器软件对程序实现编译优化。例如gcc可以用-O2,-O1几种不同的优化等级对程序实现编译优化,但是编译器必须考虑到编译的程序的安全性,所以编译器的优化能力也存在着局限性,不能通过提高效率而改变了程序的安全。所以有些地方需要人为的来进行优化。例如:函数调用和参数传递中都有可能出现副作用。编译对这些地方的优化都会很小心,甚至不会对其进行优化。
     void combine1(vec_ptr v, data_t *dest)
     {
          long int i;
          
          *dest=IDENT;
          for(i = 0;i<vec_length(v);i++)
          {
               data_t val;
               get_vec_element(v,i,&val);
               *dest = *dest OP val;
          }
     }
     优化程序提高程序效率主要有以下手段:
     1.消除循环的低效率
      void combine2(vec_ptr v, data_t *dest)
     {
          long int i;
          long int len =  vec_length(v);         

          *dest=IDENT;
          for(i = 0;i<len;i++)
          {
               data_t val;
               get_vec_element(v,i,&val);
               *dest = *dest OP val;
          }
     }
     2.减少过程调用
     void combine3(vec_ptr v, data_t *dest)
     {
          long int i;
          int len = vec_length(v);
         data_t * data=  get_vec_start(v);

          *dest=IDENT
          for(i = 0;i<len;i++)
          {             
               *dest = *dest OP data[i];
          }
     }
     3.消除不必要的存储器引用
     void combine4(vec_ptr v, data_t *dest)
     {
          long int i;
          int len = vec_length(v);
          data_t * data=  get_vec_start(v);
          data_t acc =IDENT;
      
          for(i = 0;i<len;i++)
          {             
               acc  =acc OP data[i];
          }
          *dest= acc;
     }
    由于当代的处理器是利用流水线可以利用流水线特性进行对程序的优化 也可以利用现代处理器的特性来对程序性能进行优化。
     1.将循环展开
     void combine5(vec_ptr v, data_t *dest)
     {
           long int i;
          int len = vec_length(v);
          int limits = len -1;
          data_t * data=  get_vec_start(v);
          data_t acc =IDENT;
      
          for(i = 0;i<limits ;i+=2)
          {             
               acc  =(acc OP data[i])OP data[i+1];
          }
          for(;i<len;i++)
          {
               acc = acc OP data[i];
          }
          *dest= acc;
     }
     这个过程并没有提高程序的效率。由于 acc  =(acc OP data[i])OP data[i+1]这行代码中acc操作现在流水中计算所以并没有提高程序的并行。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

程序性能优化-深入理解计算机系统

转自http://blog.sina.com.cn/s/blog_7572b5e50101qeja.html 1.对寄存器的访问的优化 寄存器访问优化的核心是尽量避免打断流水线. a...

《深入理解计算机系统》优化程序性能

优化程序性能的几点: 1)高级设计。选择恰当的数据结构和算法; 2)基本编码原则:消除连续的函数调用;消除不必要的存储器引用; 3)低级优化。循环展开;提高并行性,如多个累积变量,重新结合技术,...

cs app深入理解计算机系统:第五章 优化程序性能 几个优化的java实现

package combine; import java.util.Random; /** * csapp优化程序性能从不同角度 * @author Administrator * */ p...

优化程序性能 计算机系统结构 深入理解计算机系统

优化程序性能 1编写高效程序:合适的数据结构和算法,编译器能够有效优化以转换为高效可执行代码的 源码,对处理量特别大的计算将任务分为多个部分; 程序优化:消除不必要的内容(函数调用,条件测试,存...

深入理解计算机系统第五章学习-性能优化 3

5.8分支预测 现在的处理都支持分支预测功能,在执行分支预测时候,在执行判断语句之前,处理器已经执行了判断后的语言,如果判断正确,就会直接把处理结果给执行单元,否则就会接受分支预测失败惩罚,如果预测比...

深入理解计算机系统第五章学习-性能优化 1

一、简述 本文主要是通过学习深入理解计算机系统第五章-性能优化之后的理解和总结。第五章主要目的通过对底层硬件架构和机制(汇编、处理器架构)的理解,让程序员写出更加高效(性能)的代码。 二、为什么要...

深入理解计算机系统学习笔记(二)之程序优化

序言写程序最主要的目的是使程序在所有可能的情况下都能正确地运行。一个运行很快但是运行结果错误的程序是没有用处的。如何编写高效的程序?首先必须选择一组合适的算法和数据结构,其次才是编写初编译器能够有效优...

阅读深入理解计算机系统(一)--------------- 函数优化

1.      函数优化: a.     消除不必要的内容:不必要的函数调用、条件测试和存储器引用。 b.     消除循环的低效率: 利用...

深入理解计算机系统笔记(一)关于位运算求整数平均值

《深入理解计算机系统》是一本每一个追求更高境界的程序员应该反复研读的优秀书籍,这是我第二次细读本书,于是对书中每个知识点做了一些更深入的扩展和思考。 在本书第二章--信息的表示和处理--中介绍了二进...

深入理解计算机系统——第二章

浮点数
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)