当前位置:首页 >> 信息与通信 >>

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


   技术纵横  TEC HNOLO GY REVIEW

ARM 流水线关键技术分析与代码优化
■大连理工大学    邱铁   西方   迟宗正

   要 摘

流水线技术是广泛应用在微处理器体系结构中的关键技术 。本文根据 ARM 系列处理器采用的三级和 五级流水线的工作原理 ,对各种冲突情况下的流水线运

行情况进行了详细分析 , 最后通过实例分析提出 在编程阶段提高流水线性能的方法 。
ARM 处理器

  关键词

流水线

性能分析

冲突避免   代码优化

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

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

ARM7 的三级流水线在执行单元完成了大量的工

作 ,包括与操作数相关的寄存器和存储器读写操作 、 U AL 操作以及相关器件之间的数据传输 。执行单元的工作往 往占用多个时钟周期 ,从而成为系统性能的瓶颈 。ARM9 采用了更为高效的五级流水线设计 , 增加了 2 个功能部件 分别访问存储器并写回结果 ,且将读寄存器的操作转移到 译码部件上 ,使流水线各部件在功能上更平衡
[2 ]

指部件根据新的 PC 取指 。因为每条指令 4 字节 , 故 PC 值等于当前程序执行位置 + 8 。

1. 2   ARM9 流水线技术
ARM9 系列处理器的流水线分为取指 、 译码 、 执行 、

; 同时其

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

访存 、 回写 。取指部件完成从指令存储器取指 ; 译码部件 读取寄存器操作数 ,与三级流水线中不占有数据路径区别 很大 ; 执行部件产生 AL U 运算结果或产生存储器地址
( 对于存储器访问指令来讲) ; 访存部件访问数据存储器 ;

回写部件完成执行结果写回寄存器 [ 4 ] 。把三级流水线中 的执行单元进一步细化 ,减少了在每个时钟周期内必须完 成的工作量 ,进而允许使用较高的时钟频率 , 且具有分开 的指令和数据存储器 , 减少了冲突的发生 , 每条指令的平 均周期数明显减少 。

1  ARM7/ ARM9 流水线技术
1. 1   ARM7 流水线技术
ARM7 系列处理器中每条指令分取指 、 译码 、 执行三

2  三级流水线运行情况分析
三级流水线在处理简单的寄存器操作指令时 ,吞吐率 为平均每个时钟周期一条指令 ; 但是在存在存储器访问指 令、 跳转指令的情况下会出现流水线阻断情况 , 导致流水
adv @mesnet. com. cn (广告专用)

个阶段 ,分别在不同的功能部件上依次独立完成 。取指部 件完成从存储器装载一条指令 ,通过译码部件产生下一周

24  

2009 年第 3 期

TEC HNOLO GY REVIEW   技术纵横

线的性能下降 。图 1 给出了流水线的最佳运行情况 , 图中 的 MOV 、 ADD 、 SUB 指令为单周期指令 。从 T1 开始 ,用 3 个时钟周期执行了 3 条指令 ,指令平均周期数 ( CPI) 等于
1 个时钟周期 。

还有一些特殊的转移指令需要在跳转完成的同时进行写 链接寄存器 、 程序计数寄存器 , 如 BL 执行过程中包括两 个附加操作 —— — 写链接寄存器和调整程序指针 。这两个 操作仍然占用执行单元 ,这时处于译码和取指的流水线被 阻断了 。

2. 3   中断流水线
处理器中断的发生具有不确定性 , 与当前所执行的指 令没有任何关系 。在中断发生时 , 处理器总是会执行完当
图1  ARM7 单周期指令最佳流水线

前正被执行的指令 , 然后去响应中断 。如图 4 所示 , 在
0x90000 处的指令 ADD 执行期间 IRQ 中断发生 , 这时要

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

等待 ADD 指令执行完毕 , IRQ 才获得执行单元 , 处理器 开始处理 IRQ 中断 , 保存程序返回地址并调整程序指针 指向 0x18 内存单元 。在 0x18 处有 IRQ 中断向量 ( 也就 是跳向 IRQ 中断服务的指令) , 接下来执行跳转指令转向 中断服务程序 ,流水线又被阻断 ,执行 0x18 处指令的过程 同带有分支指令的流水线 。

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

图3  带有分支指令的流水线

3  五级流水线技术
五级流水线技术在多种 RISC 处理器中被广泛使用 , 被认为是经典的处理器设计方式 。五级流水线中的存储
图2  带有存储器访问指令的流水线

器访问部件 ( 访存) 和寄存器回写部件 , 解决了三级流水线

