ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:101.05KB ,
资源ID:10304786      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10304786.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM流水线之欧阳索引创编.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ARM流水线之欧阳索引创编.docx

1、ARM流水线之欧阳索引创编ARM流水线整理2007-3-20 16:07:00欧阳家百(2021.03.07)流水线(Pipeline)简介流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。目的是提高数据吞吐率(提高处理速度)。 流水线缩短了在一个时钟周期内给的那个信号必须通过的通路长度,从而可以提高时钟频率。例如:一个2级组合逻辑,假定每级延迟相同为Tpd,无流水线的总 延迟就是2Tpd,可以在一个时钟周期完成,但是时钟周期受限制在2Tpd;如果使用流水线,每一级加入寄存器(延迟为Tco)后,单级的延迟为Tpd+ Tco,每级消耗一个时钟周期,流水

2、线需要2个时钟周期来获得第一个计算结果,称为首次延迟,它要2*(Tpd+Tco),但是执行重复操作时,只要一个 时钟周期来获得最后的计算结果,称为吞吐延迟(Tpd+Tco);可见只要Tco小于Tpd,流水线可以提高速度。 实现流水线的代价:1.消耗寄存器就是消耗硅片面积(想想20级流水线的某著名CPU吧)2.流水线长则消耗更多时钟周期。(如果流水线反复启动,则会损失速度,想想某CPU著名的高频率低效能吧) 下面附上一段流水线在CPU设计中的应用和问题进行简要介绍 对于一条具体的指令执行过程,通常可以分为五个部分:取指令,指令译码,取操作数,运算(ALU),写结果。其中前三步一般由指令控制器完成

3、, 后两步则由运算器完成。按照传统的方式,所有指令顺序执行,那么先是指令控制器工作,完成第一条指令的前三步,然后运算器工作,完成后两步,在指令控制器 工作,完成第二条指令的前三步,在是运算器,完成第二条指令的后两部很明显,当指令控制器工作是运算器基本上在休息,而当运算器在工作时指令控制器却 在休息,造成了相当大的资源浪费。解决方法很容易想到,当指令控制器完成了第一条指令的前三步后,直接开始第二条指令的操作,运算单元也是。这样就形成了 流水线系统,这是一条2级流水线。如果是一个超标量系统,假设有三个指令控制单元和两个运算单元,那么就可以在完成了第一条指令的取址工作后 直接开始第二条指令的取址,这

4、时第一条指令在进行译码,然后第三条指令取址,第二条指令译码,第一条指令取操作数这样就是一个5级流水线。很显然,5 级流水线的平均理论速度是不用流水线的4倍。流水线系统最大限度地利用了CPU资源,使每个部件在每个时钟周期都工作,大大提高了效率。但是,流水线有两个非常大的问题:相关和转移。 在一个流水线系统中,如果第二条指令需要用到第一条指令的结果,这种情况叫做相关。以上面哪个5级流水线为例,当第二条指令需要取操作数时,第一条指令 的运算还没有完成,如果这时第二条指令就去取操作数,就会得到错误的结果。所以,这时整条流水线不得不停顿下来,等待第一条指令的完成。这是很讨厌的问 题,特别是对于比较长的流

5、水线,比如20级,这种停顿通常要损失十几个时钟周期。目前解决这个问题的方法是乱序执行。乱序执行的原理是在两条相关指令中插 入不相关的指令,使整条流水线顺畅。比如上面的例子中,开始执行第一条指令后直接开始执行第三条指令(假设第三条指令不相关),然后才开始执行第二条指 令,这样当第二条指令需要取操作数时第一条指令刚好完成,而且第三条指令也快要完成了,整条流水线不会停顿。当然,流水线的阻塞现象还是不能完全避免的, 尤其是当相关指令非常多的时候。另一个大问题是条件转移。在上面的例子中,如果第一条指令是一个条件转移指令,那么系统就会不清楚下面应该执 行那一条指令?这时就必须等第一条指令的判断结果出来才能

