【问题标题】:What's the benefit of software pipeline?软件管道有什么好处?
【发布时间】:2013-07-08 06:21:25
【问题描述】:

优化编译器通常考虑通过软件流水线进行指令调度。但是既然有硬件流水线,我想知道软件流水线调度有什么好处?

【问题讨论】:

  • 编译器对整体计算的了解比硬件更大,因此它可能能够通过软件调度更多地提高性能,而将最后的调整留给硬件调度。

标签: compiler-construction compiler-optimization


【解决方案1】:

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

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

【讨论】:

  • 软件流水线不仅仅是重新排序或者更确切地说是调度指令。特别是,它会增加代码大小并增加寄存器压力。
【解决方案2】:

软件流水线可以使循环执行得更快。在某些情况下确实更快。

例如:

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

在此示例中,添加指令必须等到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 中。所以延迟减少了。

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

【讨论】:

    猜你喜欢
    • 2013-02-21
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多