我正在尝试了解指令级并行性中使用的方法以及它们之间的差异。我的问题是,给定一个最初在没有指令级并行性的处理器上运行的指令集,可以使用其中一种方法在新处理器上实现指令级并行性以及为什么/如何。新处理器将执行相同的指令集并运行与原始处理器相同的程序二进制文件,但性能会更好。选项包括:
1)乱序执行(Tomasulo算法)
2)流水线
3)超标量
4)VLIW
我正在尝试了解指令级并行性中使用的方法以及它们之间的差异。我的问题是,给定一个最初在没有指令级并行性的处理器上运行的指令集,可以使用其中一种方法在新处理器上实现指令级并行性以及为什么/如何。新处理器将执行相同的指令集并运行与原始处理器相同的程序二进制文件,但性能会更好。选项包括:
1)乱序执行(Tomasulo算法)
2)流水线
3)超标量
4)VLIW
我会说 OOO 将是第一个会大大增加 ILP 的东西。OOO 架构是完全独立于编译器工作的硬件技术(这意味着 OOO 架构将在没有 OOO 的情况下执行与 CPU 相同的计算,并在更短的时间内产生相同的结果,而完全不改变指令结构)
流水线是提高 ILP 的一种众所周知且古老的技术,但它有其局限性,增加阶段会增加硬件复杂性并最终会产生递减的回报。
VLIW 和超标量本质上是相同的,但是它们是不同的并行风格,它们需要特殊的硬件和特殊的编译器,因此它们与传统的控制流架构不兼容。这种技术本质上依赖于编译器将多个指令打包到一个可以并行执行的超长指令字 (VLIW) 中。
从流水线开始。这是通过重叠获取、解码、执行……多条指令来实现 ILP 的最古老和最好的方法。任何具有 OOO、有序、超标量、VLIW 等以实现 ILP 的真实 CPU 也将被流水线化。
是的,OOO将实现 ILP。下面的第一条和第三条指令可以并行执行 OOO,而第二条指令必须等待第一条指令完成( r1 上的RAW 危险)。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
超标量和VLIW仅适用于 ILP。VLIW 使用静态编译时间调度来实现 ILP。Superscalar 使用 CPU 的执行时间调度和编译器的编译时间调度来实现 ILP。