6、执行第二条指令。条件转移所造成的流水线停顿甚至比相关还要严重的多。所以,现在采用分支预测技 术来处理转移问题。虽然我们的程序中充满着分支,而且哪一条分支都是有可能的,但大多数情况下总是选择某一分支。比如一个循环的末尾是一个分支,除了最后 一次我们需要跳出循环外,其他的时候我们总是选择继续循环这条分支。根据这些原理,分支预测技术可以在没有得到结果之前预测下一条指令是什么,并执行它。 现在的分支预测技术能够达到90%以上的正确率,但是,一旦预测错误,CPU仍然不得不清理整条流水线并回到分支点。这将损失大量的时钟周期。所以,进一 步提高分支预测的准确率也是正在研究的一个课题。越是长的流水线,相关和转

7、移两大问题也越严重,所以,流水线并不是越长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。引 言 流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率, 从而成为微处理器设计中最为重要的技术之一。ARM7处理器核使用了典型三级流水线的冯诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构。通 过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。 ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作以及相关器件之间的数据传输。执行单元的工作往 往占用多个时钟周期,从而成为系统性能的瓶

8、颈。ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操 作转移到译码部件上,使流水线各部件在功能上更平衡;同时其哈佛架构避免了数据访问和取指的总线冲突。 然而不论是三级流水线还是五级流水线,当出现多周期指令、跳转分支指令和中断发生的时候,流水线都会发生阻塞,而且相邻指令之间也可能因为寄存器冲突导致 流水线阻塞,降低流水线的效率。本文在对流水线原理及运行情况详细分析的基础上,研究通过调整指令执行序列来提高流水线运行性能的方法。1 ARM7ARM9流水线技术11 ARM7流水线技术 ARM7系列处理器中每条指令分取指、译码、执行三个阶段,分别在不同

9、的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下 一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、ALU运算及运算结果的写回,需要访问存储器的指令完成存储器的访 问。流水线上虽然一条指令仍需3个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度,从而可达到 O9 MIPSMHz的指令执行速度。 在三级流水线下,通过R15访问PC(程序计数器)时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据PC取指,取指完 成后PC+4送到PC,并把取到的指令传递给译码

10、部件,然后取指部件根据新的PC取指。因为每条指令4字节,故PC值等于当前程序执行位置+8。12 ARM9流水线技术 ARM9系列处理器的流水线分为取指、译码、执行、访存、回写。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径 区别很大;执行部件产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲);访存部件访问数据存储器;回写部件完成执行结果写回寄存器。把三级流 水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生, 每条指令的平均周期数明显减少。2 三级流水线运

11、行情况分析 三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流 水线的性能下降。图1给出了流水线的最佳运行情况,图中的MOV、ADD、SUB指令为单周期指令。从T1开始,用3个时钟周期执行了3条指令,指令平均 周期数(CPI)等于1个时钟周期。流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。21 带有存储器访问指令的流水线 对存储器的访问指令LDR就是非单周期指令,如图2所示。这类指令在执行阶段,首先要进行存储器的地址计算,占用控制信号线,而译码的过程同样需要占用控 制信号线

12、,所以下一条指令(第一个SUB)的译码被阻断,并且由于LDR访问存储器和回写寄存器的过程中需要继续占用执行单元,所以下一条(第一个 SUB)的执行也被阻断。由于采用冯诺伊曼体系结构,不能够同时访问数据存储器和指令存储器,当LDR处于访存周期的过程中时,MOV指令的取指被阻 断。因此处理器用8个时钟周期执行了6条指令,指令平均周期数(CPI)=13个时钟周期。22 带有分支指令的流水线当指令序列中含有具有分支功能的指令(如BL等)时,流水线也会被阻断,如图3所示。 分支指令在执行时,其后第1条指令被译码,其后第2条指令进行取指,但是这两步操作的指令并不被执行。因为分支指令执行完毕后,程序应该转到

13、跳转的目标地 址处执行,因此在流水线上需要丢弃这两条指令,同时程序计数器就会转移到新的位置接着进行取指、译码和执行。此外还有一些特殊的转移指令需要在跳转完成的 同时进行写链接寄存器、程序计数寄存器,如BL执行过程中包括两个附加操作写链接寄存器和调整程序指针。这两个操作仍然占用执行单元,这时处于译码和 取指的流水线被阻断了。23 中断流水线 处理器中断的发生具有不确定性,与当前所执行的指令没有任何关系。在中 断发生时,处理器总是会执行完当前正被执行的指令,然后去响应中断。如图4所示,在 Ox90000处的指令ADD执行期间IRQ中断发生,这时要等待ADD指令执行完毕,IRQ才获得执行单元,处理器

