DLX处理器流水线性能优化(一)

时间:2024-08-17 04:05:39 计算机毕业论文 我要投稿
  • 相关推荐

DLX处理器流水线性能优化(一)

摘要 :DLX虚拟微处理机提供了一个基于PC机的研究平台,研究者可以在PC机上模拟新的处理机技术。本文先介绍DLX微处理机针对流水线处理的结构调整和流水线的一些问题,并且结合一个实例,研究了流水线性能的优化。

关键词  DLX微处理机;流水线;计算机系统结构

 1  导言
 DLX 是一种虚拟的32位微处理机系统结构,Patterson 和  Anderson在其“Computer Architecture——A Quantitative  Approach ”一书中首次提出的。它不仅体现了当今多种机器系统结构的共同特点 ,还将体现未来一些机器的指令集结构的特点。这些机器的指令集结构设计思想都和DLX指令集结构的设计思想十分相似,它们都强调:具有一个简单的Load/Store指令集;注重指令流水效率;简化指令的译码;高效支持编译器。WinDLX是一个基于 Windows的DLX模拟器,用于模拟DLX流水线的工作过程。可以灵活、方便地设置参数、控制执行、统计数据等。WinDLX提供了直观的窗口显示。本文先介绍DLX微处理机针对流水线处理的结构调整,以及流水线所面临的一些问题,然后结合实例对DLX流水线性能的优化作简单的分析,Win DLX模拟器能够演示DLX流水线是如何工作的。
 
 2  基于流水线操作原理
 2.1  DLX处理机流水线概念
   DLX的数据通路的实现,它允许在4或5个时钟周期内完成一条指令。虽然这些功能部件出现在它们被读出的周期。但是PC在存储器访问周期(同样在取值周期)被写入,而存储器在回写周期被写入。在这两种情况下,在后面节拍的写入可以由回送数值给PC或者寄存器的开关输出(在存储器访问和回写周期)来指明。这些回流的信号太大地增加了流水线地复杂度。图一给出了一条指令如何沿着数据通路进行流动。
 在每一个时钟周期启动一条新的指令便可以使图一所示的数据通路流起水来,前面的每一个时钟周期便成了一个流水节拍:流水线的一个周期。这样便有图二所示的指令执行模式,它使用流水线结构的典型画法。其中,每一条指令经过五个时钟周期执行完成,在每个时钟周期内,硬件将初始化一条新的指令并执行五个不同指令的某个部分。在一个简单的流水线中,在每一个时钟周期都有一条新的指令取进来并开始长达五个时钟周期的执行。 若在每一个时钟周期都启动一条新的指令,那
 
                       图1  DLX流水线数据通路的实现

么性能将是不进行流水线的及其的五倍。流水线每个节拍的名称 : IF=取指令,ID=分析指令,EX=执行指令,MEM=存储器访问,WB=写回。

指令号 1 2 3 4 5 6 7 8 9 
指令i IF ID EX MEM WB     
指令i+1  IF ID EX MEM WB    
指令i+2   IF ID EX MEM WB   
指令i+3    IF ID EX MEM WB  
指令i+4     IF ID EX MEM WB 
 图2  简单的DLX流水线
  
 2.2  DLX流水引出的问题
 (1) 确定机器在每一个时钟周期都进行什么样的动作,并保证在同一个时钟周期没有两条指令使用相同的数据通路资源。比如一个ALU不能同时用于计算有效地址和剑法运算。因此,必须得保证流水线中指令得重叠不会导致这样的冲突。在简化的DLX数据通路,主要的功能部件都在不同的时钟周期使用,所以多条指令的重叠执行相对来说几乎所没有引入冲突。
   (2) 图一的基本数据通路已经使用了分开的指令和数据存储器,其典型的实现方式是使用分开的指令和数据Cache。使用独立的Cache避免了对单一存储器进行取指和访问数据操作之间的冲突。如果流水线机的时钟周期和未流水的机器相同时,存储系统的带宽需要时原先的五倍,这便是取得高性能的代价。
   (3) 简单地DLX数据通路中没有涉及到PC,为了在每个时钟周期都启动一条新的指令,需要对PC进行自加运算并存回,这项工作必须在IF节拍完成,为下一条指令做准备。如果考虑要分支的影响,问题就这样产生了,因为它也要改变PC,但是在MEM节拍进行。在我们的多周期的非流水线结构中,这不成为一个问题,因为只在MEM节拍写一次PC。在这里我们将只在IF节拍对PC进行写操作,写入自增后的PC或者前面分支的目标地址。
 
DLX流水线的实例性能分析
 为了具体了解DLX虚拟处理机如何解决流水线的问题,以一个流水线的实例进行测试。优化后进行性能分析。这里使用 WinDLX 汇编器中的汇编文件 fact.s ,这个程序计算数(通过键盘输入)的阶乘。这需要用到文件input.s,它用于接收从键盘输入的数。加载了这两个文件后可以看见一条DLX指令的执行需要5个周期:IF(取指周期)、ID(分析指令/寄存器周期)、EX(执行周期)、MEM(存储器访问/分支完成周期)、WB(回写周期)。其中执行段分为4个单元,分别是intEX(整数操作)、addEX(浮点加减)、fmulEX(浮点乘法)、fdivEX(浮点除法),如图三。
 
                  图3   DLX的指令执行流程
 
 指令流调整技术和数据重定向技术,这两种技术各有各的有优缺点,如何使CPU的性能达到最好,同时尽可能减少硬件和软件的投入。实验表明,同时应用指令流调整技术和数据重定向技术,可以使CPU的优化达到最大化。下面通过实例的优化来分析证明这个结论。
 
