摘要:
本文主要通过简单的量化计算的例子,来说明为什么硬件体系结构研究中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而言,再综合amdal‘s law,我们知道对branch和cache进行优化,
获得性能提升也就很大,这就解释为什么体系结构中branch prediction和cache的研究占据那么
重要的地位。
结论:
虽然上述的具体数据不一定正确,但是从这个例子也可以看出,简单地量化对于大方向的把握
还是有指导作用的。
参考:
Jean-Loup Baer, Microprocessor Architecture From simple pipelines to chip multiprocessors, University of Washington, Seattle.