【处理器体系架构系列】ARM流水线关键技术分析与代码优化

ARM 流水线关键技术分析与代码优化

 

http://www.21ic.com/app/embed/200903/34441.htm

单片机与嵌入式系统 作者:大连理工大学 邱铁 西方 迟宗正

 

水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。 ARM7 处理器核使用了典型三级流水线的冯 · 诺伊曼结构 ARM9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性 能。

ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、 ALU操作以及相关器件之间的数据传输。执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈 ARM9采用了更为高效的五级流水线设计,增加了 2个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡 ;同时其哈佛架构避免了数据访问和取指的总线冲突。

 

然而不论是三级流水线还是五级流水线,当出现多周期指令、跳转分支指令和中断发生的时候,流水线都会发生阻塞,而且相邻指令之间也可能因为寄存器冲突导致 流水线阻塞,降低流水线的效率。 本文在对流水线原理及运行情况详细分析的基础上,研究通过调整指令执行序列来提高流水线运行性能的方法。

 

1 ARM7 ARM9 流水线技术
1
1 ARM7 流水线技术
ARM7系列处理器中每条指令分取指、译码、执行三个阶段 ,分别在不同的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下 一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、 ALU运算及运算结果的写回,需要访问存储器的指令完成存储器的访 问。流水线上虽然一条指令仍至少需 3 个时钟周期来完成 ,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令 ,提高了流式指令的处理速度,从而可达到 0.9 MIPS MHz的指令执行速度。

在三级流水线下,通过 R15访问 PC(程序计数器 )时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据 PC 取指 ,取指完成后 PC+4送到 PC,并把取到的指令传递给译码部件,然后取指部件根据新的 PC取指。因为每条指令 4 字节,故 PC 值等于当前程序执行位置 +8


1 2 ARM9 流水线技术
 ARM9 系列处理器的流水线分为取指、译码、执行、访存、回写 。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径 区别很大;执行部件产生 ALU运算结果或产生存储器地址 (对于存储器访问指令来讲 );访存部件访问数据存储器;回写部件完成执行结果写回寄存器。其中访存和回写阶段并非每条指令都需要。 把三级流 水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生, 每条指令的平均周期数明显减少。

 

2 三级流水线运行情况分析
三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况 ,导致流水线的性能下降。图 1给出了流水线的最佳运行情况,图中的 MOV ADD SUB指令为单周期指令。 T1开始,用 3个时钟周期执行了 3条指令,指令平均 周期数 (CPI)等于 1个时钟周期。

流水线中阻断现象也十分普遍,下面就各种阻断情况下的流水线性能进行详细分析。


2 1 带有存储器访问指令的流水线
对存储器的访问指令 LDR就是非单周期指令 ,如图 2所示。这类指令在执行阶段,首先要进行存储器的地址计算,占用控制信号线 ,而译码的过程同样需要占用控制信号线,所以下一条指令 (第一个 SUB)的译码被阻断,并且由于 LDR访问存储器和回写寄存器的过程中需要继续占用执行单元 ,所以下一条 (第一个 SUB)的执行也被阻断。由于采用冯 ·诺伊曼体系结构,不能够同时访问数据存储器和指令存储器, LDR 处于访存周期的过程中时, MOV 指令的取指被阻 断。 因此处理器用 8个时钟周期执行了 6条指令,指令平均周期数 (CPI)=1.3个时钟周期。

 

2 2 带有分支指令的流水线

当指令序列中含有具有分支功能的指令 ( BL )时,流水线也会被阻断,如图 3所示。分支指令在执行时,其后第 1条指令被译码,其后第 2条指令进行取指,但 这两步操作的指令并不被执行 。因为分支指令执行完毕后,程序应该转到跳转的目标地址处执行,因此在流水线上需要丢弃这两条指令,同时程序计数器就会转移 到新的位置接着进行取指、译码和执行。 此外还有一些特殊的转移指令需要在跳转完成的同时进行写链接寄存器、程序计数寄存器,如 BL执行过程中包括两个附加 操作 ——写链接寄存器和调整程序指针。这两个操作仍然占用执行单元,这时处于译码和取指的流水线被阻断了。


