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

原创 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...
  • le119126
  • le119126
  • 2015年04月23日 21:10
  • 663

《深入理解计算机系统》笔记(三)链接知识【附图】

概述         ●该章节主要讲解的是ELF文件的结构。             ●静态库的概念         ●动态库(又叫共享库)的概念,一般用于操作系统,普通应用程序作用不大。    ...
  • hherima
  • hherima
  • 2013年05月23日 16:19
  • 3731

深入理解计算机系统家庭作业第三章

/* ***3.54 ***写出decode2的原型 */
  • phx_storm
  • phx_storm
  • 2014年08月26日 16:53
  • 1907

《深入理解计算机系统》1-4章总结

经过1个月断断续续的学习,已学习完《深入理解计算机系统》第四章,不得不说这本书确实无愧经典之名,能带给自己更深层次对编程的理解,现总结下现阶段的学习与体会: 第一章主要为后面个章节做了铺垫,其...
  • steinliber
  • steinliber
  • 2015年07月25日 09:51
  • 752

《深入理解计算机系统(原书第三版)》pdf

下载地址:网盘下载 内容简介  · · · · · · 和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础...
  • cf406061841
  • cf406061841
  • 2017年05月20日 11:34
  • 10359

读《深入理解计算机系统》

我不会告诉你,其实我是给我的读书笔记做广告的。 不信?不信就点进去看看吧:http://pan.baidu.com/s/1dEeobsd。...
  • get_set
  • get_set
  • 2015年12月06日 18:43
  • 936

《深入理解计算机系统》笔记(一)栈【插图】

读后感         这本书是美国“卡内基-梅隆大学(CMU)”的教科书,逻辑严谨。虽然是教科书,还是有些晦涩难懂啊,不太形象。第二章主要讲整数,浮点数,很是晦涩,全是数学公式。作者的思维数学的思维...
  • hherima
  • hherima
  • 2013年05月15日 16:33
  • 4702

《深入理解计算机系统》之家庭作业8.25题答案

#include "csapp.h" static sigjmp_buf env; //当调用sigsetjmp函数时将当前调用环境保存在缓冲区env中,以供后面siglongjum使用 ...
  • u013457146
  • u013457146
  • 2014年10月21日 15:42
  • 972

深入理解计算机系统家庭作业第六章

/* ***6.23 */ 等价于求xr(1 - x)的最大值,由daish
  • phx_storm
  • phx_storm
  • 2014年10月27日 20:16
  • 1205

深入理解计算机系统9个重点笔记

引言深入理解计算机系统,对我来说是部大块头。说实话,我没有从头到尾完完整整的全部看完,而是选择性的看了一些我自认为重要的或感兴趣的章节,也从中获益良多,看清楚了计算机系统的一些本质东西或原理性的内容,...
  • lanxuezaipiao
  • lanxuezaipiao
  • 2014年12月03日 21:23
  • 4590
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入理解计算机系统:优化程序性能
举报原因:
原因补充:

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