[硬件结构]为什么branch prediction和cache在硬件体系结构中这么重要?
来源:互联网 发布:数据库应用领域 编辑:程序博客网 时间:2024/05/01 18:18
摘要:
本文主要通过简单的量化计算的例子,来说明为什么硬件体系结构研究中branch prediction和cache是两大
研究的主题。
基本概念介绍:
描述案例之前,我们简单的介绍几个概念:
1. CPI:cycle-per-instruction,即每条指令需要的时钟周期数,对于理想的处理器,我们认为一条指令就需要一个
时钟周期,也即CPI=1.0;
2. IPC:instruction-per-cycle,即每个时钟可以执行多少条指令,即CPI的倒数;
3. 假设理想的CPI=1.0,但是实际处理器中,处理器会因为branch跳转,数据load,以及cache访问等造成停顿,
这些操作会导致额外的CPI;
4. 数据load造成停顿原因:处理器需要的数据不能马上访问到;
branch跳转的停顿原因:因为发生跳转,前期取进来的指令无用;
cache访问的停顿:访问cache有延迟;
量化计算案例:
根据基本概念的介绍,并且假设理想处理器的CPI=1.0,那么实际的CPI可以表示如下:
CPI = 1.0 + CPI[load] + CPI[branch] + CPI[cache];
我们现在缺的就是上述的如何计算上述公式的右边几个参数,下面是进一步的信息:
假设15%的指令是load,另外20%的指令跟在load后面暂停1cycle,因为需要load的结果,所有的指令和loads都命中cache。
假设20%的指令是跳转指令,其中60%实施跳转,另外40%没有实施跳转;
如果跳转没有实施,跳转代价为2cycle;如果跳转发生了,那么代价就是3cycles
(这里让人疑惑的一点是:跳转没有发生所导致的跳转代价的来源)
按照上述给定的参数,我们可以大致计算出每个部分导致的增加的CPI:
CPI[load] = 0.15*0.2*1.0 = 0.03
CPI[branch] = 0.2*0.6*3+0.2*0.4*2 = 0.52
最终得到的CPI=1.55,对应的IPC=0.65;
再考虑cache访问延迟的话,假设cache命中率为95%,缺失代价为20个cycles,
那么 CPI[cache] = (1-0.95)*20 = 1.0;
此时的CPI为2.55,对应的IPC = 0.39;
从上述各个部分的CPI而言,除理想CPI本身外,CPI[cache]和CPI[branch]占的比重最大,
也就意味着对这两者进行优化,获得的性能提升也就最大,这就解释为什么体系结构中
branch prediction和cache的研究占据那么重要的地位。
结论:
虽然上述的具体数据不一定正确,但作为估算已经足够,从这个例子也可以看出,简单地量化对于大方向的把握
还是有指导作用的。
参考:
Jean-Loup Baer, Microprocessor Architecture From simple pipelines to chip multiprocessors, University of Washington, Seattle.
- [硬件结构]为什么branch prediction和cache在硬件体系结构中这么重要?
- 硬件和体系结构
- TLb和硬件Cache
- Verilog中“&”和“&&”在硬件中的区别
- Verilog中“&”和“&&”在硬件中的区别
- Cisco路由器的硬件结构、重要存储设备Flash和NVRAM
- 智能手机的硬件体系结构
- 数据结构和算法为什么这么重要?
- 数据结构和算法为什么这么重要?
- 数据结构和算法为什么这么重要?
- [硬件结构]硬件体系结构中的缓存的定性与定量分析案例
- 在硬件中预留后门
- branch prediction
- Callgrind: a call-graph generating cache and branch prediction profiler
- 硬件工程师在硬件开发中要注意的事项
- 硬件工程师在硬件开发中要注意的事项
- android层次结构和硬件驱动理解
- LPI 101 考试准备: 硬件和体系结构之二
- WindowManager.LayoutParams文档中文参照
- IOS-TextField知多少
- Python之实现简单的注册登录系统
- R语言 一元线性回归
- windows 下配置 rsync
- [硬件结构]为什么branch prediction和cache在硬件体系结构中这么重要?
- JDK1.5或以上版本泛型报错
- JavaWeb - JavaScript中Window对象
- Andorid 清除项目中不用的资源
- web链接跳转安卓app的问题
- 数据量大MSYQL并发
- R树空间索引
- ARRAYLIST VECTOR LINKEDLIST 区别与用法(2014-10-14)
- DataInputStream和DataOutputStream类