嵌入式的LED点阵显示屏的研究与实现 第4页
对于典型的指令来说,上述每条操作都需要一个时钟周期,因此,一条正
常的指令需要3个时钟周期才能完成执行,这就是所谓的指令执行的延时。但
是,由于流水线有3段,在每个时钟周期内都可以完成一条指令,换句话说,
每个时钟周期,流水线都有一条指令的吞吐量。根据Hneesys和Pattersno提出
的表示法[Hen96],图3一1说明了指令执行时在流水线中所处的位置。我们从与
时间轴垂直的程序片可以看到某一时刻位于流水线中的所有指令,从水平方向
可以看到指令执行的全过程。
addr。,rl,#5}取,旨}译码}执行“d}
subrZ,r3,r6取指l译码l执行sub
emPrZ,#3取取指指译码码执行emPPP
时间
图3一1ARM指令的流水线执行过程
RISC机器被设计来保持流水线忙,而CISC机器则在指令时序上表现出很
大的不同。流水线化的RSIC机器典型地具有更规则的时序特征:大部分并没
有流水线倾向的指令却表现出相同的延时。
ldmiaro,夏2r,3r}取取指指译码码执行ld:222执行dl333r
subrZ,r3,r6{取指}译译码码执行dlZZZr
emPrZ,岸3取取指指译码码执行dlZZZr
时间
”’.图3一2多周期ARM指令的流水线执行过程
然而并不是在所有的情况下都能保持一个周期一条指令的完成率,对于扩
展的指令,一种简单的情况就是指令非常复杂以至于不能在单个时钟周期完成
执行阶段。多装入指令就是在执行阶段需要多个周期才能完成的例子。图3一2
展示了以一条多装入指令(LDMIA)开始的一系列指令执行过程中的数据阻
滞。由于两个寄存器需要装入,这条指令的执行相应地就需要执行阶段的两个
武汉理工大学硕士学位论文
时钟周期。在一个多阶段执行的过程中,由于必须要记住己经译码的指令,因
此译码阶段仍然要有。结果SUB指令仍然在正常的时钟周期被取出,但直到
LDMAI完成后才被译码。这就造成了第三条指令,CMP的取指令的延时。
bneofo取取指指译码码执行bneee执行bneee执行bneee取指指
〕沙、效:::)·<::::》《《
ofoaddro,rl,rZ取指.译码I执行add
图3一3ARM中的分支指令的流水线执行过程
分支指令将控制阻滞延时引入到流水线中,也就是通常我们所说的分支损
失,如图3一3所示。是否执行条件分支BNE要等到指令的执行的的第三个时
钟周期才能确定,因为第三个时钟周期才能计算出分支指令的目标地址,如果
分支需要执行的话,这时接下来PC+4处的指令已经被取出,并且开始译码。
当分支发生时,分支目标地址就是用来取分支目标指令。由于我们在了解目标
指令之前,必须等待执行周期的完成,因此使得两个周期浪费在那些执行路径
不明确的指令上。CPU就是利用从开始取分支指令到开始执行分支指令之间的
两个时钟周期来完成与分支指令的执行有关的杂务的。
解决这个问题的办法之一就是引入延时分支,在这种形式的分支指令中,
往往有一些直接跟在分支指令后面的指令被执行,无论分支指令执行与否它们
都会被执行,这样,在分支指令执行期间CPU都能够让流水线保持满。然而,
有一些在延时分支之后的指令也可能是空操作。无论分支执行与否,任意处在
延时分支窗口中的指令对于两条执行路径来说都必须是有效的。倘若没有足够
的指令来填充延时分支指令窗口,就必须用空操作来填充。
2.超标量执行
另外一个提高CPU性能的办法就是超标量执行。一个超标量CPU一次可
以处理多条指令。如图3一4所示,有好几条指令同时被考虑。程序员不能弄清
楚一次机器正在执行几条指令—程序设计模式的结果是相同的。但是程序执行的速度却快多了。
超标量与流水线技术是兼容的,一般来说在超标量处理器中每一个指令单
元都是流水线的。控制一个超标量的、流水线的处理器是十分复杂的,但是可
武汉理工大学硕士学位论文
以做得到。而这样做的结果就是使得CPU可以在每个时钟周期内执行多条指
令。图3一4超标量处理器中的多指令单元
eomPuteavalueandstoreinrZ
usevaluejuststoredinrZ
AMR指令
数据依赖
图3一5超标量执行中的问题
在超标量体系中,并不是指令的任意组合都能同时执行,因为CPU不能
发出像它所需要的那么多的指令。比如说,如图3一5所示的ARM代码段,第
一条指令把两数相加的结果放入2r寄存器中,第二条指令使用这一结果。只
有等第一条加法的结果可以用了我们才可以执行第二个加法。因此第二条指令
的调度只有被推迟了。指令之间还存在很多的相关性,超标量处理器在执行的
过程中会动态地检查其相关性。
超标量意味着每段代码的执行时间比流水线处理器更难于计算,CPU在运
行时同时必须检查当前指令组合是否能同时被执行。我们不能通过指令本身来
武汉理工大学硕士学位论文
考虑其执行时间—只有知道了它周围的指令时我们才能确定其执行时间。如果代码中有分支指令,我们必须将分支被执行和分支不被执行两种情况分开考
虑。除了一些很小的代码段外,计算执行时间几乎是不可能的。
3.高速缓存图3一6存储系统中的高速缓存
高速缓存是一种小型、快速的存储器,它保存部分主存的内容的拷贝。高
速缓存控制器在CPU和包含高速缓存及主存的存储系统之间,高速缓存发送
存储器请求给高速缓存和主存。如果被请求的单元在高速缓存中,高速缓存控
制器会将内容转发到CPU并中止对主存的请求;这种情况称为高速缓存命中。
如果被请求的单元不在高速缓存中,控制器会等待主存的值并讲它转发给
CPU,这种情况称为高速缓存未命中。
尽管高速缓存对于程序设计模型来说是不可见的,但是它们对于程序的运
行有着非同小可的影响。当所需要的存储单元在高速缓存中时,可以从本质上
减少内存访问时间。CPU访问内存的平均访问时间公式如下:
tav=hteache+(l一h)tma。。①
①式中h代表命中率(hitrate),即给定的内存单元在高速缓存中的概率;
1一h是未命中率,即给定的内存单元不在高速缓存中的概率:etache是高速缓
存访问时间,mtain是主存访问时间。
3.2ARM微处理器[,][2]t,,「4,,
ARM(AdvnacedRISCMachines),既可以认为是一个公司的名字,也可
以认为是对一类微处理器的通称,还可以认为是一种技术的名字。
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,
采用ARM技术知识产权(PI)核的微处理器,即我们通常所说的ARM微处
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>