标题:
ARM流水线分析更新
[打印本页]
作者:
look_w
时间:
2017-9-24 18:48
标题:
ARM流水线分析更新
3
.
1
五级流水线互锁分析
五级流水线只存在一种互锁,即寄存器冲突。读寄存器是在译码阶段,写寄存器是在回写阶段。如果当前指令
(A)
的目的操作数寄存器和下一条指令
(B)
的源操作数寄存器一致,
B
指令就需要等
A
回写之后才能译码。这就是五级流水线中的寄存器冲突。如图
6
所示,
LDR
指令写
R9
是在回写阶段,而
MOV
中需要用到的
R9
正是
LDR
在回写阶段将会重新写入的寄存器值,
MOV
译码需要等待,直到
LDR
指令的寄存器回写操作完成。
(
注:现在处理器设计中,可以通过寄存器旁路技术对流水线进行优化,解决流水线的寄存器冲突问题。
)
虽然流水线互锁会增加代码执行时间,但是为初期的设计者提供了巨大的方便,可以不必考虑使用的寄存器会不会造成冲突;而且编译器以及汇编程序员可以通过重新设计代码的顺序或者其他方法来减少互锁的数量。另外分支指令和中断的发生仍然会阻断五级流水线。
3
.
2
五级流水线优化
采用重新设计代码顺序在很多情况下可以很好地减少流水线的阻塞,使流水线的运行流畅。下面详细分析代码优化对流水线的优化和效率的提高。
要实现把内存地址
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
所示。
全部拷贝过程由两个结构相同的循环各自独立完成,分别实现两块数据的拷贝,并且两个拷贝过程极为类似,分析其中一个即可。
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
相比大大提高了处理器性能。通过调节指令序列的方法又能够有效地避免流水线冲突的发生,从而提高了流水线的执行效率。因此如何采用智能算法进行指令序列的自动调节以提高流水线的效率和进一步提高处理器的并行性将是以后研究的主要方向。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0