流水线冲突的类型有哪些?
流水线是一种将顺序过程分解成小的片段或子操作的技术。每个子程序的执行发生在一个特定的专用段中,该段与所有其他段一起工作。流水线冲突主要有三种类型:
资源冲突
这些冲突是由于资源不足引起的,在这种情况下,无法重叠操作。流水线处理器的性能取决于以下两种情况:
- 功能单元是否流水线化?
- 多个执行单元是否允许流水线中所有可用的指令组合?
如果对于特定组合,流水线停滞以避免资源冲突,则存在结构性冒险。
如果两条指令需要同时使用给定的硬件资源,则会发生结构性冒险。这种冒险最常见的情况是资源请求内存。
考虑一种情况,其中一条指令需要访问内存以存储结果,而另一条指令正在被提取。如果指令和数据位于同一个缓存单元中,则只有一条指令可以继续执行,另一条指令将被延迟。为了避免这种冲突,许多处理器使用单独的指令缓存和数据缓存。
数据相关冲突
当流水线中的指令依赖于先前指令的结果,而这些指令仍在流水线中尚未执行时,就会出现这些冲突。
当指令的源操作数或目标操作数在流水线中的预期时间不可用时,流水线就会停滞。这种情况被称为数据冒险或数据冲突。
考虑一个程序,其中包含两条指令 I1 和 I2。当此程序在流水线中执行时,这两条指令的执行是并发进行的。如果 I1 和 I2 的结果相互依赖,则 I1 的结果可能无法用于 I2 的执行。
分支难题
当分支和其他指令更改程序计数器的内容时,就会遇到这种难题。有两种分支:条件分支和无条件分支。条件分支可能导致也可能不导致分支,但无条件分支总是导致分支。这种难题被称为控制冒险。
在流水线过程中,可以遵循以下关键操作来处理控制冒险:
- 及时检测分支指令
- 提前计算分支地址
- 对于条件分支指令,提前测试分支条件(结果)。
广告