CPU流水线技术中的结构相关和数据相关

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2010年第7期福建电脑

CPU流水线技术中的结构相关和数据相关

孙启良

(济南大学理学院山东济南250022)

摘要:CPU流水线技术是计算机CPU设计中普遍采用的一种并行处理技术。它可以提高指令的运行效率,但是其流水线相关问题是流水线执行过程中的主要障碍,会给流水线中指令序列的顺利执行带来许多不利的影响。流水线中的相关主要是结构相关和数据相关,本文重点介绍了他们的解决方法。其中数据相关较普遍,旁路技术是主要的解决方法。

关键词:流水线技术时钟周期旁路技术编译器

1、引言

计算机中的流水线是把一个重复的过程分解为若干个子过程,每个子过程与其他子过程并行进行。由于这种工作方式与工厂中的生产流水线十分相似,因此称为流水线技术。流水线技术是一种非常经济、对提高计算机的运算速度非常有效的技术。采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,成为计算机中普遍使用的一种并行处理技术。

计算机各个部分几乎都可以采用流水线技术,运算器中的操作部件,如浮点加法器、浮点乘法器等可以采用流水线,称为操作部件流水线。多个计算机之间,通过存储器连接,也可以采用流水线,称为宏流水线[1]。如果指令的执行过程可以采用流水线,那么称为指令流水线[1]。

如图只用T0-T8八个时钟周期就完成了I1-I5五条指令的运行。

在指令流水线中经常有一些被称为"相关"的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些"相关"可能会降低流水线可以获得的理想性能。

流水线中的相关可以分为以下三种类型:

第一种是结构相关,是指令在重叠执行的过程中,硬件资源满足不了指令重叠执行的要求,发生硬件资源冲突而产生的相关。

第二种是数据相关,是指在同时重叠执行的几条指令中,一条指令依赖于前面指令执行结果数据,但是又得不到时发生的相关。

第三种是控制相关,它是指流水线中的分支指令或者其他需要改写PC的指令造成的相关。

流水线相关问题是流水线执行过程中的主要障碍,会给流水线中指令序列的顺利执行带来许多不利的影响。如果不能较好的处理流水线相关问题,就可能影响流水线的性能,甚至使程序运行产生错误的结果。

2、结构相关

如果因资源冲突而无法使用某种指令组合,那么就称该流水线产生了结构相关。例如:指令和数据都共享一个存储器,在某个时钟周期内,流水线既要完成某条指令对数据的存储器访问操作,又要完成后续的另一条指令的取指令操作,这样就会发生存储器访问冲突问题,产生结构相关[2]。

消除结构相关的最简单方法就是引入暂停周期,如下图所示,这必然要降低流水线的性能

结构相关的起因是资源争用,那么可以考虑采用资源充分重复设置的方法来避免结构相关。这是解决结构相关的基本方法。特殊的,对存储器争用冲突,有如下解决方法:

(1)如果指令和数据放在同一个存储器,可使用双端口存储器,其中一个端口存取数据,另一个端口取指令。

(2)设置两个存储器,其中一个作为数据存储器,另一个作为指令存储器。

上述两种方案中,取指令和访问数据可以并行进行,不会发生结构相关。

3、数据相关

流水线技术可以通过指令的重叠执行来改变指令的相对执行时间,这就可能导致流水线中的指令序列读写操作数的顺序发生改变,而不同于非流水线时的指令序列读写操作数的顺序[3]。示例如下

49

福建电脑2010年第7期

第一条指令ADD R1,R2,R3还没有运算结束,结果还没有保存到寄存器,后续指令已经在取ADD R1,R2,R3的运算结果,其结论必然是错误的。数据相关可分为三种:

(1)写后读相关(RAW:Read After Write)

指令j的执行需要使用指令i的计算结果,但是当它们在流水线中重叠执行时,指令j可能在指令i将其计算结果写入之前就先行对保存该计算结果的寄存器进行了读操作,这样指令j 读出的寄存器值就是错误的。

(2)写后写相关(WAW:Write After Write)

指令j和指令i的目的操作数相同,但是当它们在流水线中重叠执行时,指令j可能在指令i将其计算结果写入之前就先行对保存该计算结果的寄存器进行了写操作,这样就导致了寄存器写入顺序的错误,此时,目的寄存器的内容是指令i写入的值,而不是指令j写入的值。

(3)读后写相关(WAR:Write After Read)

指令j可能在指令i读取某个源寄存器的内容之前就对该寄存器进行了写操作,结果就是导致了指令i后来读取的值是错误的。

方法1定向(旁路)技术解决数据相关

主要思想是:在某条指令产生一个计算结果之前,其他指令并不真正需要使用这个计算结果,如果能够从这个计算结果产生的地方直接将它送到后续指令需要使用它的地方,那么就可以避免暂停。

方法2编译器调度方法处理数据相关

例如对于最常见的A=B+C这样的操作形式,采用比较典型的代码生成方法可以得到如下的指令序列:

LW R1,B

LW R2,C

ADD R3,R1,R2

SW A,R3

这个指令序列的流水线时空图

编译器调度方法处理数据相关

编译器是如何通过指令调度来消除流水线暂停的呢?例如有下面连续的两个操作:

a=b+c;

d=e-f;

指令调度前后代码对比(左:调度前,右:调度后)

4、结束

本文重点介绍了结构相关和数据相关及其解决方法。

除了这两种相关冲突,流水线中还有控制相关,当流水线遇到分支指令和其他会改变PC值的指令时就会发生控制相关.处理分支指令最简单的方法:一旦在流水线检测到某条指令是分支指令,就暂停执行该分支指令后的所有指令,直到分支指令到达流水线的MEM段,确定新的PC值为止,但是这样做就会给流水线带来多个时钟周期的暂停。本文未加详述。

参考文献:

[1]王爱英.计算机组成与结构[M].北京:清华大学出版社,2001:210-214

[2]郑纬民汤志忠.计算机系统结构[M].北京:清华大学出版社,1998: 263-268

[3]张楷,汤志忠.通用16位CPU的设计与实现[J].计算机工程与应用, 2003,39(23):116-117

[4]陈智勇.计算机系统结构[M].西安:西安电子科技大学出版社,2004: 92-98

[5]朱怡健,吴强,杨全胜.简单高性能微处理器的设计[J].电气电子教学学报,2004,26(2):67-70

[6]唐朔飞.计算机组成原理[M].北京:高等教育出版社.2008:243-258

[7]白中英.计算机组成原理[M].第3版.北京:科学出版社,2001:

42 50

相关文档
最新文档