c++循环展开,边界
C++ loop unfolding, bounds
我想展开一个循环:
for(int i = 0; i < N; i++)
do_stuff_for(i);
展开:
for(int i = 0; i < N; i += CHUNK) {
do_stuff_for(i + 0);
do_stuff_for(i + 1);
...
do_stuff_for(i + CHUNK-1);
}
但是,我应该确保我没有耗尽原始N,就像N == 14和CHUNK == 10一样。我的问题是:最好的/更快的/标准的/最优雅的(你能想到的)方法是什么?
一个解决方案是:
int i;
for(i = 0; i < (N % CHUNK); i++)
do_stuff_for(i);
for(i; i < N; i += CHUNK) {
// unfolded, for the rest
}
但也许有更好的做法
你可以用一个开关。
叫做达夫的设备
相关文章:
- 循环展开 - G++ 与 Clang++
- 编译时展开循环
- 通过循环展开和阻塞进行优化
- 部分模板专用化,用于展开特定大小的循环
- 使用 constexpr 或模板元编程简化较长的展开循环表达式
- 为什么Visual Studio Compiler不在我的Mersenne-Twister实现中循环展开?
- 循环展开和元编程(TMP)
- 为什么在 XCode 中默认循环展开
- 是否有任何预处理器指令控制循环展开
- C++模板元编程成员函数循环展开
- C++循环展开性能差异(欧拉项目)
- SSE 内联函数和循环展开
- 仅当循环展开时,才没有未指定的启动错误
- C++ 循环展开性能
- 嵌套循环展开
- 有利于循环展开的条件和返回边际减小的点
- c++循环展开,边界
- GCC中的循环展开行为
- c++循环展开为编译时常数小值
- VS2010 c++优化做循环展开吗?