c++循环展开,边界

C++ loop unfolding, bounds

本文关键字:边界 循环展开 c++      更新时间:2023-10-16

我想展开一个循环:

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
}   

但也许有更好的做法

你可以用一个开关。

叫做达夫的设备