指令级并行 (ILP) 方法

Instruction Level Parallelism (ILP) Methods

我正在尝试了解指令级并行中使用的方法以及它们之间的区别。我的问题是,给定一个指令集,该指令集最初是在 处理器 运行 上进行的 运行 而没有 指令级并行性,可以使用这些方法中的哪一种来实现指令新处理器上的水平并行度和 why/how。新的处理器将执行与原始处理器相同的指令集和 运行 相同的程序二进制文件,但性能会更好。选项是:

1)乱序执行(Tomasulo算法)

2)流水线

3)超标量

4)VLIW

我想说 OOO 将是第一个大大提高 ILP 的东西。 OOO 架构是完全独立于编译器工作的硬件技术(这意味着 OOO 架构将在没有 OOO 的情况下执行与 CPU 相同的计算,并在不更改指令结构的情况下以更短的时间产生相同的结果全部)

流水线是提高 ILP 的众所周知的老技术,但它有其局限性,增加阶段会增加硬件复杂性,最终会降低 returns。

VLIW和超标量本质上是一样的,但是它们是不同的并行方式,它们需要特殊的硬件和特殊的编译器,所以它们与传统的控制流架构不兼容。 这种技术本质上依赖于编译器将多个指令打包到一个可以并行执行的超长指令字 (VLIW) 中。

流水线开始。这是通过重叠获取、解码、执行……多条指令来实现 ILP 的最古老和最好的方法。任何具有 OOO、有序、超标量、VLIW 等实现 ILP 的实数 CPU 也将被流水线化,这很常见。

是的,OOO将实现ILP。下面的第一条和第三条指令可以并行执行 OOO,而第二条必须等待第一条指令完成(RAW hazard on r1)。 CPU 调度器必须动态地 找到 第三条指令 OOO。

ld  r1, 0(r2)
add r2, r1, r3
add r4, r3, r5

你没说有序但是它也可以实现ILP。第一条和第二条指令可以并行执行,但第三条指令必须等待第一条指令完成,因为它在 r1 上也有 RAW 风险。

ld  r1, 0(r2)
add r4, r3, r5
add r2, r1, r3

SuperscalarVLIW 仅适用于 ILP。 VLIW 使用静态编译时间调度来实现 ILP。超标量使用 CPU 的执行时间调度和编译器的编译时间调度来实现 ILP。