2. 2   带有分支指令的流水线
当指令序列中含有具有分支功 能的指令 ( 如 BL 等) 时 , 流水线也 会被阻断 , 如图 3 所示 。分支指令 在执行时 ,其后第 1 条指令被译码 , 其后第 2 条指令进行取指 , 但是这 两步操作的指令并不被执行 。因为 分支指令执行完毕后 , 程序应该转 到跳转的目标地址处执行 , 因此在 流水线上需要丢弃这两条指令 , 同 时程序计数器就会转移到新的位置 接着进行取指 、 译码和执行 。此外
图4  中断流水线

  paper @mesnet. com. cn (投稿专用)  

2009 年第 3 期

Microcontrollers & Embedded Systems  

25  

   技术纵横  TEC HNOLO GY REVIEW 中存储器访问指令在指令执行阶段的延迟问题 。图 5 为 五级流水线的运行情况 ( 五级流水线也存在阻断) 。 处的数据分别拷贝到 0x8000 和 0x9000 处 。 0x1000 处的内容 :1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 0x2000 处的内容 : H ,e ,l ,l ,o ,W ,o ,r ,l ,d 实现第一个拷贝过程的程序代码及指令的执行时空 图如图 7 所示 。 全部拷贝过程由两个结构相同的循环各自独立完成 , 分别实现两块数据的拷贝 , 并且两个拷贝过程极为类似 , 分析其中一个即可 。 T1 ~ T3 是 3 个单独的时钟周期 ; T4 ~ T11 是一个循 环 ,在时空图中描述了第一次循环的执行情况 。在 T12 的 时候写 L R 的同时 , 开始对循环的第一条语句进行取指 , 所以总的流水线周期数为 3 + 10 × + 2 × = 121 。整个 10 9 拷贝过程需要 121 × + 2 = 244 个时钟周期完成 。 2 考虑到通过减少流水线的冲突可以提高流水线的执 行效率 ,而流水线的冲突主要来自寄存器冲突和分支指 令 ,因此对代码作如下两方面调整 : ①将两个循环合并成一个循环能够充分减少循环跳 转的次数 ,减少跳转带来的流水线停滞 ; ②调整代码的顺序 , 将带有与临近指令不相关的寄 存器插到带有相关寄存器的指令之间 , 能够充分地避免寄 存器冲突导致的流水线阻塞 。 对代码调整和流水线的时空图如 图 8 所示 。 调整之后 , T1 ~ T5 是 5 个单独的 时钟周期 , T6 ~ T13 是一个循环 ,同样在 T14 的时候 BN E 指令在写 L R 的同时 , 循环的第一条指令开始取指 , 所以总 的指令周期数为 5 + 10 × + 2 × + 2 10 9 = 125 。 通过两段代码的比较可看出 : 调整之前整个拷贝过程 总共使用了 244 个时钟周期 , 调整了循环内指令的顺序 后 ,总共使用了 125 个时钟周期就完成了同样的工作 , 时 钟周期减少了 119 个 , 缩短了 119/ 244 = 48. 8 % , 效率提 升十分明显 。

图5  ARM9 的五级最佳流水线

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

图6  ARM9 的五级流水线互锁

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

3. 2   五级流水线优化
采用重新设计代 码顺序在很多情况下 可以很好地减少流水 线的阻塞 , 使流水线 的运行流畅 。下面详 细分析代码优化对流 水线的优化和效率的 提高 。 要实现把内存地 址 0x1000 和 0x2000

图7  未经优化的流水线

26  

2009 年第 3 期

adv @mesnet. com. cn (广告专用)

TEC HNOLO GY REVIEW   技术纵横

图8

优化后的流水线

   代码优化前后执行周期数对比的情况如表 1 所列 。
表1
顺序语句 循环 1 循环 2 总周期数

代码优化前后执行周期数对比
优化前周期数 优化后周期数 提高比例/ ( %)
6 118 120 244 5 60 60 125 16. 7 49. 2 50 48. 8

执行效率 。因此如何采用智能算法进行指令序列的自动 调节以提高流水线的效率和进一步提高处理器的并行性 将是以后研究的主要方向 。 参考文献
[ 1 ] Jo hn L Hennessy , David A Patterson. 计算机系统结构 : 量化

研究方法 [ M ] . 北京 : 电子工业出版社 ,2004.
[ 2 ] A RM Architect ure Reference Manual 2005. [ EB/ OL ] . ht2 tp :/ / www. arm. co m. [ 3 ] Samsung Elect ronics Co L td. S3C44B0X 322bit RISC Micro2 p rocessor U ser’s Manuel ,2003. p rocessor U ser’s Manuel ,2003. [ 4 ] Samsung Elect ro nics Co L td. S3C2410X 322bit RISC Micro2 [ 5 ] 田泽 . 嵌入式系统开发与应用 [ M ] . 北京 : 北京航空航天大学

因此流水线的优化问题主要应从两方面考虑 : ①通过合并循环等方式减少分支指令的个数 , 从而 减少流水线的浪费 ; ②通过交换指令的顺序 , 避免寄存器冲突造成的流 水线停滞 。

