我试图了解指令级并行中使用的方法以及它们之间的差异。我的问题是,给定一个最初在没有指令级并行性的处理器上运行的指令集,可以使用这些方法中的一个来实现新处理器上的指令级并行性。为什么/如何。新处理器将执行相同的指令集并运行与原始程序相同的程序二进制文件,但性能会更好。选项包括:
1)无序执行(Tomasulo算法)
2)流水线
3)的超标量
4)VLIW
答案 0 :(得分:0)
我想说OOO将是第一个会大大增加ILP的东西。 OOO体系结构是完全独立于编译器工作的硬件技术(这意味着OOO体系结构将执行相同的CPU计算,并且在没有更改指令结构的情况下以更少的时间生成相同的结果)
管道衬里是一种众所周知的旧技术,可以增加ILP,但它有其局限性,增加阶段会增加硬件复杂性,最终会带来收益递减。
VLIW和超标量基本相同,但它们是不同的并行风格,它们需要特殊的硬件和特殊的编译器,因此它们与传统的控制流体系结构不兼容。 这种技术主要依靠编译器在一个可以并行执行的超长指令字(VLIW)中打包多于指令。答案 1 :(得分:0)
从流水线开始。这是通过重叠提取,解码,执行……多个指令来实现ILP的最古老,最好的方法。非常普遍,任何具有OOO,有序,超标量,VLIW,...以实现ILP的实际CPU也会被流水线化。
是的, OOO 将实现ILP。下面的第一条和第三条指令可以并行执行OOO,而第二条必须等待第一条指令完成(r1上的RAW hazard)。 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。