如果一个循环由N展开,重复身体N次并将行程计数减少N倍,则可能需要0到N-1"最后的迭代"循环之后 - 如果您的原始行程计数不是N的倍数,则会发生非零情况。
这些最终迭代是什么?
例如,以下循环:
int sum = 0;
for (int i = 0; i < max; i++) {
sum += i;
}
可以按如下方式展开4倍:
int sum = 0;
for (int i = 0; i + 3 < max; i += 4) {
sum += i;
sum += i + 1;
sum += i + 2;
sum += i + 3;
}
// "final iterations" handling here
......作者可能会将整个身体简化为类似sum += i *4 + 6
1 的内容。你还需要一些&#34;最后的迭代&#34;处理可能与原始循环一样简单:
// handle the final 0 to 3 iterations
for (; i < max; i++) {
sum += i;
}
1 实际上,编译器可能会更好地简化甚至原始循环,通常完全删除它并直接通过基于求和公式的乘法计算最终结果。毕竟,这只是一个例子。
答案 0 :(得分:1)
一些建议:
作为数学家,我将其称为余数(https://en.wikipedia.org/wiki/Modulo_operation)。
这篇关于循环展开的文章https://www.sciencedirect.com/topics/computer-science/loop-unrolling仅将其称为最后的互动。
由于可以通过循环剥离(https://en.m.wikipedia.org/wiki/Loop_splitting#Loop_peeling)来实现对齐,因此也许可以将其称为展开循环的未对齐部分或未对齐部分 >或以某种方式使用去皮
答案 1 :(得分:0)
“ 余数迭代”如何?尽管我不知道这是否是一个公认的术语,但它很符合“剩余”的定义。
答案 2 :(得分:-2)
我将其称为“处理任何剩余迭代的循环之后的部分”。
展开循环时,最终的迭代调用是什么?
问题在于问题假定它具有“标准” /众所周知的名称;但这是愚蠢的(如果给每个小的但通用的代码段命名,那么您将拥有如此多的名称,没人会记住它们,这将破坏分配名称可能具有的任何目的)。
当然(对于文档)这并不排除使用临时名称或临时短语来提高简洁性;由词汇表定义,内联定义(请参见注释)或上下文定义。
注意:我通常以内联方式定义内容。例如,如果我反复提到“结束部分”(处理任何剩余迭代的循环后部分),那么我可能会解释一次,然后对以后的每次出现只说“结束部分”并依靠读者记住我所说的“末端”。