4    结 论
流水线技术提高了处理器的并行性 , 与串行 CPU 相 比大大提高了处理器性能 。通过调节指令序列的方法又 能够有效地避免流水线冲突的发生 , 从而提高了流水线的

出版社 ,2005. 出版社 ,2002.

[ 6 ] Wayne W. 嵌入式计算机系统设计原理 [ M ] . 北京 : 机械工业
( 收稿日期 :2008210220)

泰克推出高速示波器系统 助力第三代串行数据分析

泰克公司推出高性能 DPO70000B 数字荧光示波器 ( DPO) 和 DSA70000B 数字串行分析仪 ( DSA ) 系列 。新推出的 B” “ 型号提 的速率 ,为高级串行数据总线 ,提供了基于硬件的高速的实时串行码型触发功能 。

供了极佳的垂直噪声性能 、 平坦的频响和极佳的有效比特位 ( ENOB) 。除了领先的 Pinpoint 触发系统外 ,新型号还以高达 5 Gb/ s 此外 ,通过 “泰克提速升级计划” 实现的新升级选项使得 B” “ 系列客户能够把带宽从 4 GHz 升级到 6 、、 5 、 GHz ,并最终 8 12. 16 可以达到 20 GHz 。工程师们可以按照当前的实际需求进行购买 , 并在将来测试要求变化时轻松提高仪器带宽 , 保护自己的前期 投资 。
DPO/ DSA70000B 系列示波器在所有通道上同时支持高带宽 、 深存储 、 快速采样率和快速波形捕获速率 ,可用于调试在四条通

道上每条通道运行速度高达 12 Gb/ s 的信号 ,为开发和测试多路高速串行数据应用的设计工程师提供了理想的解决方案 ,其中包 括 PCI2Exp ress 3 、 TA 6 Gb/ s 、 SA 超高速 U SB 、 HDMI 、 DisplayPort 和以太网 。
  paper @mesnet. com. cn (投稿专用)  

2009 年第 3 期

Microcontrollers & Embedded Systems  

27  


相关文章:
ARM 流水线技术
ARM 流水线技术_计算机硬件及网络_IT/计算机_专业资料...如果指令不标明条件代码,将默认为无条件(AL)执行。...(分析指令),而第三只手此时 正在从盘子里夹第三样...
ARM 程序设计优化策略与技术
(3)使用inline 函数 ARM C 支持 inline 关键字,...1.2 处理器相关的优化方法 (1)保持流水线畅通 从...的任务优先级分配需要按照不同的系统设计具体分析。比如...
ARM程序设计优化
让程序充分利用 资源, 提高运行效率, 缩减代码尺寸...(3)使用 inline 函数 arm C 支持 inline 关键字,...1.2 处理器相关的优化方法 (1)保持流水线畅通 从...
程序优化
5页 1财富值 随机优化程序 18页 10财富值 C程序优化之路 12页 免费喜欢此文档的还喜欢 ARM流水线关键技术分析与代... 4页 免费 PMC流程与职责 15页 免费 ...
关于ARM指令流水线知识
所以在程序代码中计算一些中断返回,或函数调用返回时,都是采用三级流水线计算, ...ARM流水线关键技术分析与... 4页 免费 初学arm知识总结 29页 免费 ...
周方辉关于ARM指令流水线知识
所以在程序代码中计算一些中断返回,或函数调用返回时,都是采用三级流水线计算, ...ARM流水线关键技术分析与... 4页 5下载券 周方辉关于ARM寄存器组及... 15...
ARM习题答案
特别是 ARM 技术的出现与完善,为嵌入式操作系统提供...2.优化嵌入式系统软硬件内核,提高系统运行速度,降低...7. 分析带有存储器访问指令 (LDR) 的流水线运行...
第二部分习题答案
第七章 1、试分析 ARM 处理器指令系统中对立即数...流水线的暂停次数, 因此 条件执行既可以改善代码执行...除 了初始化部分一些关键代码ARM 汇编语言完成...
嵌入式系统原理与设计考试答案
流水线高效地执行,使编译器更易于生成优化代码。 ...ARM 微处理器支持 7 种运行模式,分别为: 用户模式...是软件的分析过程, 其目的在于发现软件功能特性等实现...
大连理工大学ARM习题答案
特别是 ARM 技术的出现与完善,为嵌入式操作系统提供...2.优化嵌入式系统软硬件内核,提高系统运行速度,降低...7. 分析带有存储器访问指令 (LDR) 的流水线运行...
更多相关标签:
arm流水线 | arm三级流水线 | arm流水线结构 | arm流水线技术 | arm9流水线 | armv7 流水线 | arm 流水线 cache | arm的流水线 |