我目前正在寻找一种方法来展示软件流水线如何应用于代码。
for(int i = 1; i < N; i++)
{
D[i] = A[i] * B[i] + 1;
}
我发现了类似的问题,其答案使用了 gcc 选项<-fsel-sched-pipelining>,但是,应用该选项后,它没有显示出任何差异。
是否有任何编译器选项可以显示软件流水线?
如果您使用基于 llvm 的编译器,则 machinepipeliner 是发挥魔力的通道,它是后端通道,可能无法在您的编译器上/在您使用的优化级别或编译器认为的优化级别下启用美联储的代码不符合此特定优化的条件。
如果您使用的编译器有调试版本,您可以简单地使用
--debug-pass=Structure
标志来验证是否有“机器管道程序”传递运行,如果是,则使用 -mllvm -debug-only=pipeliner
标志,您将能够看到算法的详细步骤,无论它是否成功或失败地生成时间表以及结果代码。
对于 release 版本,您的选择是有限的,您可以做的一件事是使用
-mllvm -print-after-all
标志并搜索“Modulo Software Pipelined”来验证传递是否已运行以及传递对红外。