[硬件结构]为什么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.

0 0
原创粉丝点击