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

Compiler construction 软件管道的好处是什么? 优化编译器通常考虑通过软件流水线进行指令调度。但由于存在硬件管道,我想知道软件管道调度的优势是什么?,compiler-construction,compiler-optimization,Compiler Construction,Compiler Optimization,在某些情况下,特定于CPU的执行速度可能取决于执行顺序。通过软件管道,编译器可以在不影响最终结果的情况下,对语句重新排序,使其具有最佳顺序 最佳顺序可能取决于现有的硬件管道,或者某些寄存器可能在某些执行顺序等情况下使用得更为优化。在某些情况下,特定于CPU的执行速度可能取决于执行顺序。通过软件管道,编译器可以在不影响最终结果的情况下,对语句重新排序,使其具有最佳顺序 最佳顺序可能取决于现有的硬件管道,或者某些寄存器可能在某些执行顺序下使用得更为优化,等等。软件管道可以使循环执行得更快。在某些情况

在某些情况下,特定于CPU的执行速度可能取决于执行顺序。通过软件管道,编译器可以在不影响最终结果的情况下,对语句重新排序,使其具有最佳顺序


最佳顺序可能取决于现有的硬件管道,或者某些寄存器可能在某些执行顺序等情况下使用得更为优化。

在某些情况下,特定于CPU的执行速度可能取决于执行顺序。通过软件管道,编译器可以在不影响最终结果的情况下,对语句重新排序,使其具有最佳顺序


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

软件管道可以使循环执行得更快。在某些情况下,速度确实更快

例如:

num = 100;
i = 0;
loop:
load r0 sp+i;
add r2 r1 r0;
i++;
if ( i < num) goto loop
在第二种情况下,当程序进入循环时,当执行add指令时,它已经在r0中具有值。在每次迭代中,当程序到达add指令时,值在r0中。这样就减少了延迟


附言:我刚才用了助记符来解释这个想法。这不是某种体系结构的真正汇编语言。

软件管道可以使循环执行得更快。在某些情况下,速度确实更快

例如:

num = 100;
i = 0;
loop:
load r0 sp+i;
add r2 r1 r0;
i++;
if ( i < num) goto loop
在第二种情况下,当程序进入循环时,当执行add指令时,它已经在r0中具有值。在每次迭代中,当程序到达add指令时,值在r0中。这样就减少了延迟


附言:我刚才用了助记符来解释这个想法。这不是某种体系结构的真正汇编语言。

编译器比硬件具有更大的整体计算能力,因此它可以通过软件调度更有效地提高性能,将最后的调整留给硬件调度。编译器对整体计算的了解要比硬件更全面,因此它可能能够通过软件调度更有效地提高性能,将最后的调整留给硬件调度。软件流水线不仅仅是重新排序或调度指令。特别是,它会增加代码大小和寄存器压力。软件管道不仅仅是重新排序或调度指令。特别是,它将增加代码大小,并增加寄存器压力。