如何使用循环转换优化 C 代码? [关闭]

Posted

技术标签:

【中文标题】如何使用循环转换优化 C 代码? [关闭]【英文标题】:How do I optimize C code using loop transformation? [closed] 【发布时间】:2016-08-17 22:39:20 【问题描述】:

循环融合,是不是意味着上面的代码会变成

   for(j=1; j<=4,j++)
         a[j]=3;
         a[j]=a[j]*2*h;
         b[j]=6;
         b[j]=b[j]+3*k*k;
   

【问题讨论】:

【参考方案1】:

除了使用两个单独的循环之外,原始代码还包含许多冗余语句。一种可能的改进是:

int tmp = 6 * h;
for (j = 1; j <= 4; j++) 
     a[j] = tmp;
     b[j] = 6 + 3 * j * j;

主要优化:

一个循环而不是两个 删除了在下一条语句中被覆盖的赋值 计算一个不依赖于循环外循环索引的值

您应该知道,这些优化中的大多数无论如何都将由编译器完成。

【讨论】:

很好的答案,弗兰克,但他应该自己做功课,所以他学会了。最好投票结束这些问题。 @PaulOgilvie:你错了。 meta.stackexchange.com/q/147100/155739 @PaulOgilvie:我在回答这个问题之前确实犹豫了,正是因为这个原因。但是,我希望他能从答案中学到一些东西。他仍然需要计算操作的数量,并且通过这样做,必须考虑两种实现的差异。 @FrankPuffer 谢谢...这真的不是一个家庭作业问题,我对 c++ 一无所知,所以我对代码感到困惑。我只是想了解循环转换的工作原理以及它如何帮助减少开销,因为我正在研究嵌入式系统

以上是关于如何使用循环转换优化 C 代码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭llvm中的常量折叠优化

如何设置 C/C++ 编译器选项以对使用中的 CPU 进行最佳优化? [关闭]

如何使用 for 循环优化此代码

如何使用 Python 输出嵌套循环的结果 [关闭]

GCC 如何优化循环内递增的未使用变量?

C ++如何将用户的输入解析为要执行的代码? [关闭]