CSAPP:优化程序性能(四)

本文探讨了影响程序性能的两个关键因素:寄存器溢出和分支预测错误的惩罚。当并行度超过可用寄存器数量时,编译器可能导致寄存器溢出,降低程序性能。现代处理器使用分支预测来优化执行,但错误预测会产生惩罚。文章提出了优化原则,如避免过度关注可预测分支和使用条件传送实现。同时,深入解析了内存性能,包括加载和存储操作的延迟及数据相关性对性能的影响。
摘要由CSDN通过智能技术生成

了解一些限制程序性能的因素

一. 寄存器溢出

如果我们的并行度P超过了可用寄存器的数量,那么编译器就会通知溢出,将某些临时值存放在内存中,通常是运行时堆栈上分配空间,聚个例子,当把combine6的多累积变量模式扩展到k=10或者k=20的时候,我们会发现这种循环展开程度没有改善CPE,有些甚至变差了,现代x86-64处理器有16个寄存器,并可以使用16个ymm寄存器保存浮点数,一点循环变量的数量超过了可用寄存器数量,程序就必须在栈上分配一些变量,从而是操作步骤中增加了从内存读取数据的操作,适得其反。


二. 分值预测错误的惩罚

在一些使用投机执行的处理器中,处理器会预测分支目标处的指令,它会避免修改任何实际的寄存器或者内存位置,知道确定了实际的结果。如果预测正确,那么处理器就会提交投机执行的指令结果,把结果存储到寄存器或者内存,如果预测错误,处理器必须丢掉所有投机执行的结果,在正确的位置,重新开始取值过程,这样做会引起预测错误惩罚,因为在产生有用的结果之前,必须重新填充指令流水线。

那么如何保证分值预测处罚不会阻碍程序效率呢?下面是一些通用的原则:


1. 不要过分关心可预测的分支

我们看到错误的分支预测对程序的性能影响很大,但这并不意味着每一个分支都会拖慢程序的性能,实际上,现代处理器的分支预测逻辑非常善于辨别不同的分支指令的有规律的模式和长期的趋势,例如,在合并函数中,结束循环的分支通常会被预测为选择分支,一次只有在最后一次会导致预

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值