优化编译器通常考虑通过软件管道进行指令调度。但是由于存在硬件管道,我想知道软件管道调度的优势是什么?
答案 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
中。因此延迟减少了。