CSAPP:优化程序性能(三)

理解现代处理器

之前所讲述的优化策略都不依赖于目标机器的任何特性,这些优化只是简单的降低了过程调用开销、消除妨碍编译器优化的因素,随着师徒进一步提升性能,必须考虑利用处理器的微体系结构的优化,也就是处理器用来执行指令的底层系统设计。

由于现代微处理器的复杂性,处理器的实际操作与通过观察机器级程序所察觉到的程序行为是大相径庭的,在代码级上似乎是一次执行一条指令。每条指令包括从内存或寄存器取值,执行操作,把结果写会内存或者寄存器,但是在实际的处理中是同时对多条指令求值的,这个现象称为指令级并行

现代微处理器的了不起之处就在于——多条指令并行执行,同时又呈现出一种顺序执行的表象。

两种下界描述了程序的最大性能:

1.延迟界限

当一系列操作必须严格按照顺序执行的时候就会遇到延迟界限,因为在下一条指令开始执行之前,这条指令必须结束。

2.吞吐量界限

吞吐量界限体现了处理器功能单元的原始计算能力,这个界限是程序性能的终极限制。


整体操作

一个现代微处理器的简化示意图


这些处理器在工业界成为超标量,每个时钟周期执行多个操作,而且是乱序的——指令的执行顺序不一定要与它们在机器级程序中的顺序一致。

整体设计有两个主要部分——指令控制单元(ICU Instruction Control Unit)和执行单元(EU Execution unit),前者负责读出指令序列,并根据指令序列生成一组针对程序数据的基本操作后者执行这些操作。

ICU从指令高速缓存读取指令,指令高速缓存保存着最近访问的指令,通常在正在执行的指令很早之前取指(Fetch),这样才有足够的时间进行译码(Decode),并把操作发送至EU,当程序遇到分支(特指条件转移指令)时,有两种可能,选择分支,控制传递到分支目标和不选择分支。控制被传递到指令序列的下一条指令,现代处理器采用了分支预测技术,猜测是否选择分支以及分支的目标地址。

标记为取指控制的块承担着分支预测以及确定取哪些指令的任务。

标记为指令译码的块接收实际程序指令,并将它们转化为一组基本操作,例如:

addq %rax, 8(%

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值