深入理解计算机系统第五章学习-性能优化 3
来源:互联网 发布:app视频录像软件 编辑:程序博客网 时间:2024/06/07 19:46
5.8分支预测
现在的处理都支持分支预测功能,在执行分支预测时候,在执行判断语句之前,处理器已经执行了判断后的语言,如果判断正确,就会直接把处理结果给执行单元,否则就会接受分支预测失败惩罚,如果预测比较容易预测,是可以很好提升其性能,如果分支判断确实是随机的话最好不要用这种方法。不过通常的情况下建议多运用分支预测预取技术。
GCC在判断是否运用分支预测预取技术的时候,会根据代码的风格判断,以下这种风格会用于分支预测预取技术:
void minmax2(int a[],int b[],int n)
int i;
for(i = 0;i<n;i++){
int min = a[i] < b[i] ? a[i] : b[i];
int max = a[i]<b[i] ? b[i]:a[i];
a[i] = min;
b[i]=max;
}
不产生预测分支预取的代码:
void minmax1(int a[],int b[],int n)
int i;
for(i = 0;i<n;i++){
if(a[i] >b[i]){
int t=a[i];
a[i]=b[i];
b[i]=t;
}
}
不是所有的条件行为都能用条件数据传送来实现,所以不可避免在某些情况下,程序员不能避免写出导致条件分支的代码,而对于这些条件分支,处理器用分支预测可能会处理得很糟糕。但是,程序员方面一点点聪明,有时候就能使得代码更容易被翻译成为条件数据传送。
七、性能分析
确认和消除性能瓶颈。对大型程序而言,需要找到性能瓶颈,对于时间花费较多,资源占用较多的程序进行优化才更有意义。
Amdahl定律:
某个部分的占整个程序的时间比:a,k为该程序提升的倍数,那么:
八、学习到优化方法
1.消除连续的函数调用。
2.尽量消除不必要的存储器引用。
3.展开循环。
4.使用多个累计变量和重新结合技术。
5.用功能的风格重新条件操作,使得编译采用条件数据传送。
利用gprof、valgrind等工具分析性能瓶颈,根据Amdahl定律找到程序中花费时间较多的地方,特别对于循环,利用寄存器流程图和解析汇编语言分析代码,并优化代码。
参考文献
深入理解计算机系统 第五章
- 深入理解计算机系统第五章学习-性能优化 3
- 深入理解计算机系统第五章学习-性能优化 1
- 深入理解计算机系统第五章学习-性能优化 2
- cs app深入理解计算机系统:第五章 优化程序性能 几个优化的java实现
- [读书笔记]深入理解计算机系统 第6章 优化程序性能
- 深入理解计算机系统:优化程序性能
- 《深入理解计算机系统》优化程序性能
- 程序性能优化-深入理解计算机系统
- 优化程序性能—《深入理解计算机系统》
- 深入理解计算机系统:优化程序性能
- 优化程序性能(《深入理解计算机系统》)
- 深入理解计算机系统--优化程序性能
- 《深入理解计算机系统》—优化程序性能
- 优化程序性能 计算机系统结构 深入理解计算机系统
- 深入理解计算机系统家庭作业第五章
- 深入理解计算机系统阅读笔记-优化程序性能
- 深入理解计算机系统之旅(五)优化程序性能
- 深入理解计算机系统 perflab 程序性能优化实验
- DigitalOcean提供免费VPS
- miniGUI个人错误1
- Java垃圾回收时避免内存碎片的方法
- Oracle数据库对表的基本操作和一些常用函数
- Learn From Android Source Code之异步消息处理线程
- 深入理解计算机系统第五章学习-性能优化 3
- android 自定义控件
- 评论增加图片
- Jsoncpp的使用
- VC中自动改变控件位置和大小的对话框类
- PCL教程翻译(通过翻译自学并整理学习资料)
- Leetcode: Sqrt(x)
- C++ Primer 读书笔记2
- 64-ia-32-architectures-software-developer-manual第二卷2.2节