2 3 中断流水线
处理器中断的发生具有不确定性,与当前所执行的指令没有任何关系。在中断发生时,处理器总是会执行完当前正被执行的指令,然后去响应中断。如图 4所示,在 0x90000处的指令 ADD执行期间 IRQ中断发生,这时要等待 ADD指令执行完毕, IRQ才获得执行单元,处理器开始处理 IRQ中断,保存程序返回地址并调整程序指针指向 0xl8内存单元。在 0xl8处有 IRQ中断向量 (也就是跳向 IRQ中断服务的指令 ),接下来执行跳转指令转向中断服务程序,流水线又被阻断,执行 0x18处指令的过程同带有分支指令的流水线。

 

 

3 五级流水线技术

五级流水线技术在多种 RISC处理器中被广泛使用,被认为是经典的处理器设计方式。五级流水线中的存储器访问部件 ( 访存 ) 和寄存器回写部件,解决了三级流水线中存储器访问指令在指令执行阶段的延迟问题 。图 5为五级流水线的运行情况 (五级流水线也存在阻断 )

3 1 五级流水线互锁分析

五级流水线只存在一种互锁,即寄存器冲突。读寄存器是在译码阶段,写寄存器是在回写阶段如果当前指令 (A) 的目的操作数寄存器和下一条指令 (B) 的源操作数寄存器一致, B 指令就需要等 A 回写之后才能译码。这就是五级流水线中的寄存器冲突。 如图 6所示, LDR指令写 R9是在回写阶段,而 MOV中需要用到的 R9正是 LDR在回写阶段将会重新写入的寄存器值, MOV译码需要等待,直到 LDR指令的寄存器回写操作完成。 (注:现在处理器设计中,可以通过寄存器旁路技术对流水线进行优化,解决流水线的寄存器冲突问题。 )

虽然流水线互锁会增加代码执行时间,但是为初期的设计者提供了巨大的方便,可以不必考虑使用的寄存器会不会造成冲突;而且编译器以及汇编程序员可以通过重新设计代码的顺序或者其他方法来减少互锁的数量。 另外分支指令和中断的发生仍然会阻断五级流水线。


3 2 五级流水线优化

采用重新设计代码顺序在很多情况下可以很好地减少流水线的阻塞,使流水线的运行流畅。下面详细分析代码优化对流水线的优化和效率的提高。

要实现把内存地址 0x1000 0x2000处的数据分别拷贝到 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所示。

全部拷贝过程由两个结构相同的循环各自独立完成,分别实现两块数据的拷贝,并且两个拷贝过程极为类似,分析其中一个即可。
T1 T3 3个单独的时钟周期; T4 T11是一个循环,在时空图中描述了第一次循环的执行情况。在 T12的时候写 LR的同时,开始对循环的第一条语句进行取指,所以总的流水线周期数为 3+10×10+2×9=121。整个拷贝过程需要 121×2+2=244个时钟周期完成。

考虑到通过减少流水线的冲突可以提高流水线的执行效率,而流水线的冲突主要来自寄存器冲突和分支指令,因此对代码作如下两方面调整:

将两个循环合并成一个循环能够充分减少循环跳转的次数,减少跳转带来的流水线停滞;

调整代码的顺序,将带有与临近指令不相关的寄存器插到带有相关寄存器的指令之间,能够充分地避免寄存器冲突导致的流水线阻塞。

对代码调整和流水线的时空图如图 8所示。

调整之后, T1 T5 5个单独的时钟周期, T6 T13是一个循环,同样在 T14 的时候 BNE 指令在写 LR 的同时,循环的第一条指令开始取指 ,所以总的指令周期数为 5+10×10+2×9+2 =125。通过两段代码的比较可看出:调整之前整个拷贝过程总共使用了 244个时钟周期,调整了循环内指令的顺序后,总共使用了 125个时钟周期就完成了同样的工作,时钟周期减少了 119个,缩短了 119 244=48 8%,效率提升十分明显。

代码优化前后执行周期数对比的情况如表 1所列。

因此流水线的优化问题主要应从两方面考虑:

通过合并循环等方式减少分支指令的个数 ,从而减少流水线的浪费;
通过交换指令的顺序,避免寄存器冲突造成的流水线停滞。

 

4

流水线技术提高了处理器的并行性,与串行 CPU相比大大提高了处理器性能。通过调节指令序列的方法又能够有效地避免流水线冲突的发生,从而提高了流水线的执行效率。因此如何采用智能算法进行指令序列的自动调节以提高流水线的效率和进一步提高处理器的并行性将是以后研究的主要方向。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值