【问题标题】:How do I optimize C code using loop transformation? [closed]如何使用循环转换优化 C 代码? [关闭]
【发布时间】: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;
   }

【问题讨论】:

    标签: c for-loop optimization


    【解决方案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++ 一无所知,所以我对代码感到困惑。我只是想了解循环转换的工作原理以及它如何帮助减少开销,因为我正在研究嵌入式系统
    猜你喜欢
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多