14、开始处理IRQ中断,保存程序返回地 址并调整程序指针指向Oxl8内存单元。在Oxl8处有IRO中断向量(也就是跳向IRQ中断服务的指令),接下来执行跳转指令转向中断服务程序,流水线 又被阻断,执行0x18处指令的过程同带有分支指令的流水线。3 五级流水线技术 五级流水线技术在多种RISC处理器中被广泛使用,被认为是经典的处理器设计方式。五级流水线中的存储器访问部件(访存)和寄存器回写部件,解决了三级流水线中存储器访问指令在指令执行阶段的延迟问题。图5为五级流水线的运行情况(五级流水线也存在阻断)。31 五级流水线互锁分析 五级流水线只存在一种互锁,即寄存器冲突。读寄存器是在译码阶段,写寄存器是

15、在回写阶段。如果当前指令(A)的目的操作数寄存器和下一条指令(B)的源操 作数寄存器一致,B指令就需要等A回写之后才能译码。这就是五级流水线中的寄存器冲突。如图6所示,LDR指令写R9是在回写阶段,而MOV中需要用到的 R9正是LDR在回写阶段将会重新写入的寄存器值,MOV译码需要等待,直到LDR指令的寄存器回写操作完成。(注:现在处理器设计中,可以通过寄存器旁 路技术对流水线进行优化,解决流水线的寄存器冲突问题。) 虽然流水线互锁会增加代码执行时间,但是为初期的设计者提供了巨大的方便,可以不必考虑使用的寄存器会不会造成冲突;而且编译器以及汇编程序员可以通过重新设计代码的顺序或者其他方法来减少

16、互锁的数量。另外分支指令和中断的发生仍然会阻断五级流水线。32 五级流水线优化 采用重新设计代码顺序在很多情况下可以很好地减少流水线的阻塞,使流水线的运行流畅。下面详细分析代码优化对流水线的优化和效率的提高。 要实现把内存地址0x1000和Ox2000处的数据分别拷贝到0x8000和0x9000处。 Oxl000处的内容:1,2,3,4,5,6,7,8,9,10 Ox2000处的内容:H,e,l,l,o,W,o,r,l,d 实现第一个拷贝过程的程序代码及指令的执行时空图如图7所示。 全部拷贝过程由两个结构相同的循环各自独立完成,分别实现两块数据的拷贝,并且两个拷贝过程极为类似,分析其中一个即可

17、。 T1T3是3个单独的时钟周期;T4T11是一个循环,在时空图中描述了第一次循环的执行情况。在T12的时候写LR的同时,开始对循环的第一条语句 进行取指,所以总的流水线周期数为3+1010+29=121。整个拷贝过程需要1212+2=244个时钟周期完成。 考虑到通过减少流水线的冲突可以提高流水线的执行效率,而流水线的冲突主要来自寄存器冲突和分支指令,因此对代码作如下两方面调整: 将两个循环合并成一个循环能够充分减少循环跳转的次数,减少跳转带来的流水线停滞; 调整代码的顺序,将带有与临近指令不相关的寄存器插到带有相关寄存器的指令之间,能够充分地避免寄存器冲突导致的流水线阻塞。 对代码调整和流

18、水线的时空图如图8所示。 调整之后,T1T5是5个单独的时钟周期,T6T13是一个循环,同样在T14的时候BNE指令在写LR的同时,循环的第一条指令开始取指,所以总的指令周期数为5+1010+29+2=125。 通过两段代码的比较可看出:调整之前整个拷贝过程总共使用了244个时钟周期,调整了循环内指令的顺序后,总共使用了125个时钟周期就完成了同样的工作,时钟周期减少了119个,缩短了119244=488,效率提升十分明显。 代码优化前后执行周期数对比的情况如表1所列。 因此流水线的优化问题主要应从两方面考虑: 通过合并循环等方式减少分支指令的个数,从而减少流水线的浪费; 通过交换指令的顺序,避免寄存器冲突造成的流水线停滞。4 结 论 流水线技术提高了处理器的并行性,与串行CPU相比大大提高了处理器性能。通过调节指令序列的方法又能够 有效地避免流水线冲突的发生,从而提高了流水线的执行效率。因此如何采用智能算法进行指令序列的自动调节以提高流水线的效率和进一步提高处理器的并行性将 是以后研究的主要方向。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1