DLX的代码分析
 上面提到的加载了fact.s和input.s这两个文件,这里先分析一下fact.sborted”。其原因是:第二条命令(jal)是无条件分支指令, 但只有在第三个时钟周期, jal 指令被译码后才知道,这时,下一条命令movi2fp已经取出,但需执行的下一条命令在另一个地址处,因而,movi2fp的执行应被取消,在流水线中留下气泡。
点击Clock cycle diagram窗口中的trap 0x5行,你将看到模拟正处于时钟周期14。trap 0x5行如图五所示。其原因是,无论何时遇到一条trap指令时,DLX 处理器中的流水线都将被清空。


                  图5   优化前时钟周期14的时空图 


                  图6   未经优化的时空图

 由于没有优化代码,出现了很多“写写相关”“读写相关”“功能部件冲突”等数据相关,然后看一下Statistics窗口中的各种统计数字:总的周期数(215) 和暂停数(17 RAW, 25 Control, 12 Trap; 54 Total),然后关闭窗口。点击主窗口中Configuration中的Enable Forwarding使重定向技术无效(去掉小钩),其中PC被复位为0x00000100。激活Breakpoints子窗口,点击主窗口中Breakpoints菜单,删除所有断点。然后按F5键,键入20后,按Enter键,程序将一直模拟运行到结束。重新查看Statistics子窗口,你会看到Control暂停和Trap暂停仍然是同样的值,而RAW暂停从17变成了53,总的模拟周期数增加到236。如图七所示是优化后的时空图。
 

               图7   优化后的时空图
 
 再一次查看Statistics子窗口,可以看到Control暂停和Trap暂停仍然是同样的值,而RAW暂停从17变成了53,总的模拟周期数增加到236。
 
 3.2  基于流水线的性能分析

             图8     fact.s程序段指令优化前后的部分统计

加速比 s==236 / 215 = 1.098
可以分析得出即DLXforwarded比 DLXnot forwarded 快9.8%。

 4 总结
 流水线过去是,而且将来还是提高计算机性能的最有效技术之一。DLX虚拟处理器为设计和研究流水线结构提供方便直观的平台 ,如跟踪程序运行的时空图,在时空图上可直接看到数据旁路(用箭头表示)或延时的情况 ,程序运行结果的统计数据较全面地报告了流水线运行状态等。本文探讨了DLX流水线使用的主要技术 ,利用DLX处理机,采用对流水线实例的优化处理分析,验证了指令流调整技术和数据重定向技术对DLX指令流水线的优化作用,得出了一个结论,在正常的情况下同时使用两种优化技术,可以使代码的执行的速度得很大的提高。通过计算还可以知道使用优化技术后加速比也得到了很好的提高大概是以前4倍左右。
 
参考文献
[1]  郑纬民, 汤志忠. 计算机系统结构[M]. 北京: 清华大学出版社, 1998.
[2]   Patterson D A., Hennessy J L. Computer Architecture: A Quantitive Approach 3ed[M]. San Francisco: Morgan Kanfmann Publishers, 2003.
 [3]   蔡启先, 李日初. DLX处理器浮点数流水线性能的研究[J]. 计算机工程,2006,5,32(9).

,这段码实现了求阶乘的运算,通过这段代码的一些图,则可以得出指令流调整技术和数据重定向技术在实际运用中的作用。并且可以得出在现实中指令流调整技术和数据重定向技术对CPU性能的影响。
 Fact.s其中的主要代码如下:
 main:
           ;*** Read value from stdin into R1
           addi     r1,r0,Prompt
           jal      InputUnsigned
           ;*** init values
           movi2fp   f10,r1          ;R1 -> D0       D0..Count register
           cvti2d    f0,f10
           addi      r2,r0,1         ;1 -> D2        D2..result
           movi2fp   f11,r2
           cvti2d    f2,f11
           movd      f4,f2           ;1-> D4         D4..Constant 1
 ;*** Break loop if D0 = 1
 Loop:     led       f0,f4           ;D0<=1 ?
           bfpt      Finish
           ;*** Multiplication and next loop
            multd     f2,f2,f0
            subd      f0,f0,f4
            j         Loop
 
 Finish:    ;*** write result to stdout
             sd        PrintfValue,f2
             addi      r14,r0,PrintfPar
             trap      5
             ;*** end
             trap      0
将代码装载并运行,对比优化前后的时空图,并进行性能的评价分析,得出结论。

                 图4   第一次循环的流水线时空图  
 在窗口中,可以看到模拟第一次循环正在第四时钟周期,第一条命令正在ME M段,第二条命令在intEX段,第四条命令在IF段。而第三条命令指示为“a

【DLX处理器流水线性能优化(一)】相关文章:

连续实时信号处理器的性能分析03-19

网络视频系统性能测试及优化11-22

2k-8k FFT处理器ROM面积的优化03-30

简化加权数据融合算法对时差定位性能的优化03-07

高性能计算机分布式内存文件系统的网络性能优化方法论文11-08

五种提高SQL性能的方法(一)11-22

ARM处理器的Boot与Remap03-07

为微处理器核心供电03-18

黄冈本地传输网络优化(一)03-07