【问题标题】:unrolling a while loop展开一个while循环
【发布时间】:2011-12-26 13:48:57
【问题描述】:

原代码

while(i<30){
// do something
i++;
}

展开的while循环

while(i<15){
// do something twice
i+=2;
}

我们不能如上所示展开它。我们总是必须像http://en.wikipedia.org/wiki/Loop_unrolling 那样做吗?

【问题讨论】:

  • 试试看。特别要注意循环结束时i的值。

标签: loop-unrolling


【解决方案1】:

一般来说,答案是否定的。它适用于 30 和 15,因为 30 是偶数,但它不适用于奇数。 "Duff's device" 是为了处理一般情况而发明的。不过确实很丑。

【讨论】:

  • 所以不仅是 while 循环。对于 for 循环,如果迭代不会发生在偶数上,这也很重要吗?
  • @klijo 这是正确的:当所需的迭代次数不是您展开次数的倍数时,您需要手动完成剩余的n%k 迭代或在不展开的紧密循环中完成.
猜你喜欢
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 2011-08-09
  • 2020-11-02
  • 2015-05-11
  • 2012-10-28
相关资源
最近更新 更多