我目前正在寻找一种方法,可以显示软件流水线是如何应用到代码。
for(int i = 1; i < N; i++)
{
D[i] = A[i] * B[i] + 1;
}
我发现similar question的答案使用gcc选项<-fsel-sched-pipelining>,然而,它没有显示任何差异后,应用该选项.
是否有任何编译器选项显示软件流水线?
我目前正在寻找一种方法,可以显示软件流水线是如何应用到代码。
for(int i = 1; i < N; i++)
{
D[i] = A[i] * B[i] + 1;
}
我发现similar question的答案使用gcc选项<-fsel-sched-pipelining>,然而,它没有显示任何差异后,应用该选项.
是否有任何编译器选项显示软件流水线?
1条答案
按热度按时间hiz5n14c1#
如果您使用的是基于llvm的编译器,machinepipeliner就是发挥魔力的通道,它是一个后端通道,可能在您的编译器上/在您使用的优化级别下未启用,或者编译器认为输入的代码不符合此特定优化的条件。
如果您使用的编译器是调试版本,那么您可以简单地使用
--debug-pass=Structure
标志来验证是否运行了“机器流水线”通道,如果运行了,那么使用-mllvm -debug-only=pipeliner
标志,您就可以看到算法的详细步骤,无论它是否成功地生成了调度和结果代码。对于发布版本,您的选择有限,但您可以做的一件事是使用
-mllvm -print-after-all
标志并搜索“Modulo Software Pipelining”(模软件流水线),以验证是否运行了通道以及通道对IR的影响。