要使流水线具有良好的性能,必须使流水线畅通流动,不发生断流。但由于流水过程中会出现以下三种相关冲突,实现流水线的不断流是困难的,这三种相关分别是资源相关,数据相关和控制相关。
资源相关
所谓资源相关,是指多条指令进入流水线后在同一周期内争用同一个功能部件所引发的冲突。
比如取值阶段和访存阶段都需要访问存储器,如果数据和指令放在同一个存储器且只有一个访问口时,便发生两条指令争用存储器资源的相关冲突。
解决办法:
1.暂停。暂停是避免冒险的一种常用技术,暂停时,处理器会停止流水线的一条或多条指令,直到冒险条件不再满足。
2.增设一个存储器,分开存储数据和指令。
3.增加一个访问口,分成数据访问口和指令访问口。
数据相关
所谓数据相关,是因为当前指令执行需要前面指令运行的结果,这样就会发生断流以等待所需数据。
解决办法:
1.暂停
2.数据转发(数据旁路)。将所需结果值直接从一个流水线阶段传到较早阶段的技术称为数据转发,或简称转发,有时称为旁路。转发不会使流水线断流。
控制相关
控制相关冲突是由转移指令引起的。
当执行转移指令时,依据转移条件的产生的结果,可能为顺序取下条指令;也可能转移到新的目标地址取指令,从而使流水线发生断流。
解决方法:
1.延迟转移法
2.转移预测法