优化编译器通常考虑采用软件流水线进行指令调度。但是由于有硬件流水线,我想知道软件流水线调度的优势是什么?
发布于 2013-07-08 14:35:55
在某些情况下(CPU特定的)执行速度可能取决于执行顺序。使用软件流水线,如果有可能在不影响最终结果的情况下这样做,编译器会重新排序语句,使其具有最佳顺序。
最优顺序可以取决于现有的硬件流水线,或者某些寄存器可以在某些执行顺序下更优化地使用,等等。
发布于 2013-07-16 05:52:41
软件流水线可以使循环执行得更快。在某些情况下真的更快。
例如:
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在第二种情况下,当程序进入循环时,当执行add指令时,它已经具有r0中的值。在每次迭代中,当程序到达add指令时,这个值就在r0中。因此减少了延迟。
附言:我刚刚用助记符解释了这个想法。这不是某种架构的真正汇编语言。
https://stackoverflow.com/questions/17520241
复制相似问题