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相比大大提高了处理器性能。通过调节指令序列的方法又能够有效地避免流水线冲突的发生,从而提高了流水线的执行效率。因此如何采用智能算法进行指令序列的自动调节以提高流水线的效率和进一步提高处理器的并行性将是以后研究的主要方向。
上一篇:用户可定制的处理器