软件管道有什么好处?

时间:2013-07-08 06:21:26

标签: compiler-construction compiler-optimization

优化编译器通常考虑通过软件管道进行指令调度。但是由于存在硬件管道,我想知道软件管道调度的优势是什么?

2 个答案:

答案 0 :(得分:3)

在某些情况下(CPU特定的)执行速度可能取决于执行顺序。通过软件流水线操作,编译器可以重新排序语句以获得最佳顺序,如果可以这样做而不影响最终结果。

最佳顺序可能取决于现有的硬件流水线,或者某些寄存器可能在某些执行顺序下更优化地使用,等等。

答案 1 :(得分:1)

软件流水线操作可以使循环执行得更快。在某些情况下真的更快。

例如:

num = 100;
i = 0;
loop:
load r0 sp+i;
add r2 r1 r0;
i++;
if ( i < num) goto loop

在此示例中,add指令必须等到r0从内存加载值。如果延迟是3个周期。然后,每次迭代将有3个周期的开销用于执行该循环。这可能是一个重大的开销。通过软件流水线操作,这种开销可以减少一点。

num = 100;
load r0 sp+0;
i=0;
loop:
add r2 r1 r0;
i++;
load r0 sp+i
if (i < num) goto loop

在程序进入循环的第二种情况下,当执行r0指令时,它已经具有add中的值。在时间程序到达add指令的每次迭代中,值都在r0中。因此延迟减少了。

PS:我刚用助记符来解释这个想法。这不是某种架构的真正汇编语言。