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

原创 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)可以在循环的时候避免一些重复性的判断(代码移动,将不必要的计算移动到循环外),例如: for(i ...

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

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

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

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

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

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

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

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

优化程序性能的几个方法(来自于《深入理解计算机系统》)总结

这部分的代码出自《深入理解计算机系统》(CS:APP)第五章,其目的是通过手工改变代码结构,而不是算法效率和数据结构优化,提高执行效率。有些编译器在某些优化选项下可能会做出类似的改动。   为了...

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

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

优化程序性能的几个方法(来自于《深入理解计算机系统》)

这部分的代码出自《深入理解计算机系统》(CS:APP)第五章,其目的是通过手工改变代码结构,而不是算法效率和数据结构优化,提高执行效率。有些编译器在某些优化选项下可能会做出类似的改动。   为了便于...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解计算机系统:优化程序性能
举报原因:
原